@ -295,6 +295,7 @@ static unsigned long branch_count;
static unsigned long branch_load_count;
static unsigned long branch_load_count;
static int failure;
static int failure;
static FILE *pack_edges;
static FILE *pack_edges;
static unsigned int show_stats = 1;
/* Memory pools */
/* Memory pools */
static size_t mem_pool_alloc = 2*1024*1024 - sizeof(struct mem_pool);
static size_t mem_pool_alloc = 2*1024*1024 - sizeof(struct mem_pool);
@ -2420,7 +2421,7 @@ static void parse_progress(void)
skip_optional_lf();
skip_optional_lf();
}
}
static void import_marks(const char *input_file)
static void option_import_marks(const char *input_file)
{
{
char line[512];
char line[512];
FILE *f = fopen(input_file, "r");
FILE *f = fopen(input_file, "r");
@ -2455,6 +2456,76 @@ static void import_marks(const char *input_file)
fclose(f);
fclose(f);
}
}
static void option_date_format(const char *fmt)
{
if (!strcmp(fmt, "raw"))
whenspec = WHENSPEC_RAW;
else if (!strcmp(fmt, "rfc2822"))
whenspec = WHENSPEC_RFC2822;
else if (!strcmp(fmt, "now"))
whenspec = WHENSPEC_NOW;
else
die("unknown --date-format argument %s", fmt);
}
static void option_max_pack_size(const char *packsize)
{
max_packsize = strtoumax(packsize, NULL, 0) * 1024 * 1024;
}
static void option_depth(const char *depth)
{
max_depth = strtoul(depth, NULL, 0);
if (max_depth > MAX_DEPTH)
die("--depth cannot exceed %u", MAX_DEPTH);
}
static void option_active_branches(const char *branches)
{
max_active_branches = strtoul(branches, NULL, 0);
}
static void option_export_marks(const char *marks)
{
mark_file = xstrdup(marks);
}
static void option_export_pack_edges(const char *edges)
{
if (pack_edges)
fclose(pack_edges);
pack_edges = fopen(edges, "a");
if (!pack_edges)
die_errno("Cannot open '%s'", edges);
}
static void parse_one_option(const char *option)
{
if (!prefixcmp(option, "date-format=")) {
option_date_format(option + 12);
} else if (!prefixcmp(option, "max-pack-size=")) {
option_max_pack_size(option + 14);
} else if (!prefixcmp(option, "depth=")) {
option_depth(option + 6);
} else if (!prefixcmp(option, "active-branches=")) {
option_active_branches(option + 16);
} else if (!prefixcmp(option, "import-marks=")) {
option_import_marks(option + 13);
} else if (!prefixcmp(option, "export-marks=")) {
option_export_marks(option + 13);
} else if (!prefixcmp(option, "export-pack-edges=")) {
option_export_pack_edges(option + 18);
} else if (!prefixcmp(option, "force")) {
force_update = 1;
} else if (!prefixcmp(option, "quiet")) {
show_stats = 0;
} else if (!prefixcmp(option, "stats")) {
show_stats = 1;
} else {
die("Unsupported option: %s", option);
}
}
static int git_pack_config(const char *k, const char *v, void *cb)
static int git_pack_config(const char *k, const char *v, void *cb)
{
{
if (!strcmp(k, "pack.depth")) {
if (!strcmp(k, "pack.depth")) {
@ -2481,7 +2552,7 @@ static const char fast_import_usage[] =
int main(int argc, const char **argv)
int main(int argc, const char **argv)
{
{
unsigned int i, show_stats = 1;
unsigned int i;
git_extract_argv0_path(argv[0]);
git_extract_argv0_path(argv[0]);
@ -2505,44 +2576,8 @@ int main(int argc, const char **argv)
if (*a != '-' || !strcmp(a, "--"))
if (*a != '-' || !strcmp(a, "--"))
break;
break;
else if (!prefixcmp(a, "--date-format=")) {
const char *fmt = a + 14;
parse_one_option(a + 2);
if (!strcmp(fmt, "raw"))
whenspec = WHENSPEC_RAW;
else if (!strcmp(fmt, "rfc2822"))
whenspec = WHENSPEC_RFC2822;
else if (!strcmp(fmt, "now"))
whenspec = WHENSPEC_NOW;
else
die("unknown --date-format argument %s", fmt);
}
else if (!prefixcmp(a, "--max-pack-size="))
max_packsize = strtoumax(a + 16, NULL, 0) * 1024 * 1024;
else if (!prefixcmp(a, "--depth=")) {
max_depth = strtoul(a + 8, NULL, 0);
if (max_depth > MAX_DEPTH)
die("--depth cannot exceed %u", MAX_DEPTH);
}
else if (!prefixcmp(a, "--active-branches="))
max_active_branches = strtoul(a + 18, NULL, 0);
else if (!prefixcmp(a, "--import-marks="))
import_marks(a + 15);
else if (!prefixcmp(a, "--export-marks="))
mark_file = a + 15;
else if (!prefixcmp(a, "--export-pack-edges=")) {
if (pack_edges)
fclose(pack_edges);
pack_edges = fopen(a + 20, "a");
if (!pack_edges)
die_errno("Cannot open '%s'", a + 20);
} else if (!strcmp(a, "--force"))
force_update = 1;
else if (!strcmp(a, "--quiet"))
show_stats = 0;
else if (!strcmp(a, "--stats"))
show_stats = 1;
else
die("unknown option %s", a);
}
}
if (i != argc)
if (i != argc)
usage(fast_import_usage);
usage(fast_import_usage);