An assortment of fixes and updates to using arc-land with mercurial
Summary:
Refs T13546
Behavior Changes
- Currently, after landing the --onto bookmark will not be advanced to the newly pushed commit(s)
- This updates so that after pushing commits upstream, onto-marker bookmarks are pulled back from the server to retrieve their updated state
- Currently, after landing the working directory will typically be the old --onto commit
- This updates the behavior in the following ways
- If the starting working state is a commit that is part of a revision being landed, the post-land state will be the newly published commit for that revision
- If the starting working state is a commit for a tip revision being landed and there is only a single --onto target, the post-land state will be the newly published commit and the --onto bookmark will be activated, if applicable. If there are multiple --onto targets defined (uncommon) then the resulting working state will be the same behavior as before, as the desired behavior for this case is ambiguous.
- If the starting working state is a commit that is not part of any revision being landed, then the post-land state will be that same commit, activating the same previous bookmark if applicable.
- This updates the behavior in the following ways
Bugs Fixed
- When landing a diff that includes multiple commits, where the non-tip commit adds a file and later commit modifies that file, the land process would fail during rebasing.
- When landing, the display of what commits are going to be landed only includes the commit hash but should include part of the commit message for easy identification.
- If errors occur during a rebase while landing, the resulting state is an in-progress rebase. Users will typically not be able to resolve this in-progress rebase and possibly confuse them further as they have to first abort the rebase before trying to clean up. These rebases will now be aborted by arcanist before exiting.
- If using evolve, landing a non-tip revision would leave behind orphaned commits.
Test Plan:
Bookmark test
- I created a diff with bookmark test, as a branch from before the master commit
- I updated working state to activate test
- I landed that diff
- I verified that the resulting working state was on the newly published master commit
Non-bookmark test
- I created a diff with bookmark test, as a branch from before the master commit
- I updated working state to be the new commit, but not activate test even though it points to that same commit
- I landed that diff
- I verified that the resulting working state was on the newly published master commit
Not-working state test
- I created a diff with bookmark test, as a branch from before the master commit
- I updated working state to an older commit not related to the one being landed
- I landed that diff
- I verified the ending resulting working state was on the older commit I was on prior to landing
Multiple commits test
- Using test bookmark I created a commit that added a new file, made a diff, made another new commit on top of it which modified that file, then updated the diff
- I updated my working state to the first commit for the diff (non-head)
- I ran arc land test to land the diff
- I verified that the resulting working state was on the newly published master commit
Landing while on master
- I created a diff with a bookmark test, as a branch from before the master commit
- I updated working state to the master bookmark
- I landed that diff
- I verified that the resulting working state was on the newly published master commit
Landing with no local master bookmark
- I created a diff consisting of two commits with bookmark test, as a branch from before the master commit
- I left working state on test and deleted my local master bookmark
- I landed that diff
- I verified that the resulting working state was on the newly published master commit and the master bookmark was pulled and active
Cascading diffs while on an earlier diff changeset
- I setup two diffs, each consisting of two commits, one depending on the other
- I put the working state onto a commit from the earlier diff
- I landed the later diff
- I verified that the resulting working state was on the newly published commit associated with the earlier diff, which is not the new master commit so there was no active bookmark
Cascading diffs while on the later diff changeset
- I setup two diffs, each consisting of two commits, one depending on the other
- I put the working state into a commit from the later diff
- I landed the later diff
- I verified that the resulting working state was on the newly published commit for the later diff which was master and master was active
Landing a non-tip revision, with evolve
- I setup three diffs, each consisting of two commits, creating a dependency chain
- I verified I had the evolve extension enabled via hg debugextensions
- I put the working state on a commit in the first revision
- I landed the second revision
- I verified that the resulting working state was clean, that revisions 1 and 2 were properly landed and published, and the resulting working state was on the published commit for the first revision.
Landing a non-tip revision, without evolve
- I setup three diffs, each consisting of two commits, creating a dependency chain
- I verified I did not have the evolve extension enabled via hg debugextensions
- I put the working state on a commit in the first revision
- I landed the second revision
- I verified that the resulting working state was clean, that revisions 1 and 2 were properly landed and published, and the resulting working state was on the published commit for the first revision.
Landing a non-tip revision, while the non-landing revision is active
- I setup three diffs, each consisting of two commits, creating a dependency chain
- I put the working state on the latest tip revision commit and its bookmark
- I landed the second revision
- I verified that revisions 1 and 2 were properly landed and published, and the resulting working state was still on the latest tip revision commit and its bookmark was active.
Reviewers: #blessed_reviewers, epriestley
Reviewed By: #blessed_reviewers, epriestley
Subscribers: Korvin, epriestley
Maniphest Tasks: T13546
Differential Revision: https://secure.phabricator.com/D21680