1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-10-28 12:59:41 +01:00

refs: move submodule slash stripping code to get_submodule_ref_store

This is a better place that will benefit all submodule callers instead
of just resolve_gitlink_ref()

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy 2017-08-23 19:36:54 +07:00 committed by Junio C Hamano
parent 2c616c172d
commit 29babbeeb3

31
refs.c
View file

@ -1503,25 +1503,10 @@ const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
int resolve_gitlink_ref(const char *submodule, const char *refname,
unsigned char *sha1)
{
size_t len = strlen(submodule);
struct ref_store *refs;
int flags;
while (len && is_dir_sep(submodule[len - 1]))
len--;
if (!len)
return -1;
if (submodule[len]) {
/* We need to strip off one or more trailing slashes */
char *stripped = xmemdupz(submodule, len);
refs = get_submodule_ref_store(stripped);
free(stripped);
} else {
refs = get_submodule_ref_store(submodule);
}
if (!refs)
return -1;
@ -1636,6 +1621,16 @@ struct ref_store *get_submodule_ref_store(const char *submodule)
{
struct strbuf submodule_sb = STRBUF_INIT;
struct ref_store *refs;
char *to_free = NULL;
size_t len;
if (submodule) {
len = strlen(submodule);
while (len && is_dir_sep(submodule[len - 1]))
len--;
if (!len)
return NULL;
}
if (!submodule || !*submodule) {
/*
@ -1645,6 +1640,10 @@ struct ref_store *get_submodule_ref_store(const char *submodule)
return get_main_ref_store();
}
if (submodule[len])
/* We need to strip off one or more trailing slashes */
submodule = to_free = xmemdupz(submodule, len);
refs = lookup_ref_store_map(&submodule_ref_stores, submodule);
if (refs)
goto done;
@ -1664,6 +1663,8 @@ struct ref_store *get_submodule_ref_store(const char *submodule)
done:
strbuf_release(&submodule_sb);
free(to_free);
return refs;
}