mirror of
https://github.com/git/git.git
synced 2024-12-01 05:54:16 +08:00
builtin-tag: accept and process multiple -m just like git-commit
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3968658599
commit
bd46c9a912
@ -65,7 +65,9 @@ OPTIONS
|
|||||||
Typing "git tag" without arguments, also lists all tags.
|
Typing "git tag" without arguments, also lists all tags.
|
||||||
|
|
||||||
-m <msg>::
|
-m <msg>::
|
||||||
Use the given tag message (instead of prompting)
|
Use the given tag message (instead of prompting).
|
||||||
|
If multiple `-m` options are given, there values are
|
||||||
|
concatenated as separate paragraphs.
|
||||||
|
|
||||||
-F <file>::
|
-F <file>::
|
||||||
Take the tag message from the given file. Use '-' to
|
Take the tag message from the given file. Use '-' to
|
||||||
|
@ -341,6 +341,24 @@ static void create_tag(const unsigned char *object, const char *tag,
|
|||||||
die("unable to write tag file");
|
die("unable to write tag file");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct msg_arg {
|
||||||
|
int given;
|
||||||
|
struct strbuf buf;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int parse_msg_arg(const struct option *opt, const char *arg, int unset)
|
||||||
|
{
|
||||||
|
struct msg_arg *msg = opt->value;
|
||||||
|
|
||||||
|
if (!arg)
|
||||||
|
return -1;
|
||||||
|
if (msg->buf.len)
|
||||||
|
strbuf_addstr(&(msg->buf), "\n\n");
|
||||||
|
strbuf_addstr(&(msg->buf), arg);
|
||||||
|
msg->given = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int cmd_tag(int argc, const char **argv, const char *prefix)
|
int cmd_tag(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
struct strbuf buf;
|
struct strbuf buf;
|
||||||
@ -351,8 +369,9 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
int annotate = 0, sign = 0, force = 0, lines = 0,
|
int annotate = 0, sign = 0, force = 0, lines = 0,
|
||||||
delete = 0, verify = 0;
|
delete = 0, verify = 0;
|
||||||
char *list = NULL, *msg = NULL, *msgfile = NULL, *keyid = NULL;
|
char *list = NULL, *msgfile = NULL, *keyid = NULL;
|
||||||
const char *no_pattern = "NO_PATTERN";
|
const char *no_pattern = "NO_PATTERN";
|
||||||
|
struct msg_arg msg = { 0, STRBUF_INIT };
|
||||||
struct option options[] = {
|
struct option options[] = {
|
||||||
{ OPTION_STRING, 'l', NULL, &list, "pattern", "list tag names",
|
{ OPTION_STRING, 'l', NULL, &list, "pattern", "list tag names",
|
||||||
PARSE_OPT_OPTARG, NULL, (intptr_t) no_pattern },
|
PARSE_OPT_OPTARG, NULL, (intptr_t) no_pattern },
|
||||||
@ -365,7 +384,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|||||||
OPT_GROUP("Tag creation options"),
|
OPT_GROUP("Tag creation options"),
|
||||||
OPT_BOOLEAN('a', NULL, &annotate,
|
OPT_BOOLEAN('a', NULL, &annotate,
|
||||||
"annotated tag, needs a message"),
|
"annotated tag, needs a message"),
|
||||||
OPT_STRING('m', NULL, &msg, "msg", "message for the tag"),
|
OPT_CALLBACK('m', NULL, &msg, "msg",
|
||||||
|
"message for the tag", parse_msg_arg),
|
||||||
OPT_STRING('F', NULL, &msgfile, "file", "message in a file"),
|
OPT_STRING('F', NULL, &msgfile, "file", "message in a file"),
|
||||||
OPT_BOOLEAN('s', NULL, &sign, "annotated and GPG-signed tag"),
|
OPT_BOOLEAN('s', NULL, &sign, "annotated and GPG-signed tag"),
|
||||||
OPT_STRING('u', NULL, &keyid, "key-id",
|
OPT_STRING('u', NULL, &keyid, "key-id",
|
||||||
@ -386,12 +406,12 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|||||||
return for_each_tag_name(argv, verify_tag);
|
return for_each_tag_name(argv, verify_tag);
|
||||||
|
|
||||||
strbuf_init(&buf, 0);
|
strbuf_init(&buf, 0);
|
||||||
if (msg || msgfile) {
|
if (msg.given || msgfile) {
|
||||||
if (msg && msgfile)
|
if (msg.given && msgfile)
|
||||||
die("only one -F or -m option is allowed.");
|
die("only one -F or -m option is allowed.");
|
||||||
annotate = 1;
|
annotate = 1;
|
||||||
if (msg)
|
if (msg.given)
|
||||||
strbuf_addstr(&buf, msg);
|
strbuf_addbuf(&buf, &(msg.buf));
|
||||||
else {
|
else {
|
||||||
if (!strcmp(msgfile, "-")) {
|
if (!strcmp(msgfile, "-")) {
|
||||||
if (strbuf_read(&buf, 0, 1024) < 0)
|
if (strbuf_read(&buf, 0, 1024) < 0)
|
||||||
@ -429,7 +449,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|||||||
die("tag '%s' already exists", tag);
|
die("tag '%s' already exists", tag);
|
||||||
|
|
||||||
if (annotate)
|
if (annotate)
|
||||||
create_tag(object, tag, &buf, msg || msgfile, sign, prev, object);
|
create_tag(object, tag, &buf, msg.given || msgfile,
|
||||||
|
sign, prev, object);
|
||||||
|
|
||||||
lock = lock_any_ref_for_update(ref, prev, 0);
|
lock = lock_any_ref_for_update(ref, prev, 0);
|
||||||
if (!lock)
|
if (!lock)
|
||||||
|
Loading…
Reference in New Issue
Block a user