瀏覽代碼

Set person and message on stash ref update

This will be the message and person used for the commit
of stashed working directory changes.

Bug: 372884
Change-Id: I2501b080f6b94e826cf7dba3fd526ae5c1d969d1
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
tags/v2.0.0.201206130900-r
Kevin Sawicki 12 年之前
父節點
當前提交
9e4b4fc41c

+ 23
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashCreateCommandTest.java 查看文件



import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RepositoryTestCase; import org.eclipse.jgit.lib.RepositoryTestCase;
import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.storage.file.ReflogEntry;
import org.eclipse.jgit.storage.file.ReflogReader;
import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.TreeWalk;
import org.eclipse.jgit.treewalk.filter.TreeFilter; import org.eclipse.jgit.treewalk.filter.TreeFilter;
import org.eclipse.jgit.util.FileUtils; import org.eclipse.jgit.util.FileUtils;
assertEquals(DiffEntry.ChangeType.ADD, diffs.get(1).getChangeType()); assertEquals(DiffEntry.ChangeType.ADD, diffs.get(1).getChangeType());
assertEquals("file2.txt", diffs.get(1).getNewPath()); assertEquals("file2.txt", diffs.get(1).getNewPath());
} }

@Test
public void refLogIncludesCommitMessage() throws Exception {
PersonIdent who = new PersonIdent("user", "user@email.com");
deleteTrashFile("file.txt");
RevCommit stashed = git.stashCreate().setPerson(who).call();
assertNotNull(stashed);
assertEquals("content", read(committedFile));
validateStashedCommit(stashed);

ReflogReader reader = new ReflogReader(git.getRepository(),
Constants.R_STASH);
ReflogEntry entry = reader.getLastEntry();
assertNotNull(entry);
assertEquals(ObjectId.zeroId(), entry.getOldId());
assertEquals(stashed, entry.getNewId());
assertEquals(who, entry.getWho());
assertEquals(stashed.getFullMessage(), entry.getComment());
}
} }

+ 6
- 2
org.eclipse.jgit/src/org/eclipse/jgit/api/StashCreateCommand.java 查看文件

return builder; return builder;
} }


private void updateStashRef(ObjectId commitId) throws IOException {
private void updateStashRef(ObjectId commitId, PersonIdent refLogIdent,
String refLogMessage) throws IOException {
Ref currentRef = repo.getRef(ref); Ref currentRef = repo.getRef(ref);
RefUpdate refUpdate = repo.updateRef(ref); RefUpdate refUpdate = repo.updateRef(ref);
refUpdate.setNewObjectId(commitId); refUpdate.setNewObjectId(commitId);
refUpdate.setRefLogIdent(refLogIdent);
refUpdate.setRefLogMessage(refLogMessage, false);
if (currentRef != null) if (currentRef != null)
refUpdate.setExpectedOldObjectId(currentRef.getObjectId()); refUpdate.setExpectedOldObjectId(currentRef.getObjectId());
else else
commitId = inserter.insert(builder); commitId = inserter.insert(builder);
inserter.flush(); inserter.flush();


updateStashRef(commitId);
updateStashRef(commitId, builder.getAuthor(),
builder.getMessage());
} finally { } finally {
inserter.release(); inserter.release();
cache.unlock(); cache.unlock();

Loading…
取消
儲存