Documentation: suggest corresponding Porcelain-level in plumbing docs.
[gitweb.git] / builtin-log.c
index a59b4acef1bc45f07f15e10c0501aa23de3eed7d..1cd9d3f76834b40eb217cbb36784b85d5d076e3a 100644 (file)
@@ -197,17 +197,28 @@ static int istitlechar(char c)
 
 static char *extra_headers = NULL;
 static int extra_headers_size = 0;
+static const char *fmt_patch_suffix = ".txt";
 
 static int git_format_config(const char *var, const char *value)
 {
        if (!strcmp(var, "format.headers")) {
-               int len = strlen(value);
+               int len;
+
+               if (!value)
+                       die("format.headers without value");
+               len = strlen(value);
                extra_headers_size += len + 1;
                extra_headers = xrealloc(extra_headers, extra_headers_size);
                extra_headers[extra_headers_size - len - 1] = 0;
                strcat(extra_headers, value);
                return 0;
        }
+       if (!strcmp(var, "format.suffix")) {
+               if (!value)
+                       die("format.suffix without value");
+               fmt_patch_suffix = xstrdup(value);
+               return 0;
+       }
        if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff")) {
                return 0;
        }
@@ -223,9 +234,10 @@ static void reopen_stdout(struct commit *commit, int nr, int keep_subject)
        char filename[1024];
        char *sol;
        int len = 0;
+       int suffix_len = strlen(fmt_patch_suffix) + 10; /* ., NUL and slop */
 
        if (output_directory) {
-               strlcpy(filename, output_directory, 1010);
+               strlcpy(filename, output_directory, 1000);
                len = strlen(filename);
                if (filename[len - 1] != '/')
                        filename[len++] = '/';
@@ -249,7 +261,10 @@ static void reopen_stdout(struct commit *commit, int nr, int keep_subject)
                        }
                }
 
-               for (j = 0; len < 1024 - 6 && sol[j] && sol[j] != '\n'; j++) {
+               for (j = 0;
+                    len < sizeof(filename) - suffix_len &&
+                            sol[j] && sol[j] != '\n';
+                    j++) {
                        if (istitlechar(sol[j])) {
                                if (space) {
                                        filename[len++] = '-';
@@ -265,7 +280,7 @@ static void reopen_stdout(struct commit *commit, int nr, int keep_subject)
                while (filename[len - 1] == '.' || filename[len - 1] == '-')
                        len--;
        }
-       strcpy(filename + len, ".txt");
+       strcpy(filename + len, fmt_patch_suffix);
        fprintf(realstdout, "%s\n", filename);
        freopen(filename, "w", stdout);
 }
@@ -436,6 +451,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                                die("Need a Message-Id for --in-reply-to");
                        in_reply_to = argv[i];
                }
+               else if (!strncmp(argv[i], "--suffix=", 9))
+                       fmt_patch_suffix = argv[i] + 9;
                else
                        argv[j++] = argv[i];
        }