mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
repack: remove 'generated_pack' API from the builtin
Now that we have factored the "generated_pack" API, we can move it to repack.ch, further slimming down builtin/repack.c. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
7036d131ae
commit
f053ab6c2b
@@ -134,89 +134,6 @@ static int write_oid(const struct object_id *oid,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct {
|
||||
const char *name;
|
||||
unsigned optional:1;
|
||||
} exts[] = {
|
||||
{".pack"},
|
||||
{".rev", 1},
|
||||
{".mtimes", 1},
|
||||
{".bitmap", 1},
|
||||
{".promisor", 1},
|
||||
{".idx"},
|
||||
};
|
||||
|
||||
struct generated_pack {
|
||||
struct tempfile *tempfiles[ARRAY_SIZE(exts)];
|
||||
};
|
||||
|
||||
static struct generated_pack *generated_pack_populate(const char *name,
|
||||
const char *packtmp)
|
||||
{
|
||||
struct stat statbuf;
|
||||
struct strbuf path = STRBUF_INIT;
|
||||
struct generated_pack *pack = xcalloc(1, sizeof(*pack));
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(exts); i++) {
|
||||
strbuf_reset(&path);
|
||||
strbuf_addf(&path, "%s-%s%s", packtmp, name, exts[i].name);
|
||||
|
||||
if (stat(path.buf, &statbuf))
|
||||
continue;
|
||||
|
||||
pack->tempfiles[i] = register_tempfile(path.buf);
|
||||
}
|
||||
|
||||
strbuf_release(&path);
|
||||
return pack;
|
||||
}
|
||||
|
||||
static int generated_pack_has_ext(const struct generated_pack *pack,
|
||||
const char *ext)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(exts); i++) {
|
||||
if (strcmp(exts[i].name, ext))
|
||||
continue;
|
||||
return !!pack->tempfiles[i];
|
||||
}
|
||||
BUG("unknown pack extension: '%s'", ext);
|
||||
}
|
||||
|
||||
static void generated_pack_install(struct generated_pack *pack,
|
||||
const char *name,
|
||||
const char *packdir, const char *packtmp)
|
||||
{
|
||||
int ext;
|
||||
for (ext = 0; ext < ARRAY_SIZE(exts); ext++) {
|
||||
char *fname;
|
||||
|
||||
fname = mkpathdup("%s/pack-%s%s", packdir, name,
|
||||
exts[ext].name);
|
||||
|
||||
if (pack->tempfiles[ext]) {
|
||||
const char *fname_old = get_tempfile_path(pack->tempfiles[ext]);
|
||||
struct stat statbuffer;
|
||||
|
||||
if (!stat(fname_old, &statbuffer)) {
|
||||
statbuffer.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
|
||||
chmod(fname_old, statbuffer.st_mode);
|
||||
}
|
||||
|
||||
if (rename_tempfile(&pack->tempfiles[ext], fname))
|
||||
die_errno(_("renaming pack to '%s' failed"),
|
||||
fname);
|
||||
} else if (!exts[ext].optional)
|
||||
die(_("pack-objects did not write a '%s' file for pack %s-%s"),
|
||||
exts[ext].name, packtmp, name);
|
||||
else if (unlink(fname) < 0 && errno != ENOENT)
|
||||
die_errno(_("could not unlink: %s"), fname);
|
||||
|
||||
free(fname);
|
||||
}
|
||||
}
|
||||
|
||||
static void repack_promisor_objects(struct repository *repo,
|
||||
const struct pack_objects_args *args,
|
||||
struct string_list *names)
|
||||
|
||||
83
repack.c
83
repack.c
@@ -3,9 +3,11 @@
|
||||
#include "midx.h"
|
||||
#include "odb.h"
|
||||
#include "packfile.h"
|
||||
#include "path.h"
|
||||
#include "repack.h"
|
||||
#include "repository.h"
|
||||
#include "run-command.h"
|
||||
#include "tempfile.h"
|
||||
|
||||
void prepare_pack_objects(struct child_process *cmd,
|
||||
const struct pack_objects_args *args,
|
||||
@@ -219,3 +221,84 @@ void existing_packs_release(struct existing_packs *existing)
|
||||
string_list_clear(&existing->non_kept_packs, 0);
|
||||
string_list_clear(&existing->cruft_packs, 0);
|
||||
}
|
||||
|
||||
static struct {
|
||||
const char *name;
|
||||
unsigned optional:1;
|
||||
} exts[] = {
|
||||
{".pack"},
|
||||
{".rev", 1},
|
||||
{".mtimes", 1},
|
||||
{".bitmap", 1},
|
||||
{".promisor", 1},
|
||||
{".idx"},
|
||||
};
|
||||
|
||||
struct generated_pack {
|
||||
struct tempfile *tempfiles[ARRAY_SIZE(exts)];
|
||||
};
|
||||
|
||||
struct generated_pack *generated_pack_populate(const char *name,
|
||||
const char *packtmp)
|
||||
{
|
||||
struct stat statbuf;
|
||||
struct strbuf path = STRBUF_INIT;
|
||||
struct generated_pack *pack = xcalloc(1, sizeof(*pack));
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(exts); i++) {
|
||||
strbuf_reset(&path);
|
||||
strbuf_addf(&path, "%s-%s%s", packtmp, name, exts[i].name);
|
||||
|
||||
if (stat(path.buf, &statbuf))
|
||||
continue;
|
||||
|
||||
pack->tempfiles[i] = register_tempfile(path.buf);
|
||||
}
|
||||
|
||||
strbuf_release(&path);
|
||||
return pack;
|
||||
}
|
||||
|
||||
int generated_pack_has_ext(const struct generated_pack *pack, const char *ext)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < ARRAY_SIZE(exts); i++) {
|
||||
if (strcmp(exts[i].name, ext))
|
||||
continue;
|
||||
return !!pack->tempfiles[i];
|
||||
}
|
||||
BUG("unknown pack extension: '%s'", ext);
|
||||
}
|
||||
|
||||
void generated_pack_install(struct generated_pack *pack, const char *name,
|
||||
const char *packdir, const char *packtmp)
|
||||
{
|
||||
size_t ext;
|
||||
for (ext = 0; ext < ARRAY_SIZE(exts); ext++) {
|
||||
char *fname;
|
||||
|
||||
fname = mkpathdup("%s/pack-%s%s", packdir, name,
|
||||
exts[ext].name);
|
||||
|
||||
if (pack->tempfiles[ext]) {
|
||||
const char *fname_old = get_tempfile_path(pack->tempfiles[ext]);
|
||||
struct stat statbuffer;
|
||||
|
||||
if (!stat(fname_old, &statbuffer)) {
|
||||
statbuffer.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
|
||||
chmod(fname_old, statbuffer.st_mode);
|
||||
}
|
||||
|
||||
if (rename_tempfile(&pack->tempfiles[ext], fname))
|
||||
die_errno(_("renaming pack to '%s' failed"),
|
||||
fname);
|
||||
} else if (!exts[ext].optional)
|
||||
die(_("pack-objects did not write a '%s' file for pack %s-%s"),
|
||||
exts[ext].name, packtmp, name);
|
||||
else if (unlink(fname) < 0 && errno != ENOENT)
|
||||
die_errno(_("could not unlink: %s"), fname);
|
||||
|
||||
free(fname);
|
||||
}
|
||||
}
|
||||
|
||||
8
repack.h
8
repack.h
@@ -66,4 +66,12 @@ void existing_packs_remove_redundant(struct existing_packs *existing,
|
||||
const char *packdir);
|
||||
void existing_packs_release(struct existing_packs *existing);
|
||||
|
||||
struct generated_pack;
|
||||
|
||||
struct generated_pack *generated_pack_populate(const char *name,
|
||||
const char *packtmp);
|
||||
int generated_pack_has_ext(const struct generated_pack *pack, const char *ext);
|
||||
void generated_pack_install(struct generated_pack *pack, const char *name,
|
||||
const char *packdir, const char *packtmp);
|
||||
|
||||
#endif /* REPACK_H */
|
||||
|
||||
Reference in New Issue
Block a user