Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/JGitTestUtil.java8
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashApplyCommandTest.java32
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java6
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java1
4 files changed, 47 insertions, 0 deletions
diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/JGitTestUtil.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/JGitTestUtil.java
index d3da09ffbd..b3376a54be 100644
--- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/JGitTestUtil.java
+++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/JGitTestUtil.java
@@ -141,6 +141,14 @@ public abstract class JGitTestUtil {
return path;
}
+ public static File writeTrashFile(final FileRepository db,
+ final String subdir,
+ final String name, final String data) throws IOException {
+ File path = new File(db.getWorkTree() + "/" + subdir, name);
+ write(path, data);
+ return path;
+ }
+
/**
* Write a string as a UTF-8 file.
*
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashApplyCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashApplyCommandTest.java
index bc11b7a703..117ef88dc9 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashApplyCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashApplyCommandTest.java
@@ -422,6 +422,38 @@ public class StashApplyCommandTest extends RepositoryTestCase {
}
@Test
+ public void stashChangeInANewSubdirectory() throws Exception {
+ String subdir = "subdir";
+ String fname = "file2.txt";
+ String path = subdir + System.getProperty("file.separator") + fname;
+ String otherBranch = "otherbranch";
+
+ writeTrashFile(subdir, fname, "content2");
+
+ git.add().addFilepattern(path).call();
+ RevCommit stashed = git.stashCreate().call();
+ assertNotNull(stashed);
+ assertTrue(git.status().call().isClean());
+
+ git.branchCreate().setName(otherBranch).call();
+ git.checkout().setName(otherBranch).call();
+
+ ObjectId unstashed = git.stashApply().call();
+ assertEquals(stashed, unstashed);
+
+ Status status = git.status().call();
+ assertTrue(status.getChanged().isEmpty());
+ assertTrue(status.getConflicting().isEmpty());
+ assertTrue(status.getMissing().isEmpty());
+ assertTrue(status.getRemoved().isEmpty());
+ assertTrue(status.getModified().isEmpty());
+ assertTrue(status.getUntracked().isEmpty());
+
+ assertEquals(1, status.getAdded().size());
+ assertTrue(status.getAdded().contains(path));
+ }
+
+ @Test
public void unstashNonStashCommit() throws Exception {
try {
git.stashApply().setStashRef(head.name()).call();
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java
index c06322e8e4..457fd1a7ef 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java
@@ -102,6 +102,12 @@ public abstract class RepositoryTestCase extends LocalDiskRepositoryTestCase {
return JGitTestUtil.writeTrashFile(db, name, data);
}
+ protected File writeTrashFile(final String subdir, final String name,
+ final String data)
+ throws IOException {
+ return JGitTestUtil.writeTrashFile(db, subdir, name, data);
+ }
+
protected void deleteTrashFile(final String name) throws IOException {
JGitTestUtil.deleteTrashFile(db, name);
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java
index f46869e421..6e417b33b3 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java
@@ -962,6 +962,7 @@ public class DirCacheCheckout {
DirCacheEntry entry, ObjectReader or) throws IOException {
ObjectLoader ol = or.open(entry.getObjectId());
File parentDir = f.getParentFile();
+ parentDir.mkdirs();
File tmpFile = File.createTempFile("._" + f.getName(), null, parentDir);
WorkingTreeOptions opt = repo.getConfig().get(WorkingTreeOptions.KEY);
FileOutputStream rawChannel = new FileOutputStream(tmpFile);

Back to the top