When we open a pack .idx, we have to convert the "foo.pack" name stored
in the packed_git struct to "foo.idx". This isn't too complicated, but
we do encode some policy in the form of a BUG(). Let's pull this into
its own function so it can be reused.

Signed-off-by: Jeff King <p...@peff.net>
---
 packfile.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/packfile.c b/packfile.c
index 16bcb75262..054269ae5d 100644
--- a/packfile.c
+++ b/packfile.c
@@ -186,18 +186,24 @@ int load_idx(const char *path, const unsigned int hashsz, 
void *idx_map,
        return 0;
 }
 
+static char *pack_name_to_idx(const char *pack_name)
+{
+       size_t len;
+
+       if (!strip_suffix(pack_name, ".pack", &len))
+               BUG("pack_name does not end in .pack");
+       return xstrfmt("%.*s.idx", (int)len, pack_name);
+}
+
 int open_pack_index(struct packed_git *p)
 {
        char *idx_name;
-       size_t len;
        int ret;
 
        if (p->index_data)
                return 0;
 
-       if (!strip_suffix(p->pack_name, ".pack", &len))
-               BUG("pack_name does not end in .pack");
-       idx_name = xstrfmt("%.*s.idx", (int)len, p->pack_name);
+       idx_name = pack_name_to_idx(p->pack_name);
        ret = check_packed_git_idx(idx_name, p);
        free(idx_name);
        return ret;
-- 
2.21.0.714.gd1be1d035b

Reply via email to