diff options
author | Dmitry Bogatov <KAction@debian.org> | 2018-11-10 03:09:43 +0000 |
---|---|---|
committer | Dmitry Bogatov <KAction@debian.org> | 2018-11-10 03:09:43 +0000 |
commit | 486f4254b69321ca468f4349c8f8384a651c03ae (patch) | |
tree | 0518772cc17a0754d7b22ba16486dd64b2419fae /srctest |
New upstream version 1.20
Diffstat (limited to 'srctest')
-rwxr-xr-x | srctest | 1512 |
1 files changed, 1512 insertions, 0 deletions
@@ -0,0 +1,1512 @@ +#!/bin/sh +# +# Regression tester for SRC. +# + +# Set the umask for a bit of defensiveness +umask 0077 + +# Needs to not be a subdirectory of here, or git gets confused. Use +# -u so that src's initialization will be tested. +SANDBOX=$(mktemp -u /tmp/src_XXXXXXXX) + +# Set the PATH to include the current directory, so the repository +# head version of src can always be tested. +PATH="$(pwd)":$PATH + +trap "rm -fr $SANDBOX" 0 1 2 15 + +backend="rcs" +python="python" + +while getopts b:p:e: opt +do + case $opt in + b) backend=$OPTARG;; + p) python=$OPTARG;; + e) src=$OPTARG;; + esac +done +shift $(($OPTIND - 1)) + +$backend >/dev/null 2>&1 +if [ "$?" = 127 ] +then + echo "srctest: backend ${backend} is missing." + exit 1 +fi + +if [ -z "$src" ] +then + src="${python} ${PWD}/src" +fi + +check() { + case $? in + 0) echo "srctest ($python $backend): $1 succeeded";; + *) echo "srctest ($python $backend): $1 failed"; exit 1;; + esac +} + +historify () { + case $backend in + rcs) history=.src/$1,v ;; + sccs) history=SCCS/s.$1 ;; + esac +} + + +mkdir $SANDBOX +check "scratch directory creation" + +cd $SANDBOX + +TESTOPTS="-T $* $backend" + +DIFFOPTS="--label Expected --label Actual -u" + + +COLUMNS=73 +export COLUMNS + +cat >testfile1 <<EOF +Now is the time +EOF +cp testfile1 testrev1 + +$src $TESTOPTS commit -m "First comment" testfile1 #>/dev/null +check "commit with -m option" + +$src $TESTOPTS cat testfile1 | diff -u testfile1 - >/dev/null +check "content check after first commit" + +cat >testfile1 <<EOF +Now is the time +for all good men +EOF +cp testfile1 testrev2 + +cat >testfile4 <<EOF +@@ -1,2 +1,3 @@ + Now is the time ++for all good men + +EOF + +# (read; read; cat) removes header lines containing variable date information +$src $TESTOPTS diff testfile1 | (read discard; read discard; cat) >testfile5 +diff -u testfile4 testfile5 +check "nonempty diff" + +! $src $TESTOPTS diff -@ testfile1 2>diff.err && + grep unexpected diff.err >/dev/null +check "bogus diff option" + +sleep 1 # Force commit to have different timestamp +echo "Second comment" | $src $TESTOPTS commit - testfile1 >/dev/null +check "commit with -" + +$src $TESTOPTS cat testfile1 | diff $DIFFOPTS testfile1 - +check "content check after second commit" + +cat >testfile2 <<EOF += testfile1 ============================================================ +2 * 1970-01-02T00:01:00Z Second comment +1 - 1970-01-02T00:00:00Z First comment +EOF + +$src $TESTOPTS list testfile1 >testfile3 +diff $DIFFOPTS testfile2 testfile3 +check "list test" + +cat >testfile2 <<EOF += testfile1 ============================================================ +2 | 1970-01-02T00:01:00Z | trunk +Second comment +------------------------------------------------------------------------ +1 | 1970-01-02T00:00:00Z | trunk +First comment +------------------------------------------------------------------------ +EOF + +$src $TESTOPTS log testfile1 >testfile3 +diff $DIFFOPTS testfile2 testfile3 +check "2-commit log test" + +cat >testfile1 <<EOF +Now is the time +for all good men +to come to the aid of foo +EOF +cp testfile1 testrev3 + +sleep 1 # Force commit to have different timestamp +cat >testfile4 <<EOF +'Third' comment + +Multiline test. + +EOF +$src $TESTOPTS commit -f testfile4 testfile1 >/dev/null +check "commit with -f" + +cat >testfile4 <<EOF += testfile1 ============================================================ +3 | 1970-01-02T00:02:00Z | trunk +'Third' comment + +Multiline test. +------------------------------------------------------------------------ +2 | 1970-01-02T00:01:00Z | trunk +Second comment +------------------------------------------------------------------------ +1 | 1970-01-02T00:00:00Z | trunk +First comment +------------------------------------------------------------------------ +EOF + +$src $TESTOPTS log testfile1 >testfile5 +diff $DIFFOPTS testfile4 testfile5 +check "3-commit log test" + +cat >testfile14 <<EOF += testfile1 ============================================================ +3 | 1970-01-02T00:02:00Z | trunk +'Third' comment + +Multiline test. + +diff r2/testfile1 r3/testfile1 +--- testfile1 (r2) ++++ testfile1 (r3) +@@ -1,3 +1,4 @@ + Now is the time + for all good men ++to come to the aid of foo + +------------------------------------------------------------------------ +2 | 1970-01-02T00:01:00Z | trunk +Second comment + +diff r1/testfile1 r2/testfile1 +--- testfile1 (r1) ++++ testfile1 (r2) +@@ -1,2 +1,3 @@ + Now is the time ++for all good men + +------------------------------------------------------------------------ +1 | 1970-01-02T00:00:00Z | trunk +First comment + +diff /dev/null r1/testfile1 +--- /dev/null ++++ testfile1 (r1) +@@ -1 +1,2 @@ ++Now is the time + +------------------------------------------------------------------------ +EOF + +$src $TESTOPTS log --patch testfile1 >testfile15 +diff $DIFFOPTS testfile14 testfile15 +check "log --patch" + +cat >testfile6 <<EOF += testfile1 ============================================================ +src: testfile1 has no 5 revision +EOF + +$src $TESTOPTS list 5 testfile1 >testfile7 2>&1 +diff $DIFFOPTS testfile6 testfile7 +check "oob revision spec check" + +for rev in 1 2 3 +do + $src $TESTOPTS checkout $rev testfile1 >/dev/null + check "revision $rev checkout test" + diff $DIFFOPTS testrev${rev} testfile1 + check "revision $rev content test" +done + +if [ "$backend" = "sccs" ] +then + echo "srctest ($python $backend): skipping tag creation/deletion/listing checks." +else + $src $TESTOPTS tag create sampletag + check "tag set to default tip revision" + + cat >testfile8 <<EOF += testfile1 ========================================================== + 3 sampletag +EOF + $src $TESTOPTS tag list >testfile9 + diff $DIFFOPTS testfile8 testfile9 + check "tag list check" + + $src $TESTOPTS tag create basetag 1 + check "tag set to revision 1" + + cat >testfile10 <<EOF += testfile1 ========================================================== + 1 basetag + 3 sampletag +EOF + $src $TESTOPTS tag -l >testfile11 + diff $DIFFOPTS testfile10 testfile11 + check "second tag list check" + + $src $TESTOPTS tag delete sampletag + check "tag deletion: sampletag" + + cat >testfile12 <<EOF += testfile1 ========================================================== + 1 basetag +EOF + $src $TESTOPTS tag >testfile13 + diff $DIFFOPTS testfile12 testfile13 + check "tag list check after deletion" + + # Alas, we have to do this or the fast-export regression will fail. + # We don't know how to be perfectly canonical about tags yet. + $src $TESTOPTS tag delete basetag + check "tag deletion: basetag" +fi + +test_export () { + testname="$1" + shift + srcfi=$testname-src.fi + gitfi=$testname-git.fi + mkdir foo + $src $TESTOPTS fast-export "$@" >$srcfi 2>export.err + grep jrh $srcfi >/dev/null + check "fast-export: $testname" + cat $srcfi | (cd foo >/dev/null; git init --quiet; git fast-import --quiet) + if ! grep refs/heads/master $srcfi >/dev/null + then + perl -0777 -pi -e 's|^reset refs/heads/.+?\nfrom :.+?\n\n||gm' $srcfi + fi + (cd foo >/dev/null; git fast-export --all) >$gitfi + diff $DIFFOPTS $srcfi $gitfi + check "fast-export roundtrip: $testname" + rm -fr foo +} + +test_export filename testfile1 + +echo flower power >testfile14 +$src $TESTOPTS commit -m "Alfred E. Newman" testfile14 >/dev/null +test_export filenames testfile1 testfile14 +historify testfile14 +rm -f $history + +test_export revspec-filename -- testfile1 +grep refs/heads/master revspec-filename-src.fi >/dev/null && + ! grep refs/heads/testfile1/master revspec-filename-src.fi >/dev/null +check "fast-export revspec/filename distinction" + +rm -f testfile1 +test_export not-checked-out testfile1 +check "fast-export consults history only" +$src $TESTOPTS checkout testfile1 >/dev/null + +if [ "$backend" = "sccs" ] +then + echo "srctest ($python $backend): skipping fast-import checks: RCS-only" +elif ! command -v rcs-fast-import >/dev/null 2>&1 +then + echo "srctest ($python $backend): skipping fast-import checks: rcs-fast-import missing" +else + mkdir RCS + ! $src $TESTOPTS fast-import -p <filename-git.fi >/dev/null 2>err && + grep 'existing RCS' err >/dev/null + check "fast-import don't clobber RCS" + rm -fr RCS + + historify testfile1 + rm -f $history + $src $TESTOPTS fast-import -p <filename-git.fi >/dev/null 2>&1 && + test -f $history + check "fast-import" + + $src $TESTOPTS fast-export testfile1 >testfile1.fi && + diff -u filename-git.fi testfile1.fi + check "fast-import roundtrip" +fi + +$src $TESTOPTS move testfile1 newname1 +check "move command" +historify newname1 +if [ -e newname1 -a -e $history ] +then + echo "srctest ($python $backend): content move succeeded" +else + echo "srctest ($python $backend): content move failed" + exit 1 +fi + +$src $TESTOPTS copy newname1 newname2 +check "copy command" +historify newname2 +if [ -e newname2 -a -e $history ] +then + echo "srctest ($python $backend): content copy succeeded" +else + echo "srctest ($python $backend): content copy failed" + exit 1 +fi + +cat >testfile16 <<EOF +newname1 +newname2 +EOF +$src $TESTOPTS ls | diff $DIFFOPTS testfile16 - +check "ls" + +$src $TESTOPTS commit -m "Another sample" testfile16 +$src $TESTOPTS status testfile16 | grep "^=" >/dev/null +check "= status check after first commit" + +echo "Add a second line" >>testfile16 +$src $TESTOPTS status testfile16 | grep "^M" >/dev/null +check "M status check after modification" + +rm testfile16 +$src $TESTOPTS status testfile16 | grep "^!" >/dev/null +check "! status check after deletion" + +$src $TESTOPTS checkout testfile16 +$src $TESTOPTS status testfile16 | grep "^=" >/dev/null +check "= status check after restoration" + +historify testfile16 +rm -f $history +$src $TESTOPTS status testfile16 | grep "^?" >/dev/null +check "? status check after master deletion" + +$src $TESTOPTS amend -m "Amended comment" newname1 +check "amend" + +$src $TESTOPTS list 3 newname1 | grep "Amended comment" >/dev/null +check "amended comment content" + +cat >testfile17 <<EOF += newname1 += newname2 +EOF +$src $TESTOPTS status | diff $DIFFOPTS testfile17 - >/dev/null +check "unadorned status command" + +if [ "$backend" = "sccs" ] +then + echo "srctest ($python $backend): skipping tag and branch tests" +else + # Introduce a test history with some branchiness, so + # we can test traversal across branch joins. Also has tags. + cat >.src/sample,v <<EOF +head 1.4; +branch 1.3.1.4.1; +access; +symbols + GLARB:1.4 + GORP:1.3.1.4 + sample:1.3.1.4.0.1 + muggle:1.3.0.1; +locks + esr:1.3.1.4.1.5; +comment @# @; +expand @b@; + + +1.4 +date 2014.11.11.03.26.53; author esr; state Exp; +branches; +next 1.3; + +1.3 +date 2014.11.10.23.48.49; author esr; state Exp; +branches + 1.3.1.1; +next 1.2; + +1.2 +date 2014.11.10.23.48.11; author esr; state Exp; +branches; +next 1.1; + +1.1 +date 2014.11.10.23.47.08; author esr; state Exp; +branches; +next ; + +1.3.1.1 +date 2014.11.11.04.23.47; author esr; state Exp; +branches; +next 1.3.1.2; + +1.3.1.2 +date 2014.11.11.06.39.47; author esr; state Exp; +branches; +next 1.3.1.3; + +1.3.1.3 +date 2014.11.11.06.48.00; author esr; state Exp; +branches; +next 1.3.1.4; + +1.3.1.4 +date 2014.11.12.03.36.45; author esr; state Exp; +branches + 1.3.1.4.1.1; +next ; + +1.3.1.4.1.1 +date 2014.11.13.04.04.55; author esr; state Exp; +branches; +next 1.3.1.4.1.2; + +1.3.1.4.1.2 +date 2014.11.13.04.23.04; author esr; state Exp; +branches; +next 1.3.1.4.1.3; + +1.3.1.4.1.3 +date 2014.11.13.04.26.23; author esr; state Exp; +branches; +next 1.3.1.4.1.4; + +1.3.1.4.1.4 +date 2014.11.13.04.30.39; author esr; state Exp; +branches; +next 1.3.1.4.1.5; + +1.3.1.4.1.5 +date 2014.11.13.04.31.02; author esr; state Exp; +branches; +next ; + + +desc +@@ + + +1.4 +log +@On a branch? +@ +text +@Now is the time +For all good men. +To come to the aid of foo. +This should be branch text. +@ + + +1.3 +log +@Third comment. +@ +text +@d4 1 +@ + + +1.3.1.1 +log +@Totally unfubared. +@ +text +@a3 2 + +Again, this should be branch text. +@ + + +1.3.1.2 +log +@Still utterly fubar +@ +text +@d5 1 +a5 1 +Yet again, this should be branch text. +@ + + +1.3.1.3 +log +@Totally chenille. +@ +text +@a5 2 + +Revision 7. +@ + + +1.3.1.4 +log +@Utterly fubar +@ +text +@d4 4 +a7 2 +This should be branch text. +Try a comment with a hyphen. +@ + + +1.3.1.4.1.1 +log +@All fixed up. +@ +text +@a5 1 +Test of commit comments. +@ + + +1.3.1.4.1.2 +log +@It' all good. +@ +text +@a6 1 +Glotch. +@ + + +1.3.1.4.1.3 +log +@No good. +@ +text +@a7 1 +Random modification. +@ + + +1.3.1.4.1.4 +log +@That's good. +@ +text +@a4 1 +jjjj +d7 1 +@ + + +1.3.1.4.1.5 +log +@I see you +@ +text +@d5 1 +a5 1 +jjjjjjjjkkk +@ + + +1.2 +log +@Second comment. +@ +text +@d3 1 +@ + + +1.1 +log +@First comment. +@ +text +@d2 1 +@ +EOF + +cat >sampledot <<EOF +digraph { + 1 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">1</font></td><td>First comment.</td></tr></table>>]; + 1 -> 2; + 2 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">2</font></td><td>Second comment.</td></tr></table>>]; + 2 -> 3; + 3 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">3</font></td><td>Third comment.</td></tr></table>>]; + 3 -> 4; + 4 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">4</font></td><td>On a branch?</td></tr></table>>]; + "trunk" [shape=oval,width=2]; + "4" -> "trunk" [style=dotted]; + 3 -> 5; + 5 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">5</font></td><td>Totally unfubared.</td></tr></table>>]; + 5 -> 6; + 6 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">6</font></td><td>Still utterly fubar</td></tr></table>>]; + 6 -> 7; + 7 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">7</font></td><td>Totally chenille.</td></tr></table>>]; + 7 -> 8; + 8 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">8</font></td><td>Utterly fubar</td></tr></table>>]; + "muggle" [shape=oval,width=2]; + "8" -> "muggle" [style=dotted]; + 8 -> 9; + 9 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">9</font></td><td>All fixed up.</td></tr></table>>]; + 9 -> 10; + 10 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">10</font></td><td>It' all good.</td></tr></table>>]; + 10 -> 11; + 11 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">11</font></td><td>No good.</td></tr></table>>]; + 11 -> 12; + 12 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">12</font></td><td>That's good.</td></tr></table>>]; + 12 -> 13; + 13 [shape=box,width=5,label=<<table cellspacing="0" border="0" cellborder="0"><tr><td><font color="blue">13</font></td><td>I see you</td></tr></table>>]; + "sample" [shape=oval,width=2]; + "13" -> "sample" [style=dotted]; + {rank=same; "GLARB"; "4"} + "GLARB" -> "4" [style=dotted]; + {rank=same; "GORP"; "8"} + "GORP" -> "8" [style=dotted]; +} +EOF + + $src $TESTOPTS visualize sample >tryit + diff $DIFFOPTS sampledot tryit + check "dot visualization" + + cat >statuslog <<EOF += newname1 += newname2 +EOF + + cat >sample.seqlog <<EOF += sample =============================================================== +6 | 1970-01-02T00:05:00Z | muggle +Still utterly fubar +------------------------------------------------------------------------ +5 | 1970-01-02T00:04:00Z | muggle +Totally unfubared. +------------------------------------------------------------------------ +4 | 1970-01-02T00:03:00Z | trunk +On a branch? +------------------------------------------------------------------------ +3 | 1970-01-02T00:02:00Z | trunk +Third comment. +------------------------------------------------------------------------ +2 | 1970-01-02T00:01:00Z | trunk +Second comment. +------------------------------------------------------------------------ +EOF + + $src $TESTOPTS log 6-2 sample >tryit + diff $DIFFOPTS sample.seqlog tryit + check "traversal by -" + + cat >sample.branchlog <<EOF += sample =============================================================== +6 | 1970-01-02T00:05:00Z | muggle +Still utterly fubar +------------------------------------------------------------------------ +5 | 1970-01-02T00:04:00Z | muggle +Totally unfubared. +------------------------------------------------------------------------ +3 | 1970-01-02T00:02:00Z | trunk +Third comment. +------------------------------------------------------------------------ +2 | 1970-01-02T00:01:00Z | trunk +Second comment. +------------------------------------------------------------------------ +EOF + + $src $TESTOPTS log 6..2 sample >tryit + diff $DIFFOPTS sample.branchlog tryit + check "traversal by .." + + cat >sample.branchlog-p <<EOF += sample =============================================================== +5 | 1970-01-02T00:04:00Z | muggle +Totally unfubared. + +diff r3/sample r5/sample +--- sample (r3) ++++ sample (r5) +@@ -2,3 +2,5 @@ + For all good men. + To come to the aid of foo. + ++Again, this should be branch text. ++ +------------------------------------------------------------------------ +EOF + + $src $TESTOPTS log --patch 5 sample >tryit + diff $DIFFOPTS sample.branchlog-p tryit + check "branchy log --patch" + + cat >sample.taglog <<EOF += sample =============================================================== +4 - 1970-01-02T00:03:00Z On a branch? +EOF + + $src $TESTOPTS list @GLARB sample >tryit + diff $DIFFOPTS sample.taglog tryit + check "named-tag lookup with @" + + $src $TESTOPTS rename tag GLARB GROTTY sample + check "tag renaming" + + cat >changes <<EOF += sample ============================================================= + 8 GORP + 4 GROTTY +EOF + + $src $TESTOPTS tag -l sample >tryit + diff $DIFFOPTS tryit changes + check "tag list after rename" + + cat >branchlist <<EOF += sample ============================================================= + 0 trunk + 3 muggle + 8 sample +EOF + + $src $TESTOPTS branch -l sample >tryit + check "branch list" + + $src $TESTOPTS branch -l sample >tryit + diff $DIFFOPTS branchlist tryit + check "branch list content" + + cat >branchlog <<EOF += sample =============================================================== +4 - 1970-01-02T00:03:00Z On a branch? +EOF + + $src $TESTOPTS list @trunk sample >branchlog + check "branch name resolution" + + $src $TESTOPTS list @trunk sample >tryit + diff $DIFFOPTS branchlog tryit + check "branch name resolved content" + + cat >statuslog <<EOF += newname1 += newname2 +EOF + + $src $TESTOPTS status newname1 newname2 >tryit + diff $DIFFOPTS statuslog tryit + check "status before ignore" + + echo "newname1" >.srcignore + + cat >statuslog <<EOF +I newname1 += newname2 +EOF + + $src $TESTOPTS status newname1 newname2 >tryit + diff $DIFFOPTS statuslog tryit + check "status after ignore" + + $src $TESTOPTS branch delete trunk sample + check "branch delete" + + cat >newlist <<EOF += sample ============================================================= + 0 trunk + 3 muggle + 7 sample +EOF + + $src $TESTOPTS branch -l sample >tryit + diff $DIFFOPTS newlist tryit + check "branch list check after delete" + + cat >newlog <<EOF += sample =============================================================== +12 | 1970-01-02T00:11:00Z | sample +I see you +------------------------------------------------------------------------ +11 | 1970-01-02T00:10:00Z | sample +That's good. +------------------------------------------------------------------------ +10 | 1970-01-02T00:09:00Z | sample +No good. +------------------------------------------------------------------------ +9 | 1970-01-02T00:08:00Z | sample +It' all good. +------------------------------------------------------------------------ +8 | 1970-01-02T00:07:00Z | sample +All fixed up. +------------------------------------------------------------------------ +7 | 1970-01-02T00:06:00Z | muggle +Utterly fubar +------------------------------------------------------------------------ +6 | 1970-01-02T00:05:00Z | muggle +Totally chenille. +------------------------------------------------------------------------ +5 | 1970-01-02T00:04:00Z | muggle +Still utterly fubar +------------------------------------------------------------------------ +4 | 1970-01-02T00:03:00Z | muggle +Totally unfubared. +------------------------------------------------------------------------ +3 | 1970-01-02T00:02:00Z | trunk +Third comment. +------------------------------------------------------------------------ +2 | 1970-01-02T00:01:00Z | trunk +Second comment. +------------------------------------------------------------------------ +1 | 1970-01-02T00:00:00Z | trunk +First comment. +------------------------------------------------------------------------ +EOF + + $src $TESTOPTS log sample >tryit + diff $DIFFOPTS newlog tryit + check "content after branch deletion" +fi + +echo "Random content for numeric file" >23 +$src $TESTOPTS commit -m "I don't know why you say goodbye" -- 23 >/dev/null +check "commit of file with numeric name" + +cat >randomcontent <<EOF +Random content for numeric file +EOF + +$src $TESTOPTS cat -- 23 >tryit +diff $DIFFOPTS randomcontent tryit +check "cat of file with numeric name" + +# Eric Sunshine writes: +# +# The test itself is working properly. The problem is that stock SCCS +# does not preserve executable permission on files under its control, so +# the test is correctly failing. +# +# The GNU version of SCCS does provide an 'x' flag[1] for compatibility +# with SCO OpenServer which enables executable permission preservation. +# However, I haven't convinced myself that it would make sense to put in +# the work to add executable-preservation support to the SCCS backend +# for these special cases (GNU CSSC and SCO OpenServer). +# +# [1]: https://www.gnu.org/software/cssc/manual/Flags.html#Flag +# +if [ "$backend" = sccs ] +then + echo "srctest ($python $backend): skipping exec-bit propagation test" +else + echo "Should not be executable" >exectest + $src $TESTOPTS commit -m "First comment on exectest" exectest >/dev/null + check "first commit of exectest" + chmod a+x exectest + echo "Should be executable" >exectest + $src $TESTOPTS commit -m "Second comment on exectest" exectest >/dev/null + check "second commit of exectest" + ls -l exectest | grep '^...x' >/dev/null + check "propagation of exec bit" +fi + +cat >diffall.expect <<EOF +--- newname1 (r3) ++++ newname1 (workfile) +@@ -1,4 +1,5 @@ + Now is the time + for all good men + to come to the aid of foo ++more stuff + +--- newname2 (r3) ++++ newname2 (workfile) +@@ -1,4 +1,5 @@ + Now is the time + for all good men + to come to the aid of foo ++and even more + +EOF + +echo "more stuff" >>newname1 +echo "and even more" >>newname2 +$src $TESTOPTS diff >diffall.actual && + diff $DIFFOPTS diffall.expect diffall.actual && + $src $TESTOPTS checkout newname1 newname2 >/dev/null +check "default file list" + +cat >limit.list <<EOF += newname2 ============================================================= +3 * 1970-01-02T00:02:00Z 'Third' comment +2 - 1970-01-02T00:01:00Z Second comment +EOF +cat >limit.log <<EOF += newname2 ============================================================= +3 | 1970-01-02T00:02:00Z | trunk +'Third' comment + +Multiline test. +------------------------------------------------------------------------ +2 | 1970-01-02T00:01:00Z | trunk +Second comment +------------------------------------------------------------------------ +EOF +for i in list log +do + for j in -2 '-l 2' + do + $src $TESTOPTS $i $j newname2 >limit.expect + diff limit.$i limit.expect + check "$i $j" + done +done + +# Test for Tom Willemse's multi-commit bug. +echo "test 1" > file1 +echo "test 2" > file2 +$src $TESTOPTS commit -m "Initial commit" file1 file2 >/dev/null +check "multi-file registration" +echo "test 1 line 2" >> file1 +echo "test 2 line 2" >> file2 +$src $TESTOPTS commit -m "Second commit" file1 file2 >/dev/null +check "multi-file commit" + +# Test the edit logic +cat >modify <<'EOF' +echo "Different first line" >modified$$ +cat $1 >>modified$$ +mv modified$$ $1 +EOF +chmod a+x modify +echo "test 1 line 3" >> file1 +EDITOR="./modify" $src $TESTOPTS commit file1 +check "edit logic" + +cat >binary <<EOF +This file contains an 0xD3 (Meta-S) after the colon:Ó +EOF +cat >binary.chk <<EOF +This file contains an 0xD3 (Meta-S) after the colon:Ó +Additional content line. +EOF +$src $TESTOPTS commit -m "Test file containing binary byte." binary +echo "Additional content line." >>binary +$src $TESTOPTS commit -m "Binary file after modification." binary +cmp binary binary.chk +check "binary content in checkouts and commits" + +if [ "$backend" = "sccs" ] +then + echo "srctest ($python $backend): skipping binary cat test" +else + $src $TESTOPTS cat binary >catted + cmp binary catted + check "binary content in cat" +fi + +cat >newline <<EOF +This file contains a DOS newline 0x0D after the colon:
+EOF +cat >newline.chk <<EOF +This file contains a DOS newline 0x0D after the colon:
+Additional content line. +EOF +$src $TESTOPTS commit -m "Test file containing DOS newline." newline +echo "Additional content line." >>newline +$src $TESTOPTS commit -m "DOS newline file after modification." newline +cmp newline newline.chk +check "newline preservation in checkouts and commits" + +if [ "$backend" = "sccs" ] +then + echo "srctest ($python $backend): skipping newline cat test" +else + $src $TESTOPTS cat newline >ncatted + cmp newline ncatted + check "newline content in cat" +fi + +cat >padcomment <<'EOF' +printf "\n\n\n\n" >modified$$ +cat $1 >>modified$$ +mv modified$$ $1 +EOF +chmod a+x padcomment +echo gommelgor >padfile +$src $TESTOPTS commit -m pingle padfile +for i in commit amend +do + echo "more stuff" >>padfile + EDITOR="./padcomment" $src $TESTOPTS $i padfile >padout + grep cancelled padout >/dev/null + check "whitespace-only $i cancel" + $src $TESTOPTS checkout padfile +done + +cat >clonemsg <<'EOF' +echo "I think I'm a clone now" >modified$$ +cat $1 >>modified$$ +mv modified$$ $1 +cp $1 clonedmsg +EOF +chmod a+x clonemsg +echo gommelgor >diffledore +$src $TESTOPTS commit -m pingle diffledore +for i in commit amend +do + test $i = commit && echo "more stuff" >>diffledore + EDITOR="./clonemsg" $src $TESTOPTS $i diffledore >/dev/null + grep -F -e 'Changes to be committed' clonedmsg >/dev/null && + grep -F -e '@@ ' clonedmsg >/dev/null && + grep -F -e '+++ ' clonedmsg >/dev/null && + grep -F -e '--- ' clonedmsg >/dev/null + check "$i diff in boilerplate" +done + +cat >dontinvoke <<'EOF' +echo "panic!" >>nochanges +EOF +chmod a+x dontinvoke +echo "bingleby" >canttouchthis +$src $TESTOPTS commit -m pingle canttouchthis +EDITOR="./dontinvoke" $src $TESTOPTS commit canttouchthis >>nochanges +grep 'no changes to commit' nochanges >/dev/null && + ! grep panic nochanges >/dev/null +check "nothing to commit" + +cat >ignore.ws <<EOF +Mary had a little lamb, +whose fleece was white as snow. +Everywhere that Mary went, +the lamb was sure to go. +EOF +$src $TESTOPTS commit -m initial ignore.ws +cat >ignore.ws <<EOF +Gary had a little lamb, +whose fleece was white as snow. +Everywhere that Gary went, + the lamb was sure to go. +EOF +sleep 1 # Force commit to have different timestamp +$src $TESTOPTS commit -m 's/Mary/Gary/ & whitespace' ignore.ws +cat >ignore.expect-b <<EOF +--- ignore.ws (r1) ++++ ignore.ws (r2) +@@ -1,4 +1,4 @@ +-Mary had a little lamb, ++Gary had a little lamb, + whose fleece was white as snow. +-Everywhere that Mary went, +-the lamb was sure to go. ++Everywhere that Gary went, ++ the lamb was sure to go. + +EOF +cat >ignore.expect-w <<EOF +--- ignore.ws (r1) ++++ ignore.ws (r2) +@@ -1,4 +1,4 @@ +-Mary had a little lamb, ++Gary had a little lamb, + whose fleece was white as snow. +-Everywhere that Mary went, ++Everywhere that Gary went, + the lamb was sure to go. + +EOF +for i in -b -w +do + $src $TESTOPTS diff -u $i 1-2 ignore.ws >ignore.actual$i + diff ignore.expect$i ignore.actual$i + check "diff $i" +done + +if [ "$backend" = "sccs" ] +then + echo "srctest ($python $backend): skipping commit date tie-breaking tests" +else + # Introduce a test history with all commits having same date so we can + # test native revision ID tie-breaking. + cat >.src/tiebreak,v <<EOF +head 1.11; +access; +symbols + refs/heads/master:1.11; +locks + sunshine:1.11; strict; +comment @# @; + + +1.11 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.10; + +1.10 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.9; + +1.9 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.8; + +1.8 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.7; + +1.7 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.6; + +1.6 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.5; + +1.5 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.4; + +1.4 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.3; + +1.3 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.2; + +1.2 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next 1.1; + +1.1 +date 2017.11.21.06.45.15; author sunshine; state Exp; +branches; +next ; + + +desc +@@ + + +1.11 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Mon 20 Nov 2017 21:37:42 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :22 +Parents: :20 + +eleventh +@ +text +@eleventh +@ + + +1.10 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Mon 20 Nov 2017 21:30:40 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :20 +Parents: :18 + +tenth +@ +text +@d1 1 +a1 1 +tenth +@ + + +1.9 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Mon 20 Nov 2017 21:27:29 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :18 +Parents: :16 + +ninth +@ +text +@d1 1 +a1 1 +ninth +@ + + +1.8 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Mon 20 Nov 2017 21:25:22 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :16 +Parents: :14 + +eighth +@ +text +@d1 1 +a1 1 +eighth +@ + + +1.7 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Mon 20 Nov 2017 23:02:46 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :14 +Parents: :12 + +seventh +@ +text +@d1 1 +a1 1 +seventh +@ + + +1.6 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Mon 20 Nov 2017 22:56:46 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :12 +Parents: :10 + +sixth +@ +text +@d1 1 +a1 1 +sixth +@ + + +1.5 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Fri 03 Nov 2017 13:30:17 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :10 +Parents: :8 + +fifth +@ +text +@d1 1 +a1 1 +fifth +@ + + +1.4 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Fri 03 Nov 2017 13:28:35 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :8 +Parents: :6 + +fourth +@ +text +@d1 1 +a1 1 +fourth +@ + + +1.3 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Fri 03 Nov 2017 13:26:41 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :6 +Parents: :4 + +third +@ +text +@d1 1 +a1 1 +third +@ + + +1.2 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Fri 03 Nov 2017 13:25:01 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :4 +Parents: :2 + +second +@ +text +@d1 1 +a1 1 +second +@ + + +1.1 +log +@Author: Eric Sunshine <sunshine@@sunshineco.com> +Author-Date: Fri 03 Nov 2017 13:12:48 -0500 +Committer: Roy G. Biv <spectrum@@color.com> +Committer-Date: Tue 21 Nov 2017 01:45:15 +0000 +Mark: :2 + +first +@ +text +@d1 1 +a1 1 +first +@ +EOF + + cat >tiebreak.expect <<EOF += tiebreak ============================================================= +11 * 1970-01-02T00:10:00Z eleventh +10 - 1970-01-02T00:09:00Z tenth +9 - 1970-01-02T00:08:00Z ninth +8 - 1970-01-02T00:07:00Z eighth +7 - 1970-01-02T00:06:00Z seventh +6 - 1970-01-02T00:05:00Z sixth +5 - 1970-01-02T00:04:00Z fifth +4 - 1970-01-02T00:03:00Z fourth +3 - 1970-01-02T00:02:00Z third +2 - 1970-01-02T00:01:00Z second +1 - 1970-01-02T00:00:00Z first +EOF + + $src $TESTOPTS list tiebreak >tiebreak.actual + diff tiebreak.expect tiebreak.actual + check "same date tie-breaking" + + cat >noheaders.expect <<EOF += tiebreak ============================================================= +11 | 1970-01-02T00:10:00Z | trunk +eleventh +------------------------------------------------------------------------ +10 | 1970-01-02T00:09:00Z | trunk +tenth +------------------------------------------------------------------------ +EOF + + $src $TESTOPTS log -2 tiebreak >noheaders.actual + diff noheaders.expect noheaders.actual + check "log suppresses headers" + + cat >logheaders.expect <<EOF += tiebreak ============================================================= +11 | 1970-01-02T00:10:00Z | trunk +Author: Eric Sunshine <sunshine@sunshineco.com> +Author-Date: 2017-11-21T02:37:42Z +Author-Date-Offset: -18000 +Committer: Roy G. Biv <spectrum@color.com> +Committer-Date: 2017-11-21T01:45:15Z +Committer-Date-Offset: 0 +Mark: :22 +Parents: :20 + +eleventh +------------------------------------------------------------------------ +10 | 1970-01-02T00:09:00Z | trunk +Author: Eric Sunshine <sunshine@sunshineco.com> +Author-Date: 2017-11-21T02:30:40Z +Author-Date-Offset: -18000 +Committer: Roy G. Biv <spectrum@color.com> +Committer-Date: 2017-11-21T01:45:15Z +Committer-Date-Offset: 0 +Mark: :20 +Parents: :18 + +tenth +------------------------------------------------------------------------ +EOF + + $src $TESTOPTS log -v -v -2 tiebreak >logheaders.actual + diff logheaders.expect logheaders.actual + check "log -v -v shows all headers" + + cat >summaryheaders.expect <<EOF += tiebreak ============================================================= +11 | 1970-01-02T00:10:00Z | trunk +Author: Eric Sunshine <sunshine@sunshineco.com> 2017-11-21T02:37:42Z +Committer: Roy G. Biv <spectrum@color.com> 2017-11-21T01:45:15Z + +eleventh +------------------------------------------------------------------------ +10 | 1970-01-02T00:09:00Z | trunk +Author: Eric Sunshine <sunshine@sunshineco.com> 2017-11-21T02:30:40Z +Committer: Roy G. Biv <spectrum@color.com> 2017-11-21T01:45:15Z + +tenth +------------------------------------------------------------------------ +EOF + + $src $TESTOPTS log -v -2 tiebreak >summaryheaders.actual + diff summaryheaders.expect summaryheaders.actual + check "log -v shows summarized headers" + + cat >authordate.expect <<EOF += tiebreak ============================================================= +11 * 2017-11-21T02:37:42Z eleventh +10 - 2017-11-21T02:30:40Z tenth += tiebreak ============================================================= +11 | 2017-11-21T02:37:42Z | trunk +eleventh +------------------------------------------------------------------------ +10 | 2017-11-21T02:30:40Z | trunk +tenth +------------------------------------------------------------------------ +EOF + + $src ${TESTOPTS#-T} list -2 tiebreak >authordate.actual + $src ${TESTOPTS#-T} log -2 tiebreak >>authordate.actual + diff authordate.expect authordate.actual + check "author date from RFC 822 header" + + cat >rfc822export.expect <<EOF +author Eric Sunshine <sunshine@sunshineco.com> 1509732768 -0500 +committer Roy G. Biv <spectrum@color.com> 1511228715 +0000 +EOF + + $src ${TESTOPTS#-T} fast-export 1 tiebreak | + grep -E 'author|committer' >rfc822export.actual + diff rfc822export.expect rfc822export.actual + check "fast-export: consult RFC 822 headers" +fi + +echo "srctest ($python $backend): all tests succeeded" + +rm -fr $SANDBOX + +# end |