repack: refactor pack deletion for future use
The repack builtin deletes redundant pack-files and their associated .idx, .promisor, .bitmap, and .keep files. We will want to re-use this logic in the future for other types of repack, so pull the logic into 'unlink_pack_path()' in packfile.c. The 'ignore_keep' parameter is enabled for the use in repack, but will be important for a future caller. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b697d92f56
commit
8434e85d5f
@ -129,19 +129,9 @@ static void get_non_kept_pack_filenames(struct string_list *fname_list,
|
||||
|
||||
static void remove_redundant_pack(const char *dir_name, const char *base_name)
|
||||
{
|
||||
const char *exts[] = {".pack", ".idx", ".keep", ".bitmap", ".promisor"};
|
||||
int i;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
size_t plen;
|
||||
|
||||
strbuf_addf(&buf, "%s/%s", dir_name, base_name);
|
||||
plen = buf.len;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(exts); i++) {
|
||||
strbuf_setlen(&buf, plen);
|
||||
strbuf_addstr(&buf, exts[i]);
|
||||
unlink(buf.buf);
|
||||
}
|
||||
strbuf_addf(&buf, "%s/%s.pack", dir_name, base_name);
|
||||
unlink_pack_path(buf.buf, 1);
|
||||
strbuf_release(&buf);
|
||||
}
|
||||
|
||||
|
28
packfile.c
28
packfile.c
@ -352,6 +352,34 @@ void close_all_packs(struct raw_object_store *o)
|
||||
}
|
||||
}
|
||||
|
||||
void unlink_pack_path(const char *pack_name, int force_delete)
|
||||
{
|
||||
static const char *exts[] = {".pack", ".idx", ".keep", ".bitmap", ".promisor"};
|
||||
int i;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
size_t plen;
|
||||
|
||||
strbuf_addstr(&buf, pack_name);
|
||||
strip_suffix_mem(buf.buf, &buf.len, ".pack");
|
||||
plen = buf.len;
|
||||
|
||||
if (!force_delete) {
|
||||
strbuf_addstr(&buf, ".keep");
|
||||
if (!access(buf.buf, F_OK)) {
|
||||
strbuf_release(&buf);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(exts); i++) {
|
||||
strbuf_setlen(&buf, plen);
|
||||
strbuf_addstr(&buf, exts[i]);
|
||||
unlink(buf.buf);
|
||||
}
|
||||
|
||||
strbuf_release(&buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* The LRU pack is the one with the oldest MRU window, preferring packs
|
||||
* with no used windows, or the oldest mtime if it has no windows allocated.
|
||||
|
@ -95,6 +95,13 @@ void unuse_pack(struct pack_window **);
|
||||
void clear_delta_base_cache(void);
|
||||
struct packed_git *add_packed_git(const char *path, size_t path_len, int local);
|
||||
|
||||
/*
|
||||
* Unlink the .pack and associated extension files.
|
||||
* Does not unlink if 'force_delete' is false and the pack-file is
|
||||
* marked as ".keep".
|
||||
*/
|
||||
extern void unlink_pack_path(const char *pack_name, int force_delete);
|
||||
|
||||
/*
|
||||
* Make sure that a pointer access into an mmap'd index file is within bounds,
|
||||
* and can provide at least 8 bytes of data.
|
||||
|
Loading…
Reference in New Issue
Block a user