builtin/commit.c: use xstrdup_or_null instead of envdup
[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, struct strbuf *out)
549 {
550         strbuf_addch(out, '@');
551
552         if (parse_date(in, out) < 0) {
553                 int errors = 0;
554                 unsigned long t = approxidate_careful(in, &errors);
555                 if (errors)
556                         return -1;
557                 strbuf_addf(out, "%lu", t);
558         }
559
560         return 0;
561 }
562
563 static void set_ident_var(char **buf, char *val)
564 {
565         free(*buf);
566         *buf = val;
567 }
568
569 static void determine_author_info(struct strbuf *author_ident)
570 {
571         char *name, *email, *date;
572         struct ident_split author;
573
574         name = xstrdup_or_null(getenv("GIT_AUTHOR_NAME"));
575         email = xstrdup_or_null(getenv("GIT_AUTHOR_EMAIL"));
576         date = xstrdup_or_null(getenv("GIT_AUTHOR_DATE"));
577
578         if (author_message) {
579                 struct ident_split ident;
580                 size_t len;
581                 const char *a;
582
583                 a = find_commit_header(author_message_buffer, "author", &len);
584                 if (!a)
585                         die(_("commit '%s' lacks author header"), author_message);
586                 if (split_ident_line(&ident, a, len) < 0)
587                         die(_("commit '%s' has malformed author line"), author_message);
588
589                 set_ident_var(&name, xmemdupz(ident.name_begin, ident.name_end - ident.name_begin));
590                 set_ident_var(&email, xmemdupz(ident.mail_begin, ident.mail_end - ident.mail_begin));
591
592                 if (ident.date_begin) {
593                         struct strbuf date_buf = STRBUF_INIT;
594                         strbuf_addch(&date_buf, '@');
595                         strbuf_add(&date_buf, ident.date_begin, ident.date_end - ident.date_begin);
596                         strbuf_addch(&date_buf, ' ');
597                         strbuf_add(&date_buf, ident.tz_begin, ident.tz_end - ident.tz_begin);
598                         set_ident_var(&date, strbuf_detach(&date_buf, NULL));
599                 }
600         }
601
602         if (force_author) {
603                 struct ident_split ident;
604
605                 if (split_ident_line(&ident, force_author, strlen(force_author)) < 0)
606                         die(_("malformed --author parameter"));
607                 set_ident_var(&name, xmemdupz(ident.name_begin, ident.name_end - ident.name_begin));
608                 set_ident_var(&email, xmemdupz(ident.mail_begin, ident.mail_end - ident.mail_begin));
609         }
610
611         if (force_date) {
612                 struct strbuf date_buf = STRBUF_INIT;
613                 if (parse_force_date(force_date, &date_buf))
614                         die(_("invalid date format: %s"), force_date);
615                 set_ident_var(&date, strbuf_detach(&date_buf, NULL));
616         }
617
618         strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_STRICT));
619         if (!split_ident_line(&author, author_ident->buf, author_ident->len) &&
620             sane_ident_split(&author)) {
621                 export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0);
622                 export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0);
623                 export_one("GIT_AUTHOR_DATE", author.date_begin, author.tz_end, '@');
624         }
625
626         free(name);
627         free(email);
628         free(date);
629 }
630
631 static void split_ident_or_die(struct ident_split *id, const struct strbuf *buf)
632 {
633         if (split_ident_line(id, buf->buf, buf->len) ||
634             !sane_ident_split(id))
635                 die(_("Malformed ident string: '%s'"), buf->buf);
636 }
637
638 static int author_date_is_interesting(void)
639 {
640         return author_message || force_date;
641 }
642
643 static void adjust_comment_line_char(const struct strbuf *sb)
644 {
645         char candidates[] = "#;@!$%^&|:";
646         char *candidate;
647         const char *p;
648
649         comment_line_char = candidates[0];
650         if (!memchr(sb->buf, comment_line_char, sb->len))
651                 return;
652
653         p = sb->buf;
654         candidate = strchr(candidates, *p);
655         if (candidate)
656                 *candidate = ' ';
657         for (p = sb->buf; *p; p++) {
658                 if ((p[0] == '\n' || p[0] == '\r') && p[1]) {
659                         candidate = strchr(candidates, p[1]);
660                         if (candidate)
661                                 *candidate = ' ';
662                 }
663         }
664
665         for (p = candidates; *p == ' '; p++)
666                 ;
667         if (!*p)
668                 die(_("unable to select a comment character that is not used\n"
669                       "in the current commit message"));
670         comment_line_char = *p;
671 }
672
673 static int prepare_to_commit(const char *index_file, const char *prefix,
674                              struct commit *current_head,
675                              struct wt_status *s,
676                              struct strbuf *author_ident)
677 {
678         struct stat statbuf;
679         struct strbuf committer_ident = STRBUF_INIT;
680         int commitable;
681         struct strbuf sb = STRBUF_INIT;
682         const char *hook_arg1 = NULL;
683         const char *hook_arg2 = NULL;
684         int clean_message_contents = (cleanup_mode != CLEANUP_NONE);
685         int old_display_comment_prefix;
686
687         /* This checks and barfs if author is badly specified */
688         determine_author_info(author_ident);
689
690         if (!no_verify && run_commit_hook(use_editor, index_file, "pre-commit", NULL))
691                 return 0;
692
693         if (squash_message) {
694                 /*
695                  * Insert the proper subject line before other commit
696                  * message options add their content.
697                  */
698                 if (use_message && !strcmp(use_message, squash_message))
699                         strbuf_addstr(&sb, "squash! ");
700                 else {
701                         struct pretty_print_context ctx = {0};
702                         struct commit *c;
703                         c = lookup_commit_reference_by_name(squash_message);
704                         if (!c)
705                                 die(_("could not lookup commit %s"), squash_message);
706                         ctx.output_encoding = get_commit_output_encoding();
707                         format_commit_message(c, "squash! %s\n\n", &sb,
708                                               &ctx);
709                 }
710         }
711
712         if (message.len) {
713                 strbuf_addbuf(&sb, &message);
714                 hook_arg1 = "message";
715         } else if (logfile && !strcmp(logfile, "-")) {
716                 if (isatty(0))
717                         fprintf(stderr, _("(reading log message from standard input)\n"));
718                 if (strbuf_read(&sb, 0, 0) < 0)
719                         die_errno(_("could not read log from standard input"));
720                 hook_arg1 = "message";
721         } else if (logfile) {
722                 if (strbuf_read_file(&sb, logfile, 0) < 0)
723                         die_errno(_("could not read log file '%s'"),
724                                   logfile);
725                 hook_arg1 = "message";
726         } else if (use_message) {
727                 char *buffer;
728                 buffer = strstr(use_message_buffer, "\n\n");
729                 if (buffer)
730                         strbuf_addstr(&sb, buffer + 2);
731                 hook_arg1 = "commit";
732                 hook_arg2 = use_message;
733         } else if (fixup_message) {
734                 struct pretty_print_context ctx = {0};
735                 struct commit *commit;
736                 commit = lookup_commit_reference_by_name(fixup_message);
737                 if (!commit)
738                         die(_("could not lookup commit %s"), fixup_message);
739                 ctx.output_encoding = get_commit_output_encoding();
740                 format_commit_message(commit, "fixup! %s\n\n",
741                                       &sb, &ctx);
742                 hook_arg1 = "message";
743         } else if (!stat(git_path("MERGE_MSG"), &statbuf)) {
744                 if (strbuf_read_file(&sb, git_path("MERGE_MSG"), 0) < 0)
745                         die_errno(_("could not read MERGE_MSG"));
746                 hook_arg1 = "merge";
747         } else if (!stat(git_path("SQUASH_MSG"), &statbuf)) {
748                 if (strbuf_read_file(&sb, git_path("SQUASH_MSG"), 0) < 0)
749                         die_errno(_("could not read SQUASH_MSG"));
750                 hook_arg1 = "squash";
751         } else if (template_file) {
752                 if (strbuf_read_file(&sb, template_file, 0) < 0)
753                         die_errno(_("could not read '%s'"), template_file);
754                 hook_arg1 = "template";
755                 clean_message_contents = 0;
756         }
757
758         /*
759          * The remaining cases don't modify the template message, but
760          * just set the argument(s) to the prepare-commit-msg hook.
761          */
762         else if (whence == FROM_MERGE)
763                 hook_arg1 = "merge";
764         else if (whence == FROM_CHERRY_PICK) {
765                 hook_arg1 = "commit";
766                 hook_arg2 = "CHERRY_PICK_HEAD";
767         }
768
769         if (squash_message) {
770                 /*
771                  * If squash_commit was used for the commit subject,
772                  * then we're possibly hijacking other commit log options.
773                  * Reset the hook args to tell the real story.
774                  */
775                 hook_arg1 = "message";
776                 hook_arg2 = "";
777         }
778
779         s->fp = fopen(git_path(commit_editmsg), "w");
780         if (s->fp == NULL)
781                 die_errno(_("could not open '%s'"), git_path(commit_editmsg));
782
783         /* Ignore status.displayCommentPrefix: we do need comments in COMMIT_EDITMSG. */
784         old_display_comment_prefix = s->display_comment_prefix;
785         s->display_comment_prefix = 1;
786
787         /*
788          * Most hints are counter-productive when the commit has
789          * already started.
790          */
791         s->hints = 0;
792
793         if (clean_message_contents)
794                 stripspace(&sb, 0);
795
796         if (signoff) {
797                 /*
798                  * See if we have a Conflicts: block at the end. If yes, count
799                  * its size, so we can ignore it.
800                  */
801                 int ignore_footer = 0;
802                 int i, eol, previous = 0;
803                 const char *nl;
804
805                 for (i = 0; i < sb.len; i++) {
806                         nl = memchr(sb.buf + i, '\n', sb.len - i);
807                         if (nl)
808                                 eol = nl - sb.buf;
809                         else
810                                 eol = sb.len;
811                         if (starts_with(sb.buf + previous, "\nConflicts:\n")) {
812                                 ignore_footer = sb.len - previous;
813                                 break;
814                         }
815                         while (i < eol)
816                                 i++;
817                         previous = eol;
818                 }
819
820                 append_signoff(&sb, ignore_footer, 0);
821         }
822
823         if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
824                 die_errno(_("could not write commit template"));
825
826         if (auto_comment_line_char)
827                 adjust_comment_line_char(&sb);
828         strbuf_release(&sb);
829
830         /* This checks if committer ident is explicitly given */
831         strbuf_addstr(&committer_ident, git_committer_info(IDENT_STRICT));
832         if (use_editor && include_status) {
833                 int ident_shown = 0;
834                 int saved_color_setting;
835                 struct ident_split ci, ai;
836
837                 if (whence != FROM_COMMIT) {
838                         if (cleanup_mode == CLEANUP_SCISSORS)
839                                 wt_status_add_cut_line(s->fp);
840                         status_printf_ln(s, GIT_COLOR_NORMAL,
841                             whence == FROM_MERGE
842                                 ? _("\n"
843                                         "It looks like you may be committing a merge.\n"
844                                         "If this is not correct, please remove the file\n"
845                                         "       %s\n"
846                                         "and try again.\n")
847                                 : _("\n"
848                                         "It looks like you may be committing a cherry-pick.\n"
849                                         "If this is not correct, please remove the file\n"
850                                         "       %s\n"
851                                         "and try again.\n"),
852                                 git_path(whence == FROM_MERGE
853                                          ? "MERGE_HEAD"
854                                          : "CHERRY_PICK_HEAD"));
855                 }
856
857                 fprintf(s->fp, "\n");
858                 if (cleanup_mode == CLEANUP_ALL)
859                         status_printf(s, GIT_COLOR_NORMAL,
860                                 _("Please enter the commit message for your changes."
861                                   " Lines starting\nwith '%c' will be ignored, and an empty"
862                                   " message aborts the commit.\n"), comment_line_char);
863                 else if (cleanup_mode == CLEANUP_SCISSORS && whence == FROM_COMMIT)
864                         wt_status_add_cut_line(s->fp);
865                 else /* CLEANUP_SPACE, that is. */
866                         status_printf(s, GIT_COLOR_NORMAL,
867                                 _("Please enter the commit message for your changes."
868                                   " Lines starting\n"
869                                   "with '%c' will be kept; you may remove them"
870                                   " yourself if you want to.\n"
871                                   "An empty message aborts the commit.\n"), comment_line_char);
872                 if (only_include_assumed)
873                         status_printf_ln(s, GIT_COLOR_NORMAL,
874                                         "%s", only_include_assumed);
875
876                 split_ident_or_die(&ai, author_ident);
877                 split_ident_or_die(&ci, &committer_ident);
878
879                 if (ident_cmp(&ai, &ci))
880                         status_printf_ln(s, GIT_COLOR_NORMAL,
881                                 _("%s"
882                                 "Author:    %.*s <%.*s>"),
883                                 ident_shown++ ? "" : "\n",
884                                 (int)(ai.name_end - ai.name_begin), ai.name_begin,
885                                 (int)(ai.mail_end - ai.mail_begin), ai.mail_begin);
886
887                 if (author_date_is_interesting())
888                         status_printf_ln(s, GIT_COLOR_NORMAL,
889                                 _("%s"
890                                 "Date:      %s"),
891                                 ident_shown++ ? "" : "\n",
892                                 show_ident_date(&ai, DATE_NORMAL));
893
894                 if (!committer_ident_sufficiently_given())
895                         status_printf_ln(s, GIT_COLOR_NORMAL,
896                                 _("%s"
897                                 "Committer: %.*s <%.*s>"),
898                                 ident_shown++ ? "" : "\n",
899                                 (int)(ci.name_end - ci.name_begin), ci.name_begin,
900                                 (int)(ci.mail_end - ci.mail_begin), ci.mail_begin);
901
902                 if (ident_shown)
903                         status_printf_ln(s, GIT_COLOR_NORMAL, "%s", "");
904
905                 saved_color_setting = s->use_color;
906                 s->use_color = 0;
907                 commitable = run_status(s->fp, index_file, prefix, 1, s);
908                 s->use_color = saved_color_setting;
909         } else {
910                 unsigned char sha1[20];
911                 const char *parent = "HEAD";
912
913                 if (!active_nr && read_cache() < 0)
914                         die(_("Cannot read index"));
915
916                 if (amend)
917                         parent = "HEAD^1";
918
919                 if (get_sha1(parent, sha1))
920                         commitable = !!active_nr;
921                 else {
922                         /*
923                          * Unless the user did explicitly request a submodule
924                          * ignore mode by passing a command line option we do
925                          * not ignore any changed submodule SHA-1s when
926                          * comparing index and parent, no matter what is
927                          * configured. Otherwise we won't commit any
928                          * submodules which were manually staged, which would
929                          * be really confusing.
930                          */
931                         int diff_flags = DIFF_OPT_OVERRIDE_SUBMODULE_CONFIG;
932                         if (ignore_submodule_arg &&
933                             !strcmp(ignore_submodule_arg, "all"))
934                                 diff_flags |= DIFF_OPT_IGNORE_SUBMODULES;
935                         commitable = index_differs_from(parent, diff_flags);
936                 }
937         }
938         strbuf_release(&committer_ident);
939
940         fclose(s->fp);
941
942         /*
943          * Reject an attempt to record a non-merge empty commit without
944          * explicit --allow-empty. In the cherry-pick case, it may be
945          * empty due to conflict resolution, which the user should okay.
946          */
947         if (!commitable && whence != FROM_MERGE && !allow_empty &&
948             !(amend && is_a_merge(current_head))) {
949                 s->display_comment_prefix = old_display_comment_prefix;
950                 run_status(stdout, index_file, prefix, 0, s);
951                 if (amend)
952                         fputs(_(empty_amend_advice), stderr);
953                 else if (whence == FROM_CHERRY_PICK) {
954                         fputs(_(empty_cherry_pick_advice), stderr);
955                         if (!sequencer_in_use)
956                                 fputs(_(empty_cherry_pick_advice_single), stderr);
957                         else
958                                 fputs(_(empty_cherry_pick_advice_multi), stderr);
959                 }
960                 return 0;
961         }
962
963         /*
964          * Re-read the index as pre-commit hook could have updated it,
965          * and write it out as a tree.  We must do this before we invoke
966          * the editor and after we invoke run_status above.
967          */
968         discard_cache();
969         read_cache_from(index_file);
970         if (update_main_cache_tree(0)) {
971                 error(_("Error building trees"));
972                 return 0;
973         }
974
975         if (run_commit_hook(use_editor, index_file, "prepare-commit-msg",
976                             git_path(commit_editmsg), hook_arg1, hook_arg2, NULL))
977                 return 0;
978
979         if (use_editor) {
980                 char index[PATH_MAX];
981                 const char *env[2] = { NULL };
982                 env[0] =  index;
983                 snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
984                 if (launch_editor(git_path(commit_editmsg), NULL, env)) {
985                         fprintf(stderr,
986                         _("Please supply the message using either -m or -F option.\n"));
987                         exit(1);
988                 }
989         }
990
991         if (!no_verify &&
992             run_commit_hook(use_editor, index_file, "commit-msg", git_path(commit_editmsg), NULL)) {
993                 return 0;
994         }
995
996         return 1;
997 }
998
999 static int rest_is_empty(struct strbuf *sb, int start)
1000 {
1001         int i, eol;
1002         const char *nl;
1003
1004         /* Check if the rest is just whitespace and Signed-of-by's. */
1005         for (i = start; i < sb->len; i++) {
1006                 nl = memchr(sb->buf + i, '\n', sb->len - i);
1007                 if (nl)
1008                         eol = nl - sb->buf;
1009                 else
1010                         eol = sb->len;
1011
1012                 if (strlen(sign_off_header) <= eol - i &&
1013                     starts_with(sb->buf + i, sign_off_header)) {
1014                         i = eol;
1015                         continue;
1016                 }
1017                 while (i < eol)
1018                         if (!isspace(sb->buf[i++]))
1019                                 return 0;
1020         }
1021
1022         return 1;
1023 }
1024
1025 /*
1026  * Find out if the message in the strbuf contains only whitespace and
1027  * Signed-off-by lines.
1028  */
1029 static int message_is_empty(struct strbuf *sb)
1030 {
1031         if (cleanup_mode == CLEANUP_NONE && sb->len)
1032                 return 0;
1033         return rest_is_empty(sb, 0);
1034 }
1035
1036 /*
1037  * See if the user edited the message in the editor or left what
1038  * was in the template intact
1039  */
1040 static int template_untouched(struct strbuf *sb)
1041 {
1042         struct strbuf tmpl = STRBUF_INIT;
1043         const char *start;
1044
1045         if (cleanup_mode == CLEANUP_NONE && sb->len)
1046                 return 0;
1047
1048         if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1049                 return 0;
1050
1051         stripspace(&tmpl, cleanup_mode == CLEANUP_ALL);
1052         if (!skip_prefix(sb->buf, tmpl.buf, &start))
1053                 start = sb->buf;
1054         strbuf_release(&tmpl);
1055         return rest_is_empty(sb, start - sb->buf);
1056 }
1057
1058 static const char *find_author_by_nickname(const char *name)
1059 {
1060         struct rev_info revs;
1061         struct commit *commit;
1062         struct strbuf buf = STRBUF_INIT;
1063         struct string_list mailmap = STRING_LIST_INIT_NODUP;
1064         const char *av[20];
1065         int ac = 0;
1066
1067         init_revisions(&revs, NULL);
1068         strbuf_addf(&buf, "--author=%s", name);
1069         av[++ac] = "--all";
1070         av[++ac] = "-i";
1071         av[++ac] = buf.buf;
1072         av[++ac] = NULL;
1073         setup_revisions(ac, av, &revs, NULL);
1074         revs.mailmap = &mailmap;
1075         read_mailmap(revs.mailmap, NULL);
1076
1077         if (prepare_revision_walk(&revs))
1078                 die(_("revision walk setup failed"));
1079         commit = get_revision(&revs);
1080         if (commit) {
1081                 struct pretty_print_context ctx = {0};
1082                 ctx.date_mode = DATE_NORMAL;
1083                 strbuf_release(&buf);
1084                 format_commit_message(commit, "%aN <%aE>", &buf, &ctx);
1085                 clear_mailmap(&mailmap);
1086                 return strbuf_detach(&buf, NULL);
1087         }
1088         die(_("No existing author found with '%s'"), name);
1089 }
1090
1091
1092 static void handle_untracked_files_arg(struct wt_status *s)
1093 {
1094         if (!untracked_files_arg)
1095                 ; /* default already initialized */
1096         else if (!strcmp(untracked_files_arg, "no"))
1097                 s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
1098         else if (!strcmp(untracked_files_arg, "normal"))
1099                 s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1100         else if (!strcmp(untracked_files_arg, "all"))
1101                 s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1102         else
1103                 die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
1104 }
1105
1106 static const char *read_commit_message(const char *name)
1107 {
1108         const char *out_enc;
1109         struct commit *commit;
1110
1111         commit = lookup_commit_reference_by_name(name);
1112         if (!commit)
1113                 die(_("could not lookup commit %s"), name);
1114         out_enc = get_commit_output_encoding();
1115         return logmsg_reencode(commit, NULL, out_enc);
1116 }
1117
1118 /*
1119  * Enumerate what needs to be propagated when --porcelain
1120  * is not in effect here.
1121  */
1122 static struct status_deferred_config {
1123         enum status_format status_format;
1124         int show_branch;
1125 } status_deferred_config = {
1126         STATUS_FORMAT_UNSPECIFIED,
1127         -1 /* unspecified */
1128 };
1129
1130 static void finalize_deferred_config(struct wt_status *s)
1131 {
1132         int use_deferred_config = (status_format != STATUS_FORMAT_PORCELAIN &&
1133                                    !s->null_termination);
1134
1135         if (s->null_termination) {
1136                 if (status_format == STATUS_FORMAT_NONE ||
1137                     status_format == STATUS_FORMAT_UNSPECIFIED)
1138                         status_format = STATUS_FORMAT_PORCELAIN;
1139                 else if (status_format == STATUS_FORMAT_LONG)
1140                         die(_("--long and -z are incompatible"));
1141         }
1142
1143         if (use_deferred_config && status_format == STATUS_FORMAT_UNSPECIFIED)
1144                 status_format = status_deferred_config.status_format;
1145         if (status_format == STATUS_FORMAT_UNSPECIFIED)
1146                 status_format = STATUS_FORMAT_NONE;
1147
1148         if (use_deferred_config && s->show_branch < 0)
1149                 s->show_branch = status_deferred_config.show_branch;
1150         if (s->show_branch < 0)
1151                 s->show_branch = 0;
1152 }
1153
1154 static int parse_and_validate_options(int argc, const char *argv[],
1155                                       const struct option *options,
1156                                       const char * const usage[],
1157                                       const char *prefix,
1158                                       struct commit *current_head,
1159                                       struct wt_status *s)
1160 {
1161         int f = 0;
1162
1163         argc = parse_options(argc, argv, prefix, options, usage, 0);
1164         finalize_deferred_config(s);
1165
1166         if (force_author && !strchr(force_author, '>'))
1167                 force_author = find_author_by_nickname(force_author);
1168
1169         if (force_author && renew_authorship)
1170                 die(_("Using both --reset-author and --author does not make sense"));
1171
1172         if (logfile || have_option_m || use_message || fixup_message)
1173                 use_editor = 0;
1174         if (0 <= edit_flag)
1175                 use_editor = edit_flag;
1176
1177         /* Sanity check options */
1178         if (amend && !current_head)
1179                 die(_("You have nothing to amend."));
1180         if (amend && whence != FROM_COMMIT) {
1181                 if (whence == FROM_MERGE)
1182                         die(_("You are in the middle of a merge -- cannot amend."));
1183                 else if (whence == FROM_CHERRY_PICK)
1184                         die(_("You are in the middle of a cherry-pick -- cannot amend."));
1185         }
1186         if (fixup_message && squash_message)
1187                 die(_("Options --squash and --fixup cannot be used together"));
1188         if (use_message)
1189                 f++;
1190         if (edit_message)
1191                 f++;
1192         if (fixup_message)
1193                 f++;
1194         if (logfile)
1195                 f++;
1196         if (f > 1)
1197                 die(_("Only one of -c/-C/-F/--fixup can be used."));
1198         if (message.len && f > 0)
1199                 die((_("Option -m cannot be combined with -c/-C/-F/--fixup.")));
1200         if (f || message.len)
1201                 template_file = NULL;
1202         if (edit_message)
1203                 use_message = edit_message;
1204         if (amend && !use_message && !fixup_message)
1205                 use_message = "HEAD";
1206         if (!use_message && whence != FROM_CHERRY_PICK && renew_authorship)
1207                 die(_("--reset-author can be used only with -C, -c or --amend."));
1208         if (use_message) {
1209                 use_message_buffer = read_commit_message(use_message);
1210                 if (!renew_authorship) {
1211                         author_message = use_message;
1212                         author_message_buffer = use_message_buffer;
1213                 }
1214         }
1215         if (whence == FROM_CHERRY_PICK && !renew_authorship) {
1216                 author_message = "CHERRY_PICK_HEAD";
1217                 author_message_buffer = read_commit_message(author_message);
1218         }
1219
1220         if (patch_interactive)
1221                 interactive = 1;
1222
1223         if (also + only + all + interactive > 1)
1224                 die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
1225         if (argc == 0 && (also || (only && !amend)))
1226                 die(_("No paths with --include/--only does not make sense."));
1227         if (argc == 0 && only && amend)
1228                 only_include_assumed = _("Clever... amending the last one with dirty index.");
1229         if (argc > 0 && !also && !only)
1230                 only_include_assumed = _("Explicit paths specified without -i or -o; assuming --only paths...");
1231         if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
1232                 cleanup_mode = use_editor ? CLEANUP_ALL : CLEANUP_SPACE;
1233         else if (!strcmp(cleanup_arg, "verbatim"))
1234                 cleanup_mode = CLEANUP_NONE;
1235         else if (!strcmp(cleanup_arg, "whitespace"))
1236                 cleanup_mode = CLEANUP_SPACE;
1237         else if (!strcmp(cleanup_arg, "strip"))
1238                 cleanup_mode = CLEANUP_ALL;
1239         else if (!strcmp(cleanup_arg, "scissors"))
1240                 cleanup_mode = use_editor ? CLEANUP_SCISSORS : CLEANUP_SPACE;
1241         else
1242                 die(_("Invalid cleanup mode %s"), cleanup_arg);
1243
1244         handle_untracked_files_arg(s);
1245
1246         if (all && argc > 0)
1247                 die(_("Paths with -a does not make sense."));
1248
1249         if (status_format != STATUS_FORMAT_NONE)
1250                 dry_run = 1;
1251
1252         return argc;
1253 }
1254
1255 static int dry_run_commit(int argc, const char **argv, const char *prefix,
1256                           const struct commit *current_head, struct wt_status *s)
1257 {
1258         int commitable;
1259         const char *index_file;
1260
1261         index_file = prepare_index(argc, argv, prefix, current_head, 1);
1262         commitable = run_status(stdout, index_file, prefix, 0, s);
1263         rollback_index_files();
1264
1265         return commitable ? 0 : 1;
1266 }
1267
1268 static int parse_status_slot(const char *var, int offset)
1269 {
1270         if (!strcasecmp(var+offset, "header"))
1271                 return WT_STATUS_HEADER;
1272         if (!strcasecmp(var+offset, "branch"))
1273                 return WT_STATUS_ONBRANCH;
1274         if (!strcasecmp(var+offset, "updated")
1275                 || !strcasecmp(var+offset, "added"))
1276                 return WT_STATUS_UPDATED;
1277         if (!strcasecmp(var+offset, "changed"))
1278                 return WT_STATUS_CHANGED;
1279         if (!strcasecmp(var+offset, "untracked"))
1280                 return WT_STATUS_UNTRACKED;
1281         if (!strcasecmp(var+offset, "nobranch"))
1282                 return WT_STATUS_NOBRANCH;
1283         if (!strcasecmp(var+offset, "unmerged"))
1284                 return WT_STATUS_UNMERGED;
1285         return -1;
1286 }
1287
1288 static int git_status_config(const char *k, const char *v, void *cb)
1289 {
1290         struct wt_status *s = cb;
1291
1292         if (starts_with(k, "column."))
1293                 return git_column_config(k, v, "status", &s->colopts);
1294         if (!strcmp(k, "status.submodulesummary")) {
1295                 int is_bool;
1296                 s->submodule_summary = git_config_bool_or_int(k, v, &is_bool);
1297                 if (is_bool && s->submodule_summary)
1298                         s->submodule_summary = -1;
1299                 return 0;
1300         }
1301         if (!strcmp(k, "status.short")) {
1302                 if (git_config_bool(k, v))
1303                         status_deferred_config.status_format = STATUS_FORMAT_SHORT;
1304                 else
1305                         status_deferred_config.status_format = STATUS_FORMAT_NONE;
1306                 return 0;
1307         }
1308         if (!strcmp(k, "status.branch")) {
1309                 status_deferred_config.show_branch = git_config_bool(k, v);
1310                 return 0;
1311         }
1312         if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
1313                 s->use_color = git_config_colorbool(k, v);
1314                 return 0;
1315         }
1316         if (!strcmp(k, "status.displaycommentprefix")) {
1317                 s->display_comment_prefix = git_config_bool(k, v);
1318                 return 0;
1319         }
1320         if (starts_with(k, "status.color.") || starts_with(k, "color.status.")) {
1321                 int slot = parse_status_slot(k, 13);
1322                 if (slot < 0)
1323                         return 0;
1324                 if (!v)
1325                         return config_error_nonbool(k);
1326                 color_parse(v, k, s->color_palette[slot]);
1327                 return 0;
1328         }
1329         if (!strcmp(k, "status.relativepaths")) {
1330                 s->relative_paths = git_config_bool(k, v);
1331                 return 0;
1332         }
1333         if (!strcmp(k, "status.showuntrackedfiles")) {
1334                 if (!v)
1335                         return config_error_nonbool(k);
1336                 else if (!strcmp(v, "no"))
1337                         s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
1338                 else if (!strcmp(v, "normal"))
1339                         s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1340                 else if (!strcmp(v, "all"))
1341                         s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1342                 else
1343                         return error(_("Invalid untracked files mode '%s'"), v);
1344                 return 0;
1345         }
1346         return git_diff_ui_config(k, v, NULL);
1347 }
1348
1349 int cmd_status(int argc, const char **argv, const char *prefix)
1350 {
1351         static struct wt_status s;
1352         int fd;
1353         unsigned char sha1[20];
1354         static struct option builtin_status_options[] = {
1355                 OPT__VERBOSE(&verbose, N_("be verbose")),
1356                 OPT_SET_INT('s', "short", &status_format,
1357                             N_("show status concisely"), STATUS_FORMAT_SHORT),
1358                 OPT_BOOL('b', "branch", &s.show_branch,
1359                          N_("show branch information")),
1360                 OPT_SET_INT(0, "porcelain", &status_format,
1361                             N_("machine-readable output"),
1362                             STATUS_FORMAT_PORCELAIN),
1363                 OPT_SET_INT(0, "long", &status_format,
1364                             N_("show status in long format (default)"),
1365                             STATUS_FORMAT_LONG),
1366                 OPT_BOOL('z', "null", &s.null_termination,
1367                          N_("terminate entries with NUL")),
1368                 { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg,
1369                   N_("mode"),
1370                   N_("show untracked files, optional modes: all, normal, no. (Default: all)"),
1371                   PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1372                 OPT_BOOL(0, "ignored", &show_ignored_in_status,
1373                          N_("show ignored files")),
1374                 { OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, N_("when"),
1375                   N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"),
1376                   PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1377                 OPT_COLUMN(0, "column", &s.colopts, N_("list untracked files in columns")),
1378                 OPT_END(),
1379         };
1380
1381         if (argc == 2 && !strcmp(argv[1], "-h"))
1382                 usage_with_options(builtin_status_usage, builtin_status_options);
1383
1384         status_init_config(&s, git_status_config);
1385         argc = parse_options(argc, argv, prefix,
1386                              builtin_status_options,
1387                              builtin_status_usage, 0);
1388         finalize_colopts(&s.colopts, -1);
1389         finalize_deferred_config(&s);
1390
1391         handle_untracked_files_arg(&s);
1392         if (show_ignored_in_status)
1393                 s.show_ignored_files = 1;
1394         parse_pathspec(&s.pathspec, 0,
1395                        PATHSPEC_PREFER_FULL,
1396                        prefix, argv);
1397
1398         read_cache_preload(&s.pathspec);
1399         refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL);
1400
1401         fd = hold_locked_index(&index_lock, 0);
1402         if (0 <= fd)
1403                 update_index_if_able(&the_index, &index_lock);
1404
1405         s.is_initial = get_sha1(s.reference, sha1) ? 1 : 0;
1406         s.ignore_submodule_arg = ignore_submodule_arg;
1407         wt_status_collect(&s);
1408
1409         if (s.relative_paths)
1410                 s.prefix = prefix;
1411
1412         switch (status_format) {
1413         case STATUS_FORMAT_SHORT:
1414                 wt_shortstatus_print(&s);
1415                 break;
1416         case STATUS_FORMAT_PORCELAIN:
1417                 wt_porcelain_print(&s);
1418                 break;
1419         case STATUS_FORMAT_UNSPECIFIED:
1420                 die("BUG: finalize_deferred_config() should have been called");
1421                 break;
1422         case STATUS_FORMAT_NONE:
1423         case STATUS_FORMAT_LONG:
1424                 s.verbose = verbose;
1425                 s.ignore_submodule_arg = ignore_submodule_arg;
1426                 wt_status_print(&s);
1427                 break;
1428         }
1429         return 0;
1430 }
1431
1432 static const char *implicit_ident_advice(void)
1433 {
1434         char *user_config = NULL;
1435         char *xdg_config = NULL;
1436         int config_exists;
1437
1438         home_config_paths(&user_config, &xdg_config, "config");
1439         config_exists = file_exists(user_config) || file_exists(xdg_config);
1440         free(user_config);
1441         free(xdg_config);
1442
1443         if (config_exists)
1444                 return _(implicit_ident_advice_config);
1445         else
1446                 return _(implicit_ident_advice_noconfig);
1447
1448 }
1449
1450 static void print_summary(const char *prefix, const unsigned char *sha1,
1451                           int initial_commit)
1452 {
1453         struct rev_info rev;
1454         struct commit *commit;
1455         struct strbuf format = STRBUF_INIT;
1456         unsigned char junk_sha1[20];
1457         const char *head;
1458         struct pretty_print_context pctx = {0};
1459         struct strbuf author_ident = STRBUF_INIT;
1460         struct strbuf committer_ident = STRBUF_INIT;
1461
1462         commit = lookup_commit(sha1);
1463         if (!commit)
1464                 die(_("couldn't look up newly created commit"));
1465         if (parse_commit(commit))
1466                 die(_("could not parse newly created commit"));
1467
1468         strbuf_addstr(&format, "format:%h] %s");
1469
1470         format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1471         format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1472         if (strbuf_cmp(&author_ident, &committer_ident)) {
1473                 strbuf_addstr(&format, "\n Author: ");
1474                 strbuf_addbuf_percentquote(&format, &author_ident);
1475         }
1476         if (author_date_is_interesting()) {
1477                 struct strbuf date = STRBUF_INIT;
1478                 format_commit_message(commit, "%ad", &date, &pctx);
1479                 strbuf_addstr(&format, "\n Date: ");
1480                 strbuf_addbuf_percentquote(&format, &date);
1481                 strbuf_release(&date);
1482         }
1483         if (!committer_ident_sufficiently_given()) {
1484                 strbuf_addstr(&format, "\n Committer: ");
1485                 strbuf_addbuf_percentquote(&format, &committer_ident);
1486                 if (advice_implicit_identity) {
1487                         strbuf_addch(&format, '\n');
1488                         strbuf_addstr(&format, implicit_ident_advice());
1489                 }
1490         }
1491         strbuf_release(&author_ident);
1492         strbuf_release(&committer_ident);
1493
1494         init_revisions(&rev, prefix);
1495         setup_revisions(0, NULL, &rev, NULL);
1496
1497         rev.diff = 1;
1498         rev.diffopt.output_format =
1499                 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1500
1501         rev.verbose_header = 1;
1502         rev.show_root_diff = 1;
1503         get_commit_format(format.buf, &rev);
1504         rev.always_show_header = 0;
1505         rev.diffopt.detect_rename = 1;
1506         rev.diffopt.break_opt = 0;
1507         diff_setup_done(&rev.diffopt);
1508
1509         head = resolve_ref_unsafe("HEAD", junk_sha1, 0, NULL);
1510         printf("[%s%s ",
1511                 starts_with(head, "refs/heads/") ?
1512                         head + 11 :
1513                         !strcmp(head, "HEAD") ?
1514                                 _("detached HEAD") :
1515                                 head,
1516                 initial_commit ? _(" (root-commit)") : "");
1517
1518         if (!log_tree_commit(&rev, commit)) {
1519                 rev.always_show_header = 1;
1520                 rev.use_terminator = 1;
1521                 log_tree_commit(&rev, commit);
1522         }
1523
1524         strbuf_release(&format);
1525 }
1526
1527 static int git_commit_config(const char *k, const char *v, void *cb)
1528 {
1529         struct wt_status *s = cb;
1530         int status;
1531
1532         if (!strcmp(k, "commit.template"))
1533                 return git_config_pathname(&template_file, k, v);
1534         if (!strcmp(k, "commit.status")) {
1535                 include_status = git_config_bool(k, v);
1536                 return 0;
1537         }
1538         if (!strcmp(k, "commit.cleanup"))
1539                 return git_config_string(&cleanup_arg, k, v);
1540         if (!strcmp(k, "commit.gpgsign")) {
1541                 sign_commit = git_config_bool(k, v) ? "" : NULL;
1542                 return 0;
1543         }
1544
1545         status = git_gpg_config(k, v, NULL);
1546         if (status)
1547                 return status;
1548         return git_status_config(k, v, s);
1549 }
1550
1551 static int run_rewrite_hook(const unsigned char *oldsha1,
1552                             const unsigned char *newsha1)
1553 {
1554         /* oldsha1 SP newsha1 LF NUL */
1555         static char buf[2*40 + 3];
1556         struct child_process proc = CHILD_PROCESS_INIT;
1557         const char *argv[3];
1558         int code;
1559         size_t n;
1560
1561         argv[0] = find_hook("post-rewrite");
1562         if (!argv[0])
1563                 return 0;
1564
1565         argv[1] = "amend";
1566         argv[2] = NULL;
1567
1568         proc.argv = argv;
1569         proc.in = -1;
1570         proc.stdout_to_stderr = 1;
1571
1572         code = start_command(&proc);
1573         if (code)
1574                 return code;
1575         n = snprintf(buf, sizeof(buf), "%s %s\n",
1576                      sha1_to_hex(oldsha1), sha1_to_hex(newsha1));
1577         write_in_full(proc.in, buf, n);
1578         close(proc.in);
1579         return finish_command(&proc);
1580 }
1581
1582 int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...)
1583 {
1584         const char *hook_env[3] =  { NULL };
1585         char index[PATH_MAX];
1586         va_list args;
1587         int ret;
1588
1589         snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
1590         hook_env[0] = index;
1591
1592         /*
1593          * Let the hook know that no editor will be launched.
1594          */
1595         if (!editor_is_used)
1596                 hook_env[1] = "GIT_EDITOR=:";
1597
1598         va_start(args, name);
1599         ret = run_hook_ve(hook_env, name, args);
1600         va_end(args);
1601
1602         return ret;
1603 }
1604
1605 int cmd_commit(int argc, const char **argv, const char *prefix)
1606 {
1607         static struct wt_status s;
1608         static struct option builtin_commit_options[] = {
1609                 OPT__QUIET(&quiet, N_("suppress summary after successful commit")),
1610                 OPT__VERBOSE(&verbose, N_("show diff in commit message template")),
1611
1612                 OPT_GROUP(N_("Commit message options")),
1613                 OPT_FILENAME('F', "file", &logfile, N_("read message from file")),
1614                 OPT_STRING(0, "author", &force_author, N_("author"), N_("override author for commit")),
1615                 OPT_STRING(0, "date", &force_date, N_("date"), N_("override date for commit")),
1616                 OPT_CALLBACK('m', "message", &message, N_("message"), N_("commit message"), opt_parse_m),
1617                 OPT_STRING('c', "reedit-message", &edit_message, N_("commit"), N_("reuse and edit message from specified commit")),
1618                 OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")),
1619                 OPT_STRING(0, "fixup", &fixup_message, N_("commit"), N_("use autosquash formatted message to fixup specified commit")),
1620                 OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")),
1621                 OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")),
1622                 OPT_BOOL('s', "signoff", &signoff, N_("add Signed-off-by:")),
1623                 OPT_FILENAME('t', "template", &template_file, N_("use specified template file")),
1624                 OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")),
1625                 OPT_STRING(0, "cleanup", &cleanup_arg, N_("default"), N_("how to strip spaces and #comments from message")),
1626                 OPT_BOOL(0, "status", &include_status, N_("include status in commit message template")),
1627                 { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key-id"),
1628                   N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
1629                 /* end commit message options */
1630
1631                 OPT_GROUP(N_("Commit contents options")),
1632                 OPT_BOOL('a', "all", &all, N_("commit all changed files")),
1633                 OPT_BOOL('i', "include", &also, N_("add specified files to index for commit")),
1634                 OPT_BOOL(0, "interactive", &interactive, N_("interactively add files")),
1635                 OPT_BOOL('p', "patch", &patch_interactive, N_("interactively add changes")),
1636                 OPT_BOOL('o', "only", &only, N_("commit only specified files")),
1637                 OPT_BOOL('n', "no-verify", &no_verify, N_("bypass pre-commit hook")),
1638                 OPT_BOOL(0, "dry-run", &dry_run, N_("show what would be committed")),
1639                 OPT_SET_INT(0, "short", &status_format, N_("show status concisely"),
1640                             STATUS_FORMAT_SHORT),
1641                 OPT_BOOL(0, "branch", &s.show_branch, N_("show branch information")),
1642                 OPT_SET_INT(0, "porcelain", &status_format,
1643                             N_("machine-readable output"), STATUS_FORMAT_PORCELAIN),
1644                 OPT_SET_INT(0, "long", &status_format,
1645                             N_("show status in long format (default)"),
1646                             STATUS_FORMAT_LONG),
1647                 OPT_BOOL('z', "null", &s.null_termination,
1648                          N_("terminate entries with NUL")),
1649                 OPT_BOOL(0, "amend", &amend, N_("amend previous commit")),
1650                 OPT_BOOL(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")),
1651                 { 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" },
1652                 /* end commit contents options */
1653
1654                 OPT_HIDDEN_BOOL(0, "allow-empty", &allow_empty,
1655                                 N_("ok to record an empty change")),
1656                 OPT_HIDDEN_BOOL(0, "allow-empty-message", &allow_empty_message,
1657                                 N_("ok to record a change with an empty message")),
1658
1659                 OPT_END()
1660         };
1661
1662         struct strbuf sb = STRBUF_INIT;
1663         struct strbuf author_ident = STRBUF_INIT;
1664         const char *index_file, *reflog_msg;
1665         char *nl;
1666         unsigned char sha1[20];
1667         struct commit_list *parents = NULL, **pptr = &parents;
1668         struct stat statbuf;
1669         struct commit *current_head = NULL;
1670         struct commit_extra_header *extra = NULL;
1671         struct ref_transaction *transaction;
1672         struct strbuf err = STRBUF_INIT;
1673
1674         if (argc == 2 && !strcmp(argv[1], "-h"))
1675                 usage_with_options(builtin_commit_usage, builtin_commit_options);
1676
1677         status_init_config(&s, git_commit_config);
1678         status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
1679         s.colopts = 0;
1680
1681         if (get_sha1("HEAD", sha1))
1682                 current_head = NULL;
1683         else {
1684                 current_head = lookup_commit_or_die(sha1, "HEAD");
1685                 if (parse_commit(current_head))
1686                         die(_("could not parse HEAD commit"));
1687         }
1688         argc = parse_and_validate_options(argc, argv, builtin_commit_options,
1689                                           builtin_commit_usage,
1690                                           prefix, current_head, &s);
1691         if (dry_run)
1692                 return dry_run_commit(argc, argv, prefix, current_head, &s);
1693         index_file = prepare_index(argc, argv, prefix, current_head, 0);
1694
1695         /* Set up everything for writing the commit object.  This includes
1696            running hooks, writing the trees, and interacting with the user.  */
1697         if (!prepare_to_commit(index_file, prefix,
1698                                current_head, &s, &author_ident)) {
1699                 rollback_index_files();
1700                 return 1;
1701         }
1702
1703         /* Determine parents */
1704         reflog_msg = getenv("GIT_REFLOG_ACTION");
1705         if (!current_head) {
1706                 if (!reflog_msg)
1707                         reflog_msg = "commit (initial)";
1708         } else if (amend) {
1709                 struct commit_list *c;
1710
1711                 if (!reflog_msg)
1712                         reflog_msg = "commit (amend)";
1713                 for (c = current_head->parents; c; c = c->next)
1714                         pptr = &commit_list_insert(c->item, pptr)->next;
1715         } else if (whence == FROM_MERGE) {
1716                 struct strbuf m = STRBUF_INIT;
1717                 FILE *fp;
1718                 int allow_fast_forward = 1;
1719
1720                 if (!reflog_msg)
1721                         reflog_msg = "commit (merge)";
1722                 pptr = &commit_list_insert(current_head, pptr)->next;
1723                 fp = fopen(git_path("MERGE_HEAD"), "r");
1724                 if (fp == NULL)
1725                         die_errno(_("could not open '%s' for reading"),
1726                                   git_path("MERGE_HEAD"));
1727                 while (strbuf_getline(&m, fp, '\n') != EOF) {
1728                         struct commit *parent;
1729
1730                         parent = get_merge_parent(m.buf);
1731                         if (!parent)
1732                                 die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
1733                         pptr = &commit_list_insert(parent, pptr)->next;
1734                 }
1735                 fclose(fp);
1736                 strbuf_release(&m);
1737                 if (!stat(git_path("MERGE_MODE"), &statbuf)) {
1738                         if (strbuf_read_file(&sb, git_path("MERGE_MODE"), 0) < 0)
1739                                 die_errno(_("could not read MERGE_MODE"));
1740                         if (!strcmp(sb.buf, "no-ff"))
1741                                 allow_fast_forward = 0;
1742                 }
1743                 if (allow_fast_forward)
1744                         parents = reduce_heads(parents);
1745         } else {
1746                 if (!reflog_msg)
1747                         reflog_msg = (whence == FROM_CHERRY_PICK)
1748                                         ? "commit (cherry-pick)"
1749                                         : "commit";
1750                 pptr = &commit_list_insert(current_head, pptr)->next;
1751         }
1752
1753         /* Finally, get the commit message */
1754         strbuf_reset(&sb);
1755         if (strbuf_read_file(&sb, git_path(commit_editmsg), 0) < 0) {
1756                 int saved_errno = errno;
1757                 rollback_index_files();
1758                 die(_("could not read commit message: %s"), strerror(saved_errno));
1759         }
1760
1761         if (verbose || /* Truncate the message just before the diff, if any. */
1762             cleanup_mode == CLEANUP_SCISSORS)
1763                 wt_status_truncate_message_at_cut_line(&sb);
1764
1765         if (cleanup_mode != CLEANUP_NONE)
1766                 stripspace(&sb, cleanup_mode == CLEANUP_ALL);
1767         if (template_untouched(&sb) && !allow_empty_message) {
1768                 rollback_index_files();
1769                 fprintf(stderr, _("Aborting commit; you did not edit the message.\n"));
1770                 exit(1);
1771         }
1772         if (message_is_empty(&sb) && !allow_empty_message) {
1773                 rollback_index_files();
1774                 fprintf(stderr, _("Aborting commit due to empty commit message.\n"));
1775                 exit(1);
1776         }
1777
1778         if (amend) {
1779                 const char *exclude_gpgsig[2] = { "gpgsig", NULL };
1780                 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1781         } else {
1782                 struct commit_extra_header **tail = &extra;
1783                 append_merge_tag_headers(parents, &tail);
1784         }
1785
1786         if (commit_tree_extended(sb.buf, sb.len, active_cache_tree->sha1,
1787                          parents, sha1, author_ident.buf, sign_commit, extra)) {
1788                 rollback_index_files();
1789                 die(_("failed to write commit object"));
1790         }
1791         strbuf_release(&author_ident);
1792         free_commit_extra_headers(extra);
1793
1794         nl = strchr(sb.buf, '\n');
1795         if (nl)
1796                 strbuf_setlen(&sb, nl + 1 - sb.buf);
1797         else
1798                 strbuf_addch(&sb, '\n');
1799         strbuf_insert(&sb, 0, reflog_msg, strlen(reflog_msg));
1800         strbuf_insert(&sb, strlen(reflog_msg), ": ", 2);
1801
1802         transaction = ref_transaction_begin(&err);
1803         if (!transaction ||
1804             ref_transaction_update(transaction, "HEAD", sha1,
1805                                    current_head
1806                                    ? current_head->object.sha1 : NULL,
1807                                    0, !!current_head, &err) ||
1808             ref_transaction_commit(transaction, sb.buf, &err)) {
1809                 rollback_index_files();
1810                 die("%s", err.buf);
1811         }
1812         ref_transaction_free(transaction);
1813
1814         unlink(git_path("CHERRY_PICK_HEAD"));
1815         unlink(git_path("REVERT_HEAD"));
1816         unlink(git_path("MERGE_HEAD"));
1817         unlink(git_path("MERGE_MSG"));
1818         unlink(git_path("MERGE_MODE"));
1819         unlink(git_path("SQUASH_MSG"));
1820
1821         if (commit_index_files())
1822                 die (_("Repository has been updated, but unable to write\n"
1823                      "new_index file. Check that disk is not full and quota is\n"
1824                      "not exceeded, and then \"git reset HEAD\" to recover."));
1825
1826         rerere(0);
1827         run_commit_hook(use_editor, get_index_file(), "post-commit", NULL);
1828         if (amend && !no_post_rewrite) {
1829                 struct notes_rewrite_cfg *cfg;
1830                 cfg = init_copy_notes_for_rewrite("amend");
1831                 if (cfg) {
1832                         /* we are amending, so current_head is not NULL */
1833                         copy_note_for_rewrite(cfg, current_head->object.sha1, sha1);
1834                         finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
1835                 }
1836                 run_rewrite_hook(current_head->object.sha1, sha1);
1837         }
1838         if (!quiet)
1839                 print_summary(prefix, sha1, !current_head);
1840
1841         strbuf_release(&err);
1842         return 0;
1843 }