|
|
@@ -78,96 +78,96 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { |
|
|
|
GitAPIException { |
|
|
|
|
|
|
|
// do 4 commits |
|
|
|
Git git = new Git(db); |
|
|
|
git.commit().setMessage("initial commit").call(); |
|
|
|
git.commit().setMessage("second commit").setCommitter(committer).call(); |
|
|
|
git.commit().setMessage("third commit").setAuthor(author).call(); |
|
|
|
git.commit().setMessage("fourth commit").setAuthor(author) |
|
|
|
.setCommitter(committer).call(); |
|
|
|
Iterable<RevCommit> commits = git.log().call(); |
|
|
|
|
|
|
|
// check that all commits came in correctly |
|
|
|
PersonIdent defaultCommitter = new PersonIdent(db); |
|
|
|
PersonIdent expectedAuthors[] = new PersonIdent[] { defaultCommitter, |
|
|
|
committer, author, author }; |
|
|
|
PersonIdent expectedCommitters[] = new PersonIdent[] { |
|
|
|
defaultCommitter, committer, defaultCommitter, committer }; |
|
|
|
String expectedMessages[] = new String[] { "initial commit", |
|
|
|
"second commit", "third commit", "fourth commit" }; |
|
|
|
int l = expectedAuthors.length - 1; |
|
|
|
for (RevCommit c : commits) { |
|
|
|
assertEquals(expectedAuthors[l].getName(), c.getAuthorIdent() |
|
|
|
.getName()); |
|
|
|
assertEquals(expectedCommitters[l].getName(), c.getCommitterIdent() |
|
|
|
.getName()); |
|
|
|
assertEquals(c.getFullMessage(), expectedMessages[l]); |
|
|
|
l--; |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
git.commit().setMessage("initial commit").call(); |
|
|
|
git.commit().setMessage("second commit").setCommitter(committer).call(); |
|
|
|
git.commit().setMessage("third commit").setAuthor(author).call(); |
|
|
|
git.commit().setMessage("fourth commit").setAuthor(author) |
|
|
|
.setCommitter(committer).call(); |
|
|
|
Iterable<RevCommit> commits = git.log().call(); |
|
|
|
|
|
|
|
// check that all commits came in correctly |
|
|
|
PersonIdent defaultCommitter = new PersonIdent(db); |
|
|
|
PersonIdent expectedAuthors[] = new PersonIdent[] { defaultCommitter, |
|
|
|
committer, author, author }; |
|
|
|
PersonIdent expectedCommitters[] = new PersonIdent[] { |
|
|
|
defaultCommitter, committer, defaultCommitter, committer }; |
|
|
|
String expectedMessages[] = new String[] { "initial commit", |
|
|
|
"second commit", "third commit", "fourth commit" }; |
|
|
|
int l = expectedAuthors.length - 1; |
|
|
|
for (RevCommit c : commits) { |
|
|
|
assertEquals(expectedAuthors[l].getName(), c.getAuthorIdent() |
|
|
|
.getName()); |
|
|
|
assertEquals(expectedCommitters[l].getName(), c.getCommitterIdent() |
|
|
|
.getName()); |
|
|
|
assertEquals(c.getFullMessage(), expectedMessages[l]); |
|
|
|
l--; |
|
|
|
} |
|
|
|
assertEquals(l, -1); |
|
|
|
ReflogReader reader = db.getReflogReader(Constants.HEAD); |
|
|
|
assertTrue(reader.getLastEntry().getComment().startsWith("commit:")); |
|
|
|
reader = db.getReflogReader(db.getBranch()); |
|
|
|
assertTrue(reader.getLastEntry().getComment().startsWith("commit:")); |
|
|
|
} |
|
|
|
assertEquals(l, -1); |
|
|
|
ReflogReader reader = db.getReflogReader(Constants.HEAD); |
|
|
|
assertTrue(reader.getLastEntry().getComment().startsWith("commit:")); |
|
|
|
reader = db.getReflogReader(db.getBranch()); |
|
|
|
assertTrue(reader.getLastEntry().getComment().startsWith("commit:")); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testLogWithFilter() throws IOException, JGitInternalException, |
|
|
|
GitAPIException { |
|
|
|
|
|
|
|
Git git = new Git(db); |
|
|
|
|
|
|
|
// create first file |
|
|
|
File file = new File(db.getWorkTree(), "a.txt"); |
|
|
|
FileUtils.createNewFile(file); |
|
|
|
PrintWriter writer = new PrintWriter(file); |
|
|
|
writer.print("content1"); |
|
|
|
writer.close(); |
|
|
|
|
|
|
|
// First commit - a.txt file |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
git.commit().setMessage("commit1").setCommitter(committer).call(); |
|
|
|
|
|
|
|
// create second file |
|
|
|
file = new File(db.getWorkTree(), "b.txt"); |
|
|
|
FileUtils.createNewFile(file); |
|
|
|
writer = new PrintWriter(file); |
|
|
|
writer.print("content2"); |
|
|
|
writer.close(); |
|
|
|
|
|
|
|
// Second commit - b.txt file |
|
|
|
git.add().addFilepattern("b.txt").call(); |
|
|
|
git.commit().setMessage("commit2").setCommitter(committer).call(); |
|
|
|
|
|
|
|
// First log - a.txt filter |
|
|
|
int count = 0; |
|
|
|
for (RevCommit c : git.log().addPath("a.txt").call()) { |
|
|
|
assertEquals("commit1", c.getFullMessage()); |
|
|
|
count++; |
|
|
|
} |
|
|
|
assertEquals(1, count); |
|
|
|
|
|
|
|
// Second log - b.txt filter |
|
|
|
count = 0; |
|
|
|
for (RevCommit c : git.log().addPath("b.txt").call()) { |
|
|
|
assertEquals("commit2", c.getFullMessage()); |
|
|
|
count++; |
|
|
|
} |
|
|
|
assertEquals(1, count); |
|
|
|
|
|
|
|
// Third log - without filter |
|
|
|
count = 0; |
|
|
|
for (RevCommit c : git.log().call()) { |
|
|
|
assertEquals(committer, c.getCommitterIdent()); |
|
|
|
count++; |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
// create first file |
|
|
|
File file = new File(db.getWorkTree(), "a.txt"); |
|
|
|
FileUtils.createNewFile(file); |
|
|
|
PrintWriter writer = new PrintWriter(file); |
|
|
|
writer.print("content1"); |
|
|
|
writer.close(); |
|
|
|
|
|
|
|
// First commit - a.txt file |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
git.commit().setMessage("commit1").setCommitter(committer).call(); |
|
|
|
|
|
|
|
// create second file |
|
|
|
file = new File(db.getWorkTree(), "b.txt"); |
|
|
|
FileUtils.createNewFile(file); |
|
|
|
writer = new PrintWriter(file); |
|
|
|
writer.print("content2"); |
|
|
|
writer.close(); |
|
|
|
|
|
|
|
// Second commit - b.txt file |
|
|
|
git.add().addFilepattern("b.txt").call(); |
|
|
|
git.commit().setMessage("commit2").setCommitter(committer).call(); |
|
|
|
|
|
|
|
// First log - a.txt filter |
|
|
|
int count = 0; |
|
|
|
for (RevCommit c : git.log().addPath("a.txt").call()) { |
|
|
|
assertEquals("commit1", c.getFullMessage()); |
|
|
|
count++; |
|
|
|
} |
|
|
|
assertEquals(1, count); |
|
|
|
|
|
|
|
// Second log - b.txt filter |
|
|
|
count = 0; |
|
|
|
for (RevCommit c : git.log().addPath("b.txt").call()) { |
|
|
|
assertEquals("commit2", c.getFullMessage()); |
|
|
|
count++; |
|
|
|
} |
|
|
|
assertEquals(1, count); |
|
|
|
|
|
|
|
// Third log - without filter |
|
|
|
count = 0; |
|
|
|
for (RevCommit c : git.log().call()) { |
|
|
|
assertEquals(committer, c.getCommitterIdent()); |
|
|
|
count++; |
|
|
|
} |
|
|
|
assertEquals(2, count); |
|
|
|
} |
|
|
|
assertEquals(2, count); |
|
|
|
} |
|
|
|
|
|
|
|
// try to do a commit without specifying a message. Should fail! |
|
|
|
@Test |
|
|
|
public void testWrongParams() throws GitAPIException { |
|
|
|
Git git = new Git(db); |
|
|
|
try { |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
git.commit().setAuthor(author).call(); |
|
|
|
fail("Didn't get the expected exception"); |
|
|
|
} catch (NoMessageException e) { |
|
|
@@ -179,48 +179,50 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { |
|
|
|
// exceptions |
|
|
|
@Test |
|
|
|
public void testMultipleInvocations() throws GitAPIException { |
|
|
|
Git git = new Git(db); |
|
|
|
CommitCommand commitCmd = git.commit(); |
|
|
|
commitCmd.setMessage("initial commit").call(); |
|
|
|
try { |
|
|
|
// check that setters can't be called after invocation |
|
|
|
commitCmd.setAuthor(author); |
|
|
|
fail("didn't catch the expected exception"); |
|
|
|
} catch (IllegalStateException e) { |
|
|
|
// expected |
|
|
|
} |
|
|
|
LogCommand logCmd = git.log(); |
|
|
|
logCmd.call(); |
|
|
|
try { |
|
|
|
// check that call can't be called twice |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
CommitCommand commitCmd = git.commit(); |
|
|
|
commitCmd.setMessage("initial commit").call(); |
|
|
|
try { |
|
|
|
// check that setters can't be called after invocation |
|
|
|
commitCmd.setAuthor(author); |
|
|
|
fail("didn't catch the expected exception"); |
|
|
|
} catch (IllegalStateException e) { |
|
|
|
// expected |
|
|
|
} |
|
|
|
LogCommand logCmd = git.log(); |
|
|
|
logCmd.call(); |
|
|
|
fail("didn't catch the expected exception"); |
|
|
|
} catch (IllegalStateException e) { |
|
|
|
// expected |
|
|
|
try { |
|
|
|
// check that call can't be called twice |
|
|
|
logCmd.call(); |
|
|
|
fail("didn't catch the expected exception"); |
|
|
|
} catch (IllegalStateException e) { |
|
|
|
// expected |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testMergeEmptyBranches() throws IOException, |
|
|
|
JGitInternalException, GitAPIException { |
|
|
|
Git git = new Git(db); |
|
|
|
git.commit().setMessage("initial commit").call(); |
|
|
|
RefUpdate r = db.updateRef("refs/heads/side"); |
|
|
|
r.setNewObjectId(db.resolve(Constants.HEAD)); |
|
|
|
assertEquals(r.forceUpdate(), RefUpdate.Result.NEW); |
|
|
|
RevCommit second = git.commit().setMessage("second commit").setCommitter(committer).call(); |
|
|
|
db.updateRef(Constants.HEAD).link("refs/heads/side"); |
|
|
|
RevCommit firstSide = git.commit().setMessage("first side commit").setAuthor(author).call(); |
|
|
|
|
|
|
|
write(new File(db.getDirectory(), Constants.MERGE_HEAD), ObjectId |
|
|
|
.toString(db.resolve("refs/heads/master"))); |
|
|
|
write(new File(db.getDirectory(), Constants.MERGE_MSG), "merging"); |
|
|
|
|
|
|
|
RevCommit commit = git.commit().call(); |
|
|
|
RevCommit[] parents = commit.getParents(); |
|
|
|
assertEquals(parents[0], firstSide); |
|
|
|
assertEquals(parents[1], second); |
|
|
|
assertEquals(2, parents.length); |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
git.commit().setMessage("initial commit").call(); |
|
|
|
RefUpdate r = db.updateRef("refs/heads/side"); |
|
|
|
r.setNewObjectId(db.resolve(Constants.HEAD)); |
|
|
|
assertEquals(r.forceUpdate(), RefUpdate.Result.NEW); |
|
|
|
RevCommit second = git.commit().setMessage("second commit").setCommitter(committer).call(); |
|
|
|
db.updateRef(Constants.HEAD).link("refs/heads/side"); |
|
|
|
RevCommit firstSide = git.commit().setMessage("first side commit").setAuthor(author).call(); |
|
|
|
|
|
|
|
write(new File(db.getDirectory(), Constants.MERGE_HEAD), ObjectId |
|
|
|
.toString(db.resolve("refs/heads/master"))); |
|
|
|
write(new File(db.getDirectory(), Constants.MERGE_MSG), "merging"); |
|
|
|
|
|
|
|
RevCommit commit = git.commit().call(); |
|
|
|
RevCommit[] parents = commit.getParents(); |
|
|
|
assertEquals(parents[0], firstSide); |
|
|
|
assertEquals(parents[1], second); |
|
|
|
assertEquals(2, parents.length); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
@@ -232,56 +234,57 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { |
|
|
|
writer.print("content"); |
|
|
|
writer.close(); |
|
|
|
|
|
|
|
Git git = new Git(db); |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
RevCommit commit = git.commit().setMessage("initial commit").call(); |
|
|
|
TreeWalk tw = TreeWalk.forPath(db, "a.txt", commit.getTree()); |
|
|
|
assertEquals("6b584e8ece562ebffc15d38808cd6b98fc3d97ea", |
|
|
|
tw.getObjectId(0).getName()); |
|
|
|
|
|
|
|
writer = new PrintWriter(file); |
|
|
|
writer.print("content2"); |
|
|
|
writer.close(); |
|
|
|
commit = git.commit().setMessage("second commit").call(); |
|
|
|
tw = TreeWalk.forPath(db, "a.txt", commit.getTree()); |
|
|
|
assertEquals("6b584e8ece562ebffc15d38808cd6b98fc3d97ea", |
|
|
|
tw.getObjectId(0).getName()); |
|
|
|
|
|
|
|
commit = git.commit().setAll(true).setMessage("third commit") |
|
|
|
.setAll(true).call(); |
|
|
|
tw = TreeWalk.forPath(db, "a.txt", commit.getTree()); |
|
|
|
assertEquals("db00fd65b218578127ea51f3dffac701f12f486a", |
|
|
|
tw.getObjectId(0).getName()); |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
RevCommit commit = git.commit().setMessage("initial commit").call(); |
|
|
|
TreeWalk tw = TreeWalk.forPath(db, "a.txt", commit.getTree()); |
|
|
|
assertEquals("6b584e8ece562ebffc15d38808cd6b98fc3d97ea", |
|
|
|
tw.getObjectId(0).getName()); |
|
|
|
|
|
|
|
writer = new PrintWriter(file); |
|
|
|
writer.print("content2"); |
|
|
|
writer.close(); |
|
|
|
commit = git.commit().setMessage("second commit").call(); |
|
|
|
tw = TreeWalk.forPath(db, "a.txt", commit.getTree()); |
|
|
|
assertEquals("6b584e8ece562ebffc15d38808cd6b98fc3d97ea", |
|
|
|
tw.getObjectId(0).getName()); |
|
|
|
|
|
|
|
commit = git.commit().setAll(true).setMessage("third commit") |
|
|
|
.setAll(true).call(); |
|
|
|
tw = TreeWalk.forPath(db, "a.txt", commit.getTree()); |
|
|
|
assertEquals("db00fd65b218578127ea51f3dffac701f12f486a", |
|
|
|
tw.getObjectId(0).getName()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testModeChange() throws IOException, GitAPIException { |
|
|
|
if (System.getProperty("os.name").startsWith("Windows")) |
|
|
|
return; // SKIP |
|
|
|
Git git = new Git(db); |
|
|
|
|
|
|
|
// create file |
|
|
|
File file = new File(db.getWorkTree(), "a.txt"); |
|
|
|
FileUtils.createNewFile(file); |
|
|
|
PrintWriter writer = new PrintWriter(file); |
|
|
|
writer.print("content1"); |
|
|
|
writer.close(); |
|
|
|
|
|
|
|
// First commit - a.txt file |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
git.commit().setMessage("commit1").setCommitter(committer).call(); |
|
|
|
|
|
|
|
// pure mode change should be committable |
|
|
|
FS fs = db.getFS(); |
|
|
|
fs.setExecute(file, true); |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
git.commit().setMessage("mode change").setCommitter(committer).call(); |
|
|
|
|
|
|
|
// pure mode change should be committable with -o option |
|
|
|
fs.setExecute(file, false); |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
git.commit().setMessage("mode change").setCommitter(committer) |
|
|
|
.setOnly("a.txt").call(); |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
// create file |
|
|
|
File file = new File(db.getWorkTree(), "a.txt"); |
|
|
|
FileUtils.createNewFile(file); |
|
|
|
PrintWriter writer = new PrintWriter(file); |
|
|
|
writer.print("content1"); |
|
|
|
writer.close(); |
|
|
|
|
|
|
|
// First commit - a.txt file |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
git.commit().setMessage("commit1").setCommitter(committer).call(); |
|
|
|
|
|
|
|
// pure mode change should be committable |
|
|
|
FS fs = db.getFS(); |
|
|
|
fs.setExecute(file, true); |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
git.commit().setMessage("mode change").setCommitter(committer).call(); |
|
|
|
|
|
|
|
// pure mode change should be committable with -o option |
|
|
|
fs.setExecute(file, false); |
|
|
|
git.add().addFilepattern("a.txt").call(); |
|
|
|
git.commit().setMessage("mode change").setCommitter(committer) |
|
|
|
.setOnly("a.txt").call(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
@@ -289,112 +292,115 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { |
|
|
|
JGitInternalException, MissingObjectException, |
|
|
|
IncorrectObjectTypeException { |
|
|
|
// do 4 commits and set the range to the second and fourth one |
|
|
|
Git git = new Git(db); |
|
|
|
git.commit().setMessage("first commit").call(); |
|
|
|
RevCommit second = git.commit().setMessage("second commit") |
|
|
|
.setCommitter(committer).call(); |
|
|
|
git.commit().setMessage("third commit").setAuthor(author).call(); |
|
|
|
RevCommit last = git.commit().setMessage("fourth commit").setAuthor( |
|
|
|
author) |
|
|
|
.setCommitter(committer).call(); |
|
|
|
Iterable<RevCommit> commits = git.log().addRange(second.getId(), |
|
|
|
last.getId()).call(); |
|
|
|
|
|
|
|
// check that we have the third and fourth commit |
|
|
|
PersonIdent defaultCommitter = new PersonIdent(db); |
|
|
|
PersonIdent expectedAuthors[] = new PersonIdent[] { author, author }; |
|
|
|
PersonIdent expectedCommitters[] = new PersonIdent[] { |
|
|
|
defaultCommitter, committer }; |
|
|
|
String expectedMessages[] = new String[] { "third commit", |
|
|
|
"fourth commit" }; |
|
|
|
int l = expectedAuthors.length - 1; |
|
|
|
for (RevCommit c : commits) { |
|
|
|
assertEquals(expectedAuthors[l].getName(), c.getAuthorIdent() |
|
|
|
.getName()); |
|
|
|
assertEquals(expectedCommitters[l].getName(), c.getCommitterIdent() |
|
|
|
.getName()); |
|
|
|
assertEquals(c.getFullMessage(), expectedMessages[l]); |
|
|
|
l--; |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
git.commit().setMessage("first commit").call(); |
|
|
|
RevCommit second = git.commit().setMessage("second commit") |
|
|
|
.setCommitter(committer).call(); |
|
|
|
git.commit().setMessage("third commit").setAuthor(author).call(); |
|
|
|
RevCommit last = git.commit().setMessage("fourth commit").setAuthor( |
|
|
|
author) |
|
|
|
.setCommitter(committer).call(); |
|
|
|
Iterable<RevCommit> commits = git.log().addRange(second.getId(), |
|
|
|
last.getId()).call(); |
|
|
|
|
|
|
|
// check that we have the third and fourth commit |
|
|
|
PersonIdent defaultCommitter = new PersonIdent(db); |
|
|
|
PersonIdent expectedAuthors[] = new PersonIdent[] { author, author }; |
|
|
|
PersonIdent expectedCommitters[] = new PersonIdent[] { |
|
|
|
defaultCommitter, committer }; |
|
|
|
String expectedMessages[] = new String[] { "third commit", |
|
|
|
"fourth commit" }; |
|
|
|
int l = expectedAuthors.length - 1; |
|
|
|
for (RevCommit c : commits) { |
|
|
|
assertEquals(expectedAuthors[l].getName(), c.getAuthorIdent() |
|
|
|
.getName()); |
|
|
|
assertEquals(expectedCommitters[l].getName(), c.getCommitterIdent() |
|
|
|
.getName()); |
|
|
|
assertEquals(c.getFullMessage(), expectedMessages[l]); |
|
|
|
l--; |
|
|
|
} |
|
|
|
assertEquals(l, -1); |
|
|
|
} |
|
|
|
assertEquals(l, -1); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testCommitAmend() throws JGitInternalException, IOException, |
|
|
|
GitAPIException { |
|
|
|
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++; |
|
|
|
try (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); |
|
|
|
ReflogReader reader = db.getReflogReader(Constants.HEAD); |
|
|
|
assertTrue(reader.getLastEntry().getComment() |
|
|
|
.startsWith("commit (amend):")); |
|
|
|
reader = db.getReflogReader(db.getBranch()); |
|
|
|
assertTrue(reader.getLastEntry().getComment() |
|
|
|
.startsWith("commit (amend):")); |
|
|
|
} |
|
|
|
assertEquals(1, c); |
|
|
|
ReflogReader reader = db.getReflogReader(Constants.HEAD); |
|
|
|
assertTrue(reader.getLastEntry().getComment() |
|
|
|
.startsWith("commit (amend):")); |
|
|
|
reader = db.getReflogReader(db.getBranch()); |
|
|
|
assertTrue(reader.getLastEntry().getComment() |
|
|
|
.startsWith("commit (amend):")); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testInsertChangeId() throws JGitInternalException, |
|
|
|
GitAPIException { |
|
|
|
Git git = new Git(db); |
|
|
|
String messageHeader = "Some header line\n\nSome detail explanation\n"; |
|
|
|
String changeIdTemplate = "\nChange-Id: I" |
|
|
|
+ ObjectId.zeroId().getName() + "\n"; |
|
|
|
String messageFooter = "Some foooter lines\nAnother footer line\n"; |
|
|
|
RevCommit commit = git.commit().setMessage( |
|
|
|
messageHeader + messageFooter) |
|
|
|
.setInsertChangeId(true).call(); |
|
|
|
// we should find a real change id (at the end of the file) |
|
|
|
byte[] chars = commit.getFullMessage().getBytes(); |
|
|
|
int lastLineBegin = RawParseUtils.prevLF(chars, chars.length - 2); |
|
|
|
String lastLine = RawParseUtils.decode(chars, lastLineBegin + 1, |
|
|
|
chars.length); |
|
|
|
assertTrue(lastLine.contains("Change-Id:")); |
|
|
|
assertFalse(lastLine.contains( |
|
|
|
"Change-Id: I" + ObjectId.zeroId().getName())); |
|
|
|
|
|
|
|
commit = git.commit().setMessage( |
|
|
|
messageHeader + changeIdTemplate + messageFooter) |
|
|
|
.setInsertChangeId(true).call(); |
|
|
|
// we should find a real change id (in the line as dictated by the |
|
|
|
// template) |
|
|
|
chars = commit.getFullMessage().getBytes(); |
|
|
|
int lineStart = 0; |
|
|
|
int lineEnd = 0; |
|
|
|
for (int i = 0; i < 4; i++) { |
|
|
|
lineStart = RawParseUtils.nextLF(chars, lineStart); |
|
|
|
} |
|
|
|
lineEnd = RawParseUtils.nextLF(chars, lineStart); |
|
|
|
|
|
|
|
String line = RawParseUtils.decode(chars, lineStart, lineEnd); |
|
|
|
|
|
|
|
assertTrue(line.contains("Change-Id:")); |
|
|
|
assertFalse(line.contains( |
|
|
|
"Change-Id: I" + ObjectId.zeroId().getName())); |
|
|
|
|
|
|
|
commit = git.commit().setMessage( |
|
|
|
messageHeader + changeIdTemplate + messageFooter) |
|
|
|
.setInsertChangeId(false).call(); |
|
|
|
// we should find the untouched template |
|
|
|
chars = commit.getFullMessage().getBytes(); |
|
|
|
lineStart = 0; |
|
|
|
lineEnd = 0; |
|
|
|
for (int i = 0; i < 4; i++) { |
|
|
|
lineStart = RawParseUtils.nextLF(chars, lineStart); |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
String messageHeader = "Some header line\n\nSome detail explanation\n"; |
|
|
|
String changeIdTemplate = "\nChange-Id: I" |
|
|
|
+ ObjectId.zeroId().getName() + "\n"; |
|
|
|
String messageFooter = "Some foooter lines\nAnother footer line\n"; |
|
|
|
RevCommit commit = git.commit().setMessage( |
|
|
|
messageHeader + messageFooter) |
|
|
|
.setInsertChangeId(true).call(); |
|
|
|
// we should find a real change id (at the end of the file) |
|
|
|
byte[] chars = commit.getFullMessage().getBytes(); |
|
|
|
int lastLineBegin = RawParseUtils.prevLF(chars, chars.length - 2); |
|
|
|
String lastLine = RawParseUtils.decode(chars, lastLineBegin + 1, |
|
|
|
chars.length); |
|
|
|
assertTrue(lastLine.contains("Change-Id:")); |
|
|
|
assertFalse(lastLine.contains( |
|
|
|
"Change-Id: I" + ObjectId.zeroId().getName())); |
|
|
|
|
|
|
|
commit = git.commit().setMessage( |
|
|
|
messageHeader + changeIdTemplate + messageFooter) |
|
|
|
.setInsertChangeId(true).call(); |
|
|
|
// we should find a real change id (in the line as dictated by the |
|
|
|
// template) |
|
|
|
chars = commit.getFullMessage().getBytes(); |
|
|
|
int lineStart = 0; |
|
|
|
int lineEnd = 0; |
|
|
|
for (int i = 0; i < 4; i++) { |
|
|
|
lineStart = RawParseUtils.nextLF(chars, lineStart); |
|
|
|
} |
|
|
|
lineEnd = RawParseUtils.nextLF(chars, lineStart); |
|
|
|
|
|
|
|
String line = RawParseUtils.decode(chars, lineStart, lineEnd); |
|
|
|
|
|
|
|
assertTrue(line.contains("Change-Id:")); |
|
|
|
assertFalse(line.contains( |
|
|
|
"Change-Id: I" + ObjectId.zeroId().getName())); |
|
|
|
|
|
|
|
commit = git.commit().setMessage( |
|
|
|
messageHeader + changeIdTemplate + messageFooter) |
|
|
|
.setInsertChangeId(false).call(); |
|
|
|
// we should find the untouched template |
|
|
|
chars = commit.getFullMessage().getBytes(); |
|
|
|
lineStart = 0; |
|
|
|
lineEnd = 0; |
|
|
|
for (int i = 0; i < 4; i++) { |
|
|
|
lineStart = RawParseUtils.nextLF(chars, lineStart); |
|
|
|
} |
|
|
|
lineEnd = RawParseUtils.nextLF(chars, lineStart); |
|
|
|
|
|
|
|
line = RawParseUtils.decode(chars, lineStart, lineEnd); |
|
|
|
|
|
|
|
assertTrue(commit.getFullMessage().contains( |
|
|
|
"Change-Id: I" + ObjectId.zeroId().getName())); |
|
|
|
} |
|
|
|
lineEnd = RawParseUtils.nextLF(chars, lineStart); |
|
|
|
|
|
|
|
line = RawParseUtils.decode(chars, lineStart, lineEnd); |
|
|
|
|
|
|
|
assertTrue(commit.getFullMessage().contains( |
|
|
|
"Change-Id: I" + ObjectId.zeroId().getName())); |
|
|
|
} |
|
|
|
} |