From: Lucas Oshiro <lucasseikioshiro@gmail.com>
To: git@vger.kernel.org
Cc: kernel-usp@googlegroups.com, rcdailey.lists@gmail.com,
me@ttaylorr.com, peff@peff.net, matheus.bernardino@usp.br,
"Bárbara Fernandes" <barbara.dcf@gmail.com>
Subject: [RFC WIP PATCH 2/3] tag: factor out prepare tag template code
Date: Tue, 8 Oct 2019 15:47:26 -0300 [thread overview]
Message-ID: <20191008184727.14337-3-lucasseikioshiro@gmail.com> (raw)
In-Reply-To: <20191008184727.14337-1-lucasseikioshiro@gmail.com>
Improve code readability by moving tag body reading to a new function called
get_tag_body. This function will be used in the following patches to fix the
--no-edit flag.
Enhance legibility by encapsulating code that loads previous tag message
(if any) in new function prepare_tag_template. This code refactoring is
part of a series of commits that intend to implement the git tag --amend
flag and fix the functionality of --no-edit.
Co-authored-by: Bárbara Fernandes <barbara.dcf@gmail.com>
Helped-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Lucas Oshiro <lucasseikioshiro@gmail.com>
Signed-off-by: Bárbara Fernandes <barbara.dcf@gmail.com>
---
builtin/tag.c | 65 ++++++++++++++++++++++++++++++---------------------
1 file changed, 39 insertions(+), 26 deletions(-)
diff --git a/builtin/tag.c b/builtin/tag.c
index e1e3549af9..0322bdbdfb 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -244,6 +244,43 @@ static const char message_advice_nested_tag[] =
"\n"
"\tgit tag -f %s %s^{}");
+/*
+ * Write the tag template message with previous tag body (if any) to the given
+ * file.
+ */
+static void prepare_tag_template(struct strbuf *given_msg,
+ struct create_tag_options *opt,
+ struct object_id *prev, char *path,
+ const char *tag)
+{
+ int fd;
+
+ fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0600);
+ if (fd < 0)
+ die_errno(_("could not create file '%s'"), path);
+
+ if (opt->message_given) {
+ write_or_die(fd, given_msg->buf, given_msg->len);
+ strbuf_reset(given_msg);
+ } else if (!is_null_oid(prev)) {
+ write_tag_body(fd, prev);
+ } else {
+ struct strbuf template = STRBUF_INIT;
+ strbuf_addch(&template, '\n');
+ if (opt->cleanup_mode == CLEANUP_ALL) {
+ strbuf_commented_addf(&template, _(tag_template), tag,
+ comment_line_char);
+ } else {
+ strbuf_commented_addf(&template,
+ _(tag_template_nocleanup), tag,
+ comment_line_char);
+ }
+ write_or_die(fd, template.buf, template.len);
+ strbuf_release(&template);
+ }
+ close(fd);
+}
+
static void create_tag(const struct object_id *object, const char *object_ref,
const char *tag,
struct strbuf *buf, struct create_tag_options *opt,
@@ -251,7 +288,7 @@ static void create_tag(const struct object_id *object, const char *object_ref,
{
enum object_type type;
struct strbuf header = STRBUF_INIT;
- char *path = NULL;
+ char *path = git_pathdup("TAG_EDITMSG");
type = oid_object_info(the_repository, object, NULL);
if (type <= OBJ_NONE)
@@ -271,31 +308,7 @@ static void create_tag(const struct object_id *object, const char *object_ref,
git_committer_info(IDENT_STRICT));
if (!opt->message_given || opt->use_editor) {
- int fd;
-
- /* write the template message before editing: */
- path = git_pathdup("TAG_EDITMSG");
- fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0600);
- if (fd < 0)
- die_errno(_("could not create file '%s'"), path);
-
- if (opt->message_given) {
- write_or_die(fd, buf->buf, buf->len);
- strbuf_reset(buf);
- } else if (!is_null_oid(prev)) {
- write_tag_body(fd, prev);
- } else {
- struct strbuf buf = STRBUF_INIT;
- strbuf_addch(&buf, '\n');
- if (opt->cleanup_mode == CLEANUP_ALL)
- strbuf_commented_addf(&buf, _(tag_template), tag, comment_line_char);
- else
- strbuf_commented_addf(&buf, _(tag_template_nocleanup), tag, comment_line_char);
- write_or_die(fd, buf.buf, buf.len);
- strbuf_release(&buf);
- }
- close(fd);
-
+ prepare_tag_template(buf, opt, prev, path, tag);
if (launch_editor(path, buf, NULL)) {
fprintf(stderr,
_("Please supply the message using either -m or -F option.\n"));
--
2.23.0
next prev parent reply other threads:[~2019-10-08 18:47 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-08 18:47 [RFC WIP PATCH 0/3] tag: fix --edit and --no-edit flags Lucas Oshiro
2019-10-08 18:47 ` [RFC WIP PATCH 1/3] tag: factor out tag reading from write_tag_body() Lucas Oshiro
2019-10-09 1:48 ` Matheus Tavares Bernardino
2019-10-10 2:42 ` Junio C Hamano
2019-10-08 18:47 ` Lucas Oshiro [this message]
2019-10-09 3:02 ` [RFC WIP PATCH 2/3] tag: factor out prepare tag template code Matheus Tavares Bernardino
2019-10-10 2:51 ` Junio C Hamano
2019-10-10 4:29 ` Junio C Hamano
2019-10-08 18:47 ` [RFC WIP PATCH 3/3] tag: add full support for --edit and --no-edit Lucas Oshiro
2019-10-09 9:19 ` Matheus Tavares Bernardino
2019-10-10 3:34 ` Junio C Hamano
2019-10-10 2:13 ` [RFC WIP PATCH 0/3] tag: fix --edit and --no-edit flags Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191008184727.14337-3-lucasseikioshiro@gmail.com \
--to=lucasseikioshiro@gmail.com \
--cc=barbara.dcf@gmail.com \
--cc=git@vger.kernel.org \
--cc=kernel-usp@googlegroups.com \
--cc=matheus.bernardino@usp.br \
--cc=me@ttaylorr.com \
--cc=peff@peff.net \
--cc=rcdailey.lists@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).