Matthias Kestenholz | 25f38f0 | 2006-08-02 23:52:00 +0200 | [diff] [blame] | 1 | #include "builtin.h" |
Brandon Williams | b2141fc | 2017-06-14 11:07:36 -0700 | [diff] [blame] | 2 | #include "config.h" |
Junio C Hamano | 898eacd | 2011-10-06 23:12:09 -0700 | [diff] [blame] | 3 | #include "fmt-merge-msg.h" |
Denton Liu | ce6521e | 2020-03-23 21:07:51 -0400 | [diff] [blame] | 4 | #include "parse-options.h" |
Johannes Schindelin | 00449f9 | 2006-07-03 17:18:43 +0200 | [diff] [blame] | 5 | |
Pierre Habouzit | c8ef038 | 2008-10-02 14:59:18 +0200 | [diff] [blame] | 6 | static const char * const fmt_merge_msg_usage[] = { |
Alex Henrie | 9c9b4f2 | 2015-01-13 00:44:47 -0700 | [diff] [blame] | 7 | N_("git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"), |
Pierre Habouzit | c8ef038 | 2008-10-02 14:59:18 +0200 | [diff] [blame] | 8 | NULL |
| 9 | }; |
Johannes Schindelin | 00449f9 | 2006-07-03 17:18:43 +0200 | [diff] [blame] | 10 | |
Miklos Vajna | 0b9a969 | 2008-06-27 18:21:59 +0200 | [diff] [blame] | 11 | int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix) |
| 12 | { |
Pierre Habouzit | c8ef038 | 2008-10-02 14:59:18 +0200 | [diff] [blame] | 13 | const char *inpath = NULL; |
Jonathan Nieder | 2102440 | 2010-08-17 18:00:34 -0500 | [diff] [blame] | 14 | const char *message = NULL; |
Junio C Hamano | 898eacd | 2011-10-06 23:12:09 -0700 | [diff] [blame] | 15 | int shortlog_len = -1; |
Pierre Habouzit | c8ef038 | 2008-10-02 14:59:18 +0200 | [diff] [blame] | 16 | struct option options[] = { |
Nguyễn Thái Ngọc Duy | 93eced6 | 2012-08-20 19:32:10 +0700 | [diff] [blame] | 17 | { OPTION_INTEGER, 0, "log", &shortlog_len, N_("n"), |
| 18 | N_("populate log with at most <n> entries from shortlog"), |
Ramkumar Ramachandra | 96e9420 | 2010-09-08 23:29:54 +0530 | [diff] [blame] | 19 | PARSE_OPT_OPTARG, NULL, DEFAULT_MERGE_LOG_LEN }, |
Nguyễn Thái Ngọc Duy | 93eced6 | 2012-08-20 19:32:10 +0700 | [diff] [blame] | 20 | { OPTION_INTEGER, 0, "summary", &shortlog_len, N_("n"), |
| 21 | N_("alias for --log (deprecated)"), |
Ramkumar Ramachandra | 96e9420 | 2010-09-08 23:29:54 +0530 | [diff] [blame] | 22 | PARSE_OPT_OPTARG | PARSE_OPT_HIDDEN, NULL, |
| 23 | DEFAULT_MERGE_LOG_LEN }, |
Nguyễn Thái Ngọc Duy | 93eced6 | 2012-08-20 19:32:10 +0700 | [diff] [blame] | 24 | OPT_STRING('m', "message", &message, N_("text"), |
| 25 | N_("use <text> as start of message")), |
| 26 | OPT_FILENAME('F', "file", &inpath, N_("file to read from")), |
Pierre Habouzit | c8ef038 | 2008-10-02 14:59:18 +0200 | [diff] [blame] | 27 | OPT_END() |
| 28 | }; |
| 29 | |
Miklos Vajna | 0b9a969 | 2008-06-27 18:21:59 +0200 | [diff] [blame] | 30 | FILE *in = stdin; |
Brandon Casey | f285a2d | 2008-10-09 14:12:12 -0500 | [diff] [blame] | 31 | struct strbuf input = STRBUF_INIT, output = STRBUF_INIT; |
Miklos Vajna | 0b9a969 | 2008-06-27 18:21:59 +0200 | [diff] [blame] | 32 | int ret; |
Junio C Hamano | cbda121 | 2011-11-04 17:35:42 -0700 | [diff] [blame] | 33 | struct fmt_merge_msg_opts opts; |
Miklos Vajna | 0b9a969 | 2008-06-27 18:21:59 +0200 | [diff] [blame] | 34 | |
Johannes Schindelin | ef90d6d | 2008-05-14 18:46:53 +0100 | [diff] [blame] | 35 | git_config(fmt_merge_msg_config, NULL); |
Stephen Boyd | 3778292 | 2009-05-23 11:53:12 -0700 | [diff] [blame] | 36 | argc = parse_options(argc, argv, prefix, options, fmt_merge_msg_usage, |
| 37 | 0); |
Pierre Habouzit | c8ef038 | 2008-10-02 14:59:18 +0200 | [diff] [blame] | 38 | if (argc > 0) |
| 39 | usage_with_options(fmt_merge_msg_usage, options); |
Junio C Hamano | 898eacd | 2011-10-06 23:12:09 -0700 | [diff] [blame] | 40 | if (shortlog_len < 0) |
| 41 | shortlog_len = (merge_log_config > 0) ? merge_log_config : 0; |
Johannes Schindelin | 00449f9 | 2006-07-03 17:18:43 +0200 | [diff] [blame] | 42 | |
Pierre Habouzit | c8ef038 | 2008-10-02 14:59:18 +0200 | [diff] [blame] | 43 | if (inpath && strcmp(inpath, "-")) { |
| 44 | in = fopen(inpath, "r"); |
| 45 | if (!in) |
Thomas Rast | 0721c31 | 2009-06-27 17:58:47 +0200 | [diff] [blame] | 46 | die_errno("cannot open '%s'", inpath); |
Johannes Schindelin | 00449f9 | 2006-07-03 17:18:43 +0200 | [diff] [blame] | 47 | } |
| 48 | |
Miklos Vajna | 0b9a969 | 2008-06-27 18:21:59 +0200 | [diff] [blame] | 49 | if (strbuf_read(&input, fileno(in), 0) < 0) |
Thomas Rast | d824cbb | 2009-06-27 17:58:46 +0200 | [diff] [blame] | 50 | die_errno("could not read input file"); |
Ramkumar Ramachandra | 1876166 | 2010-09-08 23:29:53 +0530 | [diff] [blame] | 51 | |
| 52 | if (message) |
Jonathan Nieder | 2102440 | 2010-08-17 18:00:34 -0500 | [diff] [blame] | 53 | strbuf_addstr(&output, message); |
Ramkumar Ramachandra | 1876166 | 2010-09-08 23:29:53 +0530 | [diff] [blame] | 54 | |
Junio C Hamano | cbda121 | 2011-11-04 17:35:42 -0700 | [diff] [blame] | 55 | memset(&opts, 0, sizeof(opts)); |
| 56 | opts.add_title = !message; |
Junio C Hamano | 9bcbb1c | 2012-12-28 15:29:31 -0800 | [diff] [blame] | 57 | opts.credit_people = 1; |
Junio C Hamano | cbda121 | 2011-11-04 17:35:42 -0700 | [diff] [blame] | 58 | opts.shortlog_len = shortlog_len; |
| 59 | |
| 60 | ret = fmt_merge_msg(&input, &output, &opts); |
Miklos Vajna | 0b9a969 | 2008-06-27 18:21:59 +0200 | [diff] [blame] | 61 | if (ret) |
| 62 | return ret; |
Pierre Habouzit | c8ef038 | 2008-10-02 14:59:18 +0200 | [diff] [blame] | 63 | write_in_full(STDOUT_FILENO, output.buf, output.len); |
Johannes Schindelin | 00449f9 | 2006-07-03 17:18:43 +0200 | [diff] [blame] | 64 | return 0; |
| 65 | } |