diff options
author | Robin Rosenberg <robin.rosenberg@dewire.com> | 2012-01-07 14:00:14 +0100 |
---|---|---|
committer | Robin Rosenberg <robin.rosenberg@dewire.com> | 2012-01-13 11:24:31 +0100 |
commit | d5c890e0fdbfdd5d532121a2eb812ee2143c8ab5 (patch) | |
tree | d56c15ab41ef216fb22e5f00984dcd5373690e4a | |
parent | 6a582970bfa1120dfe99e7568ea2d471dfc59387 (diff) | |
download | jgit-d5c890e0fdbfdd5d532121a2eb812ee2143c8ab5.tar.gz jgit-d5c890e0fdbfdd5d532121a2eb812ee2143c8ab5.zip |
Cannot commit -o file with only file permission change
Bug 345076
Change-Id: Ie64039793ab6ba4748731320399f03301b6282ec
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java | 31 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java | 5 |
2 files changed, 35 insertions, 1 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java index aac1dc1496..e6b6a096fa 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java @@ -67,6 +67,7 @@ import org.eclipse.jgit.lib.RepositoryTestCase; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.storage.file.ReflogReader; import org.eclipse.jgit.treewalk.TreeWalk; +import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.FileUtils; import org.eclipse.jgit.util.RawParseUtils; import org.junit.Test; @@ -267,6 +268,36 @@ public class CommitAndLogCommandTests extends RepositoryTestCase { } @Test + public void testModeChange() throws IOException, NoFilepatternException, + NoHeadException, NoMessageException, ConcurrentRefUpdateException, + JGitInternalException, WrongRepositoryStateException { + 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 public void testCommitRange() throws NoHeadException, NoMessageException, UnmergedPathException, ConcurrentRefUpdateException, JGitInternalException, WrongRepositoryStateException, 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 a6d780e908..d2386f1e82 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java @@ -382,7 +382,10 @@ public class CommitCommand extends GitCommand<RevCommit> { // add to temporary in-core index dcBuilder.add(dcEntry); - if (emptyCommit && (hTree == null || !hTree.idEqual(fTree))) + if (emptyCommit + && (hTree == null || !hTree.idEqual(fTree) || hTree + .getEntryRawMode() != fTree + .getEntryRawMode())) // this is a change emptyCommit = false; } else { |