From 6fb373a0e8eeff3c94853ff0ac55ca6b561c44a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Wed, 22 Apr 2015 04:54:00 +0200 Subject: [PATCH] remote: add prune option to fetch Add a prune setting in the fetch options to allow to fall back to the configuration (the default) or to set it on or off. --- include/git2/remote.h | 20 ++++++++++++++++++++ src/remote.c | 12 +++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/include/git2/remote.h b/include/git2/remote.h index 19b2fdf13..41cf8512f 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -505,6 +505,21 @@ GIT_EXTERN(int) git_remote_init_callbacks( git_remote_callbacks *opts, unsigned int version); +typedef enum { + /** + * Use the setting from the configuration + */ + GIT_FETCH_PRUNE_FALLBACK, + /** + * Force pruning on + */ + GIT_FETCH_PRUNE, + /** + * Force pruning off + */ + GIT_FETCH_NO_PRUNE, +} git_fetch_prune_t; + typedef struct { int version; @@ -512,6 +527,11 @@ typedef struct { * Callbacks to use for this fetch operation */ git_remote_callbacks callbacks; + + /** + * Whether to perform a prune after the fetch + */ + git_fetch_prune_t prune; } git_fetch_options; #define GIT_FETCH_OPTIONS_VERSION 1 diff --git a/src/remote.c b/src/remote.c index 9c044f7ad..a29b8aad9 100644 --- a/src/remote.c +++ b/src/remote.c @@ -973,6 +973,7 @@ int git_remote_fetch( const char *reflog_message) { int error; + bool prune = false; git_buf reflog_msg_buf = GIT_BUF_INIT; const git_remote_callbacks *cbs = NULL; @@ -1008,7 +1009,16 @@ int git_remote_fetch( if (error < 0) return error; - if (remote->prune_refs) + if (opts && opts->prune == GIT_FETCH_PRUNE) + prune = true; + else if (opts && opts->prune == GIT_FETCH_PRUNE_FALLBACK && remote->prune_refs) + prune = true; + else if (opts && opts->prune == GIT_FETCH_NO_PRUNE) + prune = false; + else + prune = remote->prune_refs; + + if (prune) error = git_remote_prune(remote, cbs); return error;