Show More
@@ -561,6 +561,50 b' def _firstdescendants(repo, subset, x):' | |||
|
561 | 561 | # Like ``descendants(set)`` but follows only the first parents. |
|
562 | 562 | return _descendants(repo, subset, x, followfirst=True) |
|
563 | 563 | |
|
564 | def destination(repo, subset, x): | |
|
565 | """``destination([set])`` | |
|
566 | Changesets that were created by a graft, transplant or rebase operation, | |
|
567 | with the given revisions specified as the source. Omitting the optional set | |
|
568 | is the same as passing all(). | |
|
569 | """ | |
|
570 | if x is not None: | |
|
571 | args = set(getset(repo, range(len(repo)), x)) | |
|
572 | else: | |
|
573 | args = set(getall(repo, range(len(repo)), x)) | |
|
574 | ||
|
575 | dests = set() | |
|
576 | ||
|
577 | # subset contains all of the possible destinations that can be returned, so | |
|
578 | # iterate over them and see if their source(s) were provided in the args. | |
|
579 | # Even if the immediate src of r is not in the args, src's source (or | |
|
580 | # further back) may be. Scanning back further than the immediate src allows | |
|
581 | # transitive transplants and rebases to yield the same results as transitive | |
|
582 | # grafts. | |
|
583 | for r in subset: | |
|
584 | src = _getrevsource(repo, r) | |
|
585 | lineage = None | |
|
586 | ||
|
587 | while src is not None: | |
|
588 | if lineage is None: | |
|
589 | lineage = list() | |
|
590 | ||
|
591 | lineage.append(r) | |
|
592 | ||
|
593 | # The visited lineage is a match if the current source is in the arg | |
|
594 | # set. Since every candidate dest is visited by way of iterating | |
|
595 | # subset, any dests futher back in the lineage will be tested by a | |
|
596 | # different iteration over subset. Likewise, if the src was already | |
|
597 | # selected, the current lineage can be selected without going back | |
|
598 | # further. | |
|
599 | if src in args or src in dests: | |
|
600 | dests.update(lineage) | |
|
601 | break | |
|
602 | ||
|
603 | r = src | |
|
604 | src = _getrevsource(repo, r) | |
|
605 | ||
|
606 | return [r for r in subset if r in dests] | |
|
607 | ||
|
564 | 608 | def draft(repo, subset, x): |
|
565 | 609 | """``draft()`` |
|
566 | 610 | Changeset in draft phase.""" |
@@ -1399,6 +1443,7 b' symbols = {' | |||
|
1399 | 1443 | "desc": desc, |
|
1400 | 1444 | "descendants": descendants, |
|
1401 | 1445 | "_firstdescendants": _firstdescendants, |
|
1446 | "destination": destination, | |
|
1402 | 1447 | "draft": draft, |
|
1403 | 1448 | "extinct": extinct, |
|
1404 | 1449 | "extra": extra, |
@@ -405,3 +405,131 b' Now transplant a graft to test following' | |||
|
405 | 405 | date: Thu Jan 01 00:00:00 1970 +0000 |
|
406 | 406 | summary: 2 |
|
407 | 407 | |
|
408 | Test simple destination | |
|
409 | $ hg log -r 'destination()' | |
|
410 | changeset: 7:ef0ef43d49e7 | |
|
411 | parent: 0:68795b066622 | |
|
412 | user: foo | |
|
413 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
414 | summary: 2 | |
|
415 | ||
|
416 | changeset: 8:6b9e5368ca4e | |
|
417 | user: bar | |
|
418 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
419 | summary: 1 | |
|
420 | ||
|
421 | changeset: 9:1905859650ec | |
|
422 | user: test | |
|
423 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
424 | summary: 5 | |
|
425 | ||
|
426 | changeset: 10:52dc0b4c6907 | |
|
427 | user: test | |
|
428 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
429 | summary: 4 | |
|
430 | ||
|
431 | changeset: 11:882b35362a6b | |
|
432 | user: test | |
|
433 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
434 | summary: 3 | |
|
435 | ||
|
436 | changeset: 13:9db0f28fd374 | |
|
437 | user: foo | |
|
438 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
439 | summary: 2 | |
|
440 | ||
|
441 | changeset: 14:f64defefacee | |
|
442 | parent: 1:5d205f8b35b6 | |
|
443 | user: foo | |
|
444 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
445 | summary: 3 | |
|
446 | ||
|
447 | changeset: 17:64ecd9071ce8 | |
|
448 | user: bar | |
|
449 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
450 | summary: 1 | |
|
451 | ||
|
452 | changeset: 19:2e80e1351d6e | |
|
453 | user: test | |
|
454 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
455 | summary: 2 | |
|
456 | ||
|
457 | changeset: 21:7e61b508e709 | |
|
458 | branch: dev | |
|
459 | tag: tip | |
|
460 | user: foo | |
|
461 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
462 | summary: 2 | |
|
463 | ||
|
464 | $ hg log -r 'destination(2)' | |
|
465 | changeset: 7:ef0ef43d49e7 | |
|
466 | parent: 0:68795b066622 | |
|
467 | user: foo | |
|
468 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
469 | summary: 2 | |
|
470 | ||
|
471 | changeset: 13:9db0f28fd374 | |
|
472 | user: foo | |
|
473 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
474 | summary: 2 | |
|
475 | ||
|
476 | changeset: 19:2e80e1351d6e | |
|
477 | user: test | |
|
478 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
479 | summary: 2 | |
|
480 | ||
|
481 | changeset: 21:7e61b508e709 | |
|
482 | branch: dev | |
|
483 | tag: tip | |
|
484 | user: foo | |
|
485 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
486 | summary: 2 | |
|
487 | ||
|
488 | Transplants of grafts can find a destination... | |
|
489 | $ hg log -r 'destination(7)' | |
|
490 | changeset: 21:7e61b508e709 | |
|
491 | branch: dev | |
|
492 | tag: tip | |
|
493 | user: foo | |
|
494 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
495 | summary: 2 | |
|
496 | ||
|
497 | ... grafts of grafts unfortunately can't | |
|
498 | $ hg graft -q 13 | |
|
499 | $ hg log -r 'destination(13)' | |
|
500 | All copies of a cset | |
|
501 | $ hg log -r 'origin(13) or destination(origin(13))' | |
|
502 | changeset: 2:5c095ad7e90f | |
|
503 | user: test | |
|
504 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
505 | summary: 2 | |
|
506 | ||
|
507 | changeset: 7:ef0ef43d49e7 | |
|
508 | parent: 0:68795b066622 | |
|
509 | user: foo | |
|
510 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
511 | summary: 2 | |
|
512 | ||
|
513 | changeset: 13:9db0f28fd374 | |
|
514 | user: foo | |
|
515 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
516 | summary: 2 | |
|
517 | ||
|
518 | changeset: 19:2e80e1351d6e | |
|
519 | user: test | |
|
520 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
521 | summary: 2 | |
|
522 | ||
|
523 | changeset: 21:7e61b508e709 | |
|
524 | branch: dev | |
|
525 | user: foo | |
|
526 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
527 | summary: 2 | |
|
528 | ||
|
529 | changeset: 22:1313d0a825e2 | |
|
530 | branch: dev | |
|
531 | tag: tip | |
|
532 | user: foo | |
|
533 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
534 | summary: 2 | |
|
535 |
@@ -83,6 +83,74 b' test tranplanted keyword' | |||
|
83 | 83 | 1 |
|
84 | 84 | 0 |
|
85 | 85 | |
|
86 | test destination() revset predicate with a transplant of a transplant; new | |
|
87 | clone so subsequent rollback isn't affected | |
|
88 | $ hg clone -q . ../destination | |
|
89 | $ cd ../destination | |
|
90 | $ hg up -Cq 0 | |
|
91 | $ hg branch -q b4 | |
|
92 | $ hg ci -qm "b4" | |
|
93 | $ hg transplant 7 | |
|
94 | applying ffd6818a3975 | |
|
95 | ffd6818a3975 transplanted to 502236fa76bb | |
|
96 | ||
|
97 | ||
|
98 | $ hg log -r 'destination()' | |
|
99 | changeset: 5:e234d668f844 | |
|
100 | parent: 1:d11e3596cc1a | |
|
101 | user: test | |
|
102 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
103 | summary: b1 | |
|
104 | ||
|
105 | changeset: 6:539f377d78df | |
|
106 | user: test | |
|
107 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
108 | summary: b2 | |
|
109 | ||
|
110 | changeset: 7:ffd6818a3975 | |
|
111 | user: test | |
|
112 | date: Thu Jan 01 00:00:02 1970 +0000 | |
|
113 | summary: b3 | |
|
114 | ||
|
115 | changeset: 9:502236fa76bb | |
|
116 | branch: b4 | |
|
117 | tag: tip | |
|
118 | user: test | |
|
119 | date: Thu Jan 01 00:00:02 1970 +0000 | |
|
120 | summary: b3 | |
|
121 | ||
|
122 | $ hg log -r 'destination(a53251cdf717)' | |
|
123 | changeset: 7:ffd6818a3975 | |
|
124 | user: test | |
|
125 | date: Thu Jan 01 00:00:02 1970 +0000 | |
|
126 | summary: b3 | |
|
127 | ||
|
128 | changeset: 9:502236fa76bb | |
|
129 | branch: b4 | |
|
130 | tag: tip | |
|
131 | user: test | |
|
132 | date: Thu Jan 01 00:00:02 1970 +0000 | |
|
133 | summary: b3 | |
|
134 | ||
|
135 | ||
|
136 | test subset parameter in reverse order | |
|
137 | $ hg log -r 'reverse(all()) and destination(a53251cdf717)' | |
|
138 | changeset: 9:502236fa76bb | |
|
139 | branch: b4 | |
|
140 | tag: tip | |
|
141 | user: test | |
|
142 | date: Thu Jan 01 00:00:02 1970 +0000 | |
|
143 | summary: b3 | |
|
144 | ||
|
145 | changeset: 7:ffd6818a3975 | |
|
146 | user: test | |
|
147 | date: Thu Jan 01 00:00:02 1970 +0000 | |
|
148 | summary: b3 | |
|
149 | ||
|
150 | ||
|
151 | back to the original dir | |
|
152 | $ cd ../rebase | |
|
153 | ||
|
86 | 154 | rollback the transplant |
|
87 | 155 | $ hg rollback |
|
88 | 156 | repository tip rolled back to revision 4 (undo transplant) |
General Comments 0
You need to be logged in to leave comments.
Login now