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>
This commit is contained in:
parent
8641ee3dcb
commit
c5546e88fe
@ -6,6 +6,7 @@
|
|||||||
#include "revision.h"
|
#include "revision.h"
|
||||||
#include "list-objects.h"
|
#include "list-objects.h"
|
||||||
#include "run-command.h"
|
#include "run-command.h"
|
||||||
|
#include "refs.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Basic handler for bundle files to connect repositories via sneakernet.
|
* 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;
|
struct object_array_entry *e = revs.pending.objects + i;
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
char *ref;
|
char *ref;
|
||||||
|
const char *display_ref;
|
||||||
|
int flag;
|
||||||
|
|
||||||
if (e->item->flags & UNINTERESTING)
|
if (e->item->flags & UNINTERESTING)
|
||||||
continue;
|
continue;
|
||||||
if (dwim_ref(e->name, strlen(e->name), sha1, &ref) != 1)
|
if (dwim_ref(e->name, strlen(e->name), sha1, &ref) != 1)
|
||||||
continue;
|
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
|
* Make sure the refs we wrote out is correct; --max-count and
|
||||||
* other limiting options could have prevented all the tips
|
* 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++;
|
ref_count++;
|
||||||
write_or_die(bundle_fd, sha1_to_hex(e->item->sha1), 40);
|
write_or_die(bundle_fd, sha1_to_hex(e->item->sha1), 40);
|
||||||
write_or_die(bundle_fd, " ", 1);
|
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);
|
write_or_die(bundle_fd, "\n", 1);
|
||||||
free(ref);
|
free(ref);
|
||||||
}
|
}
|
||||||
|
@ -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
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user