Avoid doing the "filelist" thing, since "git-apply" picks up the files automatically
[gitweb.git] / mailinfo.c
index c1dcac130530174ec5335d2c752d76403ad1d3ad..6c4d5898238704954a0b67b99079193f588795b6 100644 (file)
@@ -7,9 +7,10 @@
 #include <string.h>
 #include <ctype.h>
 
-static FILE *cmitmsg, *patchfile, *filelist;
+static FILE *cmitmsg, *patchfile;
 
 static char line[1000];
+static char date[1000];
 static char name[1000];
 static char email[1000];
 static char subject[1000];
@@ -78,6 +79,11 @@ static int handle_from(char *line)
        return 1;
 }
 
+static void handle_date(char *line)
+{
+       strcpy(date, line);
+}
+
 static void handle_subject(char *line)
 {
        strcpy(subject, line);
@@ -99,6 +105,11 @@ static void check_line(char *line, int len)
                cont = 0;
                return;
        }
+       if (!memcmp(line, "Date:", 5) && isspace(line[5])) {
+               handle_date(line+6);
+               cont = 0;
+               return;
+       }
        if (!memcmp(line, "Subject:", 8) && isspace(line[8])) {
                handle_subject(line+9);
                cont = 1;
@@ -107,7 +118,7 @@ static void check_line(char *line, int len)
        if (isspace(*line)) {
                switch (cont) {
                case 0:
-                       fprintf(stderr, "I don't do 'From:' line continuations\n");
+                       fprintf(stderr, "I don't do 'Date:' or 'From:' line continuations\n");
                        break;
                case 1:
                        add_subject_line(line);
@@ -170,63 +181,20 @@ static void cleanup_space(char *buf)
        }
 }
 
-/*
- * Hacky hacky. This depends not only on -p1, but on
- * filenames not having some special characters in them,
- * like tilde.
- */
-static void show_filename(char *line)
-{
-       int len;
-       char *name = strchr(line, '/');
-
-       if (!name || !isspace(*line))
-               return;
-       name++;
-       len = 0;
-       for (;;) {
-               unsigned char c = name[len];
-               switch (c) {
-               default:
-                       len++;
-                       continue;
-
-               case 0: case ' ':
-               case '\t': case '\n':
-                       break;
-
-               /* patch tends to special-case these things.. */
-               case '~':
-                       break;
-               }
-               break;
-       }
-       /* remove ".orig" from the end - common patch behaviour */
-       if (len > 5 && !memcmp(name+len-5, ".orig", 5))
-               len -=5;
-       if (!len)
-               return;
-       fprintf(filelist, "%.*s\n", len, name);
-}
-
 static void handle_rest(void)
 {
        char *sub = cleanup_subject(subject);
        cleanup_space(name);
+       cleanup_space(date);
        cleanup_space(email);
        cleanup_space(sub);
-       printf("Author: %s\nEmail: %s\nSubject: %s\n\n", name, email, sub);
+       printf("Author: %s\nEmail: %s\nSubject: %s\nDate: %s\n\n", name, email, sub, date);
        FILE *out = cmitmsg;
 
        do {
-               /* Track filename information from the patch.. */
-               if (!memcmp("---", line, 3)) {
+               if (!memcmp("diff -", line, 6) ||
+                   !memcmp("---", line, 3))
                        out = patchfile;
-                       show_filename(line+3);
-               }
-
-               if (!memcmp("+++", line, 3))
-                       show_filename(line+3);
 
                fputs(line, out);
        } while (fgets(line, sizeof(line), stdin) != NULL);
@@ -271,13 +239,13 @@ static void handle_body(void)
 
 static void usage(void)
 {
-       fprintf(stderr, "mailinfo msg-file path-file filelist-file < email\n");
+       fprintf(stderr, "mailinfo msg-file path-file < email\n");
        exit(1);
 }
 
 int main(int argc, char ** argv)
 {
-       if (argc != 4)
+       if (argc != 3)
                usage();
        cmitmsg = fopen(argv[1], "w");
        if (!cmitmsg) {
@@ -289,11 +257,6 @@ int main(int argc, char ** argv)
                perror(argv[2]);
                exit(1);
        }
-       filelist = fopen(argv[3], "w");
-       if (!filelist) {
-               perror(argv[3]);
-               exit(1);
-       }
        while (fgets(line, sizeof(line), stdin) != NULL) {
                int len = eatspace(line);
                if (!len) {