mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-22 06:42:41 +01:00
Dirty cache of HEAD commit after an amend/range reload
Summary: Introducing `--head` caused us to run `git diff base..head` explicitly. However, we can now hit this workflow: - We resolve `HEAD` as commit `aaaa1`. - This is cached. - We notice dirty working copy changes and prompt the user to amend them to HEAD. - The user accepts the amend. - We amend, creating commit `bbbb2`. - We dirty the commit range and reload the working copy. This //does not// dirty the cache of HEAD. - We run `git diff`, but it uses the old cached HEAD: `git diff base..aaaa1`. - This works fine (`aaaa1` still exists, it's just not on any branch) but produces the wrong diff (without amended changes). To resolve this, implement the "dirty the cache when the range reloads" hook. Also never try to amend if the user provides `--head`. Test Plan: Ran `arc diff --only --trace` in a working copy with a new commit and some uncommitted changes. - Prior to this change, saw a `git diff base..aaaa1` command and the wrong diff. - After this change, saw a `git diff base..bbbb2` command and the correct diff. Reviewers: chad, csilvers, talshiri Reviewed By: talshiri Subscribers: epriestley, spicyj Differential Revision: https://secure.phabricator.com/D9506
This commit is contained in:
parent
9492b4ecba
commit
dfe2bde88d
2 changed files with 9 additions and 0 deletions
|
@ -1202,4 +1202,9 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
$this->execxLocal('stash pop');
|
$this->execxLocal('stash pop');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function didReloadCommitRange() {
|
||||||
|
// After an amend, the symbolic head may resolve to a different commit.
|
||||||
|
$this->resolvedHeadCommit = null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1207,6 +1207,10 @@ EOTEXT
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->getArgument('head') !== null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Run this last: with --raw or --raw-command, we won't have a repository
|
// Run this last: with --raw or --raw-command, we won't have a repository
|
||||||
// API.
|
// API.
|
||||||
if ($this->isHistoryImmutable()) {
|
if ($this->isHistoryImmutable()) {
|
||||||
|
|
Loading…
Reference in a new issue