Mercurial > hg
comparison tests/test-phabricator.t @ 44717:3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Now that all of the pieces are in place, alter the user facing command to allow
it. This is the default behavior when using `arc`, but I much prefer the 1:1
approach, and I'm tempted to mark this advanced to limit its abuse. I started
out calling this `--no-stack` like the feature request suggested, but I found it
less obvious (especially when writing the code), so I went with the `hg fold`
analogue.
This will populate the `Commits` tab in the web UI with the hash of each commit
folded into the review. From experimentation, it seems to list them in the
order they are received from the extension instead of the actual parent/child
relationship. The extension sends them in sorted order, thanks to
`templatefilters.json()`. Since there's enough info there for them to put
things in the right order, JSON is unordered aside from lists (IIUC), and there
doesn't seem to be any harmful side effects, I guess we write this off as their
bug. It is simple enough to workaround by putting a check for `util.sortdict`
into `templatefilters.json()`, and don't resort in that case.
There are a handful of restrictions that are documented in the code, which
somebody could probably fix if they're interested. Notably, this requires the
(default) `--amend` option, because there's not an easy way to apply a local tag
across several commits. This also doesn't do preflight checking to ensure that
all previous commits that were part of a single review are selected when
updating. That seems expensive. What happens is the excluded commit is dropped
from the review, but it keeps the Differential Revision line in the commit
message. Not everything can be edited, so it doesn't seem worth making the code
even more complicated to handle this edge case.
There are a couple of "obsolete feature not enabled but X markers found!"
messages that appeared on Windows but not macOS. I have no idea what's going on
here, but that's an unrelated issue, so I conditionalized those lines.
Differential Revision: https://phab.mercurial-scm.org/D8314
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 08 Apr 2020 17:30:10 -0400 |
parents | ed81fa859426 |
children | 0680b8a1992a |
comparison
equal
deleted
inserted
replaced
44716:ed81fa859426 | 44717:3dc6a70779f2 |
---|---|
414 repository tip rolled back to revision 1 (undo phabimport) | 414 repository tip rolled back to revision 1 (undo phabimport) |
415 $ hg phabimport --no-stack D7917 D7918 --test-vcr "$VCR/phabimport-multi-drev.json" | 415 $ hg phabimport --no-stack D7917 D7918 --test-vcr "$VCR/phabimport-multi-drev.json" |
416 applying patch from D7917 | 416 applying patch from D7917 |
417 applying patch from D7918 | 417 applying patch from D7918 |
418 | 418 |
419 Validate arguments with --fold | |
420 | |
421 $ hg phabsend --fold -r 1 | |
422 abort: cannot fold a single revision | |
423 [255] | |
424 $ hg phabsend --fold --no-amend -r 1:: | |
425 abort: cannot fold with --no-amend | |
426 [255] | |
427 $ hg phabsend --fold -r 0+3 | |
428 abort: cannot fold non-linear revisions | |
429 [255] | |
430 $ hg phabsend --fold -r 1:: | |
431 abort: cannot fold revisions with different DREV values | |
432 [255] | |
433 | |
434 Setup a series of commits to be folded, and include the Test Plan field multiple | |
435 times to test the concatenation logic. No Test Plan field in the last one to | |
436 ensure missing fields are skipped. | |
437 | |
438 $ hg init ../folded | |
439 $ cd ../folded | |
440 $ cat >> .hg/hgrc <<EOF | |
441 > [phabricator] | |
442 > url = https://phab.mercurial-scm.org/ | |
443 > callsign = HG | |
444 > EOF | |
445 | |
446 $ echo 'added' > file.txt | |
447 $ hg ci -Aqm 'added file' | |
448 | |
449 $ cat > log.txt <<EOF | |
450 > one: first commit to review | |
451 > | |
452 > This file was modified with 'mod1' as its contents. | |
453 > | |
454 > Test Plan: | |
455 > LOL! What testing?! | |
456 > EOF | |
457 $ echo mod1 > file.txt | |
458 $ hg ci -l log.txt | |
459 | |
460 $ cat > log.txt <<EOF | |
461 > two: second commit to review | |
462 > | |
463 > This file was modified with 'mod2' as its contents. | |
464 > | |
465 > Test Plan: | |
466 > Haha! yeah, right. | |
467 > | |
468 > EOF | |
469 $ echo mod2 > file.txt | |
470 $ hg ci -l log.txt | |
471 | |
472 $ echo mod3 > file.txt | |
473 $ hg ci -m '3: a commit with no detailed message' | |
474 | |
475 The folding of immutable commits works... | |
476 | |
477 $ hg phase -r tip --public | |
478 $ hg phabsend --fold -r 1:: --test-vcr "$VCR/phabsend-fold-immutable.json" | |
479 D8386 - created - a959a3f69d8d: one: first commit to review | |
480 D8386 - created - 24a4438154ba: two: second commit to review | |
481 D8386 - created - d235829e802c: 3: a commit with no detailed message | |
482 warning: not updating public commit 1:a959a3f69d8d | |
483 warning: not updating public commit 2:24a4438154ba | |
484 warning: not updating public commit 3:d235829e802c | |
485 no newnodes to update | |
486 | |
487 $ hg phase -r 0 --draft --force | |
488 | |
489 ... as does the initial mutable fold... | |
490 | |
491 $ echo y | hg phabsend --fold --confirm -r 1:: \ | |
492 > --test-vcr "$VCR/phabsend-fold-initial.json" | |
493 NEW - a959a3f69d8d: one: first commit to review | |
494 NEW - 24a4438154ba: two: second commit to review | |
495 NEW - d235829e802c: 3: a commit with no detailed message | |
496 Send the above changes to https://phab.mercurial-scm.org/ (yn)? y | |
497 D8387 - created - a959a3f69d8d: one: first commit to review | |
498 D8387 - created - 24a4438154ba: two: second commit to review | |
499 D8387 - created - d235829e802c: 3: a commit with no detailed message | |
500 updating local commit list for D8387 | |
501 new commits: ['602c4e738243', '832553266fe8', '921f8265efbd'] | |
502 saved backup bundle to $TESTTMP/folded/.hg/strip-backup/a959a3f69d8d-a4a24136-phabsend.hg | |
503 | |
504 ... and doesn't mangle the local commits. | |
505 | |
506 $ hg log -T '{rev}:{node|short}\n{indent(desc, " ")}\n' | |
507 3:921f8265efbd | |
508 3: a commit with no detailed message | |
509 | |
510 Differential Revision: https://phab.mercurial-scm.org/D8387 | |
511 2:832553266fe8 | |
512 two: second commit to review | |
513 | |
514 This file was modified with 'mod2' as its contents. | |
515 | |
516 Test Plan: | |
517 Haha! yeah, right. | |
518 | |
519 Differential Revision: https://phab.mercurial-scm.org/D8387 | |
520 1:602c4e738243 | |
521 one: first commit to review | |
522 | |
523 This file was modified with 'mod1' as its contents. | |
524 | |
525 Test Plan: | |
526 LOL! What testing?! | |
527 | |
528 Differential Revision: https://phab.mercurial-scm.org/D8387 | |
529 0:98d480e0d494 | |
530 added file | |
531 | |
532 Setup some obsmarkers by adding a file to the middle commit. This stress tests | |
533 getoldnodedrevmap() in later phabsends. | |
534 | |
535 $ hg up '.^' | |
536 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
537 $ echo 'modified' > file2.txt | |
538 $ hg add file2.txt | |
539 $ hg amend --config experimental.evolution=all --config extensions.amend= | |
540 1 new orphan changesets | |
541 $ hg up 3 | |
542 obsolete feature not enabled but 1 markers found! | |
543 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
544 $ hg rebase --config experimental.evolution=all --config extensions.rebase= | |
545 note: not rebasing 2:832553266fe8 "two: second commit to review", already in destination as 4:0124e5474c88 "two: second commit to review" (tip) | |
546 rebasing 3:921f8265efbd "3: a commit with no detailed message" | |
547 | |
548 When commits have changed locally, the local commit list on Phabricator is | |
549 updated. | |
550 | |
551 $ echo y | hg phabsend --fold --confirm -r 1:: \ | |
552 > --test-vcr "$VCR/phabsend-fold-updated.json" | |
553 obsolete feature not enabled but 2 markers found! | |
554 602c4e738243 mapped to old nodes ['602c4e738243'] | |
555 0124e5474c88 mapped to old nodes ['832553266fe8'] | |
556 e4edb1fe3565 mapped to old nodes ['921f8265efbd'] | |
557 D8387 - 602c4e738243: one: first commit to review | |
558 D8387 - 0124e5474c88: two: second commit to review | |
559 D8387 - e4edb1fe3565: 3: a commit with no detailed message | |
560 Send the above changes to https://phab.mercurial-scm.org/ (yn)? y | |
561 D8387 - updated - 602c4e738243: one: first commit to review | |
562 D8387 - updated - 0124e5474c88: two: second commit to review | |
563 D8387 - updated - e4edb1fe3565: 3: a commit with no detailed message | |
564 obsolete feature not enabled but 2 markers found! (?) | |
565 updating local commit list for D8387 | |
566 new commits: ['602c4e738243', '0124e5474c88', 'e4edb1fe3565'] | |
567 $ hg log -Tcompact | |
568 obsolete feature not enabled but 2 markers found! | |
569 5[tip] e4edb1fe3565 1970-01-01 00:00 +0000 test | |
570 3: a commit with no detailed message | |
571 | |
572 4:1 0124e5474c88 1970-01-01 00:00 +0000 test | |
573 two: second commit to review | |
574 | |
575 1 602c4e738243 1970-01-01 00:00 +0000 test | |
576 one: first commit to review | |
577 | |
578 0 98d480e0d494 1970-01-01 00:00 +0000 test | |
579 added file | |
580 | |
581 When nothing has changed locally since the last phabsend, the commit list isn't | |
582 updated, and nothing is changed locally afterward. | |
583 | |
584 $ hg phabsend --fold -r 1:: --test-vcr "$VCR/phabsend-fold-no-changes.json" | |
585 obsolete feature not enabled but 2 markers found! | |
586 602c4e738243 mapped to old nodes ['602c4e738243'] | |
587 0124e5474c88 mapped to old nodes ['0124e5474c88'] | |
588 e4edb1fe3565 mapped to old nodes ['e4edb1fe3565'] | |
589 D8387 - updated - 602c4e738243: one: first commit to review | |
590 D8387 - updated - 0124e5474c88: two: second commit to review | |
591 D8387 - updated - e4edb1fe3565: 3: a commit with no detailed message | |
592 obsolete feature not enabled but 2 markers found! (?) | |
593 local commit list for D8387 is already up-to-date | |
594 $ hg log -Tcompact | |
595 obsolete feature not enabled but 2 markers found! | |
596 5[tip] e4edb1fe3565 1970-01-01 00:00 +0000 test | |
597 3: a commit with no detailed message | |
598 | |
599 4:1 0124e5474c88 1970-01-01 00:00 +0000 test | |
600 two: second commit to review | |
601 | |
602 1 602c4e738243 1970-01-01 00:00 +0000 test | |
603 one: first commit to review | |
604 | |
605 0 98d480e0d494 1970-01-01 00:00 +0000 test | |
606 added file | |
607 | |
608 Fold will accept new revisions at the end... | |
609 | |
610 $ echo 'another mod' > file2.txt | |
611 $ hg ci -m 'four: extend the fold range' | |
612 obsolete feature not enabled but 2 markers found! | |
613 $ hg phabsend --fold -r 1:: --test-vcr "$VCR/phabsend-fold-extend-end.json" \ | |
614 > --config experimental.evolution=all | |
615 602c4e738243 mapped to old nodes ['602c4e738243'] | |
616 0124e5474c88 mapped to old nodes ['0124e5474c88'] | |
617 e4edb1fe3565 mapped to old nodes ['e4edb1fe3565'] | |
618 D8387 - updated - 602c4e738243: one: first commit to review | |
619 D8387 - updated - 0124e5474c88: two: second commit to review | |
620 D8387 - updated - e4edb1fe3565: 3: a commit with no detailed message | |
621 D8387 - created - 94aaae213b23: four: extend the fold range | |
622 updating local commit list for D8387 | |
623 new commits: ['602c4e738243', '0124e5474c88', 'e4edb1fe3565', '51a04fea8707'] | |
624 $ hg log -r . -T '{desc}\n' | |
625 four: extend the fold range | |
626 | |
627 Differential Revision: https://phab.mercurial-scm.org/D8387 | |
628 $ hg log -T'{rev} {if(phabreview, "{phabreview.url} {phabreview.id}")}\n' -r 1:: | |
629 obsolete feature not enabled but 3 markers found! | |
630 1 https://phab.mercurial-scm.org/D8387 D8387 | |
631 4 https://phab.mercurial-scm.org/D8387 D8387 | |
632 5 https://phab.mercurial-scm.org/D8387 D8387 | |
633 7 https://phab.mercurial-scm.org/D8387 D8387 | |
634 | |
635 ... and also accepts new revisions at the beginning of the range | |
636 | |
637 It's a bit unfortunate that not having a Differential URL on the first commit | |
638 causes a new Differential Revision to be created, though it isn't *entirely* | |
639 unreasonable. At least this updates the subsequent commits. | |
640 | |
641 TODO: See if it can reuse the existing Differential. | |
642 | |
643 $ hg phabsend --fold -r 0:: --test-vcr "$VCR/phabsend-fold-extend-front.json" \ | |
644 > --config experimental.evolution=all | |
645 602c4e738243 mapped to old nodes ['602c4e738243'] | |
646 0124e5474c88 mapped to old nodes ['0124e5474c88'] | |
647 e4edb1fe3565 mapped to old nodes ['e4edb1fe3565'] | |
648 51a04fea8707 mapped to old nodes ['51a04fea8707'] | |
649 D8388 - created - 98d480e0d494: added file | |
650 D8388 - updated - 602c4e738243: one: first commit to review | |
651 D8388 - updated - 0124e5474c88: two: second commit to review | |
652 D8388 - updated - e4edb1fe3565: 3: a commit with no detailed message | |
653 D8388 - updated - 51a04fea8707: four: extend the fold range | |
654 updating local commit list for D8388 | |
655 new commits: ['15e9b14b4b4c', '6320b7d714cf', '3ee132d41dbc', '30682b960804', 'ac7db67f0991'] | |
656 | |
657 $ hg log -T '{rev}:{node|short}\n{indent(desc, " ")}\n' | |
658 obsolete feature not enabled but 8 markers found! | |
659 12:ac7db67f0991 | |
660 four: extend the fold range | |
661 | |
662 Differential Revision: https://phab.mercurial-scm.org/D8388 | |
663 11:30682b960804 | |
664 3: a commit with no detailed message | |
665 | |
666 Differential Revision: https://phab.mercurial-scm.org/D8388 | |
667 10:3ee132d41dbc | |
668 two: second commit to review | |
669 | |
670 This file was modified with 'mod2' as its contents. | |
671 | |
672 Test Plan: | |
673 Haha! yeah, right. | |
674 | |
675 Differential Revision: https://phab.mercurial-scm.org/D8388 | |
676 9:6320b7d714cf | |
677 one: first commit to review | |
678 | |
679 This file was modified with 'mod1' as its contents. | |
680 | |
681 Test Plan: | |
682 LOL! What testing?! | |
683 | |
684 Differential Revision: https://phab.mercurial-scm.org/D8388 | |
685 8:15e9b14b4b4c | |
686 added file | |
687 | |
688 Differential Revision: https://phab.mercurial-scm.org/D8388 | |
689 | |
690 Test phabsend --fold with an `hg split` at the end of the range | |
691 | |
692 $ echo foo > file3.txt | |
693 $ hg add file3.txt | |
694 | |
695 $ hg log -r . -T '{desc}' > log.txt | |
696 $ echo 'amended mod' > file2.txt | |
697 $ hg ci --amend -l log.txt --config experimental.evolution=all | |
698 | |
699 $ cat <<EOF | hg --config extensions.split= --config ui.interactive=True \ | |
700 > --config experimental.evolution=all split -r . | |
701 > n | |
702 > y | |
703 > y | |
704 > y | |
705 > y | |
706 > EOF | |
707 diff --git a/file2.txt b/file2.txt | |
708 1 hunks, 1 lines changed | |
709 examine changes to 'file2.txt'? | |
710 (enter ? for help) [Ynesfdaq?] n | |
711 | |
712 diff --git a/file3.txt b/file3.txt | |
713 new file mode 100644 | |
714 examine changes to 'file3.txt'? | |
715 (enter ? for help) [Ynesfdaq?] y | |
716 | |
717 @@ -0,0 +1,1 @@ | |
718 +foo | |
719 record change 2/2 to 'file3.txt'? | |
720 (enter ? for help) [Ynesfdaq?] y | |
721 | |
722 created new head | |
723 diff --git a/file2.txt b/file2.txt | |
724 1 hunks, 1 lines changed | |
725 examine changes to 'file2.txt'? | |
726 (enter ? for help) [Ynesfdaq?] y | |
727 | |
728 @@ -1,1 +1,1 @@ | |
729 -modified | |
730 +amended mod | |
731 record this change to 'file2.txt'? | |
732 (enter ? for help) [Ynesfdaq?] y | |
733 | |
734 $ hg phabsend --fold -r 8:: --test-vcr "$VCR/phabsend-fold-split-end.json" \ | |
735 > --config experimental.evolution=all | |
736 15e9b14b4b4c mapped to old nodes ['15e9b14b4b4c'] | |
737 6320b7d714cf mapped to old nodes ['6320b7d714cf'] | |
738 3ee132d41dbc mapped to old nodes ['3ee132d41dbc'] | |
739 30682b960804 mapped to old nodes ['30682b960804'] | |
740 6bc15dc99efd mapped to old nodes ['ac7db67f0991'] | |
741 b50946d5e490 mapped to old nodes ['ac7db67f0991'] | |
742 D8388 - updated - 15e9b14b4b4c: added file | |
743 D8388 - updated - 6320b7d714cf: one: first commit to review | |
744 D8388 - updated - 3ee132d41dbc: two: second commit to review | |
745 D8388 - updated - 30682b960804: 3: a commit with no detailed message | |
746 D8388 - updated - 6bc15dc99efd: four: extend the fold range | |
747 D8388 - updated - b50946d5e490: four: extend the fold range | |
748 updating local commit list for D8388 | |
749 new commits: ['15e9b14b4b4c', '6320b7d714cf', '3ee132d41dbc', '30682b960804', '6bc15dc99efd', 'b50946d5e490'] | |
750 | |
751 Test phabsend --fold with an `hg fold` at the end of the range | |
752 | |
753 $ hg --config experimental.evolution=all --config extensions.rebase= \ | |
754 > rebase -r '.^' -r . -d '.^^' --collapse -l log.txt | |
755 rebasing 14:6bc15dc99efd "four: extend the fold range" | |
756 rebasing 15:b50946d5e490 "four: extend the fold range" (tip) | |
757 | |
758 $ hg phabsend --fold -r 8:: --test-vcr "$VCR/phabsend-fold-fold-end.json" \ | |
759 > --config experimental.evolution=all | |
760 15e9b14b4b4c mapped to old nodes ['15e9b14b4b4c'] | |
761 6320b7d714cf mapped to old nodes ['6320b7d714cf'] | |
762 3ee132d41dbc mapped to old nodes ['3ee132d41dbc'] | |
763 30682b960804 mapped to old nodes ['30682b960804'] | |
764 e919cdf3d4fe mapped to old nodes ['6bc15dc99efd', 'b50946d5e490'] | |
765 D8388 - updated - 15e9b14b4b4c: added file | |
766 D8388 - updated - 6320b7d714cf: one: first commit to review | |
767 D8388 - updated - 3ee132d41dbc: two: second commit to review | |
768 D8388 - updated - 30682b960804: 3: a commit with no detailed message | |
769 D8388 - updated - e919cdf3d4fe: four: extend the fold range | |
770 updating local commit list for D8388 | |
771 new commits: ['15e9b14b4b4c', '6320b7d714cf', '3ee132d41dbc', '30682b960804', 'e919cdf3d4fe'] | |
772 | |
773 $ hg log -r tip -v | |
774 obsolete feature not enabled but 12 markers found! | |
775 changeset: 16:e919cdf3d4fe | |
776 tag: tip | |
777 parent: 11:30682b960804 | |
778 user: test | |
779 date: Thu Jan 01 00:00:00 1970 +0000 | |
780 files: file2.txt file3.txt | |
781 description: | |
782 four: extend the fold range | |
783 | |
784 Differential Revision: https://phab.mercurial-scm.org/D8388 | |
785 | |
786 | |
787 | |
419 $ cd .. | 788 $ cd .. |