Create parent dir if necessary on checkout
An example where this is necessary is when a whole directory was deleted and checkout is used to restore a file which was in that directory. Bug: 372133 Change-Id: I1d45e0a5d2525fe1fdfbf08c9c5c166dd909e9fd Signed-off-by: Robin Stocker <robin@nibor.org>
This commit is contained in:
parent
c0b4b79296
commit
a216624ef7
|
@ -219,6 +219,21 @@ public void testCheckoutRemoteTrackingWithoutLocalBranch() throws Exception {
|
|||
indexState(db2, CONTENT));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckoutOfFileWithInexistentParentDir() throws Exception {
|
||||
File a = writeTrashFile("dir/a.txt", "A");
|
||||
writeTrashFile("dir/b.txt", "A");
|
||||
git.add().addFilepattern("dir/a.txt").addFilepattern("dir/b.txt")
|
||||
.call();
|
||||
git.commit().setMessage("Added dir").call();
|
||||
|
||||
File dir = new File(db.getWorkTree(), "dir");
|
||||
FileUtils.delete(dir, FileUtils.RECURSIVE);
|
||||
|
||||
git.checkout().addPath("dir/a.txt").call();
|
||||
assertTrue(a.exists());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetachedHeadOnCheckout() throws JGitInternalException,
|
||||
IOException, GitAPIException {
|
||||
|
|
|
@ -78,6 +78,7 @@
|
|||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
import org.eclipse.jgit.treewalk.TreeWalk;
|
||||
import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
|
||||
import org.eclipse.jgit.util.FileUtils;
|
||||
|
||||
/**
|
||||
* Checkout a branch to the working tree
|
||||
|
@ -297,9 +298,11 @@ protected CheckoutCommand checkoutPaths() throws IOException,
|
|||
public void apply(DirCacheEntry ent) {
|
||||
ent.setObjectId(blobId);
|
||||
ent.setFileMode(mode);
|
||||
File file = new File(workTree, ent.getPathString());
|
||||
File parentDir = file.getParentFile();
|
||||
try {
|
||||
DirCacheCheckout.checkoutEntry(repo, new File(
|
||||
workTree, ent.getPathString()), ent, r);
|
||||
FileUtils.mkdirs(parentDir, true);
|
||||
DirCacheCheckout.checkoutEntry(repo, file, ent, r);
|
||||
} catch (IOException e) {
|
||||
throw new JGitInternalException(
|
||||
MessageFormat.format(
|
||||
|
|
Loading…
Reference in New Issue