* [PATCH v3 0/3] fast-import: add a new option command
@ 2009-08-13 19:02 Sverre Rabbelier
2009-08-13 19:02 ` [PATCH v3 1/3] fast-import: put option parsing code in seperate functions Sverre Rabbelier
0 siblings, 1 reply; 8+ messages in thread
From: Sverre Rabbelier @ 2009-08-13 19:02 UTC (permalink / raw)
To: Junio C Hamano, Shawn O. Pearce, Johannes Schindelin, Git List
Now we delay reading the marks file till option parsing is done.
Sverre Rabbelier (3):
fast-import: put option parsing code in seperate functions
fast-import: add option command
fast-import: test the new option command
Documentation/git-fast-import.txt | 23 ++++
fast-import.c | 235 +++++++++++++++++++++++++------------
t/t9300-fast-import.sh | 58 +++++++++
3 files changed, 239 insertions(+), 77 deletions(-)
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v3 1/3] fast-import: put option parsing code in seperate functions 2009-08-13 19:02 [PATCH v3 0/3] fast-import: add a new option command Sverre Rabbelier @ 2009-08-13 19:02 ` Sverre Rabbelier 2009-08-13 19:02 ` [PATCH v3 2/3] fast-import: add option command Sverre Rabbelier 0 siblings, 1 reply; 8+ messages in thread From: Sverre Rabbelier @ 2009-08-13 19:02 UTC (permalink / raw) To: Junio C Hamano, Shawn O. Pearce, Johannes Schindelin, Git List Cc: Sverre Rabbelier 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> --- Unchanged from v2. fast-import.c | 115 +++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 75 insertions(+), 40 deletions(-) diff --git a/fast-import.c b/fast-import.c index 7ef9865..b904f20 100644 --- a/fast-import.c +++ b/fast-import.c @@ -291,6 +291,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); @@ -2337,7 +2338,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"); @@ -2372,6 +2373,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")) { @@ -2398,7 +2469,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]); @@ -2419,44 +2490,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); -- 1.6.4.122.g6ffd7 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 2/3] fast-import: add option command 2009-08-13 19:02 ` [PATCH v3 1/3] fast-import: put option parsing code in seperate functions Sverre Rabbelier @ 2009-08-13 19:02 ` Sverre Rabbelier 2009-08-13 19:02 ` [PATCH v3 3/3] fast-import: test the new " Sverre Rabbelier 2009-08-14 15:37 ` [PATCH v3 2/3] fast-import: add " Shawn O. Pearce 0 siblings, 2 replies; 8+ messages in thread From: Sverre Rabbelier @ 2009-08-13 19:02 UTC (permalink / raw) To: Junio C Hamano, Shawn O. Pearce, Johannes Schindelin, Git List Cc: Sverre Rabbelier This allows the frontend to specify any of the supported options as long as no non-option command has been given. This way the user does not have to include any frontend-specific options, but instead she can rely on the frontend to tell fast-import what it needs. Also factor out parsing of argv and have it execute when we reach the first non-option command, or after all commands have been read and no non-option command has been encountered. Lastly do not read the marks file till after all options have been parsed, instead of when receiving the option. Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com> --- Now we delay reading the marks file till option parsing is done. Documentation/git-fast-import.txt | 23 +++++++ fast-import.c | 130 +++++++++++++++++++++++++------------ 2 files changed, 111 insertions(+), 42 deletions(-) diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt index c2f483a..ed8bd0d 100644 --- a/Documentation/git-fast-import.txt +++ b/Documentation/git-fast-import.txt @@ -303,6 +303,11 @@ and control the current import process. More detailed discussion standard output. This command is optional and is not needed to perform an import. +`option`:: + Specify any of the options listed under OPTIONS to change + fast-import's behavior to suit the frontend's needs. This command + is optional and is not needed to perform an import. + `commit` ~~~~~~~~ Create or update a branch with a new commit, recording one logical @@ -813,6 +818,24 @@ Placing a `progress` command immediately after a `checkpoint` will inform the reader when the `checkpoint` has been completed and it can safely access the refs that fast-import updated. +`option` +~~~~~~~~ +Processes the specified option so that git fast-import behaves in a +way that suits the frontend's needs. +Note that options specified by the frontend are overridden by any +options the user may specify to git fast-import itself. + +.... + 'option' SP <option> LF +.... + +The `<option>` part of the command may contain any of the options +listed in the OPTIONS section, without the leading '--' and is +treated in the same way. + +Option commands must be the first commands on the input, to give an +option command after any non-option command is an error. + Crash Reports ------------- If fast-import is supplied invalid input it will terminate with a diff --git a/fast-import.c b/fast-import.c index b904f20..dff2937 100644 --- a/fast-import.c +++ b/fast-import.c @@ -292,6 +292,8 @@ static unsigned long branch_load_count; static int failure; static FILE *pack_edges; static unsigned int show_stats = 1; +static int global_argc; +static const char **global_argv; /* Memory pools */ static size_t mem_pool_alloc = 2*1024*1024 - sizeof(struct mem_pool); @@ -315,6 +317,7 @@ static struct object_entry_pool *blocks; static struct object_entry *object_table[1 << 16]; static struct mark_set *marks; static const char *mark_file; +static const char *input_file; /* Our last blob */ static struct last_object last_blob = { STRBUF_INIT, 0, 0, 0 }; @@ -348,6 +351,9 @@ static struct recent_command *rc_free; static unsigned int cmd_save = 100; static uintmax_t next_mark; static struct strbuf new_data = STRBUF_INIT; +static int seen_non_option_command; + +static void parse_argv(void); static void write_branch_report(FILE *rpt, struct branch *b) { @@ -1643,6 +1649,42 @@ static void dump_marks(void) } } +static void read_marks(void) +{ + char line[512]; + FILE *f = fopen(input_file, "r"); + if (!f) + die_errno("cannot read '%s'", input_file); + while (fgets(line, sizeof(line), f)) { + uintmax_t mark; + char *end; + unsigned char sha1[20]; + struct object_entry *e; + + end = strchr(line, '\n'); + if (line[0] != ':' || !end) + die("corrupt mark line: %s", line); + *end = 0; + mark = strtoumax(line + 1, &end, 10); + if (!mark || end == line + 1 + || *end != ' ' || get_sha1(end + 1, sha1)) + die("corrupt mark line: %s", line); + e = find_object(sha1); + if (!e) { + enum object_type type = sha1_object_info(sha1, NULL); + if (type < 0) + die("object not found: %s", sha1_to_hex(sha1)); + e = insert_object(sha1); + e->type = type; + e->pack_id = MAX_PACK_ID; + e->offset = 1; /* just not zero! */ + } + insert_mark(mark, e); + } + fclose(f); +} + + static int read_next_command(void) { static int stdin_eof = 0; @@ -1663,6 +1705,11 @@ static int read_next_command(void) if (stdin_eof) return EOF; + if (!seen_non_option_command + && prefixcmp(command_buf.buf, "option ")) { + parse_argv(); + } + rc = rc_free; if (rc) rc_free = rc->next; @@ -2338,39 +2385,9 @@ static void parse_progress(void) skip_optional_lf(); } -static void option_import_marks(const char *input_file) +static void option_import_marks(const char *marks) { - char line[512]; - FILE *f = fopen(input_file, "r"); - if (!f) - die_errno("cannot read '%s'", input_file); - while (fgets(line, sizeof(line), f)) { - uintmax_t mark; - char *end; - unsigned char sha1[20]; - struct object_entry *e; - - end = strchr(line, '\n'); - if (line[0] != ':' || !end) - die("corrupt mark line: %s", line); - *end = 0; - mark = strtoumax(line + 1, &end, 10); - if (!mark || end == line + 1 - || *end != ' ' || get_sha1(end + 1, sha1)) - die("corrupt mark line: %s", line); - e = find_object(sha1); - if (!e) { - enum object_type type = sha1_object_info(sha1, NULL); - if (type < 0) - die("object not found: %s", sha1_to_hex(sha1)); - e = insert_object(sha1); - e->type = type; - e->pack_id = MAX_PACK_ID; - e->offset = 1; /* just not zero! */ - } - insert_mark(mark, e); - } - fclose(f); + input_file = xstrdup(marks); } static void option_date_format(const char *fmt) @@ -2443,6 +2460,16 @@ static void parse_one_option(const char *option) } } +static void parse_option(void) +{ + char* option = command_buf.buf + 7; + + if (seen_non_option_command) + die("Got option command '%s' after non-option command", option); + + parse_one_option(option); +} + static int git_pack_config(const char *k, const char *v, void *cb) { if (!strcmp(k, "pack.depth")) { @@ -2467,6 +2494,26 @@ static int git_pack_config(const char *k, const char *v, void *cb) static const char fast_import_usage[] = "git fast-import [--date-format=f] [--max-pack-size=n] [--depth=n] [--active-branches=n] [--export-marks=marks.file]"; +static void parse_argv(void) +{ + unsigned int i; + + for (i = 1; i < global_argc; i++) { + const char *a = global_argv[i]; + + if (*a != '-' || !strcmp(a, "--")) + break; + + parse_one_option(a + 2); + } + if (i != global_argc) + usage(fast_import_usage); + + seen_non_option_command = 1; + if (input_file) + read_marks(); +} + int main(int argc, const char **argv) { unsigned int i; @@ -2485,16 +2532,8 @@ int main(int argc, const char **argv) avail_tree_table = xcalloc(avail_tree_table_sz, sizeof(struct avail_tree_content*)); marks = pool_calloc(1, sizeof(struct mark_set)); - for (i = 1; i < argc; i++) { - const char *a = argv[i]; - - if (*a != '-' || !strcmp(a, "--")) - break; - - parse_one_option(a + 2); - } - if (i != argc) - usage(fast_import_usage); + global_argc = argc; + global_argv = argv; rc_free = pool_alloc(cmd_save * sizeof(*rc_free)); for (i = 0; i < (cmd_save - 1); i++) @@ -2517,9 +2556,16 @@ int main(int argc, const char **argv) parse_checkpoint(); else if (!prefixcmp(command_buf.buf, "progress ")) parse_progress(); + else if (!prefixcmp(command_buf.buf, "option ")) + parse_option(); else die("Unsupported command: %s", command_buf.buf); } + + // argv hasn't been parsed yet, do so + if (!seen_non_option_command) + parse_argv(); + end_packfile(); dump_branches(); -- 1.6.4.122.g6ffd7 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 3/3] fast-import: test the new option command 2009-08-13 19:02 ` [PATCH v3 2/3] fast-import: add option command Sverre Rabbelier @ 2009-08-13 19:02 ` Sverre Rabbelier 2009-08-14 15:37 ` [PATCH v3 2/3] fast-import: add " Shawn O. Pearce 1 sibling, 0 replies; 8+ messages in thread From: Sverre Rabbelier @ 2009-08-13 19:02 UTC (permalink / raw) To: Junio C Hamano, Shawn O. Pearce, Johannes Schindelin, Git List Cc: Sverre Rabbelier Test three options (quiet and import/export-marks) and verify that the commandline options override these. Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com> --- Added some tests to verify that the marks file is handled properly as suggested by Dscho and Shawn. t/t9300-fast-import.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 58 insertions(+), 0 deletions(-) diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index 821be7c..62369e5 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -1088,4 +1088,62 @@ INPUT_END test_expect_success 'P: fail on blob mark in gitlink' ' test_must_fail git fast-import <input' +### +### series Q (options) +### + +cat >input << EOF +option quiet +blob +data 3 +hi + +EOF + +touch empty + +test_expect_success 'Q: quiet option results in no stats being output' ' + cat input | git fast-import 2> output && + test_cmp empty output +' + +cat >input << EOF +option export-marks=git.marks +blob +mark :1 +data 3 +hi + +EOF + +test_expect_success \ + 'Q: export-marks option results in a marks file being created' \ + 'cat input | git fast-import && + grep :1 git.marks' + +test_expect_success \ + 'Q: export-marks options can be overriden by commandline options' \ + 'cat input | git fast-import --export-marks=other.marks && + grep :1 other.marks' + +cat >input << EOF +option import-marks=marks.out +option export-marks=marks.new +EOF + +test_expect_success \ + 'Q: import to output marks works without any content' \ + 'cat input | git fast-import && + test_cmp marks.out marks.new' + +cat >input <<EOF +option import-marks=nonexistant.marks +option export-marks=marks.new +EOF + +test_expect_success \ + 'Q: import marks uses the commandline marks file when the stream specifies one' \ + 'cat input | git fast-import --import-marks=marks.out && + test_cmp marks.out marks.new' + test_done -- 1.6.4.122.g6ffd7 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/3] fast-import: add option command 2009-08-13 19:02 ` [PATCH v3 2/3] fast-import: add option command Sverre Rabbelier 2009-08-13 19:02 ` [PATCH v3 3/3] fast-import: test the new " Sverre Rabbelier @ 2009-08-14 15:37 ` Shawn O. Pearce 2009-08-14 16:37 ` Sverre Rabbelier 1 sibling, 1 reply; 8+ messages in thread From: Shawn O. Pearce @ 2009-08-14 15:37 UTC (permalink / raw) To: Sverre Rabbelier; +Cc: Junio C Hamano, Johannes Schindelin, Git List Sverre Rabbelier <srabbelier@gmail.com> wrote: > +`option` > +~~~~~~~~ > +Processes the specified option so that git fast-import behaves in a > +way that suits the frontend's needs. > +Note that options specified by the frontend are overridden by any > +options the user may specify to git fast-import itself. Wha? This disagrees with the code. > +static void read_marks(void) > +{ > + char line[512]; > + FILE *f = fopen(input_file, "r"); ... > +static void option_import_marks(const char *marks) > { > - char line[512]; > - FILE *f = fopen(input_file, "r"); This is a nasty refactoring, I would prefer to see it done in its own commit, "move option_import_marks so it can be called during command processing". > @@ -2517,9 +2556,16 @@ int main(int argc, const char **argv) > parse_checkpoint(); > else if (!prefixcmp(command_buf.buf, "progress ")) > parse_progress(); > + else if (!prefixcmp(command_buf.buf, "option ")) > + parse_option(); > else > die("Unsupported command: %s", command_buf.buf); > } > + > + // argv hasn't been parsed yet, do so > + if (!seen_non_option_command) > + parse_argv(); This is too late. Options like --date-format or --max-pack-size or --depth or --active-branches all influence the command processing above. Parsing these at the end means they have no affect on the import, which is wrong. Oh, and --active-branches or --max-pack-size or --depth are really good examples of things that maybe you do want to override on the command line. They have impact only on memory usage of the running import process, and the local disk usage. Maybe the frontend has given too many active branches for your physical memory, and you want a lower threshold. So yea, I really do think its a good idea for command line options to override stream options, despite what Dscho may think. :-) -- Shawn. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/3] fast-import: add option command 2009-08-14 15:37 ` [PATCH v3 2/3] fast-import: add " Shawn O. Pearce @ 2009-08-14 16:37 ` Sverre Rabbelier 2009-08-14 17:39 ` Shawn O. Pearce 0 siblings, 1 reply; 8+ messages in thread From: Sverre Rabbelier @ 2009-08-14 16:37 UTC (permalink / raw) To: Shawn O. Pearce; +Cc: Junio C Hamano, Johannes Schindelin, Git List Heya, On Fri, Aug 14, 2009 at 08:37, Shawn O. Pearce<spearce@spearce.org> wrote: > Sverre Rabbelier <srabbelier@gmail.com> wrote: >> +`option` >> +~~~~~~~~ >> +Processes the specified option so that git fast-import behaves in a >> +way that suits the frontend's needs. >> +Note that options specified by the frontend are overridden by any >> +options the user may specify to git fast-import itself. > > Wha? This disagrees with the code. It does? It's saying that the user my override what the frontend specifies, which is what the current version does. > This is a nasty refactoring, I would prefer to see it done in its > own commit, "move option_import_marks so it can be called during > command processing". Ok, will do. >> + // argv hasn't been parsed yet, do so >> + if (!seen_non_option_command) >> + parse_argv(); > > This is too late. No it's not. Earlier in the patch, at the other 'seen_non_option_command', we call parse_argv() as well (which happens when a non-option command is issued). This statement is here to deal with options that affect an empty stream, such as 'git format-patch --import-marks=marks.old --export-marks=marks.new < /dev/null && test_cmp marks.old marks.new'. > So yea, I really do think its a good idea for command line options > to override stream options, despite what Dscho may think. :-) Which is what the current version does, yes? -- Cheers, Sverre Rabbelier ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/3] fast-import: add option command 2009-08-14 16:37 ` Sverre Rabbelier @ 2009-08-14 17:39 ` Shawn O. Pearce 2009-08-14 17:43 ` Sverre Rabbelier 0 siblings, 1 reply; 8+ messages in thread From: Shawn O. Pearce @ 2009-08-14 17:39 UTC (permalink / raw) To: Sverre Rabbelier; +Cc: Junio C Hamano, Johannes Schindelin, Git List Sverre Rabbelier <srabbelier@gmail.com> wrote: > On Fri, Aug 14, 2009 at 08:37, Shawn O. Pearce<spearce@spearce.org> wrote: > > Sverre Rabbelier <srabbelier@gmail.com> wrote: > >> +`option` > >> +~~~~~~~~ > >> +Processes the specified option so that git fast-import behaves in a > >> +way that suits the frontend's needs. > >> +Note that options specified by the frontend are overridden by any > >> +options the user may specify to git fast-import itself. > > > > Wha? ?This disagrees with the code. > > It does? It's saying that the user my override what the frontend > specifies, which is what the current version does. Sorry, lack of caffeine. Rereading the docs makes sense. > >> + ? ? if (!seen_non_option_command) > >> + ? ? ? ? ? ? parse_argv(); > > > > This is too late. > > No it's not. Earlier in the patch, at the other > 'seen_non_option_command', we call parse_argv() as well (which happens > when a non-option command is issued). This statement is here to deal > with options that affect an empty stream, such as 'git format-patch > --import-marks=marks.old --export-marks=marks.new < /dev/null && > test_cmp marks.old marks.new'. Oy, I missed that call. I looked for it but gave up too soon I guess. > > So yea, I really do think its a good idea for command line options > > to override stream options, despite what Dscho may think. ?:-) > > Which is what the current version does, yes? Yes. :-) -- Shawn. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/3] fast-import: add option command 2009-08-14 17:39 ` Shawn O. Pearce @ 2009-08-14 17:43 ` Sverre Rabbelier 0 siblings, 0 replies; 8+ messages in thread From: Sverre Rabbelier @ 2009-08-14 17:43 UTC (permalink / raw) To: Shawn O. Pearce; +Cc: Junio C Hamano, Johannes Schindelin, Git List Heya, On Fri, Aug 14, 2009 at 10:39, Shawn O. Pearce<spearce@spearce.org> wrote: > Sorry, lack of caffeine. Rereading the docs makes sense. Perfectly acceptable, I totally though the 'break' in a 'switch' statement would break out of the outer for loop the other day. >> > So yea, I really do think its a good idea for command line options >> > to override stream options, despite what Dscho may think. ?:-) >> >> Which is what the current version does, yes? > > Yes. :-) Ok, I think perhaps we can wait 'nother day to see if anyone notices anything (possibly after more caffeine) and then ask Junio to apply? -- Cheers, Sverre Rabbelier ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-08-14 17:43 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-08-13 19:02 [PATCH v3 0/3] fast-import: add a new option command Sverre Rabbelier 2009-08-13 19:02 ` [PATCH v3 1/3] fast-import: put option parsing code in seperate functions Sverre Rabbelier 2009-08-13 19:02 ` [PATCH v3 2/3] fast-import: add option command Sverre Rabbelier 2009-08-13 19:02 ` [PATCH v3 3/3] fast-import: test the new " Sverre Rabbelier 2009-08-14 15:37 ` [PATCH v3 2/3] fast-import: add " Shawn O. Pearce 2009-08-14 16:37 ` Sverre Rabbelier 2009-08-14 17:39 ` Shawn O. Pearce 2009-08-14 17:43 ` Sverre Rabbelier
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox