fast-import: put option parsing code in separate functions

Putting the options in their own functions increases readability of
the option parsing block and makes it easier to reuse the option
parsing code later on.

Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Sverre Rabbelier 2009-12-04 18:06:54 +01:00 коммит произвёл Junio C Hamano
Родитель 1a56be134f
Коммит 0f6927c229
1 изменённых файлов: 75 добавлений и 40 удалений

Просмотреть файл

@ -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);