Allow to amend a commit with CommitCommand
Bug: 339088 Change-Id: I57dc727688c4bb6968ac076b176661c857c05afa Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
This commit is contained in:
parent
440d7f4127
commit
cda64073fd
|
@ -238,4 +238,21 @@ public void testCommitRange() throws NoHeadException, NoMessageException,
|
||||||
}
|
}
|
||||||
assertEquals(l, -1);
|
assertEquals(l, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCommitAmend() throws NoHeadException, NoMessageException,
|
||||||
|
UnmergedPathException, ConcurrentRefUpdateException,
|
||||||
|
JGitInternalException, WrongRepositoryStateException {
|
||||||
|
Git git = new Git(db);
|
||||||
|
git.commit().setMessage("first comit").call(); // typo
|
||||||
|
git.commit().setAmend(true).setMessage("first commit").call();
|
||||||
|
|
||||||
|
Iterable<RevCommit> commits = git.log().call();
|
||||||
|
int c = 0;
|
||||||
|
for (RevCommit commit : commits) {
|
||||||
|
assertEquals("first commit", commit.getFullMessage());
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
assertEquals(1, c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,6 +87,8 @@ public class CommitCommand extends GitCommand<RevCommit> {
|
||||||
|
|
||||||
private boolean all;
|
private boolean all;
|
||||||
|
|
||||||
|
private boolean amend;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parents this commit should have. The current HEAD will be in this list
|
* parents this commit should have. The current HEAD will be in this list
|
||||||
* and also all commits mentioned in .git/MERGE_HEAD
|
* and also all commits mentioned in .git/MERGE_HEAD
|
||||||
|
@ -155,7 +157,15 @@ public RevCommit call() throws NoHeadException, NoMessageException,
|
||||||
// determine the current HEAD and the commit it is referring to
|
// determine the current HEAD and the commit it is referring to
|
||||||
ObjectId headId = repo.resolve(Constants.HEAD + "^{commit}");
|
ObjectId headId = repo.resolve(Constants.HEAD + "^{commit}");
|
||||||
if (headId != null)
|
if (headId != null)
|
||||||
parents.add(0, headId);
|
if (amend) {
|
||||||
|
RevCommit previousCommit = new RevWalk(repo)
|
||||||
|
.parseCommit(headId);
|
||||||
|
RevCommit[] p = previousCommit.getParents();
|
||||||
|
for (int i = 0; i < p.length; i++)
|
||||||
|
parents.add(0, p[i].getId());
|
||||||
|
} else {
|
||||||
|
parents.add(0, headId);
|
||||||
|
}
|
||||||
|
|
||||||
// lock the index
|
// lock the index
|
||||||
DirCache index = repo.lockDirCache();
|
DirCache index = repo.lockDirCache();
|
||||||
|
@ -187,9 +197,10 @@ public RevCommit call() throws NoHeadException, NoMessageException,
|
||||||
+ revCommit.getShortMessage(), false);
|
+ revCommit.getShortMessage(), false);
|
||||||
|
|
||||||
ru.setExpectedOldObjectId(headId);
|
ru.setExpectedOldObjectId(headId);
|
||||||
Result rc = ru.update();
|
Result rc = ru.forceUpdate();
|
||||||
switch (rc) {
|
switch (rc) {
|
||||||
case NEW:
|
case NEW:
|
||||||
|
case FORCED:
|
||||||
case FAST_FORWARD: {
|
case FAST_FORWARD: {
|
||||||
setCallable(false);
|
setCallable(false);
|
||||||
if (state == RepositoryState.MERGING_RESOLVED) {
|
if (state == RepositoryState.MERGING_RESOLVED) {
|
||||||
|
@ -387,4 +398,17 @@ public CommitCommand setAll(boolean all) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to amend the tip of the current branch. If set to true, the previous
|
||||||
|
* commit will be amended. This is equivalent to --amend on the command
|
||||||
|
* line.
|
||||||
|
*
|
||||||
|
* @param amend
|
||||||
|
* @return {@code this}
|
||||||
|
*/
|
||||||
|
public CommitCommand setAmend(boolean amend) {
|
||||||
|
this.amend = amend;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue