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>
Nguyễn Thái Ngọc Duy committed
Aug 23, 2017 at 19:36 UTC
29babbeeb32fb4e8b892940e69207ec7de2e7a63
1 file changed
+17
-16
refs.c
+17
-16
@@ -1503,25 +1503,10 @@ const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
1503
int resolve_gitlink_ref(const char *submodule, const char *refname,
1504
unsigned char *sha1)
1505
{
1506
- size_t len = strlen(submodule);
1506
struct ref_store *refs;
1507
int flags;
1508
1510
- while (len && is_dir_sep(submodule[len - 1]))
1511
- len--;
1512
-
1513
- if (!len)
1514
- return -1;
1515
-
1516
- if (submodule[len]) {
1517
- /* We need to strip off one or more trailing slashes */
1518
- char *stripped = xmemdupz(submodule, len);
1519
-
1520
- refs = get_submodule_ref_store(stripped);
1521
- free(stripped);
1522
- } else {
1523
- refs = get_submodule_ref_store(submodule);
1524
- }
1509
+ refs = get_submodule_ref_store(submodule);
1510
1511
if (!refs)
1512
return -1;
@@ -1636,6 +1621,16 @@ struct ref_store *get_submodule_ref_store(const char *submodule)
1621
{
1622
struct strbuf submodule_sb = STRBUF_INIT;
1623
struct ref_store *refs;
1624
+ char *to_free = NULL;
1625
+ size_t len;
1626
+
1627
+ if (submodule) {
1628
+ len = strlen(submodule);
1629
+ while (len && is_dir_sep(submodule[len - 1]))
1630
+ len--;
1631
+ if (!len)
1632
+ return NULL;
1633
+ }
1634
1635
if (!submodule || !*submodule) {
1636
/*
@@ -1645,6 +1640,10 @@ struct ref_store *get_submodule_ref_store(const char *submodule)
1640
return get_main_ref_store();
1641
}
1642
1643
+ if (submodule[len])
1644
+ /* We need to strip off one or more trailing slashes */
1645
+ submodule = to_free = xmemdupz(submodule, len);
1646
+
1647
refs = lookup_ref_store_map(&submodule_ref_stores, submodule);
1648
if (refs)
1649
goto done;
@@ -1664,6 +1663,8 @@ struct ref_store *get_submodule_ref_store(const char *submodule)
1663
1664
done:
1665
strbuf_release(&submodule_sb);
1666
+ free(to_free);
1667
+
1668
return refs;
1669
}
1670