mirror of
https://github.com/git-for-windows/git.git
synced 2026-03-17 13:23:05 -05:00
A ton of Git commands simply do not read (or at least parse) the core.* settings. This is not good, as Git for Windows relies on the core.longPaths setting to be read quite early on. So let's just make sure that all commands read the config and give platform_core_config() a chance. This patch teaches tons of Git commands to respect the config setting `core.longPaths = true`, including `pack-refs`, thereby fixing https://github.com/git-for-windows/git/issues/1218 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
76 lines
1.7 KiB
C
76 lines
1.7 KiB
C
#include "builtin.h"
|
|
#include "cache.h"
|
|
#include "progress.h"
|
|
#include "parse-options.h"
|
|
#include "packfile.h"
|
|
#include "object-store.h"
|
|
#include "config.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()
|
|
};
|
|
|
|
git_config(git_default_config, NULL);
|
|
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;
|
|
}
|