commit: always populate GIT_AUTHOR_* variables
[git] / builtin / commit.c
1 /*
2  * Builtin "git commit"
3  *
4  * Copyright (c) 2007 Kristian Høgsberg <krh@redhat.com>
5  * Based on git-commit.sh by Junio C Hamano and Linus Torvalds
6  */
7
8 #include "cache.h"
9 #include "cache-tree.h"
10 #include "color.h"
11 #include "dir.h"
12 #include "builtin.h"
13 #include "diff.h"
14 #include "diffcore.h"
15 #include "commit.h"
16 #include "revision.h"
17 #include "wt-status.h"
18 #include "run-command.h"
19 #include "refs.h"
20 #include "log-tree.h"
21 #include "strbuf.h"
22 #include "utf8.h"
23 #include "parse-options.h"
24 #include "string-list.h"
25 #include "rerere.h"
26 #include "unpack-trees.h"
27 #include "quote.h"
28 #include "submodule.h"
29 #include "gpg-interface.h"
30 #include "column.h"
31 #include "sequencer.h"
32 #include "notes-utils.h"
33 #include "mailmap.h"
34
35 static const char * const builtin_commit_usage[] = {
36         N_("git commit [options] [--] <pathspec>..."),
37         NULL
38 };
39
40 static const char * const builtin_status_usage[] = {
41         N_("git status [options] [--] <pathspec>..."),
42         NULL
43 };
44
45 static const char implicit_ident_advice[] =
46 N_("Your name and email address were configured automatically based\n"
47 "on your username and hostname. Please check that they are accurate.\n"
48 "You can suppress this message by setting them explicitly:\n"
49 "\n"
50 "    git config --global user.name \"Your Name\"\n"
51 "    git config --global user.email you@example.com\n"
52 "\n"
53 "After doing this, you may fix the identity used for this commit with:\n"
54 "\n"
55 "    git commit --amend --reset-author\n");
56
57 static const char empty_amend_advice[] =
58 N_("You asked to amend the most recent commit, but doing so would make\n"
59 "it empty. You can repeat your command with --allow-empty, or you can\n"
60 "remove the commit entirely with \"git reset HEAD^\".\n");
61
62 static const char empty_cherry_pick_advice[] =
63 N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
64 "If you wish to commit it anyway, use:\n"
65 "\n"
66 "    git commit --allow-empty\n"
67 "\n");
68
69 static const char empty_cherry_pick_advice_single[] =
70 N_("Otherwise, please use 'git reset'\n");
71
72 static const char empty_cherry_pick_advice_multi[] =
73 N_("If you wish to skip this commit, use:\n"
74 "\n"
75 "    git reset\n"
76 "\n"
77 "Then \"git cherry-pick --continue\" will resume cherry-picking\n"
78 "the remaining commits.\n");
79
80 static const char *use_message_buffer;
81 static const char commit_editmsg[] = "COMMIT_EDITMSG";
82 static struct lock_file index_lock; /* real index */
83 static struct lock_file false_lock; /* used only for partial commits */
84 static enum {
85         COMMIT_AS_IS = 1,
86         COMMIT_NORMAL,
87         COMMIT_PARTIAL
88 } commit_style;
89
90 static const char *logfile, *force_author;
91 static const char *template_file;
92 /*
93  * The _message variables are commit names from which to take
94  * the commit message and/or authorship.
95  */
96 static const char *author_message, *author_message_buffer;
97 static char *edit_message, *use_message;
98 static char *fixup_message, *squash_message;
99 static int all, also, interactive, patch_interactive, only, amend, signoff;
100 static int edit_flag = -1; /* unspecified */
101 static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
102 static int no_post_rewrite, allow_empty_message;
103 static char *untracked_files_arg, *force_date, *ignore_submodule_arg;
104 static char *sign_commit;
105
106 /*
107  * The default commit message cleanup mode will remove the lines
108  * beginning with # (shell comments) and leading and trailing
109  * whitespaces (empty lines or containing only whitespaces)
110  * if editor is used, and only the whitespaces if the message
111  * is specified explicitly.
112  */
113 static enum {
114         CLEANUP_SPACE,
115         CLEANUP_NONE,
116         CLEANUP_SCISSORS,
117         CLEANUP_ALL
118 } cleanup_mode;
119 static const char *cleanup_arg;
120
121 static enum commit_whence whence;
122 static int sequencer_in_use;
123 static int use_editor = 1, include_status = 1;
124 static int show_ignored_in_status, have_option_m;
125 static const char *only_include_assumed;
126 static struct strbuf message = STRBUF_INIT;
127
128 static enum status_format {
129         STATUS_FORMAT_NONE = 0,
130         STATUS_FORMAT_LONG,
131         STATUS_FORMAT_SHORT,
132         STATUS_FORMAT_PORCELAIN,
133
134         STATUS_FORMAT_UNSPECIFIED
135 } status_format = STATUS_FORMAT_UNSPECIFIED;
136
137 static int opt_parse_m(const struct option *opt, const char *arg, int unset)
138 {
139         struct strbuf *buf = opt->value;
140         if (unset) {
141                 have_option_m = 0;
142                 strbuf_setlen(buf, 0);
143         } else {
144                 have_option_m = 1;
145                 if (buf->len)
146                         strbuf_addch(buf, '\n');
147                 strbuf_addstr(buf, arg);
148                 strbuf_complete_line(buf);
149         }
150         return 0;
151 }
152
153 static void determine_whence(struct wt_status *s)
154 {
155         if (file_exists(git_path("MERGE_HEAD")))
156                 whence = FROM_MERGE;
157         else if (file_exists(git_path("CHERRY_PICK_HEAD"))) {
158                 whence = FROM_CHERRY_PICK;
159                 if (file_exists(git_path("sequencer")))
160                         sequencer_in_use = 1;
161         }
162         else
163                 whence = FROM_COMMIT;
164         if (s)
165                 s->whence = whence;
166 }
167
168 static void status_init_config(struct wt_status *s, config_fn_t fn)
169 {
170         wt_status_prepare(s);
171         gitmodules_config();
172         git_config(fn, s);
173         determine_whence(s);
174         s->hints = advice_status_hints; /* must come after git_config() */
175 }
176
177 static void rollback_index_files(void)
178 {
179         switch (commit_style) {
180         case COMMIT_AS_IS:
181                 break; /* nothing to do */
182         case COMMIT_NORMAL:
183                 rollback_lock_file(&index_lock);
184                 break;
185         case COMMIT_PARTIAL:
186                 rollback_lock_file(&index_lock);
187                 rollback_lock_file(&false_lock);
188                 break;
189         }
190 }
191
192 static int commit_index_files(void)
193 {
194         int err = 0;
195
196         switch (commit_style) {
197         case COMMIT_AS_IS:
198                 break; /* nothing to do */
199         case COMMIT_NORMAL:
200                 err = commit_lock_file(&index_lock);
201                 break;
202         case COMMIT_PARTIAL:
203                 err = commit_lock_file(&index_lock);
204                 rollback_lock_file(&false_lock);
205                 break;
206         }
207
208         return err;
209 }
210
211 /*
212  * Take a union of paths in the index and the named tree (typically, "HEAD"),
213  * and return the paths that match the given pattern in list.
214  */
215 static int list_paths(struct string_list *list, const char *with_tree,
216                       const char *prefix, const struct pathspec *pattern)
217 {
218         int i;
219         char *m;
220
221         if (!pattern->nr)
222                 return 0;
223
224         m = xcalloc(1, pattern->nr);
225
226         if (with_tree) {
227                 char *max_prefix = common_prefix(pattern);
228                 overlay_tree_on_cache(with_tree, max_prefix ? max_prefix : prefix);
229                 free(max_prefix);
230         }
231
232         for (i = 0; i < active_nr; i++) {
233                 const struct cache_entry *ce = active_cache[i];
234                 struct string_list_item *item;
235
236                 if (ce->ce_flags & CE_UPDATE)
237                         continue;
238                 if (!ce_path_match(ce, pattern, m))
239                         continue;
240                 item = string_list_insert(list, ce->name);
241                 if (ce_skip_worktree(ce))
242                         item->util = item; /* better a valid pointer than a fake one */
243         }
244
245         return report_path_error(m, pattern, prefix);
246 }
247
248 static void add_remove_files(struct string_list *list)
249 {
250         int i;
251         for (i = 0; i < list->nr; i++) {
252                 struct stat st;
253                 struct string_list_item *p = &(list->items[i]);
254
255                 /* p->util is skip-worktree */
256                 if (p->util)
257                         continue;
258
259                 if (!lstat(p->string, &st)) {
260                         if (add_to_cache(p->string, &st, 0))
261                                 die(_("updating files failed"));
262                 } else
263                         remove_file_from_cache(p->string);
264         }
265 }
266
267 static void create_base_index(const struct commit *current_head)
268 {
269         struct tree *tree;
270         struct unpack_trees_options opts;
271         struct tree_desc t;
272
273         if (!current_head) {
274                 discard_cache();
275                 return;
276         }
277
278         memset(&opts, 0, sizeof(opts));
279         opts.head_idx = 1;
280         opts.index_only = 1;
281         opts.merge = 1;
282         opts.src_index = &the_index;
283         opts.dst_index = &the_index;
284
285         opts.fn = oneway_merge;
286         tree = parse_tree_indirect(current_head->object.sha1);
287         if (!tree)
288                 die(_("failed to unpack HEAD tree object"));
289         parse_tree(tree);
290         init_tree_desc(&t, tree->buffer, tree->size);
291         if (unpack_trees(1, &t, &opts))
292                 exit(128); /* We've already reported the error, finish dying */
293 }
294
295 static void refresh_cache_or_die(int refresh_flags)
296 {
297         /*
298          * refresh_flags contains REFRESH_QUIET, so the only errors
299          * are for unmerged entries.
300          */
301         if (refresh_cache(refresh_flags | REFRESH_IN_PORCELAIN))
302                 die_resolve_conflict("commit");
303 }
304
305 static char *prepare_index(int argc, const char **argv, const char *prefix,
306                            const struct commit *current_head, int is_status)
307 {
308         int fd;
309         struct string_list partial;
310         struct pathspec pathspec;
311         int refresh_flags = REFRESH_QUIET;
312
313         if (is_status)
314                 refresh_flags |= REFRESH_UNMERGED;
315         parse_pathspec(&pathspec, 0,
316                        PATHSPEC_PREFER_FULL,
317                        prefix, argv);
318
319         if (read_cache_preload(&pathspec) < 0)
320                 die(_("index file corrupt"));
321
322         if (interactive) {
323                 char *old_index_env = NULL;
324                 fd = hold_locked_index(&index_lock, 1);
325
326                 refresh_cache_or_die(refresh_flags);
327
328                 if (write_cache(fd, active_cache, active_nr) ||
329                     close_lock_file(&index_lock))
330                         die(_("unable to create temporary index"));
331
332                 old_index_env = getenv(INDEX_ENVIRONMENT);
333                 setenv(INDEX_ENVIRONMENT, index_lock.filename, 1);
334
335                 if (interactive_add(argc, argv, prefix, patch_interactive) != 0)
336                         die(_("interactive add failed"));
337
338                 if (old_index_env && *old_index_env)
339                         setenv(INDEX_ENVIRONMENT, old_index_env, 1);
340                 else
341                         unsetenv(INDEX_ENVIRONMENT);
342
343                 discard_cache();
344                 read_cache_from(index_lock.filename);
345
346                 commit_style = COMMIT_NORMAL;
347                 return index_lock.filename;
348         }
349
350         /*
351          * Non partial, non as-is commit.
352          *
353          * (1) get the real index;
354          * (2) update the_index as necessary;
355          * (3) write the_index out to the real index (still locked);
356          * (4) return the name of the locked index file.
357          *
358          * The caller should run hooks on the locked real index, and
359          * (A) if all goes well, commit the real index;
360          * (B) on failure, rollback the real index.
361          */
362         if (all || (also && pathspec.nr)) {
363                 fd = hold_locked_index(&index_lock, 1);
364                 add_files_to_cache(also ? prefix : NULL, &pathspec, 0);
365                 refresh_cache_or_die(refresh_flags);
366                 update_main_cache_tree(WRITE_TREE_SILENT);
367                 if (write_cache(fd, active_cache, active_nr) ||
368                     close_lock_file(&index_lock))
369                         die(_("unable to write new_index file"));
370                 commit_style = COMMIT_NORMAL;
371                 return index_lock.filename;
372         }
373
374         /*
375          * As-is commit.
376          *
377          * (1) return the name of the real index file.
378          *
379          * The caller should run hooks on the real index,
380          * and create commit from the_index.
381          * We still need to refresh the index here.
382          */
383         if (!only && !pathspec.nr) {
384                 fd = hold_locked_index(&index_lock, 1);
385                 refresh_cache_or_die(refresh_flags);
386                 if (active_cache_changed) {
387                         update_main_cache_tree(WRITE_TREE_SILENT);
388                         if (write_cache(fd, active_cache, active_nr) ||
389                             commit_locked_index(&index_lock))
390                                 die(_("unable to write new_index file"));
391                 } else {
392                         rollback_lock_file(&index_lock);
393                 }
394                 commit_style = COMMIT_AS_IS;
395                 return get_index_file();
396         }
397
398         /*
399          * A partial commit.
400          *
401          * (0) find the set of affected paths;
402          * (1) get lock on the real index file;
403          * (2) update the_index with the given paths;
404          * (3) write the_index out to the real index (still locked);
405          * (4) get lock on the false index file;
406          * (5) reset the_index from HEAD;
407          * (6) update the_index the same way as (2);
408          * (7) write the_index out to the false index file;
409          * (8) return the name of the false index file (still locked);
410          *
411          * The caller should run hooks on the locked false index, and
412          * create commit from it.  Then
413          * (A) if all goes well, commit the real index;
414          * (B) on failure, rollback the real index;
415          * In either case, rollback the false index.
416          */
417         commit_style = COMMIT_PARTIAL;
418
419         if (whence != FROM_COMMIT) {
420                 if (whence == FROM_MERGE)
421                         die(_("cannot do a partial commit during a merge."));
422                 else if (whence == FROM_CHERRY_PICK)
423                         die(_("cannot do a partial commit during a cherry-pick."));
424         }
425
426         memset(&partial, 0, sizeof(partial));
427         partial.strdup_strings = 1;
428         if (list_paths(&partial, !current_head ? NULL : "HEAD", prefix, &pathspec))
429                 exit(1);
430
431         discard_cache();
432         if (read_cache() < 0)
433                 die(_("cannot read the index"));
434
435         fd = hold_locked_index(&index_lock, 1);
436         add_remove_files(&partial);
437         refresh_cache(REFRESH_QUIET);
438         if (write_cache(fd, active_cache, active_nr) ||
439             close_lock_file(&index_lock))
440                 die(_("unable to write new_index file"));
441
442         fd = hold_lock_file_for_update(&false_lock,
443                                        git_path("next-index-%"PRIuMAX,
444                                                 (uintmax_t) getpid()),
445                                        LOCK_DIE_ON_ERROR);
446
447         create_base_index(current_head);
448         add_remove_files(&partial);
449         refresh_cache(REFRESH_QUIET);
450
451         if (write_cache(fd, active_cache, active_nr) ||
452             close_lock_file(&false_lock))
453                 die(_("unable to write temporary index file"));
454
455         discard_cache();
456         read_cache_from(false_lock.filename);
457
458         return false_lock.filename;
459 }
460
461 static int run_status(FILE *fp, const char *index_file, const char *prefix, int nowarn,
462                       struct wt_status *s)
463 {
464         unsigned char sha1[20];
465
466         if (s->relative_paths)
467                 s->prefix = prefix;
468
469         if (amend) {
470                 s->amend = 1;
471                 s->reference = "HEAD^1";
472         }
473         s->verbose = verbose;
474         s->index_file = index_file;
475         s->fp = fp;
476         s->nowarn = nowarn;
477         s->is_initial = get_sha1(s->reference, sha1) ? 1 : 0;
478
479         wt_status_collect(s);
480
481         switch (status_format) {
482         case STATUS_FORMAT_SHORT:
483                 wt_shortstatus_print(s);
484                 break;
485         case STATUS_FORMAT_PORCELAIN:
486                 wt_porcelain_print(s);
487                 break;
488         case STATUS_FORMAT_UNSPECIFIED:
489                 die("BUG: finalize_deferred_config() should have been called");
490                 break;
491         case STATUS_FORMAT_NONE:
492         case STATUS_FORMAT_LONG:
493                 wt_status_print(s);
494                 break;
495         }
496
497         return s->commitable;
498 }
499
500 static int is_a_merge(const struct commit *current_head)
501 {
502         return !!(current_head->parents && current_head->parents->next);
503 }
504
505 static void assert_split_ident(struct ident_split *id, const struct strbuf *buf)
506 {
507         if (split_ident_line(id, buf->buf, buf->len) || !id->date_begin)
508                 die("BUG: unable to parse our own ident: %s", buf->buf);
509 }
510
511 static void export_one(const char *var, const char *s, const char *e, int hack)
512 {
513         struct strbuf buf = STRBUF_INIT;
514         if (hack)
515                 strbuf_addch(&buf, hack);
516         strbuf_addf(&buf, "%.*s", (int)(e - s), s);
517         setenv(var, buf.buf, 1);
518         strbuf_release(&buf);
519 }
520
521 static int parse_force_date(const char *in, char *out, int len)
522 {
523         if (len < 1)
524                 return -1;
525         *out++ = '@';
526         len--;
527
528         if (parse_date(in, out, len) < 0) {
529                 int errors = 0;
530                 unsigned long t = approxidate_careful(in, &errors);
531                 if (errors)
532                         return -1;
533                 snprintf(out, len, "%lu", t);
534         }
535
536         return 0;
537 }
538
539 static void determine_author_info(struct strbuf *author_ident)
540 {
541         char *name, *email, *date;
542         struct ident_split author;
543         char date_buf[64];
544
545         name = getenv("GIT_AUTHOR_NAME");
546         email = getenv("GIT_AUTHOR_EMAIL");
547         date = getenv("GIT_AUTHOR_DATE");
548
549         if (author_message) {
550                 const char *a, *lb, *rb, *eol;
551                 size_t len;
552
553                 a = strstr(author_message_buffer, "\nauthor ");
554                 if (!a)
555                         die(_("invalid commit: %s"), author_message);
556
557                 lb = strchrnul(a + strlen("\nauthor "), '<');
558                 rb = strchrnul(lb, '>');
559                 eol = strchrnul(rb, '\n');
560                 if (!*lb || !*rb || !*eol)
561                         die(_("invalid commit: %s"), author_message);
562
563                 if (lb == a + strlen("\nauthor "))
564                         /* \nauthor <foo@example.com> */
565                         name = xcalloc(1, 1);
566                 else
567                         name = xmemdupz(a + strlen("\nauthor "),
568                                         (lb - strlen(" ") -
569                                          (a + strlen("\nauthor "))));
570                 email = xmemdupz(lb + strlen("<"), rb - (lb + strlen("<")));
571                 len = eol - (rb + strlen("> "));
572                 date = xmalloc(len + 2);
573                 *date = '@';
574                 memcpy(date + 1, rb + strlen("> "), len);
575                 date[len + 1] = '\0';
576         }
577
578         if (force_author) {
579                 const char *lb = strstr(force_author, " <");
580                 const char *rb = strchr(force_author, '>');
581
582                 if (!lb || !rb)
583                         die(_("malformed --author parameter"));
584                 name = xstrndup(force_author, lb - force_author);
585                 email = xstrndup(lb + 2, rb - (lb + 2));
586         }
587
588         if (force_date) {
589                 if (parse_force_date(force_date, date_buf, sizeof(date_buf)))
590                         die(_("invalid date format: %s"), force_date);
591                 date = date_buf;
592         }
593
594         strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_STRICT));
595         assert_split_ident(&author, author_ident);
596         export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0);
597         export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0);
598         export_one("GIT_AUTHOR_DATE", author.date_begin, author.tz_end, '@');
599 }
600
601 static int author_date_is_interesting(void)
602 {
603         return author_message || force_date;
604 }
605
606 static int prepare_to_commit(const char *index_file, const char *prefix,
607                              struct commit *current_head,
608                              struct wt_status *s,
609                              struct strbuf *author_ident)
610 {
611         struct stat statbuf;
612         struct strbuf committer_ident = STRBUF_INIT;
613         int commitable;
614         struct strbuf sb = STRBUF_INIT;
615         const char *hook_arg1 = NULL;
616         const char *hook_arg2 = NULL;
617         int clean_message_contents = (cleanup_mode != CLEANUP_NONE);
618         int old_display_comment_prefix;
619
620         /* This checks and barfs if author is badly specified */
621         determine_author_info(author_ident);
622
623         if (!no_verify && run_commit_hook(use_editor, index_file, "pre-commit", NULL))
624                 return 0;
625
626         if (squash_message) {
627                 /*
628                  * Insert the proper subject line before other commit
629                  * message options add their content.
630                  */
631                 if (use_message && !strcmp(use_message, squash_message))
632                         strbuf_addstr(&sb, "squash! ");
633                 else {
634                         struct pretty_print_context ctx = {0};
635                         struct commit *c;
636                         c = lookup_commit_reference_by_name(squash_message);
637                         if (!c)
638                                 die(_("could not lookup commit %s"), squash_message);
639                         ctx.output_encoding = get_commit_output_encoding();
640                         format_commit_message(c, "squash! %s\n\n", &sb,
641                                               &ctx);
642                 }
643         }
644
645         if (message.len) {
646                 strbuf_addbuf(&sb, &message);
647                 hook_arg1 = "message";
648         } else if (logfile && !strcmp(logfile, "-")) {
649                 if (isatty(0))
650                         fprintf(stderr, _("(reading log message from standard input)\n"));
651                 if (strbuf_read(&sb, 0, 0) < 0)
652                         die_errno(_("could not read log from standard input"));
653                 hook_arg1 = "message";
654         } else if (logfile) {
655                 if (strbuf_read_file(&sb, logfile, 0) < 0)
656                         die_errno(_("could not read log file '%s'"),
657                                   logfile);
658                 hook_arg1 = "message";
659         } else if (use_message) {
660                 char *buffer;
661                 buffer = strstr(use_message_buffer, "\n\n");
662                 if (!use_editor && (!buffer || buffer[2] == '\0'))
663                         die(_("commit has empty message"));
664                 strbuf_add(&sb, buffer + 2, strlen(buffer + 2));
665                 hook_arg1 = "commit";
666                 hook_arg2 = use_message;
667         } else if (fixup_message) {
668                 struct pretty_print_context ctx = {0};
669                 struct commit *commit;
670                 commit = lookup_commit_reference_by_name(fixup_message);
671                 if (!commit)
672                         die(_("could not lookup commit %s"), fixup_message);
673                 ctx.output_encoding = get_commit_output_encoding();
674                 format_commit_message(commit, "fixup! %s\n\n",
675                                       &sb, &ctx);
676                 hook_arg1 = "message";
677         } else if (!stat(git_path("MERGE_MSG"), &statbuf)) {
678                 if (strbuf_read_file(&sb, git_path("MERGE_MSG"), 0) < 0)
679                         die_errno(_("could not read MERGE_MSG"));
680                 hook_arg1 = "merge";
681         } else if (!stat(git_path("SQUASH_MSG"), &statbuf)) {
682                 if (strbuf_read_file(&sb, git_path("SQUASH_MSG"), 0) < 0)
683                         die_errno(_("could not read SQUASH_MSG"));
684                 hook_arg1 = "squash";
685         } else if (template_file) {
686                 if (strbuf_read_file(&sb, template_file, 0) < 0)
687                         die_errno(_("could not read '%s'"), template_file);
688                 hook_arg1 = "template";
689                 clean_message_contents = 0;
690         }
691
692         /*
693          * The remaining cases don't modify the template message, but
694          * just set the argument(s) to the prepare-commit-msg hook.
695          */
696         else if (whence == FROM_MERGE)
697                 hook_arg1 = "merge";
698         else if (whence == FROM_CHERRY_PICK) {
699                 hook_arg1 = "commit";
700                 hook_arg2 = "CHERRY_PICK_HEAD";
701         }
702
703         if (squash_message) {
704                 /*
705                  * If squash_commit was used for the commit subject,
706                  * then we're possibly hijacking other commit log options.
707                  * Reset the hook args to tell the real story.
708                  */
709                 hook_arg1 = "message";
710                 hook_arg2 = "";
711         }
712
713         s->fp = fopen(git_path(commit_editmsg), "w");
714         if (s->fp == NULL)
715                 die_errno(_("could not open '%s'"), git_path(commit_editmsg));
716
717         /* Ignore status.displayCommentPrefix: we do need comments in COMMIT_EDITMSG. */
718         old_display_comment_prefix = s->display_comment_prefix;
719         s->display_comment_prefix = 1;
720
721         /*
722          * Most hints are counter-productive when the commit has
723          * already started.
724          */
725         s->hints = 0;
726
727         if (clean_message_contents)
728                 stripspace(&sb, 0);
729
730         if (signoff) {
731                 /*
732                  * See if we have a Conflicts: block at the end. If yes, count
733                  * its size, so we can ignore it.
734                  */
735                 int ignore_footer = 0;
736                 int i, eol, previous = 0;
737                 const char *nl;
738
739                 for (i = 0; i < sb.len; i++) {
740                         nl = memchr(sb.buf + i, '\n', sb.len - i);
741                         if (nl)
742                                 eol = nl - sb.buf;
743                         else
744                                 eol = sb.len;
745                         if (starts_with(sb.buf + previous, "\nConflicts:\n")) {
746                                 ignore_footer = sb.len - previous;
747                                 break;
748                         }
749                         while (i < eol)
750                                 i++;
751                         previous = eol;
752                 }
753
754                 append_signoff(&sb, ignore_footer, 0);
755         }
756
757         if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
758                 die_errno(_("could not write commit template"));
759
760         strbuf_release(&sb);
761
762         /* This checks if committer ident is explicitly given */
763         strbuf_addstr(&committer_ident, git_committer_info(IDENT_STRICT));
764         if (use_editor && include_status) {
765                 int ident_shown = 0;
766                 int saved_color_setting;
767                 struct ident_split ci, ai;
768
769                 if (whence != FROM_COMMIT) {
770                         if (cleanup_mode == CLEANUP_SCISSORS)
771                                 wt_status_add_cut_line(s->fp);
772                         status_printf_ln(s, GIT_COLOR_NORMAL,
773                             whence == FROM_MERGE
774                                 ? _("\n"
775                                         "It looks like you may be committing a merge.\n"
776                                         "If this is not correct, please remove the file\n"
777                                         "       %s\n"
778                                         "and try again.\n")
779                                 : _("\n"
780                                         "It looks like you may be committing a cherry-pick.\n"
781                                         "If this is not correct, please remove the file\n"
782                                         "       %s\n"
783                                         "and try again.\n"),
784                                 git_path(whence == FROM_MERGE
785                                          ? "MERGE_HEAD"
786                                          : "CHERRY_PICK_HEAD"));
787                 }
788
789                 fprintf(s->fp, "\n");
790                 if (cleanup_mode == CLEANUP_ALL)
791                         status_printf(s, GIT_COLOR_NORMAL,
792                                 _("Please enter the commit message for your changes."
793                                   " Lines starting\nwith '%c' will be ignored, and an empty"
794                                   " message aborts the commit.\n"), comment_line_char);
795                 else if (cleanup_mode == CLEANUP_SCISSORS && whence == FROM_COMMIT)
796                         wt_status_add_cut_line(s->fp);
797                 else /* CLEANUP_SPACE, that is. */
798                         status_printf(s, GIT_COLOR_NORMAL,
799                                 _("Please enter the commit message for your changes."
800                                   " Lines starting\n"
801                                   "with '%c' will be kept; you may remove them"
802                                   " yourself if you want to.\n"
803                                   "An empty message aborts the commit.\n"), comment_line_char);
804                 if (only_include_assumed)
805                         status_printf_ln(s, GIT_COLOR_NORMAL,
806                                         "%s", only_include_assumed);
807
808                 /*
809                  * These should never fail because they come from our own
810                  * fmt_ident. They may fail the sane_ident test, but we know
811                  * that the name and mail pointers will at least be valid,
812                  * which is enough for our tests and printing here.
813                  */
814                 assert_split_ident(&ai, author_ident);
815                 assert_split_ident(&ci, &committer_ident);
816
817                 if (ident_cmp(&ai, &ci))
818                         status_printf_ln(s, GIT_COLOR_NORMAL,
819                                 _("%s"
820                                 "Author:    %.*s <%.*s>"),
821                                 ident_shown++ ? "" : "\n",
822                                 (int)(ai.name_end - ai.name_begin), ai.name_begin,
823                                 (int)(ai.mail_end - ai.mail_begin), ai.mail_begin);
824
825                 if (author_date_is_interesting())
826                         status_printf_ln(s, GIT_COLOR_NORMAL,
827                                 _("%s"
828                                 "Date:      %s"),
829                                 ident_shown++ ? "" : "\n",
830                                 show_ident_date(&ai, DATE_NORMAL));
831
832                 if (!committer_ident_sufficiently_given())
833                         status_printf_ln(s, GIT_COLOR_NORMAL,
834                                 _("%s"
835                                 "Committer: %.*s <%.*s>"),
836                                 ident_shown++ ? "" : "\n",
837                                 (int)(ci.name_end - ci.name_begin), ci.name_begin,
838                                 (int)(ci.mail_end - ci.mail_begin), ci.mail_begin);
839
840                 if (ident_shown)
841                         status_printf_ln(s, GIT_COLOR_NORMAL, "");
842
843                 saved_color_setting = s->use_color;
844                 s->use_color = 0;
845                 commitable = run_status(s->fp, index_file, prefix, 1, s);
846                 s->use_color = saved_color_setting;
847         } else {
848                 unsigned char sha1[20];
849                 const char *parent = "HEAD";
850
851                 if (!active_nr && read_cache() < 0)
852                         die(_("Cannot read index"));
853
854                 if (amend)
855                         parent = "HEAD^1";
856
857                 if (get_sha1(parent, sha1))
858                         commitable = !!active_nr;
859                 else
860                         commitable = index_differs_from(parent, 0);
861         }
862         strbuf_release(&committer_ident);
863
864         fclose(s->fp);
865
866         /*
867          * Reject an attempt to record a non-merge empty commit without
868          * explicit --allow-empty. In the cherry-pick case, it may be
869          * empty due to conflict resolution, which the user should okay.
870          */
871         if (!commitable && whence != FROM_MERGE && !allow_empty &&
872             !(amend && is_a_merge(current_head))) {
873                 s->display_comment_prefix = old_display_comment_prefix;
874                 run_status(stdout, index_file, prefix, 0, s);
875                 if (amend)
876                         fputs(_(empty_amend_advice), stderr);
877                 else if (whence == FROM_CHERRY_PICK) {
878                         fputs(_(empty_cherry_pick_advice), stderr);
879                         if (!sequencer_in_use)
880                                 fputs(_(empty_cherry_pick_advice_single), stderr);
881                         else
882                                 fputs(_(empty_cherry_pick_advice_multi), stderr);
883                 }
884                 return 0;
885         }
886
887         /*
888          * Re-read the index as pre-commit hook could have updated it,
889          * and write it out as a tree.  We must do this before we invoke
890          * the editor and after we invoke run_status above.
891          */
892         discard_cache();
893         read_cache_from(index_file);
894         if (update_main_cache_tree(0)) {
895                 error(_("Error building trees"));
896                 return 0;
897         }
898
899         if (run_commit_hook(use_editor, index_file, "prepare-commit-msg",
900                             git_path(commit_editmsg), hook_arg1, hook_arg2, NULL))
901                 return 0;
902
903         if (use_editor) {
904                 char index[PATH_MAX];
905                 const char *env[2] = { NULL };
906                 env[0] =  index;
907                 snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
908                 if (launch_editor(git_path(commit_editmsg), NULL, env)) {
909                         fprintf(stderr,
910                         _("Please supply the message using either -m or -F option.\n"));
911                         exit(1);
912                 }
913         }
914
915         if (!no_verify &&
916             run_commit_hook(use_editor, index_file, "commit-msg", git_path(commit_editmsg), NULL)) {
917                 return 0;
918         }
919
920         return 1;
921 }
922
923 static int rest_is_empty(struct strbuf *sb, int start)
924 {
925         int i, eol;
926         const char *nl;
927
928         /* Check if the rest is just whitespace and Signed-of-by's. */
929         for (i = start; i < sb->len; i++) {
930                 nl = memchr(sb->buf + i, '\n', sb->len - i);
931                 if (nl)
932                         eol = nl - sb->buf;
933                 else
934                         eol = sb->len;
935
936                 if (strlen(sign_off_header) <= eol - i &&
937                     starts_with(sb->buf + i, sign_off_header)) {
938                         i = eol;
939                         continue;
940                 }
941                 while (i < eol)
942                         if (!isspace(sb->buf[i++]))
943                                 return 0;
944         }
945
946         return 1;
947 }
948
949 /*
950  * Find out if the message in the strbuf contains only whitespace and
951  * Signed-off-by lines.
952  */
953 static int message_is_empty(struct strbuf *sb)
954 {
955         if (cleanup_mode == CLEANUP_NONE && sb->len)
956                 return 0;
957         return rest_is_empty(sb, 0);
958 }
959
960 /*
961  * See if the user edited the message in the editor or left what
962  * was in the template intact
963  */
964 static int template_untouched(struct strbuf *sb)
965 {
966         struct strbuf tmpl = STRBUF_INIT;
967         char *start;
968
969         if (cleanup_mode == CLEANUP_NONE && sb->len)
970                 return 0;
971
972         if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
973                 return 0;
974
975         stripspace(&tmpl, cleanup_mode == CLEANUP_ALL);
976         start = (char *)skip_prefix(sb->buf, tmpl.buf);
977         if (!start)
978                 start = sb->buf;
979         strbuf_release(&tmpl);
980         return rest_is_empty(sb, start - sb->buf);
981 }
982
983 static const char *find_author_by_nickname(const char *name)
984 {
985         struct rev_info revs;
986         struct commit *commit;
987         struct strbuf buf = STRBUF_INIT;
988         struct string_list mailmap = STRING_LIST_INIT_NODUP;
989         const char *av[20];
990         int ac = 0;
991
992         init_revisions(&revs, NULL);
993         strbuf_addf(&buf, "--author=%s", name);
994         av[++ac] = "--all";
995         av[++ac] = "-i";
996         av[++ac] = buf.buf;
997         av[++ac] = NULL;
998         setup_revisions(ac, av, &revs, NULL);
999         revs.mailmap = &mailmap;
1000         read_mailmap(revs.mailmap, NULL);
1001
1002         prepare_revision_walk(&revs);
1003         commit = get_revision(&revs);
1004         if (commit) {
1005                 struct pretty_print_context ctx = {0};
1006                 ctx.date_mode = DATE_NORMAL;
1007                 strbuf_release(&buf);
1008                 format_commit_message(commit, "%aN <%aE>", &buf, &ctx);
1009                 clear_mailmap(&mailmap);
1010                 return strbuf_detach(&buf, NULL);
1011         }
1012         die(_("No existing author found with '%s'"), name);
1013 }
1014
1015
1016 static void handle_untracked_files_arg(struct wt_status *s)
1017 {
1018         if (!untracked_files_arg)
1019                 ; /* default already initialized */
1020         else if (!strcmp(untracked_files_arg, "no"))
1021                 s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
1022         else if (!strcmp(untracked_files_arg, "normal"))
1023                 s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1024         else if (!strcmp(untracked_files_arg, "all"))
1025                 s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1026         else
1027                 die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
1028 }
1029
1030 static const char *read_commit_message(const char *name)
1031 {
1032         const char *out_enc;
1033         struct commit *commit;
1034
1035         commit = lookup_commit_reference_by_name(name);
1036         if (!commit)
1037                 die(_("could not lookup commit %s"), name);
1038         out_enc = get_commit_output_encoding();
1039         return logmsg_reencode(commit, NULL, out_enc);
1040 }
1041
1042 /*
1043  * Enumerate what needs to be propagated when --porcelain
1044  * is not in effect here.
1045  */
1046 static struct status_deferred_config {
1047         enum status_format status_format;
1048         int show_branch;
1049 } status_deferred_config = {
1050         STATUS_FORMAT_UNSPECIFIED,
1051         -1 /* unspecified */
1052 };
1053
1054 static void finalize_deferred_config(struct wt_status *s)
1055 {
1056         int use_deferred_config = (status_format != STATUS_FORMAT_PORCELAIN &&
1057                                    !s->null_termination);
1058
1059         if (s->null_termination) {
1060                 if (status_format == STATUS_FORMAT_NONE ||
1061                     status_format == STATUS_FORMAT_UNSPECIFIED)
1062                         status_format = STATUS_FORMAT_PORCELAIN;
1063                 else if (status_format == STATUS_FORMAT_LONG)
1064                         die(_("--long and -z are incompatible"));
1065         }
1066
1067         if (use_deferred_config && status_format == STATUS_FORMAT_UNSPECIFIED)
1068                 status_format = status_deferred_config.status_format;
1069         if (status_format == STATUS_FORMAT_UNSPECIFIED)
1070                 status_format = STATUS_FORMAT_NONE;
1071
1072         if (use_deferred_config && s->show_branch < 0)
1073                 s->show_branch = status_deferred_config.show_branch;
1074         if (s->show_branch < 0)
1075                 s->show_branch = 0;
1076 }
1077
1078 static int parse_and_validate_options(int argc, const char *argv[],
1079                                       const struct option *options,
1080                                       const char * const usage[],
1081                                       const char *prefix,
1082                                       struct commit *current_head,
1083                                       struct wt_status *s)
1084 {
1085         int f = 0;
1086
1087         argc = parse_options(argc, argv, prefix, options, usage, 0);
1088         finalize_deferred_config(s);
1089
1090         if (force_author && !strchr(force_author, '>'))
1091                 force_author = find_author_by_nickname(force_author);
1092
1093         if (force_author && renew_authorship)
1094                 die(_("Using both --reset-author and --author does not make sense"));
1095
1096         if (logfile || have_option_m || use_message || fixup_message)
1097                 use_editor = 0;
1098         if (0 <= edit_flag)
1099                 use_editor = edit_flag;
1100
1101         /* Sanity check options */
1102         if (amend && !current_head)
1103                 die(_("You have nothing to amend."));
1104         if (amend && whence != FROM_COMMIT) {
1105                 if (whence == FROM_MERGE)
1106                         die(_("You are in the middle of a merge -- cannot amend."));
1107                 else if (whence == FROM_CHERRY_PICK)
1108                         die(_("You are in the middle of a cherry-pick -- cannot amend."));
1109         }
1110         if (fixup_message && squash_message)
1111                 die(_("Options --squash and --fixup cannot be used together"));
1112         if (use_message)
1113                 f++;
1114         if (edit_message)
1115                 f++;
1116         if (fixup_message)
1117                 f++;
1118         if (logfile)
1119                 f++;
1120         if (f > 1)
1121                 die(_("Only one of -c/-C/-F/--fixup can be used."));
1122         if (message.len && f > 0)
1123                 die((_("Option -m cannot be combined with -c/-C/-F/--fixup.")));
1124         if (f || message.len)
1125                 template_file = NULL;
1126         if (edit_message)
1127                 use_message = edit_message;
1128         if (amend && !use_message && !fixup_message)
1129                 use_message = "HEAD";
1130         if (!use_message && whence != FROM_CHERRY_PICK && renew_authorship)
1131                 die(_("--reset-author can be used only with -C, -c or --amend."));
1132         if (use_message) {
1133                 use_message_buffer = read_commit_message(use_message);
1134                 if (!renew_authorship) {
1135                         author_message = use_message;
1136                         author_message_buffer = use_message_buffer;
1137                 }
1138         }
1139         if (whence == FROM_CHERRY_PICK && !renew_authorship) {
1140                 author_message = "CHERRY_PICK_HEAD";
1141                 author_message_buffer = read_commit_message(author_message);
1142         }
1143
1144         if (patch_interactive)
1145                 interactive = 1;
1146
1147         if (also + only + all + interactive > 1)
1148                 die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
1149         if (argc == 0 && (also || (only && !amend)))
1150                 die(_("No paths with --include/--only does not make sense."));
1151         if (argc == 0 && only && amend)
1152                 only_include_assumed = _("Clever... amending the last one with dirty index.");
1153         if (argc > 0 && !also && !only)
1154                 only_include_assumed = _("Explicit paths specified without -i or -o; assuming --only paths...");
1155         if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
1156                 cleanup_mode = use_editor ? CLEANUP_ALL : CLEANUP_SPACE;
1157         else if (!strcmp(cleanup_arg, "verbatim"))
1158                 cleanup_mode = CLEANUP_NONE;
1159         else if (!strcmp(cleanup_arg, "whitespace"))
1160                 cleanup_mode = CLEANUP_SPACE;
1161         else if (!strcmp(cleanup_arg, "strip"))
1162                 cleanup_mode = CLEANUP_ALL;
1163         else if (!strcmp(cleanup_arg, "scissors"))
1164                 cleanup_mode = use_editor ? CLEANUP_SCISSORS : CLEANUP_SPACE;
1165         else
1166                 die(_("Invalid cleanup mode %s"), cleanup_arg);
1167
1168         handle_untracked_files_arg(s);
1169
1170         if (all && argc > 0)
1171                 die(_("Paths with -a does not make sense."));
1172
1173         if (status_format != STATUS_FORMAT_NONE)
1174                 dry_run = 1;
1175
1176         return argc;
1177 }
1178
1179 static int dry_run_commit(int argc, const char **argv, const char *prefix,
1180                           const struct commit *current_head, struct wt_status *s)
1181 {
1182         int commitable;
1183         const char *index_file;
1184
1185         index_file = prepare_index(argc, argv, prefix, current_head, 1);
1186         commitable = run_status(stdout, index_file, prefix, 0, s);
1187         rollback_index_files();
1188
1189         return commitable ? 0 : 1;
1190 }
1191
1192 static int parse_status_slot(const char *var, int offset)
1193 {
1194         if (!strcasecmp(var+offset, "header"))
1195                 return WT_STATUS_HEADER;
1196         if (!strcasecmp(var+offset, "branch"))
1197                 return WT_STATUS_ONBRANCH;
1198         if (!strcasecmp(var+offset, "updated")
1199                 || !strcasecmp(var+offset, "added"))
1200                 return WT_STATUS_UPDATED;
1201         if (!strcasecmp(var+offset, "changed"))
1202                 return WT_STATUS_CHANGED;
1203         if (!strcasecmp(var+offset, "untracked"))
1204                 return WT_STATUS_UNTRACKED;
1205         if (!strcasecmp(var+offset, "nobranch"))
1206                 return WT_STATUS_NOBRANCH;
1207         if (!strcasecmp(var+offset, "unmerged"))
1208                 return WT_STATUS_UNMERGED;
1209         return -1;
1210 }
1211
1212 static int git_status_config(const char *k, const char *v, void *cb)
1213 {
1214         struct wt_status *s = cb;
1215
1216         if (starts_with(k, "column."))
1217                 return git_column_config(k, v, "status", &s->colopts);
1218         if (!strcmp(k, "status.submodulesummary")) {
1219                 int is_bool;
1220                 s->submodule_summary = git_config_bool_or_int(k, v, &is_bool);
1221                 if (is_bool && s->submodule_summary)
1222                         s->submodule_summary = -1;
1223                 return 0;
1224         }
1225         if (!strcmp(k, "status.short")) {
1226                 if (git_config_bool(k, v))
1227                         status_deferred_config.status_format = STATUS_FORMAT_SHORT;
1228                 else
1229                         status_deferred_config.status_format = STATUS_FORMAT_NONE;
1230                 return 0;
1231         }
1232         if (!strcmp(k, "status.branch")) {
1233                 status_deferred_config.show_branch = git_config_bool(k, v);
1234                 return 0;
1235         }
1236         if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
1237                 s->use_color = git_config_colorbool(k, v);
1238                 return 0;
1239         }
1240         if (!strcmp(k, "status.displaycommentprefix")) {
1241                 s->display_comment_prefix = git_config_bool(k, v);
1242                 return 0;
1243         }
1244         if (starts_with(k, "status.color.") || starts_with(k, "color.status.")) {
1245                 int slot = parse_status_slot(k, 13);
1246                 if (slot < 0)
1247                         return 0;
1248                 if (!v)
1249                         return config_error_nonbool(k);
1250                 color_parse(v, k, s->color_palette[slot]);
1251                 return 0;
1252         }
1253         if (!strcmp(k, "status.relativepaths")) {
1254                 s->relative_paths = git_config_bool(k, v);
1255                 return 0;
1256         }
1257         if (!strcmp(k, "status.showuntrackedfiles")) {
1258                 if (!v)
1259                         return config_error_nonbool(k);
1260                 else if (!strcmp(v, "no"))
1261                         s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
1262                 else if (!strcmp(v, "normal"))
1263                         s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1264                 else if (!strcmp(v, "all"))
1265                         s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1266                 else
1267                         return error(_("Invalid untracked files mode '%s'"), v);
1268                 return 0;
1269         }
1270         return git_diff_ui_config(k, v, NULL);
1271 }
1272
1273 int cmd_status(int argc, const char **argv, const char *prefix)
1274 {
1275         static struct wt_status s;
1276         int fd;
1277         unsigned char sha1[20];
1278         static struct option builtin_status_options[] = {
1279                 OPT__VERBOSE(&verbose, N_("be verbose")),
1280                 OPT_SET_INT('s', "short", &status_format,
1281                             N_("show status concisely"), STATUS_FORMAT_SHORT),
1282                 OPT_BOOL('b', "branch", &s.show_branch,
1283                          N_("show branch information")),
1284                 OPT_SET_INT(0, "porcelain", &status_format,
1285                             N_("machine-readable output"),
1286                             STATUS_FORMAT_PORCELAIN),
1287                 OPT_SET_INT(0, "long", &status_format,
1288                             N_("show status in long format (default)"),
1289                             STATUS_FORMAT_LONG),
1290                 OPT_BOOL('z', "null", &s.null_termination,
1291                          N_("terminate entries with NUL")),
1292                 { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg,
1293                   N_("mode"),
1294                   N_("show untracked files, optional modes: all, normal, no. (Default: all)"),
1295                   PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1296                 OPT_BOOL(0, "ignored", &show_ignored_in_status,
1297                          N_("show ignored files")),
1298                 { OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, N_("when"),
1299                   N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"),
1300                   PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1301                 OPT_COLUMN(0, "column", &s.colopts, N_("list untracked files in columns")),
1302                 OPT_END(),
1303         };
1304
1305         if (argc == 2 && !strcmp(argv[1], "-h"))
1306                 usage_with_options(builtin_status_usage, builtin_status_options);
1307
1308         status_init_config(&s, git_status_config);
1309         argc = parse_options(argc, argv, prefix,
1310                              builtin_status_options,
1311                              builtin_status_usage, 0);
1312         finalize_colopts(&s.colopts, -1);
1313         finalize_deferred_config(&s);
1314
1315         handle_untracked_files_arg(&s);
1316         if (show_ignored_in_status)
1317                 s.show_ignored_files = 1;
1318         parse_pathspec(&s.pathspec, 0,
1319                        PATHSPEC_PREFER_FULL,
1320                        prefix, argv);
1321
1322         read_cache_preload(&s.pathspec);
1323         refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL);
1324
1325         fd = hold_locked_index(&index_lock, 0);
1326         if (0 <= fd)
1327                 update_index_if_able(&the_index, &index_lock);
1328
1329         s.is_initial = get_sha1(s.reference, sha1) ? 1 : 0;
1330         s.ignore_submodule_arg = ignore_submodule_arg;
1331         wt_status_collect(&s);
1332
1333         if (s.relative_paths)
1334                 s.prefix = prefix;
1335
1336         switch (status_format) {
1337         case STATUS_FORMAT_SHORT:
1338                 wt_shortstatus_print(&s);
1339                 break;
1340         case STATUS_FORMAT_PORCELAIN:
1341                 wt_porcelain_print(&s);
1342                 break;
1343         case STATUS_FORMAT_UNSPECIFIED:
1344                 die("BUG: finalize_deferred_config() should have been called");
1345                 break;
1346         case STATUS_FORMAT_NONE:
1347         case STATUS_FORMAT_LONG:
1348                 s.verbose = verbose;
1349                 s.ignore_submodule_arg = ignore_submodule_arg;
1350                 wt_status_print(&s);
1351                 break;
1352         }
1353         return 0;
1354 }
1355
1356 static void print_summary(const char *prefix, const unsigned char *sha1,
1357                           int initial_commit)
1358 {
1359         struct rev_info rev;
1360         struct commit *commit;
1361         struct strbuf format = STRBUF_INIT;
1362         unsigned char junk_sha1[20];
1363         const char *head;
1364         struct pretty_print_context pctx = {0};
1365         struct strbuf author_ident = STRBUF_INIT;
1366         struct strbuf committer_ident = STRBUF_INIT;
1367
1368         commit = lookup_commit(sha1);
1369         if (!commit)
1370                 die(_("couldn't look up newly created commit"));
1371         if (parse_commit(commit))
1372                 die(_("could not parse newly created commit"));
1373
1374         strbuf_addstr(&format, "format:%h] %s");
1375
1376         format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1377         format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1378         if (strbuf_cmp(&author_ident, &committer_ident)) {
1379                 strbuf_addstr(&format, "\n Author: ");
1380                 strbuf_addbuf_percentquote(&format, &author_ident);
1381         }
1382         if (author_date_is_interesting()) {
1383                 struct strbuf date = STRBUF_INIT;
1384                 format_commit_message(commit, "%ad", &date, &pctx);
1385                 strbuf_addstr(&format, "\n Date: ");
1386                 strbuf_addbuf_percentquote(&format, &date);
1387                 strbuf_release(&date);
1388         }
1389         if (!committer_ident_sufficiently_given()) {
1390                 strbuf_addstr(&format, "\n Committer: ");
1391                 strbuf_addbuf_percentquote(&format, &committer_ident);
1392                 if (advice_implicit_identity) {
1393                         strbuf_addch(&format, '\n');
1394                         strbuf_addstr(&format, _(implicit_ident_advice));
1395                 }
1396         }
1397         strbuf_release(&author_ident);
1398         strbuf_release(&committer_ident);
1399
1400         init_revisions(&rev, prefix);
1401         setup_revisions(0, NULL, &rev, NULL);
1402
1403         rev.diff = 1;
1404         rev.diffopt.output_format =
1405                 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1406
1407         rev.verbose_header = 1;
1408         rev.show_root_diff = 1;
1409         get_commit_format(format.buf, &rev);
1410         rev.always_show_header = 0;
1411         rev.diffopt.detect_rename = 1;
1412         rev.diffopt.break_opt = 0;
1413         diff_setup_done(&rev.diffopt);
1414
1415         head = resolve_ref_unsafe("HEAD", junk_sha1, 0, NULL);
1416         printf("[%s%s ",
1417                 starts_with(head, "refs/heads/") ?
1418                         head + 11 :
1419                         !strcmp(head, "HEAD") ?
1420                                 _("detached HEAD") :
1421                                 head,
1422                 initial_commit ? _(" (root-commit)") : "");
1423
1424         if (!log_tree_commit(&rev, commit)) {
1425                 rev.always_show_header = 1;
1426                 rev.use_terminator = 1;
1427                 log_tree_commit(&rev, commit);
1428         }
1429
1430         strbuf_release(&format);
1431 }
1432
1433 static int git_commit_config(const char *k, const char *v, void *cb)
1434 {
1435         struct wt_status *s = cb;
1436         int status;
1437
1438         if (!strcmp(k, "commit.template"))
1439                 return git_config_pathname(&template_file, k, v);
1440         if (!strcmp(k, "commit.status")) {
1441                 include_status = git_config_bool(k, v);
1442                 return 0;
1443         }
1444         if (!strcmp(k, "commit.cleanup"))
1445                 return git_config_string(&cleanup_arg, k, v);
1446         if (!strcmp(k, "commit.gpgsign")) {
1447                 sign_commit = git_config_bool(k, v) ? "" : NULL;
1448                 return 0;
1449         }
1450
1451         status = git_gpg_config(k, v, NULL);
1452         if (status)
1453                 return status;
1454         return git_status_config(k, v, s);
1455 }
1456
1457 static int run_rewrite_hook(const unsigned char *oldsha1,
1458                             const unsigned char *newsha1)
1459 {
1460         /* oldsha1 SP newsha1 LF NUL */
1461         static char buf[2*40 + 3];
1462         struct child_process proc;
1463         const char *argv[3];
1464         int code;
1465         size_t n;
1466
1467         argv[0] = find_hook("post-rewrite");
1468         if (!argv[0])
1469                 return 0;
1470
1471         argv[1] = "amend";
1472         argv[2] = NULL;
1473
1474         memset(&proc, 0, sizeof(proc));
1475         proc.argv = argv;
1476         proc.in = -1;
1477         proc.stdout_to_stderr = 1;
1478
1479         code = start_command(&proc);
1480         if (code)
1481                 return code;
1482         n = snprintf(buf, sizeof(buf), "%s %s\n",
1483                      sha1_to_hex(oldsha1), sha1_to_hex(newsha1));
1484         write_in_full(proc.in, buf, n);
1485         close(proc.in);
1486         return finish_command(&proc);
1487 }
1488
1489 int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...)
1490 {
1491         const char *hook_env[3] =  { NULL };
1492         char index[PATH_MAX];
1493         va_list args;
1494         int ret;
1495
1496         snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
1497         hook_env[0] = index;
1498
1499         /*
1500          * Let the hook know that no editor will be launched.
1501          */
1502         if (!editor_is_used)
1503                 hook_env[1] = "GIT_EDITOR=:";
1504
1505         va_start(args, name);
1506         ret = run_hook_ve(hook_env, name, args);
1507         va_end(args);
1508
1509         return ret;
1510 }
1511
1512 int cmd_commit(int argc, const char **argv, const char *prefix)
1513 {
1514         static struct wt_status s;
1515         static struct option builtin_commit_options[] = {
1516                 OPT__QUIET(&quiet, N_("suppress summary after successful commit")),
1517                 OPT__VERBOSE(&verbose, N_("show diff in commit message template")),
1518
1519                 OPT_GROUP(N_("Commit message options")),
1520                 OPT_FILENAME('F', "file", &logfile, N_("read message from file")),
1521                 OPT_STRING(0, "author", &force_author, N_("author"), N_("override author for commit")),
1522                 OPT_STRING(0, "date", &force_date, N_("date"), N_("override date for commit")),
1523                 OPT_CALLBACK('m', "message", &message, N_("message"), N_("commit message"), opt_parse_m),
1524                 OPT_STRING('c', "reedit-message", &edit_message, N_("commit"), N_("reuse and edit message from specified commit")),
1525                 OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")),
1526                 OPT_STRING(0, "fixup", &fixup_message, N_("commit"), N_("use autosquash formatted message to fixup specified commit")),
1527                 OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")),
1528                 OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")),
1529                 OPT_BOOL('s', "signoff", &signoff, N_("add Signed-off-by:")),
1530                 OPT_FILENAME('t', "template", &template_file, N_("use specified template file")),
1531                 OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")),
1532                 OPT_STRING(0, "cleanup", &cleanup_arg, N_("default"), N_("how to strip spaces and #comments from message")),
1533                 OPT_BOOL(0, "status", &include_status, N_("include status in commit message template")),
1534                 { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key-id"),
1535                   N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
1536                 /* end commit message options */
1537
1538                 OPT_GROUP(N_("Commit contents options")),
1539                 OPT_BOOL('a', "all", &all, N_("commit all changed files")),
1540                 OPT_BOOL('i', "include", &also, N_("add specified files to index for commit")),
1541                 OPT_BOOL(0, "interactive", &interactive, N_("interactively add files")),
1542                 OPT_BOOL('p', "patch", &patch_interactive, N_("interactively add changes")),
1543                 OPT_BOOL('o', "only", &only, N_("commit only specified files")),
1544                 OPT_BOOL('n', "no-verify", &no_verify, N_("bypass pre-commit hook")),
1545                 OPT_BOOL(0, "dry-run", &dry_run, N_("show what would be committed")),
1546                 OPT_SET_INT(0, "short", &status_format, N_("show status concisely"),
1547                             STATUS_FORMAT_SHORT),
1548                 OPT_BOOL(0, "branch", &s.show_branch, N_("show branch information")),
1549                 OPT_SET_INT(0, "porcelain", &status_format,
1550                             N_("machine-readable output"), STATUS_FORMAT_PORCELAIN),
1551                 OPT_SET_INT(0, "long", &status_format,
1552                             N_("show status in long format (default)"),
1553                             STATUS_FORMAT_LONG),
1554                 OPT_BOOL('z', "null", &s.null_termination,
1555                          N_("terminate entries with NUL")),
1556                 OPT_BOOL(0, "amend", &amend, N_("amend previous commit")),
1557                 OPT_BOOL(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")),
1558                 { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, N_("mode"), N_("show untracked files, optional modes: all, normal, no. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1559                 /* end commit contents options */
1560
1561                 OPT_HIDDEN_BOOL(0, "allow-empty", &allow_empty,
1562                                 N_("ok to record an empty change")),
1563                 OPT_HIDDEN_BOOL(0, "allow-empty-message", &allow_empty_message,
1564                                 N_("ok to record a change with an empty message")),
1565
1566                 OPT_END()
1567         };
1568
1569         struct strbuf sb = STRBUF_INIT;
1570         struct strbuf author_ident = STRBUF_INIT;
1571         const char *index_file, *reflog_msg;
1572         char *nl;
1573         unsigned char sha1[20];
1574         struct ref_lock *ref_lock;
1575         struct commit_list *parents = NULL, **pptr = &parents;
1576         struct stat statbuf;
1577         struct commit *current_head = NULL;
1578         struct commit_extra_header *extra = NULL;
1579
1580         if (argc == 2 && !strcmp(argv[1], "-h"))
1581                 usage_with_options(builtin_commit_usage, builtin_commit_options);
1582
1583         status_init_config(&s, git_commit_config);
1584         status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
1585         s.colopts = 0;
1586
1587         if (get_sha1("HEAD", sha1))
1588                 current_head = NULL;
1589         else {
1590                 current_head = lookup_commit_or_die(sha1, "HEAD");
1591                 if (parse_commit(current_head))
1592                         die(_("could not parse HEAD commit"));
1593         }
1594         argc = parse_and_validate_options(argc, argv, builtin_commit_options,
1595                                           builtin_commit_usage,
1596                                           prefix, current_head, &s);
1597         if (dry_run)
1598                 return dry_run_commit(argc, argv, prefix, current_head, &s);
1599         index_file = prepare_index(argc, argv, prefix, current_head, 0);
1600
1601         /* Set up everything for writing the commit object.  This includes
1602            running hooks, writing the trees, and interacting with the user.  */
1603         if (!prepare_to_commit(index_file, prefix,
1604                                current_head, &s, &author_ident)) {
1605                 rollback_index_files();
1606                 return 1;
1607         }
1608
1609         /* Determine parents */
1610         reflog_msg = getenv("GIT_REFLOG_ACTION");
1611         if (!current_head) {
1612                 if (!reflog_msg)
1613                         reflog_msg = "commit (initial)";
1614         } else if (amend) {
1615                 struct commit_list *c;
1616
1617                 if (!reflog_msg)
1618                         reflog_msg = "commit (amend)";
1619                 for (c = current_head->parents; c; c = c->next)
1620                         pptr = &commit_list_insert(c->item, pptr)->next;
1621         } else if (whence == FROM_MERGE) {
1622                 struct strbuf m = STRBUF_INIT;
1623                 FILE *fp;
1624                 int allow_fast_forward = 1;
1625
1626                 if (!reflog_msg)
1627                         reflog_msg = "commit (merge)";
1628                 pptr = &commit_list_insert(current_head, pptr)->next;
1629                 fp = fopen(git_path("MERGE_HEAD"), "r");
1630                 if (fp == NULL)
1631                         die_errno(_("could not open '%s' for reading"),
1632                                   git_path("MERGE_HEAD"));
1633                 while (strbuf_getline(&m, fp, '\n') != EOF) {
1634                         struct commit *parent;
1635
1636                         parent = get_merge_parent(m.buf);
1637                         if (!parent)
1638                                 die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
1639                         pptr = &commit_list_insert(parent, pptr)->next;
1640                 }
1641                 fclose(fp);
1642                 strbuf_release(&m);
1643                 if (!stat(git_path("MERGE_MODE"), &statbuf)) {
1644                         if (strbuf_read_file(&sb, git_path("MERGE_MODE"), 0) < 0)
1645                                 die_errno(_("could not read MERGE_MODE"));
1646                         if (!strcmp(sb.buf, "no-ff"))
1647                                 allow_fast_forward = 0;
1648                 }
1649                 if (allow_fast_forward)
1650                         parents = reduce_heads(parents);
1651         } else {
1652                 if (!reflog_msg)
1653                         reflog_msg = (whence == FROM_CHERRY_PICK)
1654                                         ? "commit (cherry-pick)"
1655                                         : "commit";
1656                 pptr = &commit_list_insert(current_head, pptr)->next;
1657         }
1658
1659         /* Finally, get the commit message */
1660         strbuf_reset(&sb);
1661         if (strbuf_read_file(&sb, git_path(commit_editmsg), 0) < 0) {
1662                 int saved_errno = errno;
1663                 rollback_index_files();
1664                 die(_("could not read commit message: %s"), strerror(saved_errno));
1665         }
1666
1667         if (verbose || /* Truncate the message just before the diff, if any. */
1668             cleanup_mode == CLEANUP_SCISSORS)
1669                 wt_status_truncate_message_at_cut_line(&sb);
1670
1671         if (cleanup_mode != CLEANUP_NONE)
1672                 stripspace(&sb, cleanup_mode == CLEANUP_ALL);
1673         if (template_untouched(&sb) && !allow_empty_message) {
1674                 rollback_index_files();
1675                 fprintf(stderr, _("Aborting commit; you did not edit the message.\n"));
1676                 exit(1);
1677         }
1678         if (message_is_empty(&sb) && !allow_empty_message) {
1679                 rollback_index_files();
1680                 fprintf(stderr, _("Aborting commit due to empty commit message.\n"));
1681                 exit(1);
1682         }
1683
1684         if (amend) {
1685                 const char *exclude_gpgsig[2] = { "gpgsig", NULL };
1686                 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1687         } else {
1688                 struct commit_extra_header **tail = &extra;
1689                 append_merge_tag_headers(parents, &tail);
1690         }
1691
1692         if (commit_tree_extended(&sb, active_cache_tree->sha1, parents, sha1,
1693                                  author_ident.buf, sign_commit, extra)) {
1694                 rollback_index_files();
1695                 die(_("failed to write commit object"));
1696         }
1697         strbuf_release(&author_ident);
1698         free_commit_extra_headers(extra);
1699
1700         ref_lock = lock_any_ref_for_update("HEAD",
1701                                            !current_head
1702                                            ? NULL
1703                                            : current_head->object.sha1,
1704                                            0, NULL);
1705
1706         nl = strchr(sb.buf, '\n');
1707         if (nl)
1708                 strbuf_setlen(&sb, nl + 1 - sb.buf);
1709         else
1710                 strbuf_addch(&sb, '\n');
1711         strbuf_insert(&sb, 0, reflog_msg, strlen(reflog_msg));
1712         strbuf_insert(&sb, strlen(reflog_msg), ": ", 2);
1713
1714         if (!ref_lock) {
1715                 rollback_index_files();
1716                 die(_("cannot lock HEAD ref"));
1717         }
1718         if (write_ref_sha1(ref_lock, sha1, sb.buf) < 0) {
1719                 rollback_index_files();
1720                 die(_("cannot update HEAD ref"));
1721         }
1722
1723         unlink(git_path("CHERRY_PICK_HEAD"));
1724         unlink(git_path("REVERT_HEAD"));
1725         unlink(git_path("MERGE_HEAD"));
1726         unlink(git_path("MERGE_MSG"));
1727         unlink(git_path("MERGE_MODE"));
1728         unlink(git_path("SQUASH_MSG"));
1729
1730         if (commit_index_files())
1731                 die (_("Repository has been updated, but unable to write\n"
1732                      "new_index file. Check that disk is not full or quota is\n"
1733                      "not exceeded, and then \"git reset HEAD\" to recover."));
1734
1735         rerere(0);
1736         run_commit_hook(use_editor, get_index_file(), "post-commit", NULL);
1737         if (amend && !no_post_rewrite) {
1738                 struct notes_rewrite_cfg *cfg;
1739                 cfg = init_copy_notes_for_rewrite("amend");
1740                 if (cfg) {
1741                         /* we are amending, so current_head is not NULL */
1742                         copy_note_for_rewrite(cfg, current_head->object.sha1, sha1);
1743                         finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
1744                 }
1745                 run_rewrite_hook(current_head->object.sha1, sha1);
1746         }
1747         if (!quiet)
1748                 print_summary(prefix, sha1, !current_head);
1749
1750         return 0;
1751 }