]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/index-pack.c: allow stripping arbitrary extensions
authorTaylor Blau <me@ttaylorr.com>
Mon, 25 Jan 2021 23:37:22 +0000 (18:37 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 26 Jan 2021 02:32:43 +0000 (18:32 -0800)
To derive the filename for a .idx file, 'git index-pack' uses
derive_filename() to strip the '.pack' suffix and add the new suffix.

Prepare for stripping off suffixes other than '.pack' by making the
suffix to strip a parameter of derive_filename(). In order to make this
consistent with the "suffix" parameter which does not begin with a ".",
an additional check in derive_filename.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/index-pack.c

index 557bd2f3480e606636af79bd4c0f6deff8b0a3c7..c758f3b8e9640fa84b18df171c25bf3643cf5bbb 100644 (file)
@@ -1436,15 +1436,15 @@ static void fix_unresolved_deltas(struct hashfile *f)
        free(sorted_by_pos);
 }
 
-static const char *derive_filename(const char *pack_name, const char *suffix,
-                                  struct strbuf *buf)
+static const char *derive_filename(const char *pack_name, const char *strip,
+                                  const char *suffix, struct strbuf *buf)
 {
        size_t len;
-       if (!strip_suffix(pack_name, ".pack", &len))
-               die(_("packfile name '%s' does not end with '.pack'"),
-                   pack_name);
+       if (!strip_suffix(pack_name, strip, &len) || !len ||
+           pack_name[len - 1] != '.')
+               die(_("packfile name '%s' does not end with '.%s'"),
+                   pack_name, strip);
        strbuf_add(buf, pack_name, len);
-       strbuf_addch(buf, '.');
        strbuf_addstr(buf, suffix);
        return buf->buf;
 }
@@ -1459,7 +1459,7 @@ static void write_special_file(const char *suffix, const char *msg,
        int msg_len = strlen(msg);
 
        if (pack_name)
-               filename = derive_filename(pack_name, suffix, &name_buf);
+               filename = derive_filename(pack_name, "pack", suffix, &name_buf);
        else
                filename = odb_pack_name(&name_buf, hash, suffix);
 
@@ -1824,7 +1824,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
        if (from_stdin && hash_algo)
                die(_("--object-format cannot be used with --stdin"));
        if (!index_name && pack_name)
-               index_name = derive_filename(pack_name, "idx", &index_name_buf);
+               index_name = derive_filename(pack_name, "pack", "idx", &index_name_buf);
 
        if (verify) {
                if (!index_name)