[PATCH/GSoC] add a add.patch config variable
Users may like to review their changes when staging by default. It is also a convenient safety feature for beginners nudging them to have a second look at their changes when composing a commit.
To this end, the config variable allows to have git-add to always act like -p was passed.
Signed-off-by: XZS <d.f.fischer@web.de>
---
The list of microproject suggestions for the Summer of Code 2016 proposed to
"add configuration options for some commonly used command-line options", so I
added a configuraion variable for an option I use all the time.
Documentation/config.txt | 5 +++++
Documentation/git-add.txt | 3 +++
builtin/add.c | 3 +++
contrib/completion/git-completion.bash | 1 +
t/t3701-add-interactive.sh | 9 +++++++++
5 files changed, 21 insertions(+)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 2cd6bdd..614c599 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -752,6 +752,11 @@ add.ignore-errors (deprecated)::
as it does not follow the usual naming convention for configuration
variables.
+add.patch::
+ Configures 'git add' to always interactively choose hunks, hinting the
+ user to review changes before staging. This is equivalent to adding the
+ '--patch' option to linkgit:git-add[1].
+
alias.*::
Command aliases for the linkgit:git[1] command wrapper - e.g.
after defining "alias.last = cat-file commit HEAD", the invocation
diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index 6a96a66..cdb6663 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -92,6 +92,9 @@ OPTIONS
This effectively runs `add --interactive`, but bypasses the
initial command menu and directly jumps to the `patch` subcommand.
See ``Interactive mode'' for details.
++
+The configuration variable `add.patch` can be set to true to make
+this the default behaviour.
-e::
--edit::
diff --git a/builtin/add.c b/builtin/add.c
index 145f06e..04f8b5e 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -272,6 +272,9 @@ static int add_config(const char *var, const char *value, void *cb)
!strcmp(var, "add.ignore-errors")) {
ignore_add_errors = git_config_bool(var, value);
return 0;
+ } else if (!strcmp(var, "add.patch")) {
+ patch_interactive = git_config_bool(var, value);
+ return 0;
}
return git_default_config(var, value, cb);
}
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index e3918c8..597d20f 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1969,6 +1969,7 @@ _git_config ()
esac
__gitcomp "
add.ignoreErrors
+ add.patch
advice.commitBeforeMerge
advice.detachedHead
advice.implicitIdentity
diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh
index deae948..25e4b2e 100755
--- a/t/t3701-add-interactive.sh
+++ b/t/t3701-add-interactive.sh
@@ -380,4 +380,13 @@ test_expect_success 'patch mode ignores unmerged entries' '
test_cmp expected diff
'
+test_expect_success 'patch mode can be activated per option' '
+ git config add.patch true &&
+ git reset --hard &&
+ echo change >test &&
+ echo y | git add -p > output &&
+ cat output &&
+ grep "Stage this hunk \[y,n,q,a,d,/,e,?\]?" output
+'
+
test_done
--
2.7.4