зеркало из https://github.com/microsoft/git.git
fetch: fix regression with transport helpers
Commite198b3a740
changed the behavior of fetch with regards to tags. Before, null oids where not ignored, now they are, regardless of whether the refs have been explicitly cleared or not.e198b3a740
(fetch: replace string-list used as a look-up table with a hashmap) When using a transport helper the oids can certainly be null. So now tags are ignored and fetching them is impossible. This patch fixes that by having a specific flag that is set only when we explicitly want to ignore the refs, restoring the original behavior. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
9528b80b1a
Коммит
f80d922355
|
@ -237,6 +237,7 @@ static int will_fetch(struct ref **head, const unsigned char *sha1)
|
||||||
struct refname_hash_entry {
|
struct refname_hash_entry {
|
||||||
struct hashmap_entry ent; /* must be the first member */
|
struct hashmap_entry ent; /* must be the first member */
|
||||||
struct object_id oid;
|
struct object_id oid;
|
||||||
|
int ignore;
|
||||||
char refname[FLEX_ARRAY];
|
char refname[FLEX_ARRAY];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -287,7 +288,7 @@ static int refname_hash_exists(struct hashmap *map, const char *refname)
|
||||||
|
|
||||||
static void clear_item(struct refname_hash_entry *item)
|
static void clear_item(struct refname_hash_entry *item)
|
||||||
{
|
{
|
||||||
oidclr(&item->oid);
|
item->ignore = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void find_non_local_tags(const struct ref *refs,
|
static void find_non_local_tags(const struct ref *refs,
|
||||||
|
@ -373,7 +374,7 @@ static void find_non_local_tags(const struct ref *refs,
|
||||||
BUG("unseen remote ref?");
|
BUG("unseen remote ref?");
|
||||||
|
|
||||||
/* Unless we have already decided to ignore this item... */
|
/* Unless we have already decided to ignore this item... */
|
||||||
if (is_null_oid(&item->oid))
|
if (item->ignore)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
rm = alloc_ref(item->refname);
|
rm = alloc_ref(item->refname);
|
||||||
|
|
|
@ -301,7 +301,7 @@ test_expect_success 'fetch url' '
|
||||||
compare_refs server HEAD local FETCH_HEAD
|
compare_refs server HEAD local FETCH_HEAD
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_failure 'fetch tag' '
|
test_expect_success 'fetch tag' '
|
||||||
(cd server &&
|
(cd server &&
|
||||||
git tag v1.0
|
git tag v1.0
|
||||||
) &&
|
) &&
|
||||||
|
|
Загрузка…
Ссылка в новой задаче