1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-09 23:06:09 +02:00

index-pack: refactor renaming in final()

Refactor the renaming in final() into a helper function, this is
similar in spirit to a preceding refactoring of finish_tmp_packfile()
in pack-write.c.

Before e37d0b8730 (builtin/index-pack.c: write reverse indexes,
2021-01-25) it probably wasn't worth it to have this sort of helper,
due to the differing "else if" case for "pack" files v.s. "idx" files.

But since we've got "rev" as well now, let's do the renaming via a
helper, this is both a net decrease in lines, and improves the
readability, since we can easily see at a glance that the logic for
writing these three types of files is exactly the same, aside from the
obviously differing cases of "*final_name" being NULL, and
"make_read_only_if_same" being different.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2021-09-09 19:24:49 -04:00 committed by Junio C Hamano
parent 4e58cedd94
commit 8737dab346

View File

@ -1481,6 +1481,22 @@ static void write_special_file(const char *suffix, const char *msg,
strbuf_release(&name_buf);
}
static void rename_tmp_packfile(const char **final_name,
const char *curr_name,
struct strbuf *name, unsigned char *hash,
const char *ext, int make_read_only_if_same)
{
if (*final_name != curr_name) {
if (!*final_name)
*final_name = odb_pack_name(name, hash, ext);
if (finalize_object_file(curr_name, *final_name))
die(_("unable to rename temporary '*.%s' file to '%s"),
ext, *final_name);
} else if (make_read_only_if_same) {
chmod(*final_name, 0444);
}
}
static void final(const char *final_pack_name, const char *curr_pack_name,
const char *final_index_name, const char *curr_index_name,
const char *final_rev_index_name, const char *curr_rev_index_name,
@ -1509,31 +1525,13 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
write_special_file("promisor", promisor_msg, final_pack_name,
hash, NULL);
if (final_pack_name != curr_pack_name) {
if (!final_pack_name)
final_pack_name = odb_pack_name(&pack_name, hash, "pack");
if (finalize_object_file(curr_pack_name, final_pack_name))
die(_("cannot store pack file"));
} else if (from_stdin)
chmod(final_pack_name, 0444);
if (final_index_name != curr_index_name) {
if (!final_index_name)
final_index_name = odb_pack_name(&index_name, hash, "idx");
if (finalize_object_file(curr_index_name, final_index_name))
die(_("cannot store index file"));
} else
chmod(final_index_name, 0444);
if (curr_rev_index_name) {
if (final_rev_index_name != curr_rev_index_name) {
if (!final_rev_index_name)
final_rev_index_name = odb_pack_name(&rev_index_name, hash, "rev");
if (finalize_object_file(curr_rev_index_name, final_rev_index_name))
die(_("cannot store reverse index file"));
} else
chmod(final_rev_index_name, 0444);
}
rename_tmp_packfile(&final_pack_name, curr_pack_name, &pack_name,
hash, "pack", from_stdin);
rename_tmp_packfile(&final_index_name, curr_index_name, &index_name,
hash, "idx", 1);
if (curr_rev_index_name)
rename_tmp_packfile(&final_rev_index_name, curr_rev_index_name,
&rev_index_name, hash, "rev", 1);
if (do_fsck_object) {
struct packed_git *p;