aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>2007-11-22 12:24:59 +0000
committerJunio C Hamano <gitster@pobox.com>2007-11-22 15:15:25 -0800
commitc5546e88fe492558313965a49512ce5c71a98dfe (patch)
treefa42d6db43daf617f34eaad503ad4bfac42b5274
parent8641ee3dcbae749c42b7cf117ba3050e2cb95a93 (diff)
downloadgit-c5546e88fe492558313965a49512ce5c71a98dfe.tar.gz
git-c5546e88fe492558313965a49512ce5c71a98dfe.tar.xz
bundle create: keep symbolic refs' names instead of resolving them
When creating a bundle, symbolic refs used to be resolved to the non-symbolic refs they point to before being written to the list of contained refs. I.e. "git bundle create a1.bundle HEAD master" would show something like 388afe7881b33102fada216dd07806728773c011 refs/heads/master 388afe7881b33102fada216dd07806728773c011 refs/heads/master instead of 388afe7881b33102fada216dd07806728773c011 HEAD 388afe7881b33102fada216dd07806728773c011 refs/heads/master Introduce a special handling so that the symbolic refs are listed with the names passed on the command line. Noticed by Santi BĂ©jar. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin-bundle.c9
-rwxr-xr-xt/t5510-fetch.sh13
2 files changed, 21 insertions, 1 deletions
diff --git a/builtin-bundle.c b/builtin-bundle.c
index 1b650069c..d1840555d 100644
--- a/builtin-bundle.c
+++ b/builtin-bundle.c
@@ -6,6 +6,7 @@
#include "revision.h"
#include "list-objects.h"
#include "run-command.h"
+#include "refs.h"
/*
* Basic handler for bundle files to connect repositories via sneakernet.
@@ -253,11 +254,17 @@ static int create_bundle(struct bundle_header *header, const char *path,
struct object_array_entry *e = revs.pending.objects + i;
unsigned char sha1[20];
char *ref;
+ const char *display_ref;
+ int flag;
if (e->item->flags & UNINTERESTING)
continue;
if (dwim_ref(e->name, strlen(e->name), sha1, &ref) != 1)
continue;
+ if (!resolve_ref(e->name, sha1, 1, &flag))
+ flag = 0;
+ display_ref = (flag & REF_ISSYMREF) ? e->name : ref;
+
/*
* Make sure the refs we wrote out is correct; --max-count and
* other limiting options could have prevented all the tips
@@ -308,7 +315,7 @@ static int create_bundle(struct bundle_header *header, const char *path,
ref_count++;
write_or_die(bundle_fd, sha1_to_hex(e->item->sha1), 40);
write_or_die(bundle_fd, " ", 1);
- write_or_die(bundle_fd, ref, strlen(ref));
+ write_or_die(bundle_fd, display_ref, strlen(display_ref));
write_or_die(bundle_fd, "\n", 1);
free(ref);
}
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 439430f56..7406de35a 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -153,4 +153,17 @@ test_expect_success 'bundle should be able to create a full history' '
'
+test_expect_success 'bundle should record HEAD correctly' '
+
+ cd "$D" &&
+ git bundle create bundle5 HEAD master &&
+ git bundle list-heads bundle5 >actual &&
+ for h in HEAD refs/heads/master
+ do
+ echo "$(git rev-parse --verify $h) $h"
+ done >expect &&
+ diff -u expect actual
+
+'
+
test_done