comparison docs/tutorials/tutorial.t @ 209:7bee48a54c4a

tutorial: make it pass again More work is needed but the tutorial work as a functionnal test.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Mon, 23 Apr 2012 17:25:36 +0200
parents 92b073d13f2d
children 69a37d56c7fb
comparison
equal deleted inserted replaced
208:05d6e3e36980 209:7bee48a54c4a
17 17
18 First there is some setup phase you will understand later. 18 First there is some setup phase you will understand later.
19 19
20 there is a local repository and a remote one. 20 there is a local repository and a remote one.
21 21
22 Please close your eyes. 22
23 $ cat >> $HGRCPATH << EOF
24 > [ui]
25 > logtemplate ="{node|short} ({phase}): {desc}\n"
26 > [diff]
27 > git = 1
28 > [alias]
29 > amend = amend -d '0 0'
30 > [extensions]
31 > hgext.graphlog=
32 > hgext.rebase=
33 > EOF
34 $ $(dirname $TESTDIR)/enable.sh >> $HGRCPATH 2> /dev/null
23 35
24 $ hg init local 36 $ hg init local
25 $ cat >> local/.hg/hgrc << EOF 37 $ cat >> local/.hg/hgrc << EOF
26 > [paths] 38 > [paths]
27 > remote = ../remote 39 > remote = ../remote
28 > [ui] 40 > [ui]
29 > user = Albert Beugras 41 > user = Babar the King
30 > [diff] 42 > EOF
31 > git = 1 43
32 > [alias]
33 > amend = amend -d '0 0'
34 > tlog = log --template "{node|short}: '{desc}'\n"
35 > ttlog = log --template "{node|short}: '{desc}' ({state})\n"
36 > tglog = log -G --template "{node|short}: '{desc}' {branches}\n"
37 > [extensions]
38 > hgext.graphlog=
39 > hgext.rebase=
40 > EOF
41 $ echo "states=$(echo $(dirname $TESTDIR))/hgext/states.py" >> local/.hg/hgrc
42 $ echo "obsolete=$(echo $(dirname $TESTDIR))/hgext/obsolete.py" >> local/.hg/hgrc
43 $ echo "evolution=$(echo $(dirname $TESTDIR))/hgext/evolution.py" >> local/.hg/hgrc
44 $ hg init remote 44 $ hg init remote
45 $ cat >> remote/.hg/hgrc << EOF 45 $ cat >> remote/.hg/hgrc << EOF
46 > [paths] 46 > [paths]
47 > local = ../local 47 > local = ../local
48 > [ui] 48 > [ui]
49 > user = René de Robert 49 > user = Celestine the Queen
50 > [diff] 50 > EOF
51 > git = 1 51
52 > [alias]
53 > amend = amend -d '0 0'
54 > tlog = log --template "{node|short}: '{desc}' {branches}\n"
55 > ttlog = log --template "{node|short}: '{desc}' {state}\n"
56 > tglog = log -G --template "{node|short}: '{desc}' {branches}\n"
57 > [extensions]
58 > hgext.graphlog=
59 > hgext.rebase=
60 > EOF
61 $ echo "states=$(echo $(dirname $TESTDIR))/hgext/states.py" >> remote/.hg/hgrc
62 $ echo "obsolete=$(echo $(dirname $TESTDIR))/hgext/obsolete.py" >> remote/.hg/hgrc
63 $ echo "evolution=$(echo $(dirname $TESTDIR))/hgext/evolution.py" >> remote/.hg/hgrc
64 $ cd local 52 $ cd local
65 53
66 You can reopen you eyes. 54 You can reopen you eyes.
67 55
68 Now we make a first version of our shopping list. 56 Now we make a first version of our shopping list.
105 > EOF 93 > EOF
106 $ hg commit -m "adding fruit" 94 $ hg commit -m "adding fruit"
107 95
108 I now have the following history: 96 I now have the following history:
109 97
110 $ hg tlog 98 $ hg log
111 d85de4546133: 'adding fruit' 99 d85de4546133 (draft): adding fruit
112 4d5dc8187023: 'adding condiment' 100 4d5dc8187023 (draft): adding condiment
113 7e82d3f3c2cb: 'Monthy Python Shopping list' 101 7e82d3f3c2cb (public): Monthy Python Shopping list
114 102
115 But, I just notice, I made a typo in Banana. 103 But, I just notice, I made a typo in Banana.
116 104
117 $ hg export tip 105 $ hg export tip
118 # HG changeset patch 106 # HG changeset patch
130 Vinegar 118 Vinegar
131 Oil 119 Oil
132 +Bananos 120 +Bananos
133 +Pear 121 +Pear
134 +Apple 122 +Apple
123
124 The faulty changeset is in the "draft" phase because he was not exchanged with the outside. The first one have been exchanged and is an immutable public changeset
125
126 $ hg log
127 d85de4546133 (draft): adding fruit
128 4d5dc8187023 (draft): adding condiment
129 7e82d3f3c2cb (public): Monthy Python Shopping list
135 130
136 hopefully. I can use hg amend to rewrite my faulty changeset! 131 hopefully. I can use hg amend to rewrite my faulty changeset!
137 132
138 $ sed -i'' -e s/Bananos/Banana/ shopping 133 $ sed -i'' -e s/Bananos/Banana/ shopping
139 $ hg diff 134 $ hg diff
147 -Bananos 142 -Bananos
148 +Banana 143 +Banana
149 Pear 144 Pear
150 Apple 145 Apple
151 $ hg amend 146 $ hg amend
152 abort: can not rewrite immutable changeset d85de4546133
153 [255]
154
155 By default all changeset are considered "published" and can't be rewrittent.
156
157 $ hg ttlog
158
159 You need to enable a mutable state in your repo the "ready" one
160
161 $ hg states ready --clever
162 $ hg ttlog
163 d85de4546133: 'adding fruit' (ready)
164 4d5dc8187023: 'adding condiment' (ready)
165 7e82d3f3c2cb: 'Monthy Python Shopping list' (published)
166
167 Notice that changeset you already shared with the outside have been keep
168 published.
169
170 The changeset we want to rewrite is now in a mutable state.
171
172 $ hg amend
173 147
174 A new changeset with the right diff replace the wrong one. 148 A new changeset with the right diff replace the wrong one.
175 149
176 $ hg tlog 150 $ hg log
177 0cacb48f4482: 'adding fruit' 151 0cacb48f4482 (draft): adding fruit
178 4d5dc8187023: 'adding condiment' 152 4d5dc8187023 (draft): adding condiment
179 7e82d3f3c2cb: 'Monthy Python Shopping list' 153 7e82d3f3c2cb (public): Monthy Python Shopping list
180 $ hg export tip 154 $ hg export tip
181 # HG changeset patch 155 # HG changeset patch
182 # User test 156 # User test
183 # Date 0 0 157 # Date 0 0
184 # Node ID 0cacb48f44828d2fd31c4e45e18fde32a5b2f07b 158 # Node ID 0cacb48f44828d2fd31c4e45e18fde32a5b2f07b
220 added 1 changesets with 1 changes to 1 files (+1 heads) 194 added 1 changesets with 1 changes to 1 files (+1 heads)
221 (run 'hg heads .' to see heads, 'hg merge' to merge) 195 (run 'hg heads .' to see heads, 'hg merge' to merge)
222 196
223 I now have a new heads. Note that the remote head is immutable 197 I now have a new heads. Note that the remote head is immutable
224 198
225 $ hg ttlog 199 $ hg log
226 9ca060c80d74: 'SPAM' (published) 200 9ca060c80d74 (public): SPAM
227 0cacb48f4482: 'adding fruit' (ready) 201 0cacb48f4482 (draft): adding fruit
228 4d5dc8187023: 'adding condiment' (ready) 202 4d5dc8187023 (draft): adding condiment
229 7e82d3f3c2cb: 'Monthy Python Shopping list' (published) 203 7e82d3f3c2cb (public): Monthy Python Shopping list
230 $ hg tglog -r "::(9ca060c80d74 + 0cacb48f4482)" 204 $ hg log -G
231 o 9ca060c80d74: 'SPAM' 205 o 9ca060c80d74 (public): SPAM
232 | 206 |
233 | @ 0cacb48f4482: 'adding fruit' 207 | @ 0cacb48f4482 (draft): adding fruit
234 | | 208 | |
235 | o 4d5dc8187023: 'adding condiment' 209 | o 4d5dc8187023 (draft): adding condiment
236 |/ 210 |/
237 o 7e82d3f3c2cb: 'Monthy Python Shopping list' 211 o 7e82d3f3c2cb (public): Monthy Python Shopping list
238 212
239 213
240 instead of merging my head with the new one. I'm going to rebase my work 214 instead of merging my head with the new one. I'm going to rebase my work
241 215
242 $ hg diff 216 $ hg diff
243 $ hg rebase -d 9ca060c80d74 -s 4d5dc8187023 217 $ hg rebase -d 9ca060c80d74 -s 4d5dc8187023
244 merging shopping 218 merging shopping
245 merging shopping 219 merging shopping
246 merging shopping 220
247 merging shopping 221
248 222 My local work is now rebased on the remote one.
249 223
250 My local work is now rebase on the remote one. 224 $ hg log
251 225 387187ad9bd9 (draft): adding fruit
252 $ hg kill e7a71e229632 ad97bbd3e37d # XXX fix me instead 226 dfd3a2d7691e (draft): adding condiment
253 $ hg ttlog 227 9ca060c80d74 (public): SPAM
254 387187ad9bd9: 'adding fruit' (ready) 228 7e82d3f3c2cb (public): Monthy Python Shopping list
255 dfd3a2d7691e: 'adding condiment' (ready) 229 $ hg log -G
256 9ca060c80d74: 'SPAM' (published) 230 @ 387187ad9bd9 (draft): adding fruit
257 7e82d3f3c2cb: 'Monthy Python Shopping list' (published) 231 |
258 $ hg tglog -r '::.' 232 o dfd3a2d7691e (draft): adding condiment
259 @ 387187ad9bd9: 'adding fruit' 233 |
260 | 234 o 9ca060c80d74 (public): SPAM
261 o dfd3a2d7691e: 'adding condiment' 235 |
262 | 236 o 7e82d3f3c2cb (public): Monthy Python Shopping list
263 o 9ca060c80d74: 'SPAM'
264 |
265 o 7e82d3f3c2cb: 'Monthy Python Shopping list'
266 237
267 238
268 Removing changeset 239 Removing changeset
269 ------------------------ 240 ------------------------
270 241
275 > bus 246 > bus
276 > plane 247 > plane
277 > boat 248 > boat
278 > EOF 249 > EOF
279 $ hg ci -m 'transport' 250 $ hg ci -m 'transport'
280 $ hg ttlog 251 $ hg log
281 d58c77aa15d7: 'transport' (ready) 252 d58c77aa15d7 (draft): transport
282 387187ad9bd9: 'adding fruit' (ready) 253 387187ad9bd9 (draft): adding fruit
283 dfd3a2d7691e: 'adding condiment' (ready) 254 dfd3a2d7691e (draft): adding condiment
284 9ca060c80d74: 'SPAM' (published) 255 9ca060c80d74 (public): SPAM
285 7e82d3f3c2cb: 'Monthy Python Shopping list' (published) 256 7e82d3f3c2cb (public): Monthy Python Shopping list
286 257
287 I have a new commit but I realize that don't want it. (transport shop list does 258 I have a new commit but I realize that don't want it. (transport shop list does
288 not fit well in my standard shopping list) 259 not fit well in my standard shopping list)
289 260
290 $ hg kill . # . is for working directory parent. 261 $ hg kill . # . is for working directory parent.
291 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 262 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
292 working directory now at 387187ad9bd9 263 working directory now at 387187ad9bd9
293 264
294 The silly changeset is gone. 265 The silly changeset is gone.
295 266
296 $ hg ttlog 267 $ hg log
297 387187ad9bd9: 'adding fruit' (ready) 268 387187ad9bd9 (draft): adding fruit
298 dfd3a2d7691e: 'adding condiment' (ready) 269 dfd3a2d7691e (draft): adding condiment
299 9ca060c80d74: 'SPAM' (published) 270 9ca060c80d74 (public): SPAM
300 7e82d3f3c2cb: 'Monthy Python Shopping list' (published) 271 7e82d3f3c2cb (public): Monthy Python Shopping list
301 272
302 Reordering changeset 273 Reordering changeset
303 ------------------------ 274 ------------------------
304 275
305 276
315 > EOF 286 > EOF
316 $ hg ci -m 'bathroom stuff' -q # XXX remove the -q 287 $ hg ci -m 'bathroom stuff' -q # XXX remove the -q
317 288
318 $ sed -i'' -e 's/Spam/Spam Spam Spam/g' shopping 289 $ sed -i'' -e 's/Spam/Spam Spam Spam/g' shopping
319 $ hg ci -m 'SPAM SPAM' 290 $ hg ci -m 'SPAM SPAM'
320 $ hg ttlog 291 $ hg log
321 c48f32fb1787: 'SPAM SPAM' (ready) 292 c48f32fb1787 (draft): SPAM SPAM
322 8d39a843582d: 'bathroom stuff' (ready) 293 8d39a843582d (draft): bathroom stuff
323 387187ad9bd9: 'adding fruit' (ready) 294 387187ad9bd9 (draft): adding fruit
324 dfd3a2d7691e: 'adding condiment' (ready) 295 dfd3a2d7691e (draft): adding condiment
325 9ca060c80d74: 'SPAM' (published) 296 9ca060c80d74 (public): SPAM
326 7e82d3f3c2cb: 'Monthy Python Shopping list' (published) 297 7e82d3f3c2cb (public): Monthy Python Shopping list
327 298
328 .. note: don't amend changeset 7e82d3f3c2cb or 9ca060c80d74 as they are 299 .. note: don't amend changeset 7e82d3f3c2cb or 9ca060c80d74 as they are
329 immutable. 300 immutable.
330 301
331 I now want to push to remote all my change but the bathroom one that i'm not totally happy with yet. 302 I now want to push to remote all my change but the bathroom one that i'm not totally happy with yet.
332 303
333 To be able to push "SPAM SPAM" I need a version of "SPAM SPAM" not children of "bathroom stuff" 304 To be able to push "SPAM SPAM" I need a version of "SPAM SPAM" not children of "bathroom stuff"
334 305
335 You can use rebase or relocate for that: 306 You can use 'rebase -r' or 'graft -O' for that:
336 307
337 $ hg relocate 'p1(8d39a843582d)' --traceback 308 $ hg up 'p1(8d39a843582d)' # going on "bathroom stuff" parent
309 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
310 $ hg graft -O c48f32fb1787 # moving "SPAM SPAM" to the working directory parent
311 grafting revision 10
338 merging shopping 312 merging shopping
339 $ hg tglog -r '::(. + 8d39a843582d)' 313 $ hg log -G
340 @ 02e33960e937: 'SPAM SPAM' 314 @ a2fccc2e7b08 (draft): SPAM SPAM
341 | 315 |
342 | o 8d39a843582d: 'bathroom stuff' 316 | o 8d39a843582d (draft): bathroom stuff
343 |/ 317 |/
344 o 387187ad9bd9: 'adding fruit' 318 o 387187ad9bd9 (draft): adding fruit
345 | 319 |
346 o dfd3a2d7691e: 'adding condiment' 320 o dfd3a2d7691e (draft): adding condiment
347 | 321 |
348 o 9ca060c80d74: 'SPAM' 322 o 9ca060c80d74 (public): SPAM
349 | 323 |
350 o 7e82d3f3c2cb: 'Monthy Python Shopping list' 324 o 7e82d3f3c2cb (public): Monthy Python Shopping list
351 325
352 326
353 We have a new SPAM SPAM version without the bathroom stuff 327 We have a new SPAM SPAM version without the bathroom stuff
354 328
355 $ grep Spam shopping # enouth spamm 329 $ grep Spam shopping # enouth spamm
358 [1] 332 [1]
359 $ hg export . 333 $ hg export .
360 # HG changeset patch 334 # HG changeset patch
361 # User test 335 # User test
362 # Date 0 0 336 # Date 0 0
363 # Node ID 02e33960e937ad1bd59241ebdafd7a2494240ddf 337 # Node ID a2fccc2e7b08bbce6af7255b989453f7089e4cf0
364 # Parent 387187ad9bd9d8f9a00a9fa804a26231db547429 338 # Parent 387187ad9bd9d8f9a00a9fa804a26231db547429
365 SPAM SPAM 339 SPAM SPAM
366 340
367 diff --git a/shopping b/shopping 341 diff --git a/shopping b/shopping
368 --- a/shopping 342 --- a/shopping
372 +Spam Spam Spam Spam Spam Spam Spam Spam Spam 346 +Spam Spam Spam Spam Spam Spam Spam Spam Spam
373 Whizzo butter 347 Whizzo butter
374 Albatross 348 Albatross
375 Rat (rather a lot) 349 Rat (rather a lot)
376 350
351 To make sure I do not push unready changeset by mistake I set the "bathroom
352 stuff" changeset in the secret phase.
353
354 $ hg phase --force --secret 8d39a843582d
355
377 we can now push our change: 356 we can now push our change:
378 357
379 $ hg push -r . remote 358 $ hg push remote
380 pushing to $TESTTMP/remote 359 pushing to $TESTTMP/remote
381 searching for changes 360 searching for changes
382 adding changesets 361 adding changesets
383 adding manifests 362 adding manifests
384 adding file changes 363 adding file changes
385 added 3 changesets with 3 changes to 1 files 364 added 3 changesets with 3 changes to 1 files
386 365
387 for simplicity shake we relocate the bathroom changeset 366 for simplicity shake we get the bathroom change in line again
388 367
389 $ hg relocate -r 8d39a843582d 02e33960e937 368 $ hg rebase -Dr 8d39a843582d -d a2fccc2e7b08
390 merging shopping 369 merging shopping
370 $ hg phase --draft .
391 371
392 372
393 Splitting change 373 Splitting change
394 ------------------ 374 ------------------
395 375
405 385
406 386
407 sharing mutable changeset 387 sharing mutable changeset
408 ---------------------------- 388 ----------------------------
409 389
410 To share mutable changeset with other just check that both have the "ready" 390 To share mutable changeset with other just check that the repo you interact
411 state activated. Otherwise you will get the previously observe behavior where 391 with is "not publishing". Otherwise you will get the previously observe
412 exchanged changeset are automatically published. 392 behavior where exchanged changeset are automatically published.
413 393
414 $ cd ../remote 394 $ cd ../remote
415 $ hg states 395 $ hg -R ../local/ showconfig phases
416 published 396
417 397 the localrepo does not have any specific configuration for `phases.publish`. It is ``true`` by default.
418 The remote repository have only the immutable "published" state activated. Any 398
419 changeset echanged from "local" to "remote" will be set in the publised state: 399 $ hg pull local
420 400 pulling from $TESTTMP/local
421 $ hg -R ../local push -f remote # XXX we should pull but the support is awful
422 pushing to $TESTTMP/remote
423 searching for changes 401 searching for changes
424 adding changesets 402 adding changesets
425 adding manifests 403 adding manifests
426 adding file changes 404 adding file changes
427 added 1 changesets with 1 changes to 1 files 405 added 1 changesets with 1 changes to 1 files
428 $ hg ttlog 406 (run 'hg update' to get a working copy)
429 a3515e5d0332: 'bathroom stuff' published 407 $ hg log
430 02e33960e937: 'SPAM SPAM' published 408 8a79ae8b029e (public): bathroom stuff
431 387187ad9bd9: 'adding fruit' published 409 a2fccc2e7b08 (public): SPAM SPAM
432 dfd3a2d7691e: 'adding condiment' published 410 387187ad9bd9 (public): adding fruit
433 9ca060c80d74: 'SPAM' published 411 dfd3a2d7691e (public): adding condiment
434 7e82d3f3c2cb: 'Monthy Python Shopping list' published 412 9ca060c80d74 (public): SPAM
413 7e82d3f3c2cb (public): Monthy Python Shopping list
435 414
436 415
437 416
438 We do not want to publish the "bathroom changeset". Let's rollback the last transaction 417 We do not want to publish the "bathroom changeset". Let's rollback the last transaction
439 418
440 $ hg rollback 419 $ hg rollback
441 repository tip rolled back to revision 4 (undo push) 420 repository tip rolled back to revision 4 (undo pull)
442 working directory now based on revision 1 421 $ hg log
443 $ hg ttlog 422 a2fccc2e7b08 (public): SPAM SPAM
444 02e33960e937: 'SPAM SPAM' published 423 387187ad9bd9 (public): adding fruit
445 387187ad9bd9: 'adding fruit' published 424 dfd3a2d7691e (public): adding condiment
446 dfd3a2d7691e: 'adding condiment' published 425 9ca060c80d74 (public): SPAM
447 9ca060c80d74: 'SPAM' published 426 7e82d3f3c2cb (public): Monthy Python Shopping list
448 7e82d3f3c2cb: 'Monthy Python Shopping list' published 427
449 $ rm ../local/.hg/states/published-heads # XXX USE --exact 428 Let's make thz local repo "non publishing"
450 $ hg -R ../local publish 02e33960e937 # XXX FIX THE BUG 429
451 430 $ echo "[phases]\npublish=false" >> ../local/.hg/hgrc
452 To enable the mutable "ready" state in a repository, use the states command. 431 $ echo "[phases]\npublish=false" >> .hg/hgrc
453 432 $ hg showconfig phases
454 $ hg states ready 433 phases.publish=false
455 $ hg states 434 $ hg -R ../local/ showconfig phases
456 published 435 phases.publish=false
457 ready 436
458 437
459 I can nom exchange mutable changeset between "remote" and "local" repository. 438 I can now exchange mutable changeset between "remote" and "local" repository.
460 439
461 $ hg pull local # XXX We pull too much stuff 440 $ hg pull local
462 pulling from $TESTTMP/local 441 pulling from $TESTTMP/local
463 searching for changes 442 searching for changes
464 adding changesets 443 adding changesets
465 adding manifests 444 adding manifests
466 adding file changes 445 adding file changes
467 added 10 changesets with 10 changes to 1 files (+5 heads) 446 added 1 changesets with 1 changes to 1 files
468 (run 'hg heads' to see heads, 'hg merge' to merge) 447 (run 'hg update' to get a working copy)
469 $ hg ttlog 448 $ hg log
470 a3515e5d0332: 'bathroom stuff' ready 449 8a79ae8b029e (draft): bathroom stuff
471 02e33960e937: 'SPAM SPAM' published 450 a2fccc2e7b08 (public): SPAM SPAM
472 387187ad9bd9: 'adding fruit' published 451 387187ad9bd9 (public): adding fruit
473 dfd3a2d7691e: 'adding condiment' published 452 dfd3a2d7691e (public): adding condiment
474 9ca060c80d74: 'SPAM' published 453 9ca060c80d74 (public): SPAM
475 7e82d3f3c2cb: 'Monthy Python Shopping list' published 454 7e82d3f3c2cb (public): Monthy Python Shopping list
476 455
477 Rebasing out-of-sync change after update 456 Rebasing unstable change after update
478 ---------------------------------------------- 457 ----------------------------------------------
479 458
480 Remotely someone add a new changeset on top of our mutable "bathroom" on. 459 Remotely someone add a new changeset on top of our mutable "bathroom" on.
481 460
482 $ hg up a3515e5d0332 -q 461 $ hg up 8a79ae8b029e -q
483 $ cat >> shopping << EOF 462 $ cat >> shopping << EOF
484 > Giraffe 463 > Giraffe
485 > Rhino 464 > Rhino
486 > Lion 465 > Lion
487 > Bear 466 > Bear
488 > EOF 467 > EOF
489 $ hg ci -m 'animals' -q # XXX remove the -q 468 $ hg ci -m 'animals' -q # XXX remove the -q
490 469
491 While this time locally, we rebase the updated the "bathroom changeset" 470 While this time locally, we updated "bathroom changeset"
492 471
493 $ cd ../local 472 $ cd ../local
494 $ hg up a3515e5d0332 -q 473 $ hg up 8a79ae8b029e -q
495 $ sed -i'' -e 's/... More bathroom stuff to come/Bath Robe/' shopping 474 $ sed -i'' -e 's/... More bathroom stuff to come/Bath Robe/' shopping
496 $ hg amend 475 $ hg amend
497 $ hg tlog 476 $ hg log
498 962d3a7d27ad: 'bathroom stuff' 477 ffa278c50818 (draft): bathroom stuff
499 02e33960e937: 'SPAM SPAM' 478 a2fccc2e7b08 (public): SPAM SPAM
500 387187ad9bd9: 'adding fruit' 479 387187ad9bd9 (public): adding fruit
501 dfd3a2d7691e: 'adding condiment' 480 dfd3a2d7691e (public): adding condiment
502 9ca060c80d74: 'SPAM' 481 9ca060c80d74 (public): SPAM
503 7e82d3f3c2cb: 'Monthy Python Shopping list' 482 7e82d3f3c2cb (public): Monthy Python Shopping list
504 483
505 484
506 When we pull from remote again we get an unstable state! 485 When we pull from remote again we get an unstable state!
507 486
508 $ hg pull remote 487 $ hg pull remote
511 adding changesets 490 adding changesets
512 adding manifests 491 adding manifests
513 adding file changes 492 adding file changes
514 added 1 changesets with 1 changes to 1 files (+1 heads) 493 added 1 changesets with 1 changes to 1 files (+1 heads)
515 (run 'hg heads .' to see heads, 'hg merge' to merge) 494 (run 'hg heads .' to see heads, 'hg merge' to merge)
516 $ hg tlog 495 $ hg log
517 0b061760b677: 'animals' 496 9ac5d0e790a2 (secret): animals
518 962d3a7d27ad: 'bathroom stuff' 497 ffa278c50818 (draft): bathroom stuff
519 a3515e5d0332: 'bathroom stuff' 498 8a79ae8b029e (secret): bathroom stuff
520 02e33960e937: 'SPAM SPAM' 499 a2fccc2e7b08 (public): SPAM SPAM
521 387187ad9bd9: 'adding fruit' 500 387187ad9bd9 (public): adding fruit
522 dfd3a2d7691e: 'adding condiment' 501 dfd3a2d7691e (public): adding condiment
523 9ca060c80d74: 'SPAM' 502 9ca060c80d74 (public): SPAM
524 7e82d3f3c2cb: 'Monthy Python Shopping list' 503 7e82d3f3c2cb (public): Monthy Python Shopping list
504
505 # XXX Changeset have turned secret because of current implementation of mutable.
525 506
526 The new changeset "animal" is based one an old changeset of "bathroom". You can 507 The new changeset "animal" is based one an old changeset of "bathroom". You can
527 see both version showing up the log. 508 see both version showing up the log.
528 509
529 $ hg tglog -r '::(962d3a7d27ad + 0b061760b677)' 510 $ hg glog
530 o 0b061760b677: 'animals' 511 o 9ac5d0e790a2 (secret): animals
531 | 512 |
532 | @ 962d3a7d27ad: 'bathroom stuff' 513 | @ ffa278c50818 (draft): bathroom stuff
533 | | 514 | |
534 o | a3515e5d0332: 'bathroom stuff' 515 o | 8a79ae8b029e (secret): bathroom stuff
535 |/ 516 |/
536 o 02e33960e937: 'SPAM SPAM' 517 o a2fccc2e7b08 (public): SPAM SPAM
537 | 518 |
538 o 387187ad9bd9: 'adding fruit' 519 o 387187ad9bd9 (public): adding fruit
539 | 520 |
540 o dfd3a2d7691e: 'adding condiment' 521 o dfd3a2d7691e (public): adding condiment
541 | 522 |
542 o 9ca060c80d74: 'SPAM' 523 o 9ca060c80d74 (public): SPAM
543 | 524 |
544 o 7e82d3f3c2cb: 'Monthy Python Shopping list' 525 o 7e82d3f3c2cb (public): Monthy Python Shopping list
545 526
546 527
547 In hgviewn there is a nice doted relation highlighting 962d3a7d27ad is a new 528 In hgview there is a nice doted relation highlighting ffa278c50818 is a new
548 version of a3515e5d0332. this is not yet ported to graphlog. 529 version of 8a79ae8b029e. this is not yet ported to graphlog.
549 530
550 To resolve this unstable state, you need to relocate 0b061760b677 onto 531 To resolve this unstable state, you need to rebase 9ac5d0e790a2 onto
551 962d3a7d27ad the "hg evolve" will make the thinking for you and suggest it to 532 ffa278c50818 the "hg stabilize" command will make this for you. It has a
552 you. 533 --dry-run option to only suggest the next move
553 534
554 $ hg evolve 535 $ hg stabilize --dry-run
555 hg relocate --rev 0b061760b677 962d3a7d27ad 536 move:[15] animals
537 atop:[14] bathroom stuff
538 hg rebase -Dr 9ac5d0e790a2 -d ffa278c50818
539
556 540
557 Let's do it 541 Let's do it
558 542
559 $ hg relocate --rev 0b061760b677 962d3a7d27ad 543 $ hg rebase -Dr 9ac5d0e790a2 -d ffa278c50818
560 merging shopping 544 merging shopping
561 545
562 The old vesion of bathroom is hidden again now. 546 The old version of bathroom is hidden again now.
563 547
564 $ hg tlog 548 $ hg log
565 39a85a192689: 'animals' 549 437efbcaf700 (secret): animals
566 962d3a7d27ad: 'bathroom stuff' 550 ffa278c50818 (draft): bathroom stuff
567 02e33960e937: 'SPAM SPAM' 551 a2fccc2e7b08 (public): SPAM SPAM
568 387187ad9bd9: 'adding fruit' 552 387187ad9bd9 (public): adding fruit
569 dfd3a2d7691e: 'adding condiment' 553 dfd3a2d7691e (public): adding condiment
570 9ca060c80d74: 'SPAM' 554 9ca060c80d74 (public): SPAM
571 7e82d3f3c2cb: 'Monthy Python Shopping list' 555 7e82d3f3c2cb (public): Monthy Python Shopping list
556
557 XXX remove me when fixed
558 restore a proper phase for animals
559
560 $ hg ph -dv 437efbcaf700
561 phase changed for 1 changesets
572 562
573 We can push this evolution to remote 563 We can push this evolution to remote
574 564
575 $ hg push -f remote # XXX should not require -f 565 $ hg push -f remote # XXX should not require -f
576 pushing to $TESTTMP/remote 566 pushing to $TESTTMP/remote
585 $ cd ../remote 575 $ cd ../remote
586 $ hg up . # XXX "loulz" 576 $ hg up . # XXX "loulz"
587 0 files updated, 0 files merged, 0 files removed, 0 files unresolved 577 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
588 Working directory parent is obsolete 578 Working directory parent is obsolete
589 579
590 $ hg up 39a85a192689 580 $ hg up 437efbcaf700
591 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 581 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
592 582
593 Relocating out-of-sync change after kill 583 Relocating unstable change after kill
594 ---------------------------------------------- 584 ----------------------------------------------
595 585
596 The remote guy keep working 586 The remote guy keep working
597 587
598 $ sed -i'' -e 's/Spam/Spam Spam Spam Spam/g' shopping 588 $ sed -i'' -e 's/Spam/Spam Spam Spam Spam/g' shopping
607 adding changesets 597 adding changesets
608 adding manifests 598 adding manifests
609 adding file changes 599 adding file changes
610 added 1 changesets with 1 changes to 1 files 600 added 1 changesets with 1 changes to 1 files
611 (run 'hg update' to get a working copy) 601 (run 'hg update' to get a working copy)
612 $ hg tlog 602 $ hg log
613 e768beeb835c: 'SPAM SPAM SPAM' 603 ae45c0c3092a (draft): SPAM SPAM SPAM
614 39a85a192689: 'animals' 604 437efbcaf700 (draft): animals
615 962d3a7d27ad: 'bathroom stuff' 605 ffa278c50818 (draft): bathroom stuff
616 02e33960e937: 'SPAM SPAM' 606 a2fccc2e7b08 (public): SPAM SPAM
617 387187ad9bd9: 'adding fruit' 607 387187ad9bd9 (public): adding fruit
618 dfd3a2d7691e: 'adding condiment' 608 dfd3a2d7691e (public): adding condiment
619 9ca060c80d74: 'SPAM' 609 9ca060c80d74 (public): SPAM
620 7e82d3f3c2cb: 'Monthy Python Shopping list' 610 7e82d3f3c2cb (public): Monthy Python Shopping list
621 611
622 In the mean time I noticed you can't buy animals in a super market and I kill the animal changeset: 612 In the mean time I noticed you can't buy animals in a super market and I kill the animal changeset:
623 613
624 $ hg kill 39a85a192689 # issue warning here 614 $ hg kill 437efbcaf700 # XXX issue a warning here
625 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 615 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
626 working directory now at 962d3a7d27ad 616 working directory now at ffa278c50818
617
627 618
628 The animals changeset is still displayed because the "SPAM SPAM SPAM" changeset 619 The animals changeset is still displayed because the "SPAM SPAM SPAM" changeset
629 is neither dead or obsolete. My repository is in an unstable state again. 620 is neither dead or obsolete. My repository is in an unstable state again.
630 621
631 $ hg tlog 622 $ hg log
632 e768beeb835c: 'SPAM SPAM SPAM' 623 ae45c0c3092a (secret): SPAM SPAM SPAM
633 39a85a192689: 'animals' 624 437efbcaf700 (secret): animals
634 962d3a7d27ad: 'bathroom stuff' 625 ffa278c50818 (draft): bathroom stuff
635 02e33960e937: 'SPAM SPAM' 626 a2fccc2e7b08 (public): SPAM SPAM
636 387187ad9bd9: 'adding fruit' 627 387187ad9bd9 (public): adding fruit
637 dfd3a2d7691e: 'adding condiment' 628 dfd3a2d7691e (public): adding condiment
638 9ca060c80d74: 'SPAM' 629 9ca060c80d74 (public): SPAM
639 7e82d3f3c2cb: 'Monthy Python Shopping list' 630 7e82d3f3c2cb (public): Monthy Python Shopping list
640 $ hg tglog -r '::e768beeb835c' 631
641 o e768beeb835c: 'SPAM SPAM SPAM' 632 $ hg log -r 'unstable()'
642 | 633 ae45c0c3092a (secret): SPAM SPAM SPAM
643 o 39a85a192689: 'animals' 634
644 | 635 $ hg log -G
645 @ 962d3a7d27ad: 'bathroom stuff' 636 o ae45c0c3092a (secret): SPAM SPAM SPAM
646 | 637 |
647 o 02e33960e937: 'SPAM SPAM' 638 o 437efbcaf700 (secret): animals
648 | 639 |
649 o 387187ad9bd9: 'adding fruit' 640 @ ffa278c50818 (draft): bathroom stuff
650 | 641 |
651 o dfd3a2d7691e: 'adding condiment' 642 o a2fccc2e7b08 (public): SPAM SPAM
652 | 643 |
653 o 9ca060c80d74: 'SPAM' 644 o 387187ad9bd9 (public): adding fruit
654 | 645 |
655 o 7e82d3f3c2cb: 'Monthy Python Shopping list' 646 o dfd3a2d7691e (public): adding condiment
656 647 |
657 648 o 9ca060c80d74 (public): SPAM
658 # $ hg evolve # XXX not ready yet 649 |
659 # hg relocate --rev e768beeb835c 962d3a7d27ad 650 o 7e82d3f3c2cb (public): Monthy Python Shopping list
660 651
661 $ hg relocate -r e768beeb835c 'p1(39a85a192689)' 652 # XXX make this work
653 # $ hg stabilize --any
654 # merging shopping
655
656 $ hg graft -O ae45c0c3092a
657 grafting revision 17
662 merging shopping 658 merging shopping
663 659
664 $ hg tlog 660 $ hg log
665 19098f8178f3: 'SPAM SPAM SPAM' 661 20de1fb1cec5 (draft): SPAM SPAM SPAM
666 962d3a7d27ad: 'bathroom stuff' 662 ffa278c50818 (draft): bathroom stuff
667 02e33960e937: 'SPAM SPAM' 663 a2fccc2e7b08 (public): SPAM SPAM
668 387187ad9bd9: 'adding fruit' 664 387187ad9bd9 (public): adding fruit
669 dfd3a2d7691e: 'adding condiment' 665 dfd3a2d7691e (public): adding condiment
670 9ca060c80d74: 'SPAM' 666 9ca060c80d74 (public): SPAM
671 7e82d3f3c2cb: 'Monthy Python Shopping list' 667 7e82d3f3c2cb (public): Monthy Python Shopping list
668
672 669
673 Handling Conflicting amend 670 Handling Conflicting amend
674 ---------------------------------------------- 671 ----------------------------------------------
675 672
676 We can detect that multiple diverging//conflicting amend have been made. There 673 We can detect that multiple diverging//conflicting amend have been made. There