You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.7 KiB
73 lines
1.7 KiB
#include "builtin.h" |
|
#include "cache.h" |
|
#include "progress.h" |
|
#include "parse-options.h" |
|
#include "packfile.h" |
|
#include "object-store.h" |
|
|
|
static const char * const prune_packed_usage[] = { |
|
N_("git prune-packed [-n | --dry-run] [-q | --quiet]"), |
|
NULL |
|
}; |
|
|
|
static struct progress *progress; |
|
|
|
static int prune_subdir(unsigned int nr, const char *path, void *data) |
|
{ |
|
int *opts = data; |
|
display_progress(progress, nr + 1); |
|
if (!(*opts & PRUNE_PACKED_DRY_RUN)) |
|
rmdir(path); |
|
return 0; |
|
} |
|
|
|
static int prune_object(const struct object_id *oid, const char *path, |
|
void *data) |
|
{ |
|
int *opts = data; |
|
|
|
if (!has_object_pack(oid)) |
|
return 0; |
|
|
|
if (*opts & PRUNE_PACKED_DRY_RUN) |
|
printf("rm -f %s\n", path); |
|
else |
|
unlink_or_warn(path); |
|
return 0; |
|
} |
|
|
|
void prune_packed_objects(int opts) |
|
{ |
|
if (opts & PRUNE_PACKED_VERBOSE) |
|
progress = start_delayed_progress(_("Removing duplicate objects"), 256); |
|
|
|
for_each_loose_file_in_objdir(get_object_directory(), |
|
prune_object, NULL, prune_subdir, &opts); |
|
|
|
/* Ensure we show 100% before finishing progress */ |
|
display_progress(progress, 256); |
|
stop_progress(&progress); |
|
} |
|
|
|
int cmd_prune_packed(int argc, const char **argv, const char *prefix) |
|
{ |
|
int opts = isatty(2) ? PRUNE_PACKED_VERBOSE : 0; |
|
const struct option prune_packed_options[] = { |
|
OPT_BIT('n', "dry-run", &opts, N_("dry run"), |
|
PRUNE_PACKED_DRY_RUN), |
|
OPT_NEGBIT('q', "quiet", &opts, N_("be quiet"), |
|
PRUNE_PACKED_VERBOSE), |
|
OPT_END() |
|
}; |
|
|
|
argc = parse_options(argc, argv, prefix, prune_packed_options, |
|
prune_packed_usage, 0); |
|
|
|
if (argc > 0) |
|
usage_msg_opt(_("too many arguments"), |
|
prune_packed_usage, |
|
prune_packed_options); |
|
|
|
prune_packed_objects(opts); |
|
return 0; |
|
}
|
|
|