Since git doesn't keep track of empty directories, they should be created first. Test case included demonstrates that using StashApplyCommand(). Bugfix is applied to the DirCacheCheckout class, because StashApplyCommand() uses it internally to apply a stash. Change-Id: Iac259229ef919f9e92e7e51a671d877172bb88a8 Signed-off-by: Jevgeni Zelenkov <jevgeni.zelenkov@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>tags/v2.1.0.201209190230-r
return path; | 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. | * Write a string as a UTF-8 file. | ||||
* | * |
assertTrue(status.getModified().contains(PATH)); | assertTrue(status.getModified().contains(PATH)); | ||||
} | } | ||||
@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 | @Test | ||||
public void unstashNonStashCommit() throws Exception { | public void unstashNonStashCommit() throws Exception { | ||||
try { | try { |
return JGitTestUtil.writeTrashFile(db, name, data); | 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 { | protected void deleteTrashFile(final String name) throws IOException { | ||||
JGitTestUtil.deleteTrashFile(db, name); | JGitTestUtil.deleteTrashFile(db, name); | ||||
} | } |
DirCacheEntry entry, ObjectReader or) throws IOException { | DirCacheEntry entry, ObjectReader or) throws IOException { | ||||
ObjectLoader ol = or.open(entry.getObjectId()); | ObjectLoader ol = or.open(entry.getObjectId()); | ||||
File parentDir = f.getParentFile(); | File parentDir = f.getParentFile(); | ||||
parentDir.mkdirs(); | |||||
File tmpFile = File.createTempFile("._" + f.getName(), null, parentDir); | File tmpFile = File.createTempFile("._" + f.getName(), null, parentDir); | ||||
WorkingTreeOptions opt = repo.getConfig().get(WorkingTreeOptions.KEY); | WorkingTreeOptions opt = repo.getConfig().get(WorkingTreeOptions.KEY); | ||||
FileOutputStream rawChannel = new FileOutputStream(tmpFile); | FileOutputStream rawChannel = new FileOutputStream(tmpFile); |