diff options
| author | Benoit Pierre <benoit.pierre@gmail.com> | 2014-03-18 11:00:53 +0100 | 
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2014-03-18 11:25:12 -0700 | 
| commit | 15048f8a9ace23df67161746ca76b4f46114deee (patch) | |
| tree | 5b7d00d2da24c8e31ede5d028b889bf06a63aaaf /builtin/commit.c | |
| parent | 91c9c8692056c0553c6ea9239ccd46f7f3dbd877 (diff) | |
| download | git-15048f8a9ace23df67161746ca76b4f46114deee.tar.gz | |
commit: fix patch hunk editing with "commit -p -m"
Don't change git environment: move the GIT_EDITOR=":" override to the
hook command subprocess, like it's already done for GIT_INDEX_FILE.
Signed-off-by: Benoit Pierre <benoit.pierre@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/commit.c')
| -rw-r--r-- | builtin/commit.c | 35 | 
1 files changed, 28 insertions, 7 deletions
| diff --git a/builtin/commit.c b/builtin/commit.c index 3767478c6d..baf1fc0fff 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -612,7 +612,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,  	/* This checks and barfs if author is badly specified */  	determine_author_info(author_ident); -	if (!no_verify && run_hook(index_file, "pre-commit", NULL)) +	if (!no_verify && run_commit_hook(use_editor, index_file, "pre-commit", NULL))  		return 0;  	if (squash_message) { @@ -866,8 +866,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,  		return 0;  	} -	if (run_hook(index_file, "prepare-commit-msg", -		     git_path(commit_editmsg), hook_arg1, hook_arg2, NULL)) +	if (run_commit_hook(use_editor, index_file, "prepare-commit-msg", +			    git_path(commit_editmsg), hook_arg1, hook_arg2, NULL))  		return 0;  	if (use_editor) { @@ -883,7 +883,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,  	}  	if (!no_verify && -	    run_hook(index_file, "commit-msg", git_path(commit_editmsg), NULL)) { +	    run_commit_hook(use_editor, index_file, "commit-msg", git_path(commit_editmsg), NULL)) {  		return 0;  	} @@ -1067,8 +1067,6 @@ static int parse_and_validate_options(int argc, const char *argv[],  		use_editor = 0;  	if (0 <= edit_flag)  		use_editor = edit_flag; -	if (!use_editor) -		setenv("GIT_EDITOR", ":", 1);  	/* Sanity check options */  	if (amend && !current_head) @@ -1445,6 +1443,29 @@ static int run_rewrite_hook(const unsigned char *oldsha1,  	return finish_command(&proc);  } +int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...) +{ +	const char *hook_env[3] =  { NULL }; +	char index[PATH_MAX]; +	va_list args; +	int ret; + +	snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file); +	hook_env[0] = index; + +	/* +	 * Let the hook know that no editor will be launched. +	 */ +	if (!editor_is_used) +		hook_env[1] = "GIT_EDITOR=:"; + +	va_start(args, name); +	ret = run_hook_ve(hook_env, name, args); +	va_end(args); + +	return ret; +} +  int cmd_commit(int argc, const char **argv, const char *prefix)  {  	static struct wt_status s; @@ -1669,7 +1690,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)  		     "not exceeded, and then \"git reset HEAD\" to recover."));  	rerere(0); -	run_hook(get_index_file(), "post-commit", NULL); +	run_commit_hook(use_editor, get_index_file(), "post-commit", NULL);  	if (amend && !no_post_rewrite) {  		struct notes_rewrite_cfg *cfg;  		cfg = init_copy_notes_for_rewrite("amend"); | 
