Browse Source

fetch-pack: refactor writing promisor file

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>
maint
Christian Couder 4 years ago committed by Junio C Hamano
parent
commit
33add2ad7d
  1. 8
      builtin/repack.c
  2. 8
      fetch-pack.c
  3. 12
      pack-write.c
  4. 4
      pack.h

8
builtin/repack.c

@ -14,6 +14,7 @@ @@ -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, @@ -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, @@ -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);


8
fetch-pack.c

@ -777,8 +777,6 @@ static void create_promisor_file(const char *keep_name, @@ -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, @@ -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);
}

12
pack-write.c

@ -1,6 +1,7 @@ @@ -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, @@ -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);
}

4
pack.h

@ -87,6 +87,10 @@ off_t write_pack_header(struct hashfile *f, uint32_t); @@ -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.

Loading…
Cancel
Save