From: Jonathan Nieder <jrnieder@gmail.com>
To: git@vger.kernel.org
Cc: Jakub Narebski <jnareb@gmail.com>, Jeff King <peff@peff.net>,
Thomas Rast <trast@student.ethz.ch>
Subject: [PATCH 5/9] commit: split off the piece that writes status
Date: Sat, 24 Jul 2010 19:59:09 -0500 [thread overview]
Message-ID: <20100725005909.GE18420@burratino> (raw)
In-Reply-To: <20100725005443.GA18370@burratino>
The new write_status function takes care of writing status
information about the pending commit (e.g., author name and
whether a merge is pending) to COMMIT_EDITMSG.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
builtin/commit.c | 158 +++++++++++++++++++++++++++++-------------------------
1 files changed, 85 insertions(+), 73 deletions(-)
diff --git a/builtin/commit.c b/builtin/commit.c
index b599486..85e560e 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -625,15 +625,94 @@ static void add_committer_signoff(struct strbuf *sb)
strbuf_release(&sob);
}
+static int write_status(FILE *fp, const char *index_file,
+ const char *prefix, struct wt_status *s)
+{
+ int commitable, saved_color_setting;
+ char *author_ident;
+ const char *committer_ident;
+ int ident_shown = 0;
+
+ if (in_merge)
+ fprintf(fp,
+ "#\n"
+ "# It looks like you may be committing a MERGE.\n"
+ "# If this is not correct, please remove the file\n"
+ "# %s\n"
+ "# and try again.\n"
+ "#\n",
+ git_path("MERGE_HEAD"));
+
+ fprintf(fp,
+ "\n"
+ "# Please enter the commit message for your changes.");
+ if (cleanup_mode == CLEANUP_ALL)
+ fprintf(fp,
+ " Lines starting\n"
+ "# with '#' will be ignored, and an empty"
+ " message aborts the commit.\n");
+ else /* CLEANUP_SPACE, that is. */
+ fprintf(fp,
+ " Lines starting\n"
+ "# with '#' will be kept; you may remove them"
+ " yourself if you want to.\n"
+ "# An empty message aborts the commit.\n");
+ if (only_include_assumed)
+ fprintf(fp, "# %s\n", only_include_assumed);
+
+ author_ident = xstrdup(fmt_name(author_name, author_email));
+ committer_ident = fmt_name(getenv("GIT_COMMITTER_NAME"),
+ getenv("GIT_COMMITTER_EMAIL"));
+ if (strcmp(author_ident, committer_ident))
+ fprintf(fp,
+ "%s"
+ "# Author: %s\n",
+ ident_shown++ ? "" : "#\n",
+ author_ident);
+ free(author_ident);
+
+ if (!user_ident_sufficiently_given())
+ fprintf(fp,
+ "%s"
+ "# Committer: %s\n",
+ ident_shown++ ? "" : "#\n",
+ committer_ident);
+
+ if (ident_shown)
+ fprintf(fp, "#\n");
+
+ saved_color_setting = s->use_color;
+ s->use_color = 0;
+ commitable = run_status(fp, index_file, prefix, 1, s);
+ s->use_color = saved_color_setting;
+ return commitable;
+}
+
+static int something_is_staged(void)
+{
+ unsigned char sha1[20];
+ const char *parent = "HEAD";
+
+ if (!active_nr && read_cache() < 0)
+ die("Cannot read index");
+
+ if (amend)
+ parent = "HEAD^1";
+
+ if (get_sha1(parent, sha1))
+ return !!active_nr;
+ else
+ return index_differs_from(parent, 0);
+}
+
static int prepare_to_commit(const char *index_file, const char *prefix,
struct wt_status *s)
{
- int commitable, saved_color_setting;
+ int commitable;
struct strbuf sb = STRBUF_INIT;
FILE *fp;
const char *hook_arg1 = NULL;
const char *hook_arg2 = NULL;
- int ident_shown = 0;
if (!no_verify && run_hook(index_file, "pre-commit", NULL))
return 0;
@@ -659,77 +738,10 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
/* This checks if committer ident is explicitly given */
git_committer_info(0);
- if (use_editor && include_status) {
- char *author_ident;
- const char *committer_ident;
-
- if (in_merge)
- fprintf(fp,
- "#\n"
- "# It looks like you may be committing a MERGE.\n"
- "# If this is not correct, please remove the file\n"
- "# %s\n"
- "# and try again.\n"
- "#\n",
- git_path("MERGE_HEAD"));
-
- fprintf(fp,
- "\n"
- "# Please enter the commit message for your changes.");
- if (cleanup_mode == CLEANUP_ALL)
- fprintf(fp,
- " Lines starting\n"
- "# with '#' will be ignored, and an empty"
- " message aborts the commit.\n");
- else /* CLEANUP_SPACE, that is. */
- fprintf(fp,
- " Lines starting\n"
- "# with '#' will be kept; you may remove them"
- " yourself if you want to.\n"
- "# An empty message aborts the commit.\n");
- if (only_include_assumed)
- fprintf(fp, "# %s\n", only_include_assumed);
-
- author_ident = xstrdup(fmt_name(author_name, author_email));
- committer_ident = fmt_name(getenv("GIT_COMMITTER_NAME"),
- getenv("GIT_COMMITTER_EMAIL"));
- if (strcmp(author_ident, committer_ident))
- fprintf(fp,
- "%s"
- "# Author: %s\n",
- ident_shown++ ? "" : "#\n",
- author_ident);
- free(author_ident);
-
- if (!user_ident_sufficiently_given())
- fprintf(fp,
- "%s"
- "# Committer: %s\n",
- ident_shown++ ? "" : "#\n",
- committer_ident);
-
- if (ident_shown)
- fprintf(fp, "#\n");
-
- saved_color_setting = s->use_color;
- s->use_color = 0;
- commitable = run_status(fp, index_file, prefix, 1, s);
- s->use_color = saved_color_setting;
- } else {
- unsigned char sha1[20];
- const char *parent = "HEAD";
-
- if (!active_nr && read_cache() < 0)
- die("Cannot read index");
-
- if (amend)
- parent = "HEAD^1";
-
- if (get_sha1(parent, sha1))
- commitable = !!active_nr;
- else
- commitable = index_differs_from(parent, 0);
- }
+ if (use_editor && include_status)
+ commitable = write_status(fp, index_file, prefix, s);
+ else
+ commitable = something_is_staged();
fclose(fp);
--
1.7.2.9.ge3789.dirty
next prev parent reply other threads:[~2010-07-25 1:00 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-25 0:54 [RFC/PATCH 0/9] commit: more focused advice in the no-changes-staged case Jonathan Nieder
2010-07-25 0:56 ` [PATCH 1/9] wt-status: split wt_status_print into digestible pieces Jonathan Nieder
2010-07-25 0:57 ` [PATCH 2/9] wt-status: split off a function for printing submodule summary Jonathan Nieder
2010-07-25 0:58 ` [PATCH 3/9] commit: split off a function to fetch the default log message Jonathan Nieder
2010-07-25 0:58 ` [PATCH 4/9] commit: split commit -s handling into its own function Jonathan Nieder
2010-07-25 0:59 ` Jonathan Nieder [this message]
2010-07-25 0:59 ` [PATCH 6/9] t7508 (status): modernize style Jonathan Nieder
2010-07-25 8:38 ` Ævar Arnfjörð Bjarmason
2010-07-25 1:00 ` [PATCH 7/9] commit: give empty-commit avoidance code its own function Jonathan Nieder
2010-07-25 1:01 ` [PATCH 8/9] commit --dry-run: give advice on empty amend Jonathan Nieder
2010-07-25 1:02 ` [PATCH 9/9] commit: suppress status summary when no changes staged Jonathan Nieder
2010-08-11 7:11 ` Thomas Rast
2010-08-11 7:30 ` Jonathan Nieder
2010-08-11 7:49 ` [PATCH v2] t6040 (branch tracking): check “status” instead of “commit” Jonathan Nieder
2010-08-12 0:45 ` Ævar Arnfjörð Bjarmason
2010-08-11 12:15 ` [PATCH 9/9] commit: suppress status summary when no changes staged Ævar Arnfjörð Bjarmason
2010-08-11 23:57 ` Jonathan Nieder
2010-08-12 0:05 ` Ævar Arnfjörð Bjarmason
2010-08-12 0:10 ` Jonathan Nieder
2010-07-25 8:54 ` [RFC/PATCH 0/9] commit: more focused advice in the no-changes-staged case Ævar Arnfjörð Bjarmason
2010-07-25 9:22 ` Thomas Rast
2010-07-29 23:51 ` Making error messages stand out (Re: [RFC/PATCH 0/9] commit: more focused advice in the no-changes-staged case) Jonathan Nieder
2010-07-30 18:44 ` Sverre Rabbelier
2010-08-11 8:31 ` [WIP/PATCH 0/4] Re: Making error messages stand out Jonathan Nieder
2010-08-11 8:36 ` [PATCH 1/4] Eliminate “Finished cherry-pick/revert” message Jonathan Nieder
2010-08-11 8:36 ` [PATCH 2/4] Introduce advise() to print hints Jonathan Nieder
2010-08-11 8:37 ` [PATCH 3/4] cherry-pick/revert: Use error() for failure message Jonathan Nieder
2010-08-11 8:37 ` [PATCH 4/4] cherry-pick/revert: Use advise() for hints Jonathan Nieder
2010-08-11 9:21 ` [WIP/PATCH 0/4] Re: Making error messages stand out Nguyen Thai Ngoc Duy
2010-08-11 9:39 ` Matthieu Moy
2010-08-11 9:58 ` Nguyen Thai Ngoc Duy
2010-08-11 17:34 ` Sverre Rabbelier
2010-08-18 14:36 ` [PATCH] tests: fix syntax error in "Use advise() for hints" test Ævar Arnfjörð Bjarmason
2010-08-19 4:30 ` Jonathan Nieder
2010-08-19 12:22 ` Ævar Arnfjörð Bjarmason
2010-08-20 10:13 ` Raja R Harinath
2010-08-20 14:22 ` Ævar Arnfjörð Bjarmason
2010-08-20 17:51 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100725005909.GE18420@burratino \
--to=jrnieder@gmail.com \
--cc=git@vger.kernel.org \
--cc=jnareb@gmail.com \
--cc=peff@peff.net \
--cc=trast@student.ethz.ch \
/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.
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 NNTP newsgroup(s).