summaryrefslogtreecommitdiff
path: root/tests/test-subrepo-git.t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-subrepo-git.t')
-rw-r--r--tests/test-subrepo-git.t534
1 files changed, 534 insertions, 0 deletions
diff --git a/tests/test-subrepo-git.t b/tests/test-subrepo-git.t
new file mode 100644
index 0000000..3f06a46
--- /dev/null
+++ b/tests/test-subrepo-git.t
@@ -0,0 +1,534 @@
+ $ "$TESTDIR/hghave" git || exit 80
+
+make git commits repeatable
+
+ $ echo "[core]" >> $HOME/.gitconfig
+ $ echo "autocrlf = false" >> $HOME/.gitconfig
+ $ GIT_AUTHOR_NAME='test'; export GIT_AUTHOR_NAME
+ $ GIT_AUTHOR_EMAIL='test@example.org'; export GIT_AUTHOR_EMAIL
+ $ GIT_AUTHOR_DATE='1234567891 +0000'; export GIT_AUTHOR_DATE
+ $ GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_NAME
+ $ GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_EMAIL
+ $ GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; export GIT_COMMITTER_DATE
+
+root hg repo
+
+ $ hg init t
+ $ cd t
+ $ echo a > a
+ $ hg add a
+ $ hg commit -m a
+ $ cd ..
+
+new external git repo
+
+ $ mkdir gitroot
+ $ cd gitroot
+ $ git init -q
+ $ echo g > g
+ $ git add g
+ $ git commit -q -m g
+
+add subrepo clone
+
+ $ cd ../t
+ $ echo 's = [git]../gitroot' > .hgsub
+ $ git clone -q ../gitroot s
+ $ hg add .hgsub
+ $ hg commit -m 'new git subrepo'
+ $ hg debugsub
+ path s
+ source ../gitroot
+ revision da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
+
+record a new commit from upstream from a different branch
+
+ $ cd ../gitroot
+ $ git checkout -q -b testing
+ $ echo gg >> g
+ $ git commit -q -a -m gg
+
+ $ cd ../t/s
+ $ git pull -q >/dev/null 2>/dev/null
+ $ git checkout -q -b testing origin/testing >/dev/null
+
+ $ cd ..
+ $ hg status --subrepos
+ M s/g
+ $ hg commit -m 'update git subrepo'
+ $ hg debugsub
+ path s
+ source ../gitroot
+ revision 126f2a14290cd5ce061fdedc430170e8d39e1c5a
+
+make $GITROOT pushable, by replacing it with a clone with nothing checked out
+
+ $ cd ..
+ $ git clone gitroot gitrootbare --bare -q
+ $ rm -rf gitroot
+ $ mv gitrootbare gitroot
+
+clone root
+
+ $ cd t
+ $ hg clone . ../tc
+ updating to branch default
+ cloning subrepo s from $TESTTMP/gitroot
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd ../tc
+ $ hg debugsub
+ path s
+ source ../gitroot
+ revision 126f2a14290cd5ce061fdedc430170e8d39e1c5a
+
+update to previous substate
+
+ $ hg update 1 -q
+ $ cat s/g
+ g
+ $ hg debugsub
+ path s
+ source ../gitroot
+ revision da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
+
+clone root, make local change
+
+ $ cd ../t
+ $ hg clone . ../ta
+ updating to branch default
+ cloning subrepo s from $TESTTMP/gitroot
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd ../ta
+ $ echo ggg >> s/g
+ $ hg status --subrepos
+ M s/g
+ $ hg commit --subrepos -m ggg
+ committing subrepository s
+ $ hg debugsub
+ path s
+ source ../gitroot
+ revision 79695940086840c99328513acbe35f90fcd55e57
+
+clone root separately, make different local change
+
+ $ cd ../t
+ $ hg clone . ../tb
+ updating to branch default
+ cloning subrepo s from $TESTTMP/gitroot
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd ../tb/s
+ $ echo f > f
+ $ git add f
+ $ cd ..
+
+ $ hg status --subrepos
+ A s/f
+ $ hg commit --subrepos -m f
+ committing subrepository s
+ $ hg debugsub
+ path s
+ source ../gitroot
+ revision aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
+
+user b push changes
+
+ $ hg push 2>/dev/null
+ pushing to $TESTTMP/t (glob)
+ pushing branch testing of subrepo s
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+
+user a pulls, merges, commits
+
+ $ cd ../ta
+ $ hg pull
+ pulling from $TESTTMP/t (glob)
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+ $ hg merge 2>/dev/null
+ pulling subrepo s from $TESTTMP/gitroot
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ cat s/f
+ f
+ $ cat s/g
+ g
+ gg
+ ggg
+ $ hg commit --subrepos -m 'merge'
+ committing subrepository s
+ $ hg status --subrepos --rev 1:5
+ M .hgsubstate
+ M s/g
+ A s/f
+ $ hg debugsub
+ path s
+ source ../gitroot
+ revision f47b465e1bce645dbf37232a00574aa1546ca8d3
+ $ hg push 2>/dev/null
+ pushing to $TESTTMP/t (glob)
+ pushing branch testing of subrepo s
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 1 files
+
+make upstream git changes
+
+ $ cd ..
+ $ git clone -q gitroot gitclone
+ $ cd gitclone
+ $ echo ff >> f
+ $ git commit -q -a -m ff
+ $ echo fff >> f
+ $ git commit -q -a -m fff
+ $ git push origin testing 2>/dev/null
+
+make and push changes to hg without updating the subrepo
+
+ $ cd ../t
+ $ hg clone . ../td
+ updating to branch default
+ cloning subrepo s from $TESTTMP/gitroot
+ checking out detached HEAD in subrepo s
+ check out a git branch if you intend to make changes
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd ../td
+ $ echo aa >> a
+ $ hg commit -m aa
+ $ hg push
+ pushing to $TESTTMP/t (glob)
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+
+sync to upstream git, distribute changes
+
+ $ cd ../ta
+ $ hg pull -u -q
+ $ cd s
+ $ git pull -q >/dev/null 2>/dev/null
+ $ cd ..
+ $ hg commit -m 'git upstream sync'
+ $ hg debugsub
+ path s
+ source ../gitroot
+ revision 32a343883b74769118bb1d3b4b1fbf9156f4dddc
+ $ hg push -q
+
+ $ cd ../tb
+ $ hg pull -q
+ $ hg update 2>/dev/null
+ pulling subrepo s from $TESTTMP/gitroot
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg debugsub
+ path s
+ source ../gitroot
+ revision 32a343883b74769118bb1d3b4b1fbf9156f4dddc
+
+update to a revision without the subrepo, keeping the local git repository
+
+ $ cd ../t
+ $ hg up 0
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ $ ls -a s
+ .
+ ..
+ .git
+
+ $ hg up 2
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ ls -a s
+ .
+ ..
+ .git
+ g
+
+archive subrepos
+
+ $ cd ../tc
+ $ hg pull -q
+ $ hg archive --subrepos -r 5 ../archive 2>/dev/null
+ pulling subrepo s from $TESTTMP/gitroot
+ $ cd ../archive
+ $ cat s/f
+ f
+ $ cat s/g
+ g
+ gg
+ ggg
+
+ $ hg -R ../tc archive --subrepo -r 5 -X ../tc/**f ../archive_x 2>/dev/null
+ $ find ../archive_x | sort | grep -v pax_global_header
+ ../archive_x
+ ../archive_x/.hg_archival.txt
+ ../archive_x/.hgsub
+ ../archive_x/.hgsubstate
+ ../archive_x/a
+ ../archive_x/s
+ ../archive_x/s/g
+
+create nested repo
+
+ $ cd ..
+ $ hg init outer
+ $ cd outer
+ $ echo b>b
+ $ hg add b
+ $ hg commit -m b
+
+ $ hg clone ../t inner
+ updating to branch default
+ cloning subrepo s from $TESTTMP/gitroot
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo inner = inner > .hgsub
+ $ hg add .hgsub
+ $ hg commit -m 'nested sub'
+
+nested commit
+
+ $ echo ffff >> inner/s/f
+ $ hg status --subrepos
+ M inner/s/f
+ $ hg commit --subrepos -m nested
+ committing subrepository inner
+ committing subrepository inner/s (glob)
+
+nested archive
+
+ $ hg archive --subrepos ../narchive
+ $ ls ../narchive/inner/s | grep -v pax_global_header
+ f
+ g
+
+relative source expansion
+
+ $ cd ..
+ $ mkdir d
+ $ hg clone t d/t
+ updating to branch default
+ cloning subrepo s from $TESTTMP/gitroot
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Don't crash if the subrepo is missing
+
+ $ hg clone t missing -q
+ $ cd missing
+ $ rm -rf s
+ $ hg status -S
+ $ hg sum | grep commit
+ commit: 1 subrepos
+ $ hg push -q
+ abort: subrepo s is missing
+ [255]
+ $ hg commit --subrepos -qm missing
+ abort: subrepo s is missing
+ [255]
+ $ hg update -C
+ cloning subrepo s from $TESTTMP/gitroot
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg sum | grep commit
+ commit: (clean)
+
+Don't crash if the .hgsubstate entry is missing
+
+ $ hg update 1 -q
+ $ hg rm .hgsubstate
+ $ hg commit .hgsubstate -m 'no substate'
+ nothing changed
+ [1]
+ $ hg tag -l nosubstate
+ $ hg manifest
+ .hgsub
+ .hgsubstate
+ a
+
+ $ hg status -S
+ R .hgsubstate
+ $ hg sum | grep commit
+ commit: 1 removed, 1 subrepos (new branch head)
+
+ $ hg commit -m 'restore substate'
+ nothing changed
+ [1]
+ $ hg manifest
+ .hgsub
+ .hgsubstate
+ a
+ $ hg sum | grep commit
+ commit: 1 removed, 1 subrepos (new branch head)
+
+ $ hg update -qC nosubstate
+ $ ls s
+ g
+
+issue3109: false positives in git diff-index
+
+ $ hg update -q
+ $ touch -t 200001010000 s/g
+ $ hg status --subrepos
+ $ touch -t 200001010000 s/g
+ $ hg sum | grep commit
+ commit: (clean)
+
+Check hg update --clean
+ $ cd $TESTTMP/ta
+ $ echo > s/g
+ $ cd s
+ $ echo c1 > f1
+ $ echo c1 > f2
+ $ git add f1
+ $ cd ..
+ $ hg status -S
+ M s/g
+ A s/f1
+ $ ls s
+ f
+ f1
+ f2
+ g
+ $ hg update --clean
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg status -S
+ $ ls s
+ f
+ f1
+ f2
+ g
+
+Sticky subrepositories, no changes
+ $ cd $TESTTMP/ta
+ $ hg id -n
+ 7
+ $ cd s
+ $ git rev-parse HEAD
+ 32a343883b74769118bb1d3b4b1fbf9156f4dddc
+ $ cd ..
+ $ hg update 1 > /dev/null 2>&1
+ $ hg id -n
+ 1
+ $ cd s
+ $ git rev-parse HEAD
+ da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
+ $ cd ..
+
+Sticky subrepositorys, file changes
+ $ touch s/f1
+ $ cd s
+ $ git add f1
+ $ cd ..
+ $ hg id -n
+ 1+
+ $ cd s
+ $ git rev-parse HEAD
+ da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
+ $ cd ..
+ $ hg update 4
+ subrepository sources for s differ
+ use (l)ocal source (da5f5b1) or (r)emote source (aa84837)?
+ l
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg id -n
+ 4+
+ $ cd s
+ $ git rev-parse HEAD
+ da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
+ $ cd ..
+ $ hg update --clean tip > /dev/null 2>&1
+
+Sticky subrepository, revision updates
+ $ hg id -n
+ 7
+ $ cd s
+ $ git rev-parse HEAD
+ 32a343883b74769118bb1d3b4b1fbf9156f4dddc
+ $ cd ..
+ $ cd s
+ $ git checkout aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
+ Previous HEAD position was 32a3438... fff
+ HEAD is now at aa84837... f
+ $ cd ..
+ $ hg update 1
+ subrepository sources for s differ (in checked out version)
+ use (l)ocal source (32a3438) or (r)emote source (da5f5b1)?
+ l
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg id -n
+ 1+
+ $ cd s
+ $ git rev-parse HEAD
+ aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
+ $ cd ..
+
+Sticky subrepository, file changes and revision updates
+ $ touch s/f1
+ $ cd s
+ $ git add f1
+ $ git rev-parse HEAD
+ aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
+ $ cd ..
+ $ hg id -n
+ 1+
+ $ hg update 7
+ subrepository sources for s differ
+ use (l)ocal source (32a3438) or (r)emote source (32a3438)?
+ l
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg id -n
+ 7+
+ $ cd s
+ $ git rev-parse HEAD
+ aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
+ $ cd ..
+
+Sticky repository, update --clean
+ $ hg update --clean tip 2>/dev/null
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg id -n
+ 7
+ $ cd s
+ $ git rev-parse HEAD
+ 32a343883b74769118bb1d3b4b1fbf9156f4dddc
+ $ cd ..
+
+Test subrepo already at intended revision:
+ $ cd s
+ $ git checkout 32a343883b74769118bb1d3b4b1fbf9156f4dddc
+ HEAD is now at 32a3438... fff
+ $ cd ..
+ $ hg update 1
+ Previous HEAD position was 32a3438... fff
+ HEAD is now at da5f5b1... g
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg id -n
+ 1
+ $ cd s
+ $ git rev-parse HEAD
+ da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
+ $ cd ..
+
+Test forgetting files, not implemented in git subrepo, used to
+traceback
+#if no-windows
+ $ hg forget 'notafile*'
+ notafile*: No such file or directory
+ [1]
+#else
+ $ hg forget 'notafile'
+ notafile: * (glob)
+ [1]
+#endif
+
+ $ cd ..