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