Skip to content

Commit

Permalink
fast-import: put option parsing code in separate functions
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Sverre Rabbelier authored and Junio C Hamano committed Dec 5, 2009
1 parent 1a56be1 commit 0f6927c
Showing 1 changed file with 75 additions and 40 deletions.
115 changes: 75 additions & 40 deletions fast-import.c
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,7 @@ static unsigned long branch_count;
static unsigned long branch_load_count;
static int failure;
static FILE *pack_edges;
static unsigned int show_stats = 1;

/* Memory pools */
static size_t mem_pool_alloc = 2*1024*1024 - sizeof(struct mem_pool);
Expand Down Expand Up @@ -2420,7 +2421,7 @@ static void parse_progress(void)
skip_optional_lf();
}

static void import_marks(const char *input_file)
static void option_import_marks(const char *input_file)
{
char line[512];
FILE *f = fopen(input_file, "r");
Expand Down Expand Up @@ -2455,6 +2456,76 @@ static void import_marks(const char *input_file)
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)
{
if (!strcmp(k, "pack.depth")) {
Expand All @@ -2481,7 +2552,7 @@ static const char fast_import_usage[] =

int main(int argc, const char **argv)
{
unsigned int i, show_stats = 1;
unsigned int i;

git_extract_argv0_path(argv[0]);

Expand All @@ -2505,44 +2576,8 @@ int main(int argc, const char **argv)

if (*a != '-' || !strcmp(a, "--"))
break;
else if (!prefixcmp(a, "--date-format=")) {
const char *fmt = a + 14;
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);

parse_one_option(a + 2);
}
if (i != argc)
usage(fast_import_usage);
Expand Down

0 comments on commit 0f6927c

Please sign in to comment.