Merge branch 'mm/maint-log-n-with-diff-filtering'
authorJunio C Hamano <gitster@pobox.com>
Sun, 20 Mar 2011 06:25:38 +0000 (23:25 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 20 Mar 2011 06:25:38 +0000 (23:25 -0700)
* mm/maint-log-n-with-diff-filtering:
log: fix --max-count when used together with -S or -G

1  2 
builtin/log.c
diff --combined builtin/log.c
index 99e33b3651a3c0d7e89144712d3754eab8ad30d6,2b82272eac8aff30140babbcdbe29d9e84b12a5f..796e9e57460468748d1e2af975ac52a6470a379d
@@@ -89,7 -89,7 +89,7 @@@ static void cmd_log_init(int argc, cons
                rev->always_show_header = 0;
        if (DIFF_OPT_TST(&rev->diffopt, FOLLOW_RENAMES)) {
                rev->always_show_header = 0;
 -              if (rev->diffopt.nr_paths != 1)
 +              if (rev->diffopt.pathspec.nr != 1)
                        usage("git logs can only follow renames on one pathname at a time");
        }
        for (i = 1; i < argc; i++) {
@@@ -263,7 -263,13 +263,13 @@@ static int cmd_log_walk(struct rev_inf
         * retain that state information if replacing rev->diffopt in this loop
         */
        while ((commit = get_revision(rev)) != NULL) {
-               log_tree_commit(rev, commit);
+               if (!log_tree_commit(rev, commit) &&
+                   rev->max_count >= 0)
+                       /*
+                        * We decremented max_count in get_revision,
+                        * but we didn't actually show the commit.
+                        */
+                       rev->max_count++;
                if (!rev->reflog_info) {
                        /* we allow cycles in reflog ancestry */
                        free(commit->buffer);
@@@ -1352,23 -1358,6 +1358,23 @@@ static const char * const cherry_usage[
        NULL
  };
  
 +static void print_commit(char sign, struct commit *commit, int verbose,
 +                       int abbrev)
 +{
 +      if (!verbose) {
 +              printf("%c %s\n", sign,
 +                     find_unique_abbrev(commit->object.sha1, abbrev));
 +      } else {
 +              struct strbuf buf = STRBUF_INIT;
 +              struct pretty_print_context ctx = {0};
 +              pretty_print_commit(CMIT_FMT_ONELINE, commit, &buf, &ctx);
 +              printf("%c %s %s\n", sign,
 +                     find_unique_abbrev(commit->object.sha1, abbrev),
 +                     buf.buf);
 +              strbuf_release(&buf);
 +      }
 +}
 +
  int cmd_cherry(int argc, const char **argv, const char *prefix)
  {
        struct rev_info revs;
                commit = list->item;
                if (has_commit_patch_id(commit, &ids))
                        sign = '-';
 -
 -              if (verbose) {
 -                      struct strbuf buf = STRBUF_INIT;
 -                      struct pretty_print_context ctx = {0};
 -                      pretty_print_commit(CMIT_FMT_ONELINE, commit,
 -                                          &buf, &ctx);
 -                      printf("%c %s %s\n", sign,
 -                             find_unique_abbrev(commit->object.sha1, abbrev),
 -                             buf.buf);
 -                      strbuf_release(&buf);
 -              }
 -              else {
 -                      printf("%c %s\n", sign,
 -                             find_unique_abbrev(commit->object.sha1, abbrev));
 -              }
 -
 +              print_commit(sign, commit, verbose, abbrev);
                list = list->next;
        }