diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ArchiveTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ArchiveTest.java index 18c49ea28..6f32bfaa5 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ArchiveTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ArchiveTest.java @@ -348,7 +348,7 @@ public void testArchivePrefixOption() throws Exception { commitBazAndFooSlashBar(); byte[] result = CLIGitCommand.executeRaw( "git archive --prefix=x/ --format=zip master", db).outBytes(); - String[] expect = { "x/baz", "x/foo/", "x/foo/bar" }; + String[] expect = { "x/", "x/baz", "x/foo/", "x/foo/bar" }; String[] actual = listZipEntries(result); Arrays.sort(expect); @@ -361,7 +361,7 @@ public void testTarPrefixOption() throws Exception { commitBazAndFooSlashBar(); byte[] result = CLIGitCommand.executeRaw( "git archive --prefix=x/ --format=tar master", db).outBytes(); - String[] expect = { "x/baz", "x/foo/", "x/foo/bar" }; + String[] expect = { "x/", "x/baz", "x/foo/", "x/foo/bar" }; String[] actual = listTarEntries(result); Arrays.sort(expect); @@ -380,7 +380,7 @@ public void testPrefixDoesNotNormalizeDoubleSlash() throws Exception { commitFoo(); byte[] result = CLIGitCommand.executeRaw( "git archive --prefix=x// --format=zip master", db).outBytes(); - String[] expect = { "x//foo" }; + String[] expect = { "x/", "x//foo" }; assertArrayEquals(expect, listZipEntries(result)); } @@ -389,7 +389,7 @@ public void testPrefixDoesNotNormalizeDoubleSlashInTar() throws Exception { commitFoo(); byte[] result = CLIGitCommand.executeRaw( "git archive --prefix=x// --format=tar master", db).outBytes(); - String[] expect = { "x//foo" }; + String[] expect = { "x/", "x//foo" }; assertArrayEquals(expect, listTarEntries(result)); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/ArchiveCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/ArchiveCommand.java index 0d18eb3d0..7ea8e73b3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/ArchiveCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/ArchiveCommand.java @@ -403,6 +403,12 @@ private OutputStream writeArchive(Format fmt) { if (!paths.isEmpty()) walk.setFilter(PathFilterGroup.createFromStrings(paths)); + // Put base directory into archive + if (pfx.endsWith("/")) { //$NON-NLS-1$ + fmt.putEntry(outa, tree, pfx.replaceAll("[/]+$", "/"), //$NON-NLS-1$ //$NON-NLS-2$ + FileMode.TREE, null); + } + while (walk.next()) { String name = pfx + walk.getPathString(); FileMode mode = walk.getFileMode(0);