Merge "archive: Use an empty directory for submodules"
This commit is contained in:
commit
b0d9c57f35
|
@ -432,6 +432,46 @@ public void testTarPrefixWithoutTrailingSlash() throws Exception {
|
||||||
assertArrayEquals(expect, actual);
|
assertArrayEquals(expect, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testArchiveIncludesSubmoduleDirectory() throws Exception {
|
||||||
|
writeTrashFile("a", "a file with content!");
|
||||||
|
writeTrashFile("c", "after submodule");
|
||||||
|
git.add().addFilepattern("a").call();
|
||||||
|
git.add().addFilepattern("c").call();
|
||||||
|
git.commit().setMessage("initial commit").call();
|
||||||
|
git.submoduleAdd().setURI("./.").setPath("b").call().close();
|
||||||
|
git.commit().setMessage("add submodule").call();
|
||||||
|
|
||||||
|
final byte[] result = CLIGitCommand.rawExecute( //
|
||||||
|
"git archive --format=zip master", db);
|
||||||
|
String[] expect = { ".gitmodules", "a", "b/", "c" };
|
||||||
|
String[] actual = listZipEntries(result);
|
||||||
|
|
||||||
|
Arrays.sort(expect);
|
||||||
|
Arrays.sort(actual);
|
||||||
|
assertArrayEquals(expect, actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTarIncludesSubmoduleDirectory() throws Exception {
|
||||||
|
writeTrashFile("a", "a file with content!");
|
||||||
|
writeTrashFile("c", "after submodule");
|
||||||
|
git.add().addFilepattern("a").call();
|
||||||
|
git.add().addFilepattern("c").call();
|
||||||
|
git.commit().setMessage("initial commit").call();
|
||||||
|
git.submoduleAdd().setURI("./.").setPath("b").call().close();
|
||||||
|
git.commit().setMessage("add submodule").call();
|
||||||
|
|
||||||
|
final byte[] result = CLIGitCommand.rawExecute( //
|
||||||
|
"git archive --format=tar master", db);
|
||||||
|
String[] expect = { ".gitmodules", "a", "b/", "c" };
|
||||||
|
String[] actual = listTarEntries(result);
|
||||||
|
|
||||||
|
Arrays.sort(expect);
|
||||||
|
Arrays.sort(actual);
|
||||||
|
assertArrayEquals(expect, actual);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testArchivePreservesMode() throws Exception {
|
public void testArchivePreservesMode() throws Exception {
|
||||||
writeTrashFile("plain", "a file with content");
|
writeTrashFile("plain", "a file with content");
|
||||||
|
|
|
@ -279,11 +279,18 @@ private <T extends Closeable> OutputStream writeArchive(Format<T> fmt) {
|
||||||
walk.reset(rw.parseTree(tree));
|
walk.reset(rw.parseTree(tree));
|
||||||
while (walk.next()) {
|
while (walk.next()) {
|
||||||
final String name = pfx + walk.getPathString();
|
final String name = pfx + walk.getPathString();
|
||||||
final FileMode mode = walk.getFileMode(0);
|
FileMode mode = walk.getFileMode(0);
|
||||||
|
|
||||||
if (walk.isSubtree()) {
|
if (walk.isSubtree())
|
||||||
fmt.putEntry(outa, name + "/", mode, null);
|
|
||||||
walk.enterSubtree();
|
walk.enterSubtree();
|
||||||
|
|
||||||
|
if (mode == FileMode.GITLINK)
|
||||||
|
// TODO(jrn): Take a callback to recurse
|
||||||
|
// into submodules.
|
||||||
|
mode = FileMode.TREE;
|
||||||
|
|
||||||
|
if (mode == FileMode.TREE) {
|
||||||
|
fmt.putEntry(outa, name + "/", mode, null);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
walk.getObjectId(idBuf, 0);
|
walk.getObjectId(idBuf, 0);
|
||||||
|
|
Loading…
Reference in New Issue