[RFC PATCH 18/35] update: add per-branch mode configuration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx>
---
 Documentation/config/branch.txt |  5 +++++
 Documentation/config/update.txt |  3 ++-
 builtin/update.c                | 18 ++++++++++++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/Documentation/config/branch.txt b/Documentation/config/branch.txt
index cc5f3249fc..ba355f23e0 100644
--- a/Documentation/config/branch.txt
+++ b/Documentation/config/branch.txt
@@ -96,6 +96,11 @@ mode.
 it unless you understand the implications (see linkgit:git-rebase[1]
 for details).
 
+branch.<name>.updateMode::
+	When `git update` is run, this determines the mode of operation,
+	possible values are 'fast-forward', 'merge', and 'rebase'.
+	See `update.mode` for doing this in a non branch-specific manner.
+
 branch.<name>.description::
 	Branch description, can be edited with
 	`git branch --edit-description`. Branch description is
diff --git a/Documentation/config/update.txt b/Documentation/config/update.txt
index 42a7fe1614..e6db45b6c3 100644
--- a/Documentation/config/update.txt
+++ b/Documentation/config/update.txt
@@ -1,4 +1,5 @@
 update.mode::
 	When `git update` is run, this determines the mode of operation,
 	possible values are 'fast-forward', 'merge', and 'rebase'. The default
-	is 'fast-forward'.
+	is 'fast-forward'. See "branch.<name>.updateMode" for setting this on a
+	per-branch basis.
diff --git a/builtin/update.c b/builtin/update.c
index 4a1b82a41d..50905f5806 100644
--- a/builtin/update.c
+++ b/builtin/update.c
@@ -7,6 +7,7 @@
 #include "run-command.h"
 #include "config.h"
 #include "dir.h"
+#include "remote.h"
 
 enum update_mode_type {
 	UPDATE_MODE_INVALID = -1,
@@ -58,6 +59,22 @@ static int git_update_config(const char *var, const char *value, void *cb)
 	return git_default_config(var, value, cb);
 }
 
+static void get_branch_config(void)
+{
+	struct branch *cur_branch = branch_get("HEAD");
+	char *key;
+	const char *value;
+
+	if (!cur_branch)
+		return;
+
+	key = xstrfmt("branch.%s.updatemode", cur_branch->name);
+	if (!git_config_get_value(key, &value))
+		mode = update_mode_parse_value(value);
+
+	free(key);
+}
+
 static int run_fetch(void)
 {
 	struct strvec args = STRVEC_INIT;
@@ -112,6 +129,7 @@ int cmd_update(int argc, const char **argv, const char *prefix)
 		setenv("GIT_REFLOG_ACTION", "update", 0);
 
 	git_config(git_update_config, NULL);
+	get_branch_config();
 
 	argc = parse_options(argc, argv, prefix, update_options, update_usage, 0);
 
-- 
2.32.0.36.g70aac2b1aa




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux