All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paul Tan <pyokagan@gmail.com>
To: git@vger.kernel.org
Cc: Stefan Beller <sbeller@google.com>,
	Johannes Schindelin <johannes.schindelin@gmx.de>,
	Stephen Robin <stephen.robin@gmail.com>,
	Paul Tan <pyokagan@gmail.com>
Subject: [PATCH v2 08/19] pull: pass git-fetch's options to git-fetch
Date: Wed,  3 Jun 2015 14:48:52 +0800	[thread overview]
Message-ID: <1433314143-4478-9-git-send-email-pyokagan@gmail.com> (raw)
In-Reply-To: <1433314143-4478-1-git-send-email-pyokagan@gmail.com>

Since eb2a8d9 (pull: handle git-fetch's options as well, 2015-06-02),
git-pull knows about and handles git-fetch's options, passing them to
git-fetch. Re-implement this behavior.

Since 29609e6 (pull: do nothing on --dry-run, 2010-05-25) git-pull
supported the --dry-run option, exiting after git-fetch if --dry-run is
set. Re-implement this behavior.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
---

Notes:
    v2
    
    * Use parse_opt_parse_strbuf()

 builtin/pull.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)

diff --git a/builtin/pull.c b/builtin/pull.c
index 5f08634..0b66b43 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -32,6 +32,21 @@ static struct argv_array opt_strategies = ARGV_ARRAY_INIT;
 static struct argv_array opt_strategy_opts = ARGV_ARRAY_INIT;
 static struct strbuf opt_gpg_sign = STRBUF_INIT;
 
+/* Options passed to git-fetch */
+static struct strbuf opt_all = STRBUF_INIT;
+static struct strbuf opt_append = STRBUF_INIT;
+static struct strbuf opt_upload_pack = STRBUF_INIT;
+static int opt_force;
+static struct strbuf opt_tags = STRBUF_INIT;
+static struct strbuf opt_prune = STRBUF_INIT;
+static struct strbuf opt_recurse_submodules = STRBUF_INIT;
+static int opt_dry_run;
+static struct strbuf opt_keep = STRBUF_INIT;
+static struct strbuf opt_depth = STRBUF_INIT;
+static struct strbuf opt_unshallow = STRBUF_INIT;
+static struct strbuf opt_update_shallow = STRBUF_INIT;
+static struct strbuf opt_refmap = STRBUF_INIT;
+
 static struct option pull_options[] = {
 	/* Shared options */
 	OPT__VERBOSITY(&opt_verbosity),
@@ -82,6 +97,46 @@ static struct option pull_options[] = {
 	  N_("GPG sign commit"),
 	  PARSE_OPT_OPTARG, parse_opt_pass_strbuf },
 
+	/* Options passed to git-fetch */
+	OPT_GROUP(N_("Options related to fetching")),
+	{ OPTION_CALLBACK, 0, "all", &opt_all, 0,
+	  N_("fetch from all remotes"),
+	  PARSE_OPT_NOARG, parse_opt_pass_strbuf },
+	{ OPTION_CALLBACK, 'a', "append", &opt_append, 0,
+	  N_("append to .git/FETCH_HEAD instead of overwriting"),
+	  PARSE_OPT_NOARG, parse_opt_pass_strbuf },
+	{ OPTION_CALLBACK, 0, "upload-pack", &opt_upload_pack, N_("path"),
+	  N_("path to upload pack on remote end"),
+	  0, parse_opt_pass_strbuf },
+	OPT__FORCE(&opt_force, N_("force overwrite of local branch")),
+	{ OPTION_CALLBACK, 't', "tags", &opt_tags, 0,
+	  N_("fetch all tags and associated objects"),
+	  PARSE_OPT_NOARG, parse_opt_pass_strbuf },
+	{ OPTION_CALLBACK, 'p', "prune", &opt_prune, 0,
+	  N_("prune remote-tracking branches no longer on remote"),
+	  PARSE_OPT_NOARG, parse_opt_pass_strbuf },
+	{ OPTION_CALLBACK, 0, "recurse-submodules", &opt_recurse_submodules,
+	  N_("on-demand"),
+	  N_("control recursive fetching of submodules"),
+	  PARSE_OPT_OPTARG, parse_opt_pass_strbuf },
+	OPT_BOOL(0, "dry-run", &opt_dry_run,
+		N_("dry run")),
+	{ OPTION_CALLBACK, 'k', "keep", &opt_keep, 0,
+	  N_("keep downloaded pack"),
+	  PARSE_OPT_NOARG, parse_opt_pass_strbuf },
+	{ OPTION_CALLBACK, 0, "depth", &opt_depth, N_("depth"),
+	  N_("deepen history of shallow clone"),
+	  0, parse_opt_pass_strbuf },
+	{ OPTION_CALLBACK, 0, "unshallow", &opt_unshallow, 0,
+	  N_("convert to a complete repository"),
+	  PARSE_OPT_NONEG | PARSE_OPT_NOARG, parse_opt_pass_strbuf },
+	{ OPTION_CALLBACK, 0, "update-shallow", &opt_update_shallow, 0,
+	  N_("accept refs that update .git/shallow"),
+	  PARSE_OPT_NOARG, parse_opt_pass_strbuf },
+	{ OPTION_CALLBACK, 0, "refmap", &opt_refmap, N_("refmap"),
+	  N_("specify fetch refmap"),
+	  PARSE_OPT_NONEG, parse_opt_pass_strbuf },
+
 	OPT_END()
 };
 
@@ -100,6 +155,16 @@ static void argv_push_verbosity(struct argv_array *arr)
 }
 
 /**
+ * Pushes "-f" switches into arr to match the opt_force level.
+ */
+static void argv_push_force(struct argv_array *arr)
+{
+	int force = opt_force;
+	while (force-- > 0)
+		argv_array_push(arr, "-f");
+}
+
+/**
  * Parses argv into [<repo> [<refspecs>...]], returning their values in `repo`
  * as a string and `refspecs` as a null-terminated array of strings. If `repo`
  * is not provided in argv, it is set to NULL.
@@ -131,6 +196,33 @@ static int run_fetch(const char *repo, const char **refspecs)
 	if (opt_progress.len)
 		argv_array_push(&args, opt_progress.buf);
 
+	/* Options passed to git-fetch */
+	if (opt_all.len)
+		argv_array_push(&args, opt_all.buf);
+	if (opt_append.len)
+		argv_array_push(&args, opt_append.buf);
+	if (opt_upload_pack.len)
+		argv_array_push(&args, opt_upload_pack.buf);
+	argv_push_force(&args);
+	if (opt_tags.len)
+		argv_array_push(&args, opt_tags.buf);
+	if (opt_prune.len)
+		argv_array_push(&args, opt_prune.buf);
+	if (opt_recurse_submodules.len)
+		argv_array_push(&args, opt_recurse_submodules.buf);
+	if (opt_dry_run)
+		argv_array_push(&args, "--dry-run");
+	if (opt_keep.len)
+		argv_array_push(&args, opt_keep.buf);
+	if (opt_depth.len)
+		argv_array_push(&args, opt_depth.buf);
+	if (opt_unshallow.len)
+		argv_array_push(&args, opt_unshallow.buf);
+	if (opt_update_shallow.len)
+		argv_array_push(&args, opt_update_shallow.buf);
+	if (opt_refmap.len)
+		argv_array_push(&args, opt_refmap.buf);
+
 	if (repo)
 		argv_array_push(&args, repo);
 	while (*refspecs)
@@ -199,5 +291,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
 	if (run_fetch(repo, refspecs))
 		return 1;
 
+	if (opt_dry_run)
+		return 0;
+
 	return run_merge();
 }
-- 
2.1.4

  parent reply	other threads:[~2015-06-03  6:50 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-03  6:48 [PATCH v2 00/19] Make git-pull a builtin Paul Tan
2015-06-03  6:48 ` [PATCH v2 01/19] parse-options-cb: implement parse_opt_pass_strbuf() Paul Tan
2015-06-09 23:11   ` Junio C Hamano
2015-06-03  6:48 ` [PATCH v2 02/19] parse-options-cb: implement parse_opt_pass_argv_array() Paul Tan
2015-06-03 16:56   ` Stefan Beller
2015-06-09 23:16   ` Junio C Hamano
2015-06-10  7:11     ` Paul Tan
2015-06-10  8:03       ` Junio C Hamano
2015-06-03  6:48 ` [PATCH v2 03/19] argv-array: implement argv_array_pushv() Paul Tan
2015-06-03  6:48 ` [PATCH v2 04/19] pull: implement skeletal builtin pull Paul Tan
2015-06-10  0:23   ` Junio C Hamano
2015-06-03  6:48 ` [PATCH v2 05/19] pull: implement fetch + merge Paul Tan
2015-06-09 23:27   ` Junio C Hamano
2015-06-03  6:48 ` [PATCH v2 06/19] pull: pass verbosity, --progress flags to fetch and merge Paul Tan
2015-06-09 23:36   ` Junio C Hamano
2015-06-03  6:48 ` [PATCH v2 07/19] pull: pass git-merge's options to git-merge Paul Tan
2015-06-03  6:48 ` Paul Tan [this message]
2015-06-03 17:16   ` [PATCH v2 08/19] pull: pass git-fetch's options to git-fetch Stefan Beller
2015-06-03  6:48 ` [PATCH v2 09/19] pull: error on no merge candidates Paul Tan
2015-06-09 23:56   ` Junio C Hamano
2015-06-13  5:52     ` Paul Tan
2015-06-03  6:48 ` [PATCH v2 10/19] pull: support pull.ff config Paul Tan
2015-06-09 23:59   ` Junio C Hamano
2015-06-03  6:48 ` [PATCH v2 11/19] pull: check if in unresolved merge state Paul Tan
2015-06-10  1:29   ` Junio C Hamano
2015-06-10 14:38     ` Junio C Hamano
2015-06-10 15:12       ` Paul Tan
2015-06-10 17:14         ` Junio C Hamano
2015-06-14  7:44           ` Paul Tan
2015-06-03  6:48 ` [PATCH v2 12/19] pull: fast-forward working tree if head is updated Paul Tan
2015-06-03  6:48 ` [PATCH v2 13/19] pull: implement pulling into an unborn branch Paul Tan
2015-06-10  1:31   ` Junio C Hamano
2015-06-03  6:48 ` [PATCH v2 14/19] pull: set reflog message Paul Tan
2015-06-03  6:48 ` [PATCH v2 15/19] pull: teach git pull about --rebase Paul Tan
2015-06-10  1:56   ` Junio C Hamano
2015-06-10  7:55     ` Paul Tan
2015-06-10 14:44       ` Junio C Hamano
2015-06-10 15:35         ` Paul Tan
2015-06-10 16:13           ` Junio C Hamano
2015-06-10 23:02   ` Junio C Hamano
2015-06-03  6:49 ` [PATCH v2 16/19] pull: configure --rebase via branch.<name>.rebase or pull.rebase Paul Tan
2015-06-03  6:49 ` [PATCH v2 17/19] pull --rebase: exit early when the working directory is dirty Paul Tan
2015-06-03 10:27   ` Kevin Daudt
2015-06-10  5:53     ` Kevin Daudt
2015-06-03  6:49 ` [PATCH v2 18/19] pull --rebase: error on no merge candidate cases Paul Tan
2015-06-03 17:38   ` Stefan Beller
2015-06-03  6:49 ` [PATCH v2 19/19] pull: remove redirection to git-pull.sh Paul Tan
2015-06-03 17:49   ` Stefan Beller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1433314143-4478-9-git-send-email-pyokagan@gmail.com \
    --to=pyokagan@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=johannes.schindelin@gmx.de \
    --cc=sbeller@google.com \
    --cc=stephen.robin@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.