--- a/tests/test-sharing.t Mon Jun 09 08:18:43 2014 -0400
+++ b/tests/test-sharing.t Tue Apr 14 12:53:12 2015 -0400
@@ -81,7 +81,16 @@
Pull into dev-repo: obsolescence markers are transferred, but not
the new obsolete changeset.
$ cd ../dev-repo
- $ hg pull -q -u
+ $ hg pull -u
+ pulling from $TESTTMP/test-repo
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pull obsolescence markers
+ 2 obsolescence markers added
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Figure SG03
$ hg shortlog --hidden -G
@@ -144,220 +153,269 @@
$ cd ../dev-repo
$ hg shortlog -r 'draft()'
4:de6151c48e1c draft fix bug 37
- $ hg pull -q -u
+ $ hg pull -u
+ pulling from $TESTTMP/test-repo
+ searching for changes
+ no changes found
+ pull obsolescence markers
+ 0 obsolescence markers added
$ hg shortlog -r 'draft()'
-Sharing by Alice and Bob to demonstrate bumped and divergent changesets.
-First, setup repos for them.
+Sharing with multiple developers: code review
$ cd ..
- $ hg clone public alice
+ $ hg clone public review
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ hg clone public bob
+ $ hg clone review alice
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ cat >> alice/.hg/hgrc <<EOF
+ $ hg clone review bob
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cat >> review/.hg/hgrc <<EOF
> [phases]
> publish = false
> EOF
- $ cp alice/.hg/hgrc bob/.hg/hgrc
-Alice commits a bug fix.
+Alice commits a draft bug fix, pushes to review repo.
$ cd alice
+ $ hg bookmark bug15
$ echo 'fix' > file2
- $ hg commit -A -u alice -m 'fix bug 15'
+ $ hg commit -A -u alice -m 'fix bug 15 (v1)'
adding file2
-
-Bob pulls and amends Alice's fix.
- $ cd ../bob
- $ hg pull -u ../alice
- pulling from ../alice
+ $ hg push -B bug15
+ pushing to $TESTTMP/review
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- pull obsolescence markers
+ pushing 4 obsolescence markers (* bytes) (glob)
0 obsolescence markers added
- 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ exporting bookmark bug15
+ $ hg -R ../review bookmarks
+ bug15 2:f91e97234c2b
+
+Alice receives code review, amends her fix, and goes out to lunch to
+await second review.
$ echo 'Fix.' > file2
- $ hg amend -A -u bob -m 'fix bug 15 (amended)'
+ $ hg amend -m 'fix bug 15 (v2)'
+ $ hg push
+ pushing to $TESTTMP/review
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pushing 6 obsolescence markers (* bytes) (glob)
+ 2 obsolescence markers added
+ updating bookmark bug15
+ $ hg -R ../review bookmarks
+ bug15 3:cbdfbd5a5db2
-Figure SG06: Bob's repository after amending Alice's fix.
-(Nothing new here; we could have seen this in the user guide.
- $ hg --hidden shortlog -G
- @ 4:fe884dfac355 draft fix bug 15 (amended)
+Figure SG06: review repository after Alice pushes her amended changeset.
+ $ hg --hidden -R ../review shortlog -G -r 1::
+ o 3:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
+ |/
+ @ 1:de6151c48e1c public fix bug 37
|
- | x 3:0376cac226f8 draft temporary amend commit for e011baf925da
- | |
- | x 2:e011baf925da draft fix bug 15
- |/
- o 1:de6151c48e1c public fix bug 37
- |
- o 0:0dc9c9f6ab91 public create new project
-
+
+Bob commits a draft changeset, pushes to review repo.
+ $ cd ../bob
+ $ echo 'stuff' > file1
+ $ hg bookmark featureX
+ $ hg commit -u bob -m 'implement feature X (v1)'
+ $ hg push -B featureX
+ pushing to $TESTTMP/review
+ searching for changes
+ remote has heads on branch 'default' that are not known locally: cbdfbd5a5db2
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pushing 4 obsolescence markers (* bytes) (glob)
+ 0 obsolescence markers added
+ exporting bookmark featureX
+ $ hg -R ../review bookmarks
+ bug15 3:cbdfbd5a5db2
+ featureX 4:193657d1e852
-But in the meantime, Alice decides the fix is just fine and publishes it.
- $ cd ../alice
+Bob receives first review, amends and pushes.
+ $ echo 'do stuff' > file1
+ $ hg amend -m 'implement feature X (v2)'
$ hg push
- pushing to $TESTTMP/public
+ pushing to $TESTTMP/review
+ searching for changes
+ remote has heads on branch 'default' that are not known locally: cbdfbd5a5db2
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pushing 6 obsolescence markers (* bytes) (glob)
+ 2 obsolescence markers added
+ updating bookmark featureX
+
+Bob receives second review, amends, and pushes to public:
+this time, he's sure he got it right!
+ $ echo 'Do stuff.' > file1
+ $ hg amend -m 'implement feature X (v3)'
+ $ hg push ../public
+ pushing to ../public
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- pushing 4 obsolescence markers (369 bytes)
- 0 obsolescence markers added
-
-Which means that Bob now has an formerly obsolete changeset that is
-also public (2:6e83). As soon as he pulls its phase change, he's got
-trouble: the successors of that formerly obsolete changeset are
-bumped.
+ pushing 8 obsolescence markers (* bytes) (glob)
+ 4 obsolescence markers added
+ $ hg -R ../public bookmarks
+ no bookmarks set
+ $ hg push ../review
+ pushing to ../review
+ searching for changes
+ remote has heads on branch 'default' that are not known locally: cbdfbd5a5db2
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pushing 8 obsolescence markers (* bytes) (glob)
+ 2 obsolescence markers added
+ updating bookmark featureX
+ $ hg -R ../review bookmarks
+ bug15 3:cbdfbd5a5db2
+ featureX 6:540ba8f317e6
- $ cd ../bob
- $ hg --hidden shortlog -r 'obsolete()'
- 2:e011baf925da draft fix bug 15
- 3:0376cac226f8 draft temporary amend commit for e011baf925da
- $ hg pull -q -u
- 1 new bumped changesets
- $ hg --hidden shortlog -r 'obsolete()'
- 3:0376cac226f8 draft temporary amend commit for e011baf925da
- $ hg shortlog -r 'bumped()'
- 4:fe884dfac355 draft fix bug 15 (amended)
+Figure SG07: review and public repos after Bob implements feature X.
+ $ hg --hidden -R ../review shortlog -G -r 1::
+ o 6:540ba8f317e6 public implement feature X (v3)
+ |
+ | x 5:0eb74a7b6698 draft implement feature X (v2)
+ |/
+ | x 4:193657d1e852 draft implement feature X (v1)
+ |/
+ | o 3:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |/
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
+ |/
+ @ 1:de6151c48e1c public fix bug 37
+ |
+ $ hg --hidden -R ../public shortlog -G -r 1::
+ o 2:540ba8f317e6 public implement feature X (v3)
+ |
+ o 1:de6151c48e1c public fix bug 37
+ |
-Figure SG07: Bob's repo with one bumped changeset (rev 4:c02d)
- $ hg --hidden shortlog -G
- @ 4:fe884dfac355 draft fix bug 15 (amended)
+How do things look in the review repo?
+ $ cd ../review
+ $ hg --hidden shortlog -G -r 1::
+ o 6:540ba8f317e6 public implement feature X (v3)
|
- | x 3:0376cac226f8 draft temporary amend commit for e011baf925da
+ | x 5:0eb74a7b6698 draft implement feature X (v2)
+ |/
+ | x 4:193657d1e852 draft implement feature X (v1)
+ |/
+ | o 3:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |/
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
+ |/
+ @ 1:de6151c48e1c public fix bug 37
+ |
+
+Meantime, Alice is back from lunch. While she was away, Bob approved
+her change, so now she can publish it.
+ $ cd ../alice
+ $ hg --hidden shortlog -G -r 1::
+ @ 4:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |
+ | x 3:55dd95168a35 draft temporary amend commit for f91e97234c2b
| |
- | o 2:e011baf925da public fix bug 15
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
|/
o 1:de6151c48e1c public fix bug 37
|
- o 0:0dc9c9f6ab91 public create new project
-
-
-Bob gets out of trouble by evolving the repository.
- $ hg evolve --all
- recreate:[4] fix bug 15 (amended)
- atop:[2] fix bug 15
- computing new diff
- committed as 227d860d9ad0
- working directory is now at 227d860d9ad0
-
-Figure SG08
- $ hg --hidden shortlog -G
- @ 5:227d860d9ad0 draft bumped update to e011baf925da:
+ $ hg outgoing -q ../public
+ 4:cbdfbd5a5db2
+ $ hg push ../public
+ pushing to ../public
+ searching for changes
+ remote has heads on branch 'default' that are not known locally: 540ba8f317e6
+ abort: push creates new remote head cbdfbd5a5db2 with bookmark 'bug15'!
+ (pull and merge or see "hg help push" for details about pushing new heads)
+ [255]
+ $ hg pull ../public
+ pulling from ../public
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pull obsolescence markers
+ 4 obsolescence markers added
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+ $ hg log -G -q -r 'head()'
+ o 5:540ba8f317e6
|
- | x 4:fe884dfac355 draft fix bug 15 (amended)
+ | @ 4:cbdfbd5a5db2
+ |/
+ $ hg --hidden shortlog -G -r 1::
+ o 5:540ba8f317e6 public implement feature X (v3)
+ |
+ | @ 4:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |/
+ | x 3:55dd95168a35 draft temporary amend commit for f91e97234c2b
| |
- +---x 3:0376cac226f8 draft temporary amend commit for e011baf925da
- | |
- o | 2:e011baf925da public fix bug 15
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
|/
o 1:de6151c48e1c public fix bug 37
|
- o 0:0dc9c9f6ab91 public create new project
-
-Throw away Bob's messy repo and start over.
- $ cd ..
- $ rm -rf bob
- $ cp -rp alice bob
-
-Bob commits a pretty good fix that both he and Alice will amend,
-leading to divergence.
- $ cd bob
- $ echo 'pretty good fix' >> file1
- $ hg commit -u bob -m 'fix bug 24 (v1)'
-
-Alice pulls Bob's fix and improves it.
- $ cd ../alice
- $ hg pull -u ../bob
- pulling from ../bob
+Alice rebases her draft changeset on top of Bob's public changeset and
+publishes the result.
+ $ hg rebase -d 5
+ rebasing 4:cbdfbd5a5db2 "fix bug 15 (v2)" (bug15)
+ $ hg push ../public
+ pushing to ../public
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- pull obsolescence markers
- 0 obsolescence markers added
- 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ echo 'better (alice)' >> file1
- $ hg amend -u alice -m 'fix bug 24 (v2 by alice)'
-
-Likewise, Bob amends his own fix. Now we have an obsolete changeset
-with two successors, although the successors are in different repos.
- $ cd ../bob
- $ echo 'better (bob)' >> file1
- $ hg amend -u bob -m 'fix bug 24 (v2 by bob)'
+ pushing 11 obsolescence markers (* bytes) (glob)
+ 3 obsolescence markers added
+ $ hg push ../review
+ pushing to ../review
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 0 changes to 1 files
+ pushing 11 obsolescence markers (* bytes) (glob)
+ 1 obsolescence markers added
+ updating bookmark bug15
-Bob pulls from Alice's repo and discovers the trouble: divergent changesets!
- $ hg pull -q -u ../alice
- not updating: not a linear update
- (merge or update --check to force update)
- 2 new divergent changesets
- $ hg shortlog -r 'divergent()'
- 5:fc16901f4d7a draft fix bug 24 (v2 by bob)
- 6:694fd0f6b503 draft fix bug 24 (v2 by alice)
-
-Figure SG09
- $ hg --hidden shortlog -G
- o 6:694fd0f6b503 draft fix bug 24 (v2 by alice)
+Figure SG08: review and public changesets after Alice pushes.
+ $ hg --hidden -R ../review shortlog -G -r 1::
+ o 7:a06ec1bf97bd public fix bug 15 (v2)
+ |
+ o 6:540ba8f317e6 public implement feature X (v3)
|
- | @ 5:fc16901f4d7a draft fix bug 24 (v2 by bob)
+ | x 5:0eb74a7b6698 draft implement feature X (v2)
+ |/
+ | x 4:193657d1e852 draft implement feature X (v1)
+ |/
+ | x 3:cbdfbd5a5db2 draft fix bug 15 (v2)
|/
- | x 4:162612d3335b draft temporary amend commit for fe81d904ed08
- | |
- | x 3:fe81d904ed08 draft fix bug 24 (v1)
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
|/
- o 2:e011baf925da public fix bug 15
+ @ 1:de6151c48e1c public fix bug 37
+ |
+ $ hg --hidden -R ../public shortlog -G -r 1::
+ o 3:a06ec1bf97bd public fix bug 15 (v2)
+ |
+ o 2:540ba8f317e6 public implement feature X (v3)
|
o 1:de6151c48e1c public fix bug 37
|
- o 0:0dc9c9f6ab91 public create new project
-
-Merge the trouble away.
- $ hg merge --tool internal:local
- 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
- (branch merge, don't forget to commit)
- $ hg commit -m merge
- $ hg shortlog -G
- @ 7:b1d30ba26e44 draft merge
- |\
- | o 6:694fd0f6b503 draft fix bug 24 (v2 by alice)
- | |
- o | 5:fc16901f4d7a draft fix bug 24 (v2 by bob)
- |/
- o 2:e011baf925da public fix bug 15
- |
- o 1:de6151c48e1c public fix bug 37
- |
- o 0:0dc9c9f6ab91 public create new project
-
- $ hg log -q -r 'divergent()'
- 5:fc16901f4d7a
- 6:694fd0f6b503
-
-# XXX hg evolve does not solve this trouble! bug in evolve?
-#Evolve the trouble away.
-# $ hg evolve --all --tool=internal:local
-# merge:[5] fix bug 24 (v2 by bob)
-# with: [6] fix bug 24 (v2 by alice)
-# base: [3] fix bug 24 (v1)
-# 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-# $ hg status
-# $ hg shortlog -G
-# o 6:694fd0f6b503 draft fix bug 24 (v2 by alice)
-# |
-# | @ 5:fc16901f4d7a draft fix bug 24 (v2 by bob)
-# |/
-# o 2:e011baf925da public fix bug 15
-# |
-# o 1:de6151c48e1c public fix bug 37
-# |
-# o 0:0dc9c9f6ab91 public create new project
-#
-# $ hg --hidden shortlog -G