Browse Source

Cannot commit -o file with only file permission change

Bug 345076
Change-Id: Ie64039793ab6ba4748731320399f03301b6282ec
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
tags/v1.3.0.201202121842-rc4
Robin Rosenberg 12 years ago
parent
commit
d5c890e0fd

+ 31
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java View File

@@ -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;
@@ -266,6 +267,36 @@ public class CommitAndLogCommandTests extends RepositoryTestCase {
tw.getObjectId(0).getName());
}

@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,

+ 4
- 1
org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java View File

@@ -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 {

Loading…
Cancel
Save