diff options
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java index 3ec09d42f1..8ebee49673 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java @@ -87,6 +87,8 @@ public class CommitCommand extends GitCommand<RevCommit> { private boolean all; + private boolean amend; + /** * parents this commit should have. The current HEAD will be in this list * and also all commits mentioned in .git/MERGE_HEAD @@ -155,7 +157,15 @@ public class CommitCommand extends GitCommand<RevCommit> { // determine the current HEAD and the commit it is referring to ObjectId headId = repo.resolve(Constants.HEAD + "^{commit}"); 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 DirCache index = repo.lockDirCache(); @@ -187,9 +197,10 @@ public class CommitCommand extends GitCommand<RevCommit> { + revCommit.getShortMessage(), false); ru.setExpectedOldObjectId(headId); - Result rc = ru.update(); + Result rc = ru.forceUpdate(); switch (rc) { case NEW: + case FORCED: case FAST_FORWARD: { setCallable(false); if (state == RepositoryState.MERGING_RESOLVED) { @@ -387,4 +398,17 @@ public class CommitCommand extends GitCommand<RevCommit> { 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; + } + } |