Skip to content
Snippets Groups Projects
test-subrepo.t 53.1 KiB
Newer Older
Let commit recurse into subrepos by default to match pre-2.0 behavior:

  $ echo "[ui]" >> $HGRCPATH
  $ echo "commitsubrepos = Yes" >> $HGRCPATH

Martin Geisler's avatar
Martin Geisler committed
  $ hg init t
  $ cd t

first revision, no sub

  $ echo a > a
  $ hg ci -Am0
  adding a

add first sub

  $ echo s = s > .hgsub
  $ hg add .hgsub
  $ hg init s
  $ echo a > s/a

Issue2232: committing a subrepo without .hgsub
Martin Geisler's avatar
Martin Geisler committed

  $ hg ci -mbad s
  abort: can't commit subrepos without .hgsub
  $ hg -R s add s/a
  $ hg files -S
  .hgsub
  a
`hg files` respects ui.relative-paths
BROKEN: shows subrepo paths relative to the subrepo
  $ hg files -S --config ui.relative-paths=no
  .hgsub
  a
Martin Geisler's avatar
Martin Geisler committed
  $ hg -R s ci -Ams0
  $ hg sum
  parent: 0:f7b1eb17ad24 tip
   0
  branch: default
  commit: 1 added, 1 subrepos
  update: (current)
Martin Geisler's avatar
Martin Geisler committed
  $ hg ci -m1

test handling .hgsubstate "added" explicitly.

  $ hg parents --template '{node}\n{files}\n'
  7cf8cfea66e410e8e3336508dfeec07b3192de51
  .hgsub .hgsubstate
  $ hg rollback -q
  $ hg add .hgsubstate
  $ hg ci -m1
  $ hg parents --template '{node}\n{files}\n'
  7cf8cfea66e410e8e3336508dfeec07b3192de51
  .hgsub .hgsubstate

Subrepopath which overlaps with filepath, does not change warnings in remove()

  $ mkdir snot
  $ touch snot/file
  $ hg remove -S snot/file
  not removing snot/file: file is untracked
  snot/filenot: no such file in rev 7cf8cfea66e4
Revert subrepo and test subrepo fileset keyword:
  $ hg revert --dry-run "set:subrepo('glob:s*')"
  reverting subrepo s
  $ hg revert "set:subrepo('glob:s*')"
Revert subrepo with no backup. The "reverting s/a" line is gone since
we're really running 'hg update' in the subrepo:

  $ echo b > s/a
  $ hg revert --no-backup s
  reverting subrepo s
Issue2022: update -C
Martin Geisler's avatar
Martin Geisler committed

  $ echo b > s/a
  $ hg sum
  parent: 1:7cf8cfea66e4 tip
   1
  branch: default
  commit: 1 subrepos
  update: (current)
Martin Geisler's avatar
Martin Geisler committed
  $ hg co -C 1
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg sum
  parent: 1:7cf8cfea66e4 tip
   1
  branch: default
  commit: (clean)
  update: (current)
commands that require a clean repo should respect subrepos

  $ echo b >> s/a
  $ hg backout tip
  abort: uncommitted changes in subrepository "s"
Martin Geisler's avatar
Martin Geisler committed
add sub sub

  $ echo ss = ss > s/.hgsub
  $ hg init s/ss
  $ echo a > s/ss/a
  $ hg -R s add s/.hgsub
  $ hg -R s/ss add s/ss/a
  $ hg sum
  parent: 1:7cf8cfea66e4 tip
   1
  branch: default
  commit: 1 subrepos
  update: (current)
Martin Geisler's avatar
Martin Geisler committed
  $ hg ci -m2
  committing subrepository s
  committing subrepository s/ss
Martin Geisler's avatar
Martin Geisler committed
  $ hg sum
  parent: 2:df30734270ae tip
   2
  branch: default
  commit: (clean)
  update: (current)
test handling .hgsubstate "modified" explicitly.

  $ hg parents --template '{node}\n{files}\n'
  df30734270ae757feb35e643b7018e818e78a9aa
  .hgsubstate
  $ hg rollback -q
  $ hg status -A .hgsubstate
  M .hgsubstate
  $ hg ci -m2
  $ hg parents --template '{node}\n{files}\n'
  df30734270ae757feb35e643b7018e818e78a9aa
  .hgsubstate

bump sub rev (and check it is ignored by ui.commitsubrepos)
Martin Geisler's avatar
Martin Geisler committed

  $ echo b > s/a
  $ hg -R s ci -ms1
  $ hg --config ui.commitsubrepos=no ci -m3
leave sub dirty (and check ui.commitsubrepos=no aborts the commit)
Martin Geisler's avatar
Martin Geisler committed

  $ echo c > s/a
  $ hg --config ui.commitsubrepos=no ci -m4
  abort: uncommitted changes in subrepository "s"
  (use --subrepos for recursive commit)
  $ hg id
  f6affe3fbfaa+ tip
  $ hg -R s ci -mc
  $ hg id
  f6affe3fbfaa+ tip
  $ echo d > s/a
Martin Geisler's avatar
Martin Geisler committed
  $ hg ci -m4
  committing subrepository s
  $ hg tip -R s
Martin Geisler's avatar
Martin Geisler committed
  tag:         tip
  user:        test
  date:        Thu Jan 01 00:00:00 1970 +0000
  summary:     4
  

check caching

  $ hg co 0
  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
  $ hg debugsub

restore

  $ hg co
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg debugsub
  path s
   source   s
   revision 02dcf1d704118aee3ee306ccfa1910850d5b05ef
Martin Geisler's avatar
Martin Geisler committed

new branch for merge tests

  $ hg co 1
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo t = t >> .hgsub
  $ hg init t
  $ echo t > t/t
  $ hg -R t add t
Martin Geisler's avatar
Martin Geisler committed

5

  $ hg ci -m5 # add sub
  committing subrepository t
  created new head
  $ echo t2 > t/t

6

  $ hg st -R s
  $ hg ci -m6 # change sub
  committing subrepository t
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
  path t
   source   t
   revision 6747d179aa9a688023c4b0cad32e4c92bb7f34ad
  $ echo t3 > t/t

7

  $ hg ci -m7 # change sub again for conflict test
  committing subrepository t
  $ hg rm .hgsub

8

  $ hg ci -m8 # remove sub

test handling .hgsubstate "removed" explicitly.

  $ hg parents --template '{node}\n{files}\n'
  96615c1dad2dc8e3796d7332c77ce69156f7b78e
  .hgsub .hgsubstate
  $ hg rollback -q
  $ hg remove .hgsubstate
  $ hg ci -m8
  $ hg parents --template '{node}\n{files}\n'
  96615c1dad2dc8e3796d7332c77ce69156f7b78e
  .hgsub .hgsubstate

Martin Geisler's avatar
Martin Geisler committed
merge tests

  $ hg co -C 3
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg merge 5 # test adding
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg debugsub
  path s
   source   s
   revision fc627a69481fcbe5f1135069e8a3881c023e4cf5
  path t
   source   t
   revision 60ca1237c19474e7a3978b0dc1ca4e6f36d51382
  $ hg ci -m9
  created new head
  $ hg merge 6 --debug # test change
  resolving manifests
   branchmerge: True, force: False, partial: False
   ancestor: 1f14a2e2d3ec, local: f0d2028bf86d+, remote: 1831e14459c4
  starting 4 threads for background file closing (?)
   .hgsubstate: versions differ -> m
Martin Geisler's avatar
Martin Geisler committed
  subrepo merge f0d2028bf86d+ 1831e14459c4 1f14a2e2d3ec
    subrepo t: other changed, get t:6747d179aa9a688023c4b0cad32e4c92bb7f34ad:hg
  getting subrepo t
  resolving manifests
   branchmerge: False, force: False, partial: False
   ancestor: 60ca1237c194, local: 60ca1237c194+, remote: 6747d179aa9a
Martin Geisler's avatar
Martin Geisler committed
   t: remote is newer -> g
Martin Geisler's avatar
Martin Geisler committed
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg debugsub
  path s
   source   s
   revision fc627a69481fcbe5f1135069e8a3881c023e4cf5
  path t
   source   t
   revision 6747d179aa9a688023c4b0cad32e4c92bb7f34ad
  $ echo conflict > t/t
  $ hg ci -m10
  committing subrepository t
  $ HGMERGE=internal:merge hg merge --debug 7 # test conflict
  resolving manifests
   branchmerge: True, force: False, partial: False
   ancestor: 1831e14459c4, local: e45c8b14af55+, remote: f94576341bcf
  starting 4 threads for background file closing (?)
   .hgsubstate: versions differ -> m
Martin Geisler's avatar
Martin Geisler committed
  subrepo merge e45c8b14af55+ f94576341bcf 1831e14459c4
    subrepo t: both sides changed 
   subrepository t diverged (local revision: 20a0db6fbf6c, remote revision: 7af322bc1198)
  starting 4 threads for background file closing (?)
  you can (m)erge, keep (l)ocal [working copy] or keep (r)emote [merge rev].
  what do you want to do? m
Martin Geisler's avatar
Martin Geisler committed
  resolving manifests
   branchmerge: True, force: False, partial: False
   ancestor: 6747d179aa9a, local: 20a0db6fbf6c+, remote: 7af322bc1198
  starting 4 threads for background file closing (?)
  picked tool ':merge' for t (binary False symlink False changedelete False)
Martin Geisler's avatar
Martin Geisler committed
  merging t
  my t@20a0db6fbf6c+ other t@7af322bc1198 ancestor t@6747d179aa9a
  warning: conflicts while merging t! (edit, then use 'hg resolve --mark')
Martin Geisler's avatar
Martin Geisler committed
  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
  use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
    subrepo t: merge with t:7af322bc1198a32402fe903e0b7ebcfc5c9bf8f4:hg
Martin Geisler's avatar
Martin Geisler committed
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)

should conflict

  $ cat t/t
  <<<<<<< local: 20a0db6fbf6c - test: 10
Martin Geisler's avatar
Martin Geisler committed
  conflict
  =======
  t3
  >>>>>>> other: 7af322bc1198 - test: 7
11: remove subrepo t

  $ hg co -C 5
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg revert -r 4 .hgsub # remove t
  $ hg ci -m11
  created new head
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4

local removed, remote changed, keep changed

  $ hg merge 6
   remote [merge rev] changed subrepository t which local [working copy] removed
  use (c)hanged version or (d)elete? c
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
BROKEN: should include subrepo t
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
  $ cat .hgsubstate
  e4ece1bf43360ddc8f6a96432201a37b7cd27ae4 s
  6747d179aa9a688023c4b0cad32e4c92bb7f34ad t
  $ hg ci -m 'local removed, remote changed, keep changed'
BROKEN: should include subrepo t
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
BROKEN: should include subrepo t
  $ cat .hgsubstate
  e4ece1bf43360ddc8f6a96432201a37b7cd27ae4 s
  $ cat t/t
  t2

local removed, remote changed, keep removed

  $ hg co -C 11
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg merge --config ui.interactive=true 6 <<EOF
  > d
  > EOF
   remote [merge rev] changed subrepository t which local [working copy] removed
  use (c)hanged version or (d)elete? d
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
  $ cat .hgsubstate
  e4ece1bf43360ddc8f6a96432201a37b7cd27ae4 s
  $ hg ci -m 'local removed, remote changed, keep removed'
  created new head
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
  $ cat .hgsubstate
  e4ece1bf43360ddc8f6a96432201a37b7cd27ae4 s

local changed, remote removed, keep changed

  $ hg co -C 6
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg merge 11
   local [working copy] changed subrepository t which remote [merge rev] removed
  use (c)hanged version or (d)elete? c
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
BROKEN: should include subrepo t
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
BROKEN: should include subrepo t
  $ cat .hgsubstate
  e4ece1bf43360ddc8f6a96432201a37b7cd27ae4 s
  $ hg ci -m 'local changed, remote removed, keep changed'
  created new head
BROKEN: should include subrepo t
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
BROKEN: should include subrepo t
  $ cat .hgsubstate
  e4ece1bf43360ddc8f6a96432201a37b7cd27ae4 s
  $ cat t/t
  t2

local changed, remote removed, keep removed

  $ hg co -C 6
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg merge --config ui.interactive=true 11 <<EOF
  > d
  > EOF
   local [working copy] changed subrepository t which remote [merge rev] removed
  use (c)hanged version or (d)elete? d
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
  $ cat .hgsubstate
  e4ece1bf43360ddc8f6a96432201a37b7cd27ae4 s
  $ hg ci -m 'local changed, remote removed, keep removed'
  created new head
  $ hg debugsub
  path s
   source   s
   revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
  $ cat .hgsubstate
  e4ece1bf43360ddc8f6a96432201a37b7cd27ae4 s

clean up to avoid having to fix up the tests below

  $ hg co -C 10
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cat >> $HGRCPATH <<EOF
  > [extensions]
  > strip=
  > EOF
  $ hg strip -r 11:15
  saved backup bundle to $TESTTMP/t/.hg/strip-backup/*-backup.hg (glob)

Martin Geisler's avatar
Martin Geisler committed
clone

  $ cd ..
  $ hg clone t tc
  updating to branch default
  cloning subrepo s from $TESTTMP/t/s
  cloning subrepo s/ss from $TESTTMP/t/s/ss
  cloning subrepo t from $TESTTMP/t/t
Martin Geisler's avatar
Martin Geisler committed
  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd tc
  $ hg debugsub
  path s
   source   s
   revision fc627a69481fcbe5f1135069e8a3881c023e4cf5
  path t
   source   t
   revision 20a0db6fbf6c3d2836e6519a642ae929bfc67c0e
  $ cd ..

clone with subrepo disabled (update should fail)

  $ hg clone t -U tc2 --config subrepos.allowed=false
  $ hg update -R tc2 --config subrepos.allowed=false
  abort: subrepos not enabled
  (see 'hg help config.subrepos' for details)
  [255]
  $ hg clone t tc3 --config subrepos.allowed=false
  abort: subrepos not enabled
  (see 'hg help config.subrepos' for details)
  [255]
And again with just the hg type disabled

  $ hg clone t -U tc4 --config subrepos.hg:allowed=false
  $ hg update -R tc4 --config subrepos.hg:allowed=false
  abort: hg subrepos not allowed
  (see 'hg help config.subrepos' for details)
  [255]
  $ hg clone t tc5 --config subrepos.hg:allowed=false
  updating to branch default
  abort: hg subrepos not allowed
  (see 'hg help config.subrepos' for details)
  [255]
Martin Geisler's avatar
Martin Geisler committed
  $ echo bah > t/t
  $ hg ci -m11
  committing subrepository t
  $ hg push
  pushing to $TESTTMP/t
  no changes made to subrepo s/ss since last push to $TESTTMP/t/s/ss
  no changes made to subrepo s since last push to $TESTTMP/t/s
  pushing subrepo t to $TESTTMP/t/t
Martin Geisler's avatar
Martin Geisler committed
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files

push -f

  $ echo bah > s/a
  $ hg ci -m12
  committing subrepository s
  $ hg push
  pushing to $TESTTMP/t
  no changes made to subrepo s/ss since last push to $TESTTMP/t/s/ss
  pushing subrepo s to $TESTTMP/t/s
Martin Geisler's avatar
Martin Geisler committed
  searching for changes
  abort: push creates new remote head 12a213df6fa9 (in subrepository "s")
  (merge or see 'hg help push' for details about pushing new heads)
Martin Geisler's avatar
Martin Geisler committed
  $ hg push -f
  pushing to $TESTTMP/t
  pushing subrepo s/ss to $TESTTMP/t/s/ss
Martin Geisler's avatar
Martin Geisler committed
  searching for changes
  no changes found
  pushing subrepo s to $TESTTMP/t/s
Martin Geisler's avatar
Martin Geisler committed
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files (+1 heads)
  pushing subrepo t to $TESTTMP/t/t
Martin Geisler's avatar
Martin Geisler committed
  searching for changes
  no changes found
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files

check that unmodified subrepos are not pushed

  $ hg clone . ../tcc
  updating to branch default
  cloning subrepo s from $TESTTMP/tc/s
  cloning subrepo s/ss from $TESTTMP/tc/s/ss
  cloning subrepo t from $TESTTMP/tc/t
  3 files updated, 0 files merged, 0 files removed, 0 files unresolved

the subrepos on the new clone have nothing to push to its source

  $ hg push -R ../tcc .
  pushing to .
  no changes made to subrepo s/ss since last push to s/ss
  no changes made to subrepo s since last push to s
  no changes made to subrepo t since last push to t
  searching for changes
  no changes found
  [1]

the subrepos on the source do not have a clean store versus the clone target
because they were never explicitly pushed to the source

  $ hg push ../tcc
  pushing to ../tcc
  pushing subrepo s/ss to ../tcc/s/ss
  searching for changes
  no changes found
  pushing subrepo s to ../tcc/s
  searching for changes
  no changes found
  pushing subrepo t to ../tcc/t
  searching for changes
  no changes found
  searching for changes
  no changes found
  [1]

after push their stores become clean

  $ hg push ../tcc
  pushing to ../tcc
  no changes made to subrepo s/ss since last push to ../tcc/s/ss
  no changes made to subrepo s since last push to ../tcc/s
  no changes made to subrepo t since last push to ../tcc/t
  searching for changes
  no changes found
  [1]

updating a subrepo to a different revision or changing
its working directory does not make its store dirty

  $ hg -R s update '.^'
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg push
  pushing to $TESTTMP/t
  no changes made to subrepo s/ss since last push to $TESTTMP/t/s/ss
  no changes made to subrepo s since last push to $TESTTMP/t/s
  no changes made to subrepo t since last push to $TESTTMP/t/t
  searching for changes
  no changes found
  [1]
  $ echo foo >> s/a
  $ hg push
  pushing to $TESTTMP/t
  no changes made to subrepo s/ss since last push to $TESTTMP/t/s/ss
  no changes made to subrepo s since last push to $TESTTMP/t/s
  no changes made to subrepo t since last push to $TESTTMP/t/t
  searching for changes
  no changes found
  [1]
  $ hg -R s update -C tip
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved

committing into a subrepo makes its store (but not its parent's store) dirty

  $ echo foo >> s/ss/a
  $ hg -R s/ss commit -m 'test dirty store detection'

  $ hg out -S -r `hg log -r tip -T "{node|short}"`
  searching for changes
  no changes found
  comparing with $TESTTMP/t/s
  searching for changes
  no changes found
  comparing with $TESTTMP/t/s/ss
  searching for changes
  changeset:   1:79ea5566a333
  tag:         tip
  user:        test
  date:        Thu Jan 01 00:00:00 1970 +0000
  summary:     test dirty store detection
  
  comparing with $TESTTMP/t/t
  searching for changes
  no changes found

  pushing to $TESTTMP/t
  pushing subrepo s/ss to $TESTTMP/t/s/ss
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  no changes made to subrepo s since last push to $TESTTMP/t/s
  no changes made to subrepo t since last push to $TESTTMP/t/t
  searching for changes
  no changes found
  [1]

a subrepo store may be clean versus one repo but not versus another

  $ hg push
  pushing to $TESTTMP/t
  no changes made to subrepo s/ss since last push to $TESTTMP/t/s/ss
  no changes made to subrepo s since last push to $TESTTMP/t/s
  no changes made to subrepo t since last push to $TESTTMP/t/t
  searching for changes
  no changes found
  [1]
  $ hg push ../tcc
  pushing to ../tcc
  pushing subrepo s/ss to ../tcc/s/ss
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  no changes made to subrepo s since last push to ../tcc/s
  no changes made to subrepo t since last push to ../tcc/t
  searching for changes
  no changes found
  [1]

Martin Geisler's avatar
Martin Geisler committed
update

  $ cd ../t
  $ hg up -C # discard our earlier merge
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  2 other heads for branch "default"
Martin Geisler's avatar
Martin Geisler committed
  $ echo blah > t/t
  $ hg ci -m13
  committing subrepository t

backout calls revert internally with minimal opts, which should not raise
KeyError

  $ hg backout ".^" --no-commit
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  changeset c373c8102e68 backed out, don't forget to commit.

  $ hg up -C # discard changes
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  2 other heads for branch "default"
Martin Geisler's avatar
Martin Geisler committed
pull

  $ cd ../tc
  $ hg pull
Martin Geisler's avatar
Martin Geisler committed
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
Martin Geisler's avatar
Martin Geisler committed
  (run 'hg update' to get a working copy)

should pull t

  $ hg incoming -S -r `hg log -r tip -T "{node|short}"`
  no changes found
  comparing with $TESTTMP/t/s
  searching for changes
  no changes found
  comparing with $TESTTMP/t/s/ss
  searching for changes
  no changes found
  comparing with $TESTTMP/t/t
  searching for changes
  changeset:   5:52c0adc0515a
  tag:         tip
  user:        test
  date:        Thu Jan 01 00:00:00 1970 +0000
  summary:     13
  

Martin Geisler's avatar
Martin Geisler committed
  $ hg up
  pulling subrepo t from $TESTTMP/t/t
Martin Geisler's avatar
Martin Geisler committed
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  2 other heads for branch "default"
Martin Geisler's avatar
Martin Geisler committed
  $ cat t/t
  blah

bogus subrepo path aborts

  $ echo 'bogus=[boguspath' >> .hgsub
  $ hg ci -m 'bogus subrepo path'
  abort: missing ] in subrepository source
Issue1986: merge aborts when trying to merge a subrepo that
shouldn't need merging
Martin Geisler's avatar
Martin Geisler committed

# subrepo layout
#
#   o   5 br
#  /|
# o |   4 default
# | |
# | o   3 br
# |/|
# o |   2 default
# | |
# | o   1 br
# |/
# o     0 default

  $ cd ..
  $ rm -rf sub
  $ hg init main
  $ cd main
  $ hg init s
  $ cd s
  $ echo a > a
  $ hg ci -Am1
  adding a
  $ hg branch br
  marked working directory as branch br
Matt Mackall's avatar
Matt Mackall committed
  (branches are permanent and global, did you want a bookmark?)
Martin Geisler's avatar
Martin Geisler committed
  $ echo a >> a
  $ hg ci -m1
  $ hg up default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo b > b
  $ hg ci -Am1
  adding b
  $ hg up br
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg merge tip
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg ci -m1
  $ hg up 2
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo c > c
  $ hg ci -Am1
  adding c
  $ hg up 3
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg merge 4
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg ci -m1

# main repo layout:
#
#   * <-- try to merge default into br again
# .`|
# . o   5 br      --> substate = 5
# . |
# o |   4 default --> substate = 4
# | |
# | o   3 br      --> substate = 2
# |/|
# o |   2 default --> substate = 2
# | |
# | o   1 br      --> substate = 3
# |/
# o     0 default --> substate = 2

  $ cd ..
  $ echo 's = s' > .hgsub
  $ hg -R s up 2
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg ci -Am1
  adding .hgsub
  $ hg branch br
  marked working directory as branch br
Matt Mackall's avatar
Matt Mackall committed
  (branches are permanent and global, did you want a bookmark?)
Martin Geisler's avatar
Martin Geisler committed
  $ echo b > b
  $ hg -R s up 3
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg ci -Am1
  adding b
  $ hg up default
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo c > c
  $ hg ci -Am1
  adding c
  $ hg up 1
  2 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg merge 2
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg ci -m1
  $ hg up 2
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg -R s up 4
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo d > d
  $ hg ci -Am1
  adding d
  $ hg up 3
  2 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg -R s up 5
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo e > e
  $ hg ci -Am1
  adding e

  $ hg up 5
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg merge 4    # try to merge default into br again
   subrepository s diverged (local revision: f8f13b33206e, remote revision: a3f9062a4f88)
  you can (m)erge, keep (l)ocal [working copy] or keep (r)emote [merge rev].
  what do you want to do? m
Martin Geisler's avatar
Martin Geisler committed
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ cd ..

test subrepo delete from .hgsubstate

  $ hg init testdelete
  $ mkdir testdelete/nested testdelete/nested2
  $ hg init testdelete/nested
  $ hg init testdelete/nested2
  $ echo test > testdelete/nested/foo
  $ echo test > testdelete/nested2/foo
  $ hg -R testdelete/nested add
Martin Geisler's avatar
Martin Geisler committed
  $ hg -R testdelete/nested2 add
  adding testdelete/nested2/foo
Martin Geisler's avatar
Martin Geisler committed
  $ hg -R testdelete/nested ci -m test
  $ hg -R testdelete/nested2 ci -m test
  $ echo nested = nested > testdelete/.hgsub
  $ echo nested2 = nested2 >> testdelete/.hgsub
  $ hg -R testdelete add
Martin Geisler's avatar
Martin Geisler committed
  $ hg -R testdelete ci -m "nested 1 & 2 added"
  $ echo nested = nested > testdelete/.hgsub
  $ hg -R testdelete ci -m "nested 2 deleted"
  $ cat testdelete/.hgsubstate
  bdf5c9a3103743d900b12ae0db3ffdcfd7b0d878 nested
  $ hg -R testdelete remove testdelete/.hgsub
  $ hg -R testdelete ci -m ".hgsub deleted"
  $ cat testdelete/.hgsubstate
  bdf5c9a3103743d900b12ae0db3ffdcfd7b0d878 nested
Martin Geisler's avatar
Martin Geisler committed

test repository cloning

  $ mkdir mercurial mercurial2
  $ hg init nested_absolute
  $ echo test > nested_absolute/foo
  $ hg -R nested_absolute add
Martin Geisler's avatar
Martin Geisler committed
  $ hg -R nested_absolute ci -mtest
  $ cd mercurial
  $ hg init nested_relative
  $ echo test2 > nested_relative/foo2
  $ hg -R nested_relative add
Martin Geisler's avatar
Martin Geisler committed
  $ hg -R nested_relative ci -mtest2
  $ hg init main
  $ echo "nested_relative = ../nested_relative" > main/.hgsub
  $ echo "nested_absolute = `pwd`/nested_absolute" >> main/.hgsub
  $ hg -R main add
Martin Geisler's avatar
Martin Geisler committed
  $ hg -R main ci -m "add subrepos"
  $ cd ..
  $ hg clone mercurial/main mercurial2/main
  updating to branch default
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cat mercurial2/main/nested_absolute/.hg/hgrc \
  >     mercurial2/main/nested_relative/.hg/hgrc
  [paths]
  default = $TESTTMP/mercurial/nested_absolute
Martin Geisler's avatar
Martin Geisler committed
  [paths]
  default = $TESTTMP/mercurial/nested_relative
Martin Geisler's avatar
Martin Geisler committed
  $ rm -rf mercurial mercurial2

Issue1977: multirepo push should fail if subrepo push fails
Martin Geisler's avatar
Martin Geisler committed

  $ hg init repo
  $ hg init repo/s
  $ echo a > repo/s/a
  $ hg -R repo/s ci -Am0
  adding a
  $ echo s = s > repo/.hgsub
  $ hg -R repo ci -Am1
  adding .hgsub
  $ hg clone repo repo2
  updating to branch default
  cloning subrepo s from $TESTTMP/repo/s
Martin Geisler's avatar
Martin Geisler committed
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved