diff --git a/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M1.patch b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M1.patch new file mode 100644 index 000000000..395bd4c50 --- /dev/null +++ b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M1.patch @@ -0,0 +1,9 @@ +diff --git a/M1 b/M1 +new file mode 100755 +index 0000000..de98044 +--- /dev/null ++++ b/M1 +@@ -0,0 +1,3 @@ ++a ++b ++c diff --git a/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M1_PostImage b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M1_PostImage new file mode 100644 index 000000000..de980441c --- /dev/null +++ b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M1_PostImage @@ -0,0 +1,3 @@ +a +b +c diff --git a/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M2.patch b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M2.patch new file mode 100644 index 000000000..b56ca0828 --- /dev/null +++ b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M2.patch @@ -0,0 +1,10 @@ +diff --git a/M2 b/M2 +old mode 100644 +new mode 100755 +index 0000000..de98044 +--- a/M2 ++++ b/M2 +@@ -1,3 +1,1 @@ + a +-b +-c diff --git a/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M2_PostImage b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M2_PostImage new file mode 100644 index 000000000..789819226 --- /dev/null +++ b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M2_PostImage @@ -0,0 +1 @@ +a diff --git a/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M2_PreImage b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M2_PreImage new file mode 100644 index 000000000..de980441c --- /dev/null +++ b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M2_PreImage @@ -0,0 +1,3 @@ +a +b +c diff --git a/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M3.patch b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M3.patch new file mode 100644 index 000000000..ee536058a --- /dev/null +++ b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M3.patch @@ -0,0 +1,10 @@ +diff --git a/M3 b/M3 +old mode 100755 +new mode 100644 +index 0000000..de98044 +--- a/M3 ++++ b/M3 +@@ -1,1 +1,3 @@ + a ++b ++c diff --git a/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M3_PostImage b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M3_PostImage new file mode 100644 index 000000000..de980441c --- /dev/null +++ b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M3_PostImage @@ -0,0 +1,3 @@ +a +b +c diff --git a/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M3_PreImage b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M3_PreImage new file mode 100755 index 000000000..789819226 --- /dev/null +++ b/org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/M3_PreImage @@ -0,0 +1 @@ +a diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java index f2b5b3ba9..172807c43 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java @@ -44,6 +44,7 @@ package org.eclipse.jgit.api; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.ByteArrayOutputStream; @@ -156,6 +157,33 @@ public class ApplyCommandTest extends RepositoryTestCase { b.getString(0, b.size(), false)); } + @Test + public void testAddM1() throws Exception { + ApplyResult result = init("M1", false, true); + assertEquals(1, result.getUpdatedFiles().size()); + assertTrue(result.getUpdatedFiles().get(0).canExecute()); + checkFile(new File(db.getWorkTree(), "M1"), + b.getString(0, b.size(), false)); + } + + @Test + public void testModifyM2() throws Exception { + ApplyResult result = init("M2", true, true); + assertEquals(1, result.getUpdatedFiles().size()); + assertTrue(result.getUpdatedFiles().get(0).canExecute()); + checkFile(new File(db.getWorkTree(), "M2"), + b.getString(0, b.size(), false)); + } + + @Test + public void testModifyM3() throws Exception { + ApplyResult result = init("M3", true, true); + assertEquals(1, result.getUpdatedFiles().size()); + assertFalse(result.getUpdatedFiles().get(0).canExecute()); + checkFile(new File(db.getWorkTree(), "M3"), + b.getString(0, b.size(), false)); + } + @Test public void testModifyX() throws Exception { ApplyResult result = init("X"); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java index 8fbf83954..d74e99139 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java @@ -58,6 +58,7 @@ import org.eclipse.jgit.api.errors.PatchFormatException; import org.eclipse.jgit.diff.DiffEntry.ChangeType; import org.eclipse.jgit.diff.RawText; import org.eclipse.jgit.internal.JGitText; +import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.patch.FileHeader; import org.eclipse.jgit.patch.HunkHeader; @@ -260,6 +261,8 @@ public class ApplyCommand extends GitCommand { FileWriter fw = new FileWriter(f); fw.write(sb.toString()); fw.close(); + + getRepository().getFS().setExecute(f, fh.getNewMode() == FileMode.EXECUTABLE_FILE); } private static boolean isChanged(List ol, List nl) {