]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fetch-pack: refactor writing promisor file
authorChristian Couder <christian.couder@gmail.com>
Tue, 12 Jan 2021 08:21:59 +0000 (09:21 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 13 Jan 2021 00:01:07 +0000 (16:01 -0800)
Let's replace the 2 different pieces of code that write a
promisor file in 'builtin/repack.c' and 'fetch-pack.c'
with a new function called 'write_promisor_file()' in
'pack-write.c' and 'pack.h'.

This might also help us in the future, if we want to put
back the ref names and associated hashes that were in
the promisor files we are repacking in 'builtin/repack.c'
as suggested by a NEEDSWORK comment just above the code
we are refactoring.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/repack.c
fetch-pack.c
pack-write.c
pack.h

index 279be11a164af7b0f00b2b2f2841b59693a3afd7..2158b48f4cc72ed65c50c143dbedfc4c8a6fac32 100644 (file)
@@ -14,6 +14,7 @@
 #include "object-store.h"
 #include "promisor-remote.h"
 #include "shallow.h"
+#include "pack.h"
 
 static int delta_base_offset = 1;
 static int pack_kept_objects = -1;
@@ -263,7 +264,7 @@ static void repack_promisor_objects(const struct pack_objects_args *args,
        while (strbuf_getline_lf(&line, out) != EOF) {
                struct string_list_item *item;
                char *promisor_name;
-               int fd;
+
                if (line.len != the_hash_algo->hexsz)
                        die(_("repack: Expecting full hex object ID lines only from pack-objects."));
                item = string_list_append(names, line.buf);
@@ -281,10 +282,7 @@ static void repack_promisor_objects(const struct pack_objects_args *args,
                 */
                promisor_name = mkpathdup("%s-%s.promisor", packtmp,
                                          line.buf);
-               fd = open(promisor_name, O_CREAT|O_EXCL|O_WRONLY, 0600);
-               if (fd < 0)
-                       die_errno(_("unable to create '%s'"), promisor_name);
-               close(fd);
+               write_promisor_file(promisor_name, NULL, 0);
 
                item->util = (void *)(uintptr_t)populate_pack_exts(item->string);
 
index c5fa4992a66b323a9b3e21e4937fdfe7a3dd7e1b..1eaedcb5dc2ed45e18e29bf185958a663f89eccb 100644 (file)
@@ -777,8 +777,6 @@ static void create_promisor_file(const char *keep_name,
 {
        struct strbuf promisor_name = STRBUF_INIT;
        int suffix_stripped;
-       FILE *output;
-       int i;
 
        strbuf_addstr(&promisor_name, keep_name);
        suffix_stripped = strbuf_strip_suffix(&promisor_name, ".keep");
@@ -787,11 +785,7 @@ static void create_promisor_file(const char *keep_name,
                    keep_name);
        strbuf_addstr(&promisor_name, ".promisor");
 
-       output = xfopen(promisor_name.buf, "w");
-       for (i = 0; i < nr_sought; i++)
-               fprintf(output, "%s %s\n", oid_to_hex(&sought[i]->old_oid),
-                       sought[i]->name);
-       fclose(output);
+       write_promisor_file(promisor_name.buf, sought, nr_sought);
 
        strbuf_release(&promisor_name);
 }
index 3513665e1e1be606dd116370fefbbb2a0d781245..db3ff9980f06293975726c79253637f6b6af1627 100644 (file)
@@ -1,6 +1,7 @@
 #include "cache.h"
 #include "pack.h"
 #include "csum-file.h"
+#include "remote.h"
 
 void reset_pack_idx_option(struct pack_idx_option *opts)
 {
@@ -367,3 +368,14 @@ void finish_tmp_packfile(struct strbuf *name_buffer,
 
        free((void *)idx_tmp_name);
 }
+
+void write_promisor_file(const char *promisor_name, struct ref **sought, int nr_sought)
+{
+       int i;
+       FILE *output = xfopen(promisor_name, "w");
+
+       for (i = 0; i < nr_sought; i++)
+               fprintf(output, "%s %s\n", oid_to_hex(&sought[i]->old_oid),
+                       sought[i]->name);
+       fclose(output);
+}
diff --git a/pack.h b/pack.h
index 9fc0945ac9162e542d32c0352ddf6b63e5438f40..9ae640f4176f88836a21ff69416f5edef2bc5e9f 100644 (file)
--- a/pack.h
+++ b/pack.h
@@ -87,6 +87,10 @@ off_t write_pack_header(struct hashfile *f, uint32_t);
 void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t);
 char *index_pack_lockfile(int fd);
 
+struct ref;
+
+void write_promisor_file(const char *promisor_name, struct ref **sought, int nr_sought);
+
 /*
  * The "hdr" output buffer should be at least this big, which will handle sizes
  * up to 2^67.