Allow setting FileMode to executable when applying patches in ApplyCommand
git-apply allows modifying file modes in patched files using either "new mode" or "new file mode" headers. This patch adds support for setting files as executables and vice-versa. Change-Id: I24848966b46f686f540a8efa8150b42e0d9c3ad1 Signed-off-by: Nadav Cohen <nadavcoh@gmail.com>
This commit is contained in:
parent
00db4ab06e
commit
e81592e076
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -44,6 +44,7 @@
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
@ -156,6 +157,33 @@ public void testModifyW() throws Exception {
|
||||||
b.getString(0, b.size(), false));
|
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
|
@Test
|
||||||
public void testModifyX() throws Exception {
|
public void testModifyX() throws Exception {
|
||||||
ApplyResult result = init("X");
|
ApplyResult result = init("X");
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
import org.eclipse.jgit.diff.DiffEntry.ChangeType;
|
import org.eclipse.jgit.diff.DiffEntry.ChangeType;
|
||||||
import org.eclipse.jgit.diff.RawText;
|
import org.eclipse.jgit.diff.RawText;
|
||||||
import org.eclipse.jgit.internal.JGitText;
|
import org.eclipse.jgit.internal.JGitText;
|
||||||
|
import org.eclipse.jgit.lib.FileMode;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
import org.eclipse.jgit.patch.FileHeader;
|
import org.eclipse.jgit.patch.FileHeader;
|
||||||
import org.eclipse.jgit.patch.HunkHeader;
|
import org.eclipse.jgit.patch.HunkHeader;
|
||||||
|
@ -260,6 +261,8 @@ private void apply(File f, FileHeader fh)
|
||||||
FileWriter fw = new FileWriter(f);
|
FileWriter fw = new FileWriter(f);
|
||||||
fw.write(sb.toString());
|
fw.write(sb.toString());
|
||||||
fw.close();
|
fw.close();
|
||||||
|
|
||||||
|
getRepository().getFS().setExecute(f, fh.getNewMode() == FileMode.EXECUTABLE_FILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isChanged(List<String> ol, List<String> nl) {
|
private static boolean isChanged(List<String> ol, List<String> nl) {
|
||||||
|
|
Loading…
Reference in New Issue