From 737c5a9cde708d6995c765b7c2e95033edd0a896 Mon Sep 17 00:00:00 2001 From: Michael Schubert Date: Sat, 13 Jul 2013 11:36:24 +0200 Subject: fetch: make --prune configurable Without "git fetch --prune", remote-tracking branches for a branch the other side already has removed will stay forever. Some people want to always run "git fetch --prune". To accommodate users who want to either prune always or when fetching from a particular remote, add two new configuration variables "fetch.prune" and "remote..prune": - "fetch.prune" allows to enable prune for all fetch operations. - "remote..prune" allows to change the behaviour per remote. The latter will naturally override the former, and the --[no-]prune option from the command line will override the configured default. Since --prune is a potentially destructive operation (Git doesn't keep reflogs for deleted references yet), we don't want to prune without users consent, so this configuration will not be on by default. Helped-by: Junio C Hamano Signed-off-by: Michael Schubert Signed-off-by: Junio C Hamano --- remote.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'remote.c') diff --git a/remote.c b/remote.c index 68eb99bdf0..89be21166d 100644 --- a/remote.c +++ b/remote.c @@ -148,6 +148,7 @@ static struct remote *make_remote(const char *name, int len) } ret = xcalloc(1, sizeof(struct remote)); + ret->prune = -1; /* unspecified */ ALLOC_GROW(remotes, remotes_nr + 1, remotes_alloc); remotes[remotes_nr++] = ret; if (len) @@ -419,6 +420,8 @@ static int handle_config(const char *key, const char *value, void *cb) remote->skip_default_update = git_config_bool(key, value); else if (!strcmp(subkey, ".skipfetchall")) remote->skip_default_update = git_config_bool(key, value); + else if (!strcmp(subkey, ".prune")) + remote->prune = git_config_bool(key, value); else if (!strcmp(subkey, ".url")) { const char *v; if (git_config_string(&v, key, value)) -- cgit v1.3-5-g9baa