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