mirror of
https://github.com/git/git
synced 2024-10-02 14:45:21 +00:00
repack: refactor finishing pack-objects command
Create a new finish_pack_objects_cmd() to refactor duplicated code that handles reading the packfile names from the output of a `git pack-objects` command and putting it into a string_list, as well as calling finish_command(). While at it, beautify a code comment a bit in the new function. Signed-off-by: Christian Couder <chriscool@tuxfamily.org Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
66589f89ab
commit
ff8504e4ec
|
@ -806,6 +806,36 @@ static void remove_redundant_bitmaps(struct string_list *include,
|
|||
strbuf_release(&path);
|
||||
}
|
||||
|
||||
static int finish_pack_objects_cmd(struct child_process *cmd,
|
||||
struct string_list *names,
|
||||
int local)
|
||||
{
|
||||
FILE *out;
|
||||
struct strbuf line = STRBUF_INIT;
|
||||
|
||||
out = xfdopen(cmd->out, "r");
|
||||
while (strbuf_getline_lf(&line, out) != EOF) {
|
||||
struct string_list_item *item;
|
||||
|
||||
if (line.len != the_hash_algo->hexsz)
|
||||
die(_("repack: Expecting full hex object ID lines only "
|
||||
"from pack-objects."));
|
||||
/*
|
||||
* Avoid putting packs written outside of the repository in the
|
||||
* list of names.
|
||||
*/
|
||||
if (local) {
|
||||
item = string_list_append(names, line.buf);
|
||||
item->util = populate_pack_exts(line.buf);
|
||||
}
|
||||
}
|
||||
fclose(out);
|
||||
|
||||
strbuf_release(&line);
|
||||
|
||||
return finish_command(cmd);
|
||||
}
|
||||
|
||||
static int write_cruft_pack(const struct pack_objects_args *args,
|
||||
const char *destination,
|
||||
const char *pack_prefix,
|
||||
|
@ -814,9 +844,8 @@ static int write_cruft_pack(const struct pack_objects_args *args,
|
|||
struct existing_packs *existing)
|
||||
{
|
||||
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||
struct strbuf line = STRBUF_INIT;
|
||||
struct string_list_item *item;
|
||||
FILE *in, *out;
|
||||
FILE *in;
|
||||
int ret;
|
||||
const char *scratch;
|
||||
int local = skip_prefix(destination, packdir, &scratch);
|
||||
|
@ -861,27 +890,7 @@ static int write_cruft_pack(const struct pack_objects_args *args,
|
|||
fprintf(in, "%s.pack\n", item->string);
|
||||
fclose(in);
|
||||
|
||||
out = xfdopen(cmd.out, "r");
|
||||
while (strbuf_getline_lf(&line, out) != EOF) {
|
||||
struct string_list_item *item;
|
||||
|
||||
if (line.len != the_hash_algo->hexsz)
|
||||
die(_("repack: Expecting full hex object ID lines only "
|
||||
"from pack-objects."));
|
||||
/*
|
||||
* avoid putting packs written outside of the repository in the
|
||||
* list of names
|
||||
*/
|
||||
if (local) {
|
||||
item = string_list_append(names, line.buf);
|
||||
item->util = populate_pack_exts(line.buf);
|
||||
}
|
||||
}
|
||||
fclose(out);
|
||||
|
||||
strbuf_release(&line);
|
||||
|
||||
return finish_command(&cmd);
|
||||
return finish_pack_objects_cmd(&cmd, names, local);
|
||||
}
|
||||
|
||||
int cmd_repack(int argc, const char **argv, const char *prefix)
|
||||
|
@ -891,10 +900,8 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
|||
struct string_list names = STRING_LIST_INIT_DUP;
|
||||
struct existing_packs existing = EXISTING_PACKS_INIT;
|
||||
struct pack_geometry geometry = { 0 };
|
||||
struct strbuf line = STRBUF_INIT;
|
||||
struct tempfile *refs_snapshot = NULL;
|
||||
int i, ext, ret;
|
||||
FILE *out;
|
||||
int show_progress;
|
||||
|
||||
/* variables to be filled by option parsing */
|
||||
|
@ -1124,18 +1131,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
|||
fclose(in);
|
||||
}
|
||||
|
||||
out = xfdopen(cmd.out, "r");
|
||||
while (strbuf_getline_lf(&line, out) != EOF) {
|
||||
struct string_list_item *item;
|
||||
|
||||
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);
|
||||
item->util = populate_pack_exts(item->string);
|
||||
}
|
||||
strbuf_release(&line);
|
||||
fclose(out);
|
||||
ret = finish_command(&cmd);
|
||||
ret = finish_pack_objects_cmd(&cmd, &names, 1);
|
||||
if (ret)
|
||||
goto cleanup;
|
||||
|
||||
|
|
Loading…
Reference in a new issue