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:
parent
2c616c172d
commit
29babbeeb3
33
refs.c
33
refs.c
@ -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,
|
int resolve_gitlink_ref(const char *submodule, const char *refname,
|
||||||
unsigned char *sha1)
|
unsigned char *sha1)
|
||||||
{
|
{
|
||||||
size_t len = strlen(submodule);
|
|
||||||
struct ref_store *refs;
|
struct ref_store *refs;
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
while (len && is_dir_sep(submodule[len - 1]))
|
refs = get_submodule_ref_store(submodule);
|
||||||
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)
|
if (!refs)
|
||||||
return -1;
|
return -1;
|
||||||
@ -1636,6 +1621,16 @@ struct ref_store *get_submodule_ref_store(const char *submodule)
|
|||||||
{
|
{
|
||||||
struct strbuf submodule_sb = STRBUF_INIT;
|
struct strbuf submodule_sb = STRBUF_INIT;
|
||||||
struct ref_store *refs;
|
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) {
|
if (!submodule || !*submodule) {
|
||||||
/*
|
/*
|
||||||
@ -1645,6 +1640,10 @@ struct ref_store *get_submodule_ref_store(const char *submodule)
|
|||||||
return get_main_ref_store();
|
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);
|
refs = lookup_ref_store_map(&submodule_ref_stores, submodule);
|
||||||
if (refs)
|
if (refs)
|
||||||
goto done;
|
goto done;
|
||||||
@ -1664,6 +1663,8 @@ struct ref_store *get_submodule_ref_store(const char *submodule)
|
|||||||
|
|
||||||
done:
|
done:
|
||||||
strbuf_release(&submodule_sb);
|
strbuf_release(&submodule_sb);
|
||||||
|
free(to_free);
|
||||||
|
|
||||||
return refs;
|
return refs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user