From: conrad.irwin@gmail.com
To: git@vger.kernel.org
Cc: Conrad Irwin <conrad.irwin@gmail.com>
Subject: [PATCH v3 1/3] Use a temporary index for git commit --interactive
Date: Fri, 6 May 2011 22:59:59 -0700 [thread overview]
Message-ID: <1304748001-17982-2-git-send-email-conrad.irwin@gmail.com> (raw)
In-Reply-To: <1304748001-17982-1-git-send-email-conrad.irwin@gmail.com>
From: Conrad Irwin <conrad.irwin@gmail.com>
Change the behaviour of git commit --interactive so that when you abort
the commit (by leaving the commit message empty) the index remains
unchanged.
Hitherto an aborted commit --interactive has added the selected hunks to
the index regardless of whether the commit succeeded or not.
Signed-off-by: Conrad Irwin <conrad.irwin@gmail.com>
---
Documentation/git-commit.txt | 3 ++-
builtin/commit.c | 36 ++++++++++++++++++++++++++++--------
2 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index d0534b8..ed50271 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -41,7 +41,8 @@ The content to be added can be specified in several ways:
5. by using the --interactive switch with the 'commit' command to decide one
by one which files should be part of the commit, before finalizing the
- operation. Currently, this is done by invoking 'git add --interactive'.
+ operation. Currently, this is done by invoking 'git add --interactive'
+ on a temporary index.
The `--dry-run` option can be used to obtain a
summary of what is included by any of the above for the next
diff --git a/builtin/commit.c b/builtin/commit.c
index 67757e9..636aea6 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -336,18 +336,11 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
int fd;
struct string_list partial;
const char **pathspec = NULL;
+ char *old_index_env = NULL;
int refresh_flags = REFRESH_QUIET;
if (is_status)
refresh_flags |= REFRESH_UNMERGED;
- if (interactive) {
- if (interactive_add(argc, argv, prefix) != 0)
- die(_("interactive add failed"));
- if (read_cache_preload(NULL) < 0)
- die(_("index file corrupt"));
- commit_style = COMMIT_AS_IS;
- return get_index_file();
- }
if (*argv)
pathspec = get_pathspec(prefix, argv);
@@ -355,6 +348,33 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
if (read_cache_preload(pathspec) < 0)
die(_("index file corrupt"));
+ if (interactive) {
+ fd = hold_locked_index(&index_lock, 1);
+
+ refresh_cache_or_die(refresh_flags);
+
+ if (write_cache(fd, active_cache, active_nr) ||
+ close_lock_file(&index_lock))
+ die(_("unable to create temporary index"));
+
+ old_index_env = getenv(INDEX_ENVIRONMENT);
+ setenv(INDEX_ENVIRONMENT, index_lock.filename, 1);
+
+ if (interactive_add(argc, argv, prefix) != 0)
+ die(_("interactive add failed"));
+
+ if (old_index_env && *old_index_env)
+ setenv(INDEX_ENVIRONMENT, old_index_env, 1);
+ else
+ unsetenv(INDEX_ENVIRONMENT);
+
+ discard_cache();
+ read_cache_from(index_lock.filename);
+
+ commit_style = COMMIT_NORMAL;
+ return index_lock.filename;
+ }
+
/*
* Non partial, non as-is commit.
*
--
1.7.5.188.g4817
next prev parent reply other threads:[~2011-05-07 6:00 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-07 5:59 [PATCH v3 0/3] Git commit --patch (again) conrad.irwin
2011-05-07 5:59 ` conrad.irwin [this message]
2011-05-07 6:00 ` [PATCH v3 2/3] Allow git commit --interactive with paths conrad.irwin
2011-05-07 6:00 ` [PATCH v3 3/3] Add support for -p/--patch to git-commit conrad.irwin
2011-05-07 10:46 ` Valentin Haenel
2011-05-07 17:55 ` Conrad Irwin
2011-05-07 17:58 ` [PATCH v4 " Conrad Irwin
2011-05-08 19:27 ` Junio C Hamano
2011-05-07 17:59 ` [PATCH] Add commit to list of config.singlekey commands Conrad Irwin
2011-05-07 9:49 ` [PATCH v3 0/3] Git commit --patch (again) Sverre Rabbelier
2011-05-09 14:44 ` Jeff King
2011-05-09 16:53 ` Junio C Hamano
2011-05-09 22:08 ` Jeff King
2011-05-09 23:53 ` Junio C Hamano
2011-05-09 23:56 ` Junio C Hamano
2011-05-10 20:01 ` Jeff King
2011-05-10 19:56 ` Jeff King
2011-05-10 6:42 ` Conrad Irwin
2011-05-10 19:12 ` [PATCH] Test atomic git-commit --interactive Conrad Irwin
2011-05-10 19:43 ` Jeff King
2011-05-10 21:01 ` Conrad Irwin
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=1304748001-17982-2-git-send-email-conrad.irwin@gmail.com \
--to=conrad.irwin@gmail.com \
--cc=git@vger.kernel.org \
/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).