Merge branch 'jc/author-nickname'
authorJunio C Hamano <gitster@pobox.com>
Wed, 3 Sep 2008 00:45:28 +0000 (17:45 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 3 Sep 2008 00:45:28 +0000 (17:45 -0700)
* jc/author-nickname:
git commit --author=$name: look $name up in existing commits

1  2 
builtin-commit.c
diff --combined builtin-commit.c
index b75d5e931d1427f431fa493553c3eac203caccd6,4182686b9090a33c02fa39a442f1555134cf6616..8165bb3d31c6cdd92c83663c5dd081e564dcfc1e
@@@ -320,7 -320,7 +320,7 @@@ static char *prepare_index(int argc, co
                die("unable to write new_index file");
  
        fd = hold_lock_file_for_update(&false_lock,
 -                                     git_path("next-index-%d", getpid()), 1);
 +                                     git_path("next-index-%"PRIuMAX, (uintmax_t) getpid()), 1);
  
        create_base_index();
        add_remove_files(&partial);
@@@ -710,6 -710,31 +710,31 @@@ static int message_is_empty(struct strb
        return 1;
  }
  
+ static const char *find_author_by_nickname(const char *name)
+ {
+       struct rev_info revs;
+       struct commit *commit;
+       struct strbuf buf = STRBUF_INIT;
+       const char *av[20];
+       int ac = 0;
+       init_revisions(&revs, NULL);
+       strbuf_addf(&buf, "--author=%s", name);
+       av[++ac] = "--all";
+       av[++ac] = "-i";
+       av[++ac] = buf.buf;
+       av[++ac] = NULL;
+       setup_revisions(ac, av, &revs, NULL);
+       prepare_revision_walk(&revs);
+       commit = get_revision(&revs);
+       if (commit) {
+               strbuf_release(&buf);
+               format_commit_message(commit, "%an <%ae>", &buf, DATE_NORMAL);
+               return strbuf_detach(&buf, NULL);
+       }
+       die("No existing author found with '%s'", name);
+ }
  static int parse_and_validate_options(int argc, const char *argv[],
                                      const char * const usage[],
                                      const char *prefix)
        logfile = parse_options_fix_filename(prefix, logfile);
        template_file = parse_options_fix_filename(prefix, template_file);
  
+       if (force_author && !strchr(force_author, '>'))
+               force_author = find_author_by_nickname(force_author);
        if (logfile || message.len || use_message)
                use_editor = 0;
        if (edit_flag)