BundleWriter: Support including HEAD in bundle

Bug: 446813
Change-Id: Ide64aec2a995dd7ff6c1325c3ada242a4eb4565e
Signed-off-by: Robin Stocker <robin@nibor.org>
This commit is contained in:
Robin Stocker 2014-10-19 14:40:29 +11:00
parent 5c85d5d58a
commit 590e1b7602
2 changed files with 19 additions and 11 deletions

View File

@ -73,20 +73,19 @@
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 void testWrite0() throws Exception {
.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

View File

@ -128,7 +128,8 @@ public void setPackConfig(PackConfig pc) {
* 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);