Merge branch 'rs/maint-shortlog-foldline'
authorJunio C Hamano <gitster@pobox.com>
Sun, 18 Jan 2009 07:05:23 +0000 (23:05 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sun, 18 Jan 2009 07:05:23 +0000 (23:05 -0800)
* rs/maint-shortlog-foldline:
shortlog: handle multi-line subjects like log --pretty=oneline et. al. do

1  2 
builtin-shortlog.c
diff --combined builtin-shortlog.c
index 90e76ae420389da34c43fd00a665b913d6d503e3,e49290687f2a0c55317398ef8b04ac319018c91b..5f9f3f09b11b2e7f54a26bdbce7cb0e6974740d5
@@@ -29,6 -29,9 +29,9 @@@ static int compare_by_number(const voi
                return -1;
  }
  
+ const char *format_subject(struct strbuf *sb, const char *msg,
+                          const char *line_separator);
  static void insert_one_record(struct shortlog *log,
                              const char *author,
                              const char *oneline)
        const char *dot3 = log->common_repo_prefix;
        char *buffer, *p;
        struct string_list_item *item;
 -      struct string_list *onelines;
        char namebuf[1024];
        size_t len;
        const char *eol;
        const char *boemail, *eoemail;
+       struct strbuf subject = STRBUF_INIT;
  
        boemail = strchr(author, '<');
        if (!boemail)
                snprintf(namebuf + len, room, " %.*s", maillen, boemail);
        }
  
 -      buffer = xstrdup(namebuf);
 -      item = string_list_insert(buffer, &log->list);
 +      item = string_list_insert(namebuf, &log->list);
        if (item->util == NULL)
                item->util = xcalloc(1, sizeof(struct string_list));
 -      else
 -              free(buffer);
  
        /* Skip any leading whitespace, including any blank lines. */
        while (*oneline && isspace(*oneline))
@@@ -85,9 -93,8 +89,8 @@@
        while (*oneline && isspace(*oneline) && *oneline != '\n')
                oneline++;
        len = eol - oneline;
-       while (len && isspace(oneline[len-1]))
-               len--;
-       buffer = xmemdupz(oneline, len);
+       format_subject(&subject, oneline, " ");
+       buffer = strbuf_detach(&subject, NULL);
  
        if (dot3) {
                int dot3len = strlen(dot3);
                }
        }
  
 -      onelines = item->util;
 -      if (onelines->nr >= onelines->alloc) {
 -              onelines->alloc = alloc_nr(onelines->nr);
 -              onelines->items = xrealloc(onelines->items,
 -                              onelines->alloc
 -                              * sizeof(struct string_list_item));
 -      }
 -
 -      onelines->items[onelines->nr].util = NULL;
 -      onelines->items[onelines->nr++].string = buffer;
 +      string_list_append(buffer, item->util);
  }
  
  static void read_from_stdin(struct shortlog *log)
@@@ -310,7 -326,7 +313,7 @@@ void shortlog_output(struct shortlog *l
                }
  
                onelines->strdup_strings = 1;
 -              string_list_clear(onelines, 1);
 +              string_list_clear(onelines, 0);
                free(onelines);
                log->list.items[i].util = NULL;
        }