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 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@xxxxxx> --- bundle.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff --git a/bundle.c b/bundle.c index e4d60cd..5e8242f 100644 --- a/bundle.c +++ b/bundle.c @@ -6,6 +6,7 @@ #include "revision.h" #include "list-objects.h" #include "run-command.h" +#include "refs.h" static const char bundle_signature[] = "# v2 git bundle\n"; @@ -231,12 +232,17 @@ int create_bundle(struct bundle_header *header, const char *path, for (i = 0; i < revs.pending.nr; i++) { struct object_array_entry *e = revs.pending.objects + i; unsigned char sha1[20]; - char *ref; + const char *ref; + int flag; if (e->item->flags & UNINTERESTING) continue; - if (dwim_ref(e->name, strlen(e->name), sha1, &ref) != 1) + ref = resolve_ref(e->name, sha1, 1, &flag); + if (!ref) continue; + if (flag & REF_ISSYMREF) + ref = e->name; + /* * Make sure the refs we wrote out is correct; --max-count and * other limiting options could have prevented all the tips @@ -249,7 +255,6 @@ int create_bundle(struct bundle_header *header, const char *path, if (!(e->item->flags & SHOWN) && e->item->type == OBJ_COMMIT) { warning("ref '%s' is excluded by the rev-list options", e->name); - free(ref); continue; } /* @@ -280,7 +285,6 @@ int create_bundle(struct bundle_header *header, const char *path, obj->flags |= SHOWN; add_pending_object(&revs, obj, e->name); } - free(ref); continue; } @@ -289,7 +293,6 @@ int create_bundle(struct bundle_header *header, const char *path, write_or_die(bundle_fd, " ", 1); write_or_die(bundle_fd, ref, strlen(ref)); write_or_die(bundle_fd, "\n", 1); - free(ref); } if (!ref_count) die ("Refusing to create empty bundle."); -- 1.5.3.6.1977.g54d30