diff options
Diffstat (limited to 'tests/test-subrepo-recursion.t')
-rw-r--r-- | tests/test-subrepo-recursion.t | 494 |
1 files changed, 494 insertions, 0 deletions
diff --git a/tests/test-subrepo-recursion.t b/tests/test-subrepo-recursion.t new file mode 100644 index 0000000..fa419b3 --- /dev/null +++ b/tests/test-subrepo-recursion.t @@ -0,0 +1,494 @@ +Create test repository: + + $ hg init repo + $ cd repo + $ echo x1 > x.txt + + $ hg init foo + $ cd foo + $ echo y1 > y.txt + + $ hg init bar + $ cd bar + $ echo z1 > z.txt + + $ cd .. + $ echo 'bar = bar' > .hgsub + + $ cd .. + $ echo 'foo = foo' > .hgsub + +Add files --- .hgsub files must go first to trigger subrepos: + + $ hg add -S .hgsub + $ hg add -S foo/.hgsub + $ hg add -S foo/bar + adding foo/bar/z.txt (glob) + $ hg add -S + adding x.txt + adding foo/y.txt (glob) + +Test recursive status without committing anything: + + $ hg status -S + A .hgsub + A foo/.hgsub + A foo/bar/z.txt + A foo/y.txt + A x.txt + +Test recursive diff without committing anything: + + $ hg diff --nodates -S foo + diff -r 000000000000 foo/.hgsub + --- /dev/null + +++ b/foo/.hgsub + @@ -0,0 +1,1 @@ + +bar = bar + diff -r 000000000000 foo/y.txt + --- /dev/null + +++ b/foo/y.txt + @@ -0,0 +1,1 @@ + +y1 + diff -r 000000000000 foo/bar/z.txt + --- /dev/null + +++ b/foo/bar/z.txt + @@ -0,0 +1,1 @@ + +z1 + +Commits: + + $ hg commit -m fails + abort: uncommitted changes in subrepo foo + (use --subrepos for recursive commit) + [255] + +The --subrepos flag overwrite the config setting: + + $ hg commit -m 0-0-0 --config ui.commitsubrepos=No --subrepos + committing subrepository foo + committing subrepository foo/bar (glob) + + $ cd foo + $ echo y2 >> y.txt + $ hg commit -m 0-1-0 + + $ cd bar + $ echo z2 >> z.txt + $ hg commit -m 0-1-1 + + $ cd .. + $ hg commit -m 0-2-1 + + $ cd .. + $ hg commit -m 1-2-1 + +Change working directory: + + $ echo y3 >> foo/y.txt + $ echo z3 >> foo/bar/z.txt + $ hg status -S + M foo/bar/z.txt + M foo/y.txt + $ hg diff --nodates -S + diff -r d254738c5f5e foo/y.txt + --- a/foo/y.txt + +++ b/foo/y.txt + @@ -1,2 +1,3 @@ + y1 + y2 + +y3 + diff -r 9647f22de499 foo/bar/z.txt + --- a/foo/bar/z.txt + +++ b/foo/bar/z.txt + @@ -1,2 +1,3 @@ + z1 + z2 + +z3 + +Status call crossing repository boundaries: + + $ hg status -S foo/bar/z.txt + M foo/bar/z.txt + $ hg status -S -I 'foo/?.txt' + M foo/y.txt + $ hg status -S -I '**/?.txt' + M foo/bar/z.txt + M foo/y.txt + $ hg diff --nodates -S -I '**/?.txt' + diff -r d254738c5f5e foo/y.txt + --- a/foo/y.txt + +++ b/foo/y.txt + @@ -1,2 +1,3 @@ + y1 + y2 + +y3 + diff -r 9647f22de499 foo/bar/z.txt + --- a/foo/bar/z.txt + +++ b/foo/bar/z.txt + @@ -1,2 +1,3 @@ + z1 + z2 + +z3 + +Status from within a subdirectory: + + $ mkdir dir + $ cd dir + $ echo a1 > a.txt + $ hg status -S + M foo/bar/z.txt + M foo/y.txt + ? dir/a.txt + $ hg diff --nodates -S + diff -r d254738c5f5e foo/y.txt + --- a/foo/y.txt + +++ b/foo/y.txt + @@ -1,2 +1,3 @@ + y1 + y2 + +y3 + diff -r 9647f22de499 foo/bar/z.txt + --- a/foo/bar/z.txt + +++ b/foo/bar/z.txt + @@ -1,2 +1,3 @@ + z1 + z2 + +z3 + +Status with relative path: + + $ hg status -S .. + M ../foo/bar/z.txt + M ../foo/y.txt + ? a.txt + $ hg diff --nodates -S .. + diff -r d254738c5f5e foo/y.txt + --- a/foo/y.txt + +++ b/foo/y.txt + @@ -1,2 +1,3 @@ + y1 + y2 + +y3 + diff -r 9647f22de499 foo/bar/z.txt + --- a/foo/bar/z.txt + +++ b/foo/bar/z.txt + @@ -1,2 +1,3 @@ + z1 + z2 + +z3 + $ cd .. + +Cleanup and final commit: + + $ rm -r dir + $ hg commit --subrepos -m 2-3-2 + committing subrepository foo + committing subrepository foo/bar (glob) + +Test explicit path commands within subrepos: add/forget + $ echo z1 > foo/bar/z2.txt + $ hg status -S + ? foo/bar/z2.txt + $ hg add foo/bar/z2.txt + $ hg status -S + A foo/bar/z2.txt + $ hg forget foo/bar/z2.txt + $ hg status -S + ? foo/bar/z2.txt + $ hg forget foo/bar/z2.txt + not removing foo/bar/z2.txt: file is already untracked (glob) + [1] + $ hg status -S + ? foo/bar/z2.txt + $ rm foo/bar/z2.txt + +Log with the relationships between repo and its subrepo: + + $ hg log --template '{rev}:{node|short} {desc}\n' + 2:1326fa26d0c0 2-3-2 + 1:4b3c9ff4f66b 1-2-1 + 0:23376cbba0d8 0-0-0 + + $ hg -R foo log --template '{rev}:{node|short} {desc}\n' + 3:65903cebad86 2-3-2 + 2:d254738c5f5e 0-2-1 + 1:8629ce7dcc39 0-1-0 + 0:af048e97ade2 0-0-0 + + $ hg -R foo/bar log --template '{rev}:{node|short} {desc}\n' + 2:31ecbdafd357 2-3-2 + 1:9647f22de499 0-1-1 + 0:4904098473f9 0-0-0 + +Status between revisions: + + $ hg status -S + $ hg status -S --rev 0:1 + M .hgsubstate + M foo/.hgsubstate + M foo/bar/z.txt + M foo/y.txt + $ hg diff --nodates -S -I '**/?.txt' --rev 0:1 + diff -r af048e97ade2 -r d254738c5f5e foo/y.txt + --- a/foo/y.txt + +++ b/foo/y.txt + @@ -1,1 +1,2 @@ + y1 + +y2 + diff -r 4904098473f9 -r 9647f22de499 foo/bar/z.txt + --- a/foo/bar/z.txt + +++ b/foo/bar/z.txt + @@ -1,1 +1,2 @@ + z1 + +z2 + +Enable progress extension for archive tests: + + $ cp $HGRCPATH $HGRCPATH.no-progress + $ cat >> $HGRCPATH <<EOF + > [extensions] + > progress = + > [progress] + > assume-tty = 1 + > delay = 0 + > format = topic bar number + > refresh = 0 + > width = 60 + > EOF + +Test archiving to a directory tree (the doubled lines in the output +only show up in the test output, not in real usage): + + $ hg archive --subrepos ../archive 2>&1 | "$TESTDIR/filtercr.py" + + archiving [ ] 0/3 + archiving [ ] 0/3 + archiving [=============> ] 1/3 + archiving [=============> ] 1/3 + archiving [===========================> ] 2/3 + archiving [===========================> ] 2/3 + archiving [==========================================>] 3/3 + archiving [==========================================>] 3/3 + + archiving (foo) [ ] 0/3 + archiving (foo) [ ] 0/3 + archiving (foo) [===========> ] 1/3 + archiving (foo) [===========> ] 1/3 + archiving (foo) [=======================> ] 2/3 + archiving (foo) [=======================> ] 2/3 + archiving (foo) [====================================>] 3/3 + archiving (foo) [====================================>] 3/3 + + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) + \r (esc) + $ find ../archive | sort + ../archive + ../archive/.hg_archival.txt + ../archive/.hgsub + ../archive/.hgsubstate + ../archive/foo + ../archive/foo/.hgsub + ../archive/foo/.hgsubstate + ../archive/foo/bar + ../archive/foo/bar/z.txt + ../archive/foo/y.txt + ../archive/x.txt + +Test archiving to zip file (unzip output is unstable): + + $ hg archive --subrepos ../archive.zip 2>&1 | "$TESTDIR/filtercr.py" + + archiving [ ] 0/3 + archiving [ ] 0/3 + archiving [=============> ] 1/3 + archiving [=============> ] 1/3 + archiving [===========================> ] 2/3 + archiving [===========================> ] 2/3 + archiving [==========================================>] 3/3 + archiving [==========================================>] 3/3 + + archiving (foo) [ ] 0/3 + archiving (foo) [ ] 0/3 + archiving (foo) [===========> ] 1/3 + archiving (foo) [===========> ] 1/3 + archiving (foo) [=======================> ] 2/3 + archiving (foo) [=======================> ] 2/3 + archiving (foo) [====================================>] 3/3 + archiving (foo) [====================================>] 3/3 + + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) + \r (esc) + +Test archiving a revision that references a subrepo that is not yet +cloned: + + $ hg clone -U . ../empty + $ cd ../empty + $ hg archive --subrepos -r tip ../archive.tar.gz 2>&1 | "$TESTDIR/filtercr.py" + + archiving [ ] 0/3 + archiving [ ] 0/3 + archiving [=============> ] 1/3 + archiving [=============> ] 1/3 + archiving [===========================> ] 2/3 + archiving [===========================> ] 2/3 + archiving [==========================================>] 3/3 + archiving [==========================================>] 3/3 + + archiving (foo) [ ] 0/3 + archiving (foo) [ ] 0/3 + archiving (foo) [===========> ] 1/3 + archiving (foo) [===========> ] 1/3 + archiving (foo) [=======================> ] 2/3 + archiving (foo) [=======================> ] 2/3 + archiving (foo) [====================================>] 3/3 + archiving (foo) [====================================>] 3/3 + + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) + + cloning subrepo foo from $TESTTMP/repo/foo + cloning subrepo foo/bar from $TESTTMP/repo/foo/bar (glob) + +The newly cloned subrepos contain no working copy: + + $ hg -R foo summary + parent: -1:000000000000 (no revision checked out) + branch: default + commit: (clean) + update: 4 new changesets (update) + +Disable progress extension and cleanup: + + $ mv $HGRCPATH.no-progress $HGRCPATH + +Test archiving when there is a directory in the way for a subrepo +created by archive: + + $ hg clone -U . ../almost-empty + $ cd ../almost-empty + $ mkdir foo + $ echo f > foo/f + $ hg archive --subrepos -r tip archive + cloning subrepo foo from $TESTTMP/empty/foo + abort: destination '$TESTTMP/almost-empty/foo' is not empty (glob) + [255] + +Clone and test outgoing: + + $ cd .. + $ hg clone repo repo2 + updating to branch default + cloning subrepo foo from $TESTTMP/repo/foo + cloning subrepo foo/bar from $TESTTMP/repo/foo/bar (glob) + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cd repo2 + $ hg outgoing -S + comparing with $TESTTMP/repo (glob) + searching for changes + no changes found + comparing with $TESTTMP/repo/foo + searching for changes + no changes found + comparing with $TESTTMP/repo/foo/bar + searching for changes + no changes found + [1] + +Make nested change: + + $ echo y4 >> foo/y.txt + $ hg diff --nodates -S + diff -r 65903cebad86 foo/y.txt + --- a/foo/y.txt + +++ b/foo/y.txt + @@ -1,3 +1,4 @@ + y1 + y2 + y3 + +y4 + $ hg commit --subrepos -m 3-4-2 + committing subrepository foo + $ hg outgoing -S + comparing with $TESTTMP/repo (glob) + searching for changes + changeset: 3:2655b8ecc4ee + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 3-4-2 + + comparing with $TESTTMP/repo/foo + searching for changes + changeset: 4:e96193d6cb36 + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 3-4-2 + + comparing with $TESTTMP/repo/foo/bar + searching for changes + no changes found + + +Switch to original repo and setup default path: + + $ cd ../repo + $ echo '[paths]' >> .hg/hgrc + $ echo 'default = ../repo2' >> .hg/hgrc + +Test incoming: + + $ hg incoming -S + comparing with $TESTTMP/repo2 (glob) + searching for changes + changeset: 3:2655b8ecc4ee + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 3-4-2 + + comparing with $TESTTMP/repo2/foo + searching for changes + changeset: 4:e96193d6cb36 + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 3-4-2 + + comparing with $TESTTMP/repo2/foo/bar + searching for changes + no changes found + + $ hg incoming -S --bundle incoming.hg + abort: cannot combine --bundle and --subrepos + [255] + +Test missing subrepo: + + $ rm -r foo + $ hg status -S + warning: error "unknown revision '65903cebad86f1a84bd4f1134f62fa7dcb7a1c98'" in subrepository "foo" + +Issue2619: IndexError: list index out of range on hg add with subrepos +The subrepo must sorts after the explicit filename. + + $ cd .. + $ hg init test + $ cd test + $ hg init x + $ echo "x = x" >> .hgsub + $ hg add .hgsub + $ touch a x/a + $ hg add a x/a + + $ cd .. |