commit: add --cleanup=scissors
Since 1a72cfd
(commit -v: strip diffs and submodule shortlogs from the
commit message - 2013-12-05) we have a less fragile way to cut out
"git status" at the end of a commit message but it's only enabled for
stripping submodule shortlogs.
Add new cleanup option that reuses the same mechanism for the entire
"git status" without accidentally removing lines starting with '#'.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
fcef9312a4
commit
75df1f434f
@ -113,6 +113,7 @@ static char *sign_commit;
|
||||
static enum {
|
||||
CLEANUP_SPACE,
|
||||
CLEANUP_NONE,
|
||||
CLEANUP_SCISSORS,
|
||||
CLEANUP_ALL
|
||||
} cleanup_mode;
|
||||
static const char *cleanup_arg;
|
||||
@ -754,7 +755,9 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||
strbuf_addstr(&committer_ident, git_committer_info(IDENT_STRICT));
|
||||
if (use_editor && include_status) {
|
||||
char *ai_tmp, *ci_tmp;
|
||||
if (whence != FROM_COMMIT)
|
||||
if (whence != FROM_COMMIT) {
|
||||
if (cleanup_mode == CLEANUP_SCISSORS)
|
||||
wt_status_add_cut_line(s->fp);
|
||||
status_printf_ln(s, GIT_COLOR_NORMAL,
|
||||
whence == FROM_MERGE
|
||||
? _("\n"
|
||||
@ -770,6 +773,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||
git_path(whence == FROM_MERGE
|
||||
? "MERGE_HEAD"
|
||||
: "CHERRY_PICK_HEAD"));
|
||||
}
|
||||
|
||||
fprintf(s->fp, "\n");
|
||||
if (cleanup_mode == CLEANUP_ALL)
|
||||
@ -777,6 +781,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||
_("Please enter the commit message for your changes."
|
||||
" Lines starting\nwith '%c' will be ignored, and an empty"
|
||||
" message aborts the commit.\n"), comment_line_char);
|
||||
else if (cleanup_mode == CLEANUP_SCISSORS && whence == FROM_COMMIT)
|
||||
wt_status_add_cut_line(s->fp);
|
||||
else /* CLEANUP_SPACE, that is. */
|
||||
status_printf(s, GIT_COLOR_NORMAL,
|
||||
_("Please enter the commit message for your changes."
|
||||
@ -1132,6 +1138,8 @@ static int parse_and_validate_options(int argc, const char *argv[],
|
||||
cleanup_mode = CLEANUP_SPACE;
|
||||
else if (!strcmp(cleanup_arg, "strip"))
|
||||
cleanup_mode = CLEANUP_ALL;
|
||||
else if (!strcmp(cleanup_arg, "scissors"))
|
||||
cleanup_mode = use_editor ? CLEANUP_SCISSORS : CLEANUP_SPACE;
|
||||
else
|
||||
die(_("Invalid cleanup mode %s"), cleanup_arg);
|
||||
|
||||
@ -1600,8 +1608,8 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
die(_("could not read commit message: %s"), strerror(saved_errno));
|
||||
}
|
||||
|
||||
/* Truncate the message just before the diff, if any. */
|
||||
if (verbose)
|
||||
if (verbose || /* Truncate the message just before the diff, if any. */
|
||||
cleanup_mode == CLEANUP_SCISSORS)
|
||||
wt_status_truncate_message_at_cut_line(&sb);
|
||||
|
||||
if (cleanup_mode != CLEANUP_NONE)
|
||||
|
Reference in New Issue
Block a user