HomePhabricator

Update "arc diff" to amend non-head commits with Mercurial

Description

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:

  1. Rebasing the current commit onto the current commit's parent, using the new commit message
  2. Rebasing all children + descendants of the current commit onto the new resulting commit
  3. Stripping the original commit

With evolve:

  1. Amend the commit with hg amend --logfile
  2. 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:

  1. I verified I did not have evolve enabled by running hg debugextensions and did not see evolve in the listed active extensions.
  2. I updated to bookmark1 and modified a file to leave a dirty working state.
  3. I ran arc diff and when prompted to amend my changes I said "yes", and verified a phab revision was created properly.
  4. I checked the status of my repository and verified it was still linear and the bookmarks pointed to the proper commits.
  5. I ran hg log -r bookmark1 --template {desc} to view the full commit message and verified it contained both Summary: ... and Differential Revision: https://....
  6. 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:

  1. I updated to bookmark3 which is the head commit and modified a file to leave a dirty working state.
  2. I ran arc diff and when prompted to amend my changes I said "yes", and verified a phab revision was created properly.
  3. I checked the status of my repository and verified it was still linear and all the bookmarks pointed to the proper commits.
  4. I ran hg log -r bookmark3 --template {desc} to view the full commit message and verified it contained both Summary: ... and Differential Revision: https://....
  5. I ran hg diff -c bookmar3 and verified the changes for that commit included the changes I made in step 1.

With evolve:

  1. I enabled evolve and verified it was enabled by running hg debugextensions and saw evolve in the listed active extensions.
  2. I updated to bookmark2 and modified a file to leave a dirty working state.
  3. I ran arc diff and when prompted to amend my changes I said "yes", and verified a phab revision was created properly.
  4. I checked the status of my repository and verified it was still linear and all the bookmarks pointed to the proper commits.
  5. I ran hg log -r bookmark2 --template {desc} to view the full commit message and verfieid it contained both Summary: ... and Differential Revision: https://....
  6. 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

Details

Provenance
cspeckmimAuthored on Jul 15 2021, 4:14 AM
cspeckmimPushed on Jul 20 2021, 8:55 PM
Reviewer
Blessed Reviewers
Differential Revision
D21686: Update "arc diff" to amend non-head commits with Mercurial
Parents
rARCa43a3a9aabe2: An assortment of fixes and updates to using arc-land with mercurial
Branches
Unknown
Tags
Unknown
Build Status
Buildable 25476
Build 35219: Run Core Tests