Update "arc diff" to amend non-head commits with Mercurial
Summary:
After arc diff creates a revision in Phabricator it amends the commit to include a link to the revision in the commit message. For Mercurial this is done with hg commit --amend --logfile however this will fail when trying to create a diff for a non-head commit.
This updates ArcanistMercurialAPI::amendCommit() to allow amending a non-head commit in two ways, depending on whether evolve is in use:
No evolve:
- Rebasing the current commit onto the current commit's parent, using the new commit message
- Rebasing all children + descendants of the current commit onto the new resulting commit
- Stripping the original commit
With evolve:
- Amend the commit with hg amend --logfile
- Run hg evolve to tidy up all commits
Test Plan:
I created 6 commits in a row placing a bookmark at commits 2 bookmark1, 4 bookmark2, and 6 bookmark3, and ensured I had arc:bookmark in my base ruleset.
No evolve, non-head changeset:
- I verified I did not have evolve enabled by running hg debugextensions and did not see evolve in the listed active extensions.
- I updated to bookmark1 and modified a file to leave a dirty working state.
- I ran arc diff and when prompted to amend my changes I said "yes", and verified a phab revision was created properly.
- I checked the status of my repository and verified it was still linear and the bookmarks pointed to the proper commits.
- I ran hg log -r bookmark1 --template {desc} to view the full commit message and verified it contained both Summary: ... and Differential Revision: https://....
- I ran hg diff -c bookmark1 and verified the changes for that commit included the changes I made in step 2.
No evolve, head changeset:
- I updated to bookmark3 which is the head commit and modified a file to leave a dirty working state.
- I ran arc diff and when prompted to amend my changes I said "yes", and verified a phab revision was created properly.
- I checked the status of my repository and verified it was still linear and all the bookmarks pointed to the proper commits.
- I ran hg log -r bookmark3 --template {desc} to view the full commit message and verified it contained both Summary: ... and Differential Revision: https://....
- I ran hg diff -c bookmar3 and verified the changes for that commit included the changes I made in step 1.
With evolve:
- I enabled evolve and verified it was enabled by running hg debugextensions and saw evolve in the listed active extensions.
- I updated to bookmark2 and modified a file to leave a dirty working state.
- I ran arc diff and when prompted to amend my changes I said "yes", and verified a phab revision was created properly.
- I checked the status of my repository and verified it was still linear and all the bookmarks pointed to the proper commits.
- I ran hg log -r bookmark2 --template {desc} to view the full commit message and verfieid it contained both Summary: ... and Differential Revision: https://....
- I ran hg diff -c bookmark2 and verified the changes for that commit included the changes I made in step 2.
Reviewers: Blessed Reviewers, epriestley
Reviewed By: Blessed Reviewers, epriestley
Subscribers: Korvin, epriestley
Differential Revision: https://secure.phabricator.com/D21686