From 590e1b7602120198cbaffa9b1e639154ded265b7 Mon Sep 17 00:00:00 2001 From: Robin Stocker Date: Sun, 19 Oct 2014 14:40:29 +1100 Subject: [PATCH] BundleWriter: Support including HEAD in bundle Bug: 446813 Change-Id: Ide64aec2a995dd7ff6c1325c3ada242a4eb4565e Signed-off-by: Robin Stocker --- .../jgit/transport/BundleWriterTest.java | 27 ++++++++++++------- .../eclipse/jgit/transport/BundleWriter.java | 3 ++- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java index efc3834f4..24cee0a6a 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java @@ -73,20 +73,19 @@ import org.junit.Test; public class BundleWriterTest extends SampleDataRepositoryTestCase { @Test - public void testWrite0() throws Exception { + public void testWriteSingleRef() throws Exception { // Create a tiny bundle, (well one of) the first commits only final byte[] bundle = makeBundle("refs/heads/firstcommit", "42e4e7c5e507e113ebbb7801b16b52cf867b7ce1", null); // Then we clone a new repo from that bundle and do a simple test. This - // makes sure - // we could read the bundle we created. + // makes sure we could read the bundle we created. Repository newRepo = createBareRepository(); FetchResult fetchResult = fetchFromBundle(newRepo, bundle); Ref advertisedRef = fetchResult .getAdvertisedRef("refs/heads/firstcommit"); - // We expect firstcommit to appear by id + // We expect first commit to appear by id assertEquals("42e4e7c5e507e113ebbb7801b16b52cf867b7ce1", advertisedRef .getObjectId().name()); // ..and by name as the bundle created a new ref @@ -94,13 +93,21 @@ public class BundleWriterTest extends SampleDataRepositoryTestCase { .resolve("refs/heads/firstcommit").name()); } - /** - * Incremental bundle test - * - * @throws Exception - */ @Test - public void testWrite1() throws Exception { + public void testWriteHEAD() throws Exception { + byte[] bundle = makeBundle("HEAD", + "42e4e7c5e507e113ebbb7801b16b52cf867b7ce1", null); + + Repository newRepo = createBareRepository(); + FetchResult fetchResult = fetchFromBundle(newRepo, bundle); + Ref advertisedRef = fetchResult.getAdvertisedRef("HEAD"); + + assertEquals("42e4e7c5e507e113ebbb7801b16b52cf867b7ce1", advertisedRef + .getObjectId().name()); + } + + @Test + public void testIncrementalBundle() throws Exception { byte[] bundle; // Create a small bundle, an early commit diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BundleWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BundleWriter.java index 4f5cda7ab..d0f005cde 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BundleWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BundleWriter.java @@ -128,7 +128,8 @@ public class BundleWriter { * object to pack. Multiple refs may point to the same object. */ public void include(final String name, final AnyObjectId id) { - if (!Repository.isValidRefName(name)) + boolean validRefName = Repository.isValidRefName(name) || Constants.HEAD.equals(name); + if (!validRefName) throw new IllegalArgumentException(MessageFormat.format(JGitText.get().invalidRefName, name)); if (include.containsKey(name)) throw new IllegalStateException(JGitText.get().duplicateRef + name);