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