import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.URIish;
import org.eclipse.jgit.util.FileUtils;
+import org.eclipse.jgit.util.SystemReader;
import org.junit.Before;
import org.junit.Test;
}
}
+ @Test
+ public void testNonDeletableFilesOnWindows()
+ throws GitAPIException, IOException {
+ // Only on windows a FileInputStream blocks us from deleting a file
+ org.junit.Assume.assumeTrue(SystemReader.getInstance().isWindows());
+ writeTrashFile("toBeModified.txt", "a");
+ writeTrashFile("toBeDeleted.txt", "a");
+ git.add().addFilepattern(".").call();
+ RevCommit addFiles = git.commit().setMessage("add more files").call();
+
+ git.rm().setCached(false).addFilepattern("Test.txt")
+ .addFilepattern("toBeDeleted.txt").call();
+ writeTrashFile("toBeModified.txt", "b");
+ writeTrashFile("toBeCreated.txt", "a");
+ git.add().addFilepattern(".").call();
+ RevCommit crudCommit = git.commit().setMessage("delete, modify, add")
+ .call();
+ git.checkout().setName(addFiles.getName()).call();
+ try ( FileInputStream fis=new FileInputStream(new File(db.getWorkTree(), "Test.txt")) ) {
+ CheckoutCommand coCommand = git.checkout();
+ coCommand.setName(crudCommit.getName()).call();
+ CheckoutResult result = coCommand.getResult();
+ assertEquals(Status.NONDELETED, result.getStatus());
+ assertEquals("[Test.txt, toBeDeleted.txt]",
+ result.getRemovedList().toString());
+ assertEquals("[toBeCreated.txt, toBeModified.txt]",
+ result.getModifiedList().toString());
+ assertEquals("[Test.txt]", result.getUndeletedList().toString());
+ assertTrue(result.getConflictList().isEmpty());
+ }
+ }
+
private File writeTempFile(String body) throws IOException {
File f = File.createTempFile("AddCommandTest_", "");
JGitTestUtil.write(f, body);
* {@link Status#CONFLICTS} or {@link Status#NONDELETED}.
*/
CheckoutResult(Status status, List<String> fileList) {
+ this(status, fileList, null, null);
+ }
+
+ /**
+ * Create a new fail result. If status is {@link Status#CONFLICTS},
+ * <code>fileList</code> is a list of conflicting files, if status is
+ * {@link Status#NONDELETED}, <code>fileList</code> is a list of not deleted
+ * files. All other values ignore <code>fileList</code>. To create a result
+ * for {@link Status#OK}, see {@link #CheckoutResult(List, List)}.
+ *
+ * @param status
+ * the failure status
+ * @param fileList
+ * the list of files to store, status has to be either
+ * {@link Status#CONFLICTS} or {@link Status#NONDELETED}.
+ * @param modified
+ * the modified files
+ * @param removed
+ * the removed files.
+ */
+ CheckoutResult(Status status, List<String> fileList, List<String> modified,
+ List<String> removed) {
myStatus = status;
if (status == Status.CONFLICTS)
this.conflictList = fileList;
else
this.undeletedList = new ArrayList<String>(0);
- this.modifiedList = new ArrayList<String>(0);
- this.removedList = new ArrayList<String>(0);
+ this.modifiedList = modified;
+ this.removedList = removed;
}
/**