summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 81f3a18)
raw | patch | inline | side by side (parent: 81f3a18)
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | |
Fri, 5 May 2006 01:33:32 +0000 (03:33 +0200) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Fri, 5 May 2006 21:11:55 +0000 (14:11 -0700) |
I had to move the command line parsing around a little; setup_revisions()
could mistaken <dir> for a valid ref.
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
could mistaken <dir> for a valid ref.
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-log.c | patch | blob | history |
diff --git a/builtin-log.c b/builtin-log.c
index 1649f4943e03f379f69716ecea2074b0d92c41f3..53a47c9aa4b9de6a1a3457847175db766360c6f9 100644 (file)
--- a/builtin-log.c
+++ b/builtin-log.c
}
static FILE *realstdout = NULL;
+static char *output_directory = NULL;
static void reopen_stdout(struct commit *commit, int nr)
{
char filename[1024];
char *sol;
- int len;
+ int len = 0;
+ if (output_directory) {
+ strncpy(filename, output_directory, 1010);
+ len = strlen(filename);
+ if (filename[len - 1] != '/')
+ filename[len++] = '/';
+ }
- sprintf(filename, "%04d", nr);
+ sprintf(filename + len, "%04d", nr);
len = strlen(filename);
sol = strstr(commit->buffer, "\n\n");
struct commit *commit;
struct commit **list = NULL;
struct rev_info rev;
- int nr = 0, total;
+ int nr = 0, total, i, j;
int use_stdout = 0;
init_revisions(&rev);
rev.combine_merges = 0;
rev.ignore_merges = 1;
rev.diffopt.output_format = DIFF_FORMAT_PATCH;
- argc = setup_revisions(argc, argv, &rev, "HEAD");
- while (argc > 1) {
- if (!strcmp(argv[1], "--stdout"))
+ /*
+ * Parse the arguments before setup_revisions(), or something
+ * like "git fmt-patch -o a123 HEAD^.." may fail; a123 is
+ * possibly a valid SHA1.
+ */
+ for (i = 1, j = 1; i < argc; i++) {
+ if (!strcmp(argv[i], "--stdout"))
use_stdout = 1;
- else
- die ("unrecognized argument: %s", argv[1]);
- argc--;
- argv++;
+ else if (!strcmp(argv[i], "-o")) {
+ if (argc < 3)
+ die ("Which directory?");
+ if (mkdir(argv[i + 1], 0777) < 0 && errno != EEXIST)
+ die("Could not create directory %s",
+ argv[i + 1]);
+ output_directory = strdup(argv[i + 1]);
+ i++;
+ } else
+ argv[j++] = argv[i];
}
+ argc = j;
+
+ argc = setup_revisions(argc, argv, &rev, "HEAD");
+ if (argc > 1)
+ die ("unrecognized argument: %s", argv[1]);
if (!use_stdout)
realstdout = fdopen(dup(1), "w");
if (!use_stdout)
fclose(stdout);
}
+ if (output_directory)
+ free(output_directory);
free(list);
return 0;
}