git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mehul Jain <mehul.jain2029@gmail.com>
To: git@vger.kernel.org
Cc: me@ikke.info, pyokagan@gmail.com, Mehul Jain <mehul.jain2029@gmail.com>
Subject: [PATCH] Add --no-autostash flag to git pull --rebase
Date: Fri, 26 Feb 2016 16:53:45 +0530	[thread overview]
Message-ID: <1456485825-21309-2-git-send-email-mehul.jain2029@gmail.com> (raw)
In-Reply-To: <1456485825-21309-1-git-send-email-mehul.jain2029@gmail.com>

git pull --rebase now understand --no-autostash flag. If directory is found
to be dirty then command will die. This flag override "rebase.autostash" 
configuration(if set). If this flag is not passed in command line then
default behaviour is choosen, given by "rebase.autostash"(if "rebase.autostash"
is not set then git pull --rebase will die if directory is dirty).

Signed-off-by: Mehul Jain <mehul.jain2029@gmail.com>
---
 builtin/pull.c          | 12 ++++++++----
 t/t5520-pull.sh         |  8 ++++++++
 t/t5521-pull-options.sh | 24 ++++++++++++++++++++++++
 3 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/builtin/pull.c b/builtin/pull.c
index 10eff03..9d1a3d0 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -85,6 +85,7 @@ static char *opt_squash;
 static char *opt_commit;
 static char *opt_edit;
 static char *opt_ff;
+static int opt_autostash = -1;
 static char *opt_verify_signatures;
 static struct argv_array opt_strategies = ARGV_ARRAY_INIT;
 static struct argv_array opt_strategy_opts = ARGV_ARRAY_INIT;
@@ -146,6 +147,8 @@ static struct option pull_options[] = {
 	OPT_PASSTHRU(0, "ff-only", &opt_ff, NULL,
 		N_("abort if fast-forward is not possible"),
 		PARSE_OPT_NOARG | PARSE_OPT_NONEG),
+	OPT_COLOR_FLAG(0,"autostash",&opt_autostash,
+		N_("abort if tree is dirty")),
 	OPT_PASSTHRU(0, "verify-signatures", &opt_verify_signatures, NULL,
 		N_("verify that the named commit has a valid GPG signature"),
 		PARSE_OPT_NOARG),
@@ -835,13 +838,14 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
 		hashclr(orig_head);
 
 	if (opt_rebase) {
-		int autostash = 0;
-
 		if (is_null_sha1(orig_head) && !is_cache_unborn())
 			die(_("Updating an unborn branch with changes added to the index."));
 
-		git_config_get_bool("rebase.autostash", &autostash);
-		if (!autostash)
+		if(opt_autostash < 0)
+			if(git_config_get_bool("rebase.autostash",&opt_autostash))
+				opt_autostash = 0;
+
+		if (!opt_autostash)
 			die_on_unclean_work_tree(prefix);
 
 		if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index c952d5e..512d3bf 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -245,6 +245,14 @@ test_expect_success '--rebase fails with multiple branches' '
 	test modified = "$(git show HEAD:file)"
 '
 
+test_expect_success '--rebase --no-autostash fails with dirty working directory' '
+	test_config rebase.autostash true &&
+	git reset --hard before-rebase &&
+	echo dirty >new_file &&
+	git add new_file &&
+	test_must_fail git pull --rebase --no-autostash . copy
+'
+
 test_expect_success 'pull --rebase succeeds with dirty working directory and rebase.autostash set' '
 	test_config rebase.autostash true &&
 	git reset --hard before-rebase &&
diff --git a/t/t5521-pull-options.sh b/t/t5521-pull-options.sh
index 18372ca..22ff5d7 100755
--- a/t/t5521-pull-options.sh
+++ b/t/t5521-pull-options.sh
@@ -62,6 +62,30 @@ test_expect_success 'git pull -v --rebase' '
 	test_must_be_empty out)
 '
 
+test_expect_success 'git pull --rebase --no-autostash' '
+	mkdir clonedrbnas &&
+	(cd clonedrbnas  && git init &&
+	git pull --rebase --no-autostash "../parent" >out 2>err &&
+	test -s err &&
+	test_must_be_empty out)
+'
+
+test_expect_success 'git pull -q --rebase --no-autostash' '
+	mkdir clonedqrbnas &&
+	(cd clonedqrbnas  && git init &&
+	git pull -q --rebase --no-autostash "../parent" >out 2>err &&
+	test_must_be_empty err &&
+	test_must_be_empty out)
+'
+
+test_expect_success 'git pull -v --rebase --no-autostash' '
+	mkdir clonedvrbnas &&
+	(cd clonedvrbnas && git init &&
+	git pull -v --rebase --no-autostash "../parent" >out 2>err &&
+	test -s err &&
+	test_must_be_empty out)
+'
+
 test_expect_success 'git pull -v -q' '
 	mkdir clonedvq &&
 	(cd clonedvq && git init &&
-- 
2.7.1.340.g69eb491.dirty

  reply	other threads:[~2016-02-26 11:25 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-26 11:23 [GSoC] Microproject :- Teaching git pull --rebase the --no-autostash flag Mehul Jain
2016-02-26 11:23 ` Mehul Jain [this message]
2016-02-26 12:47   ` [PATCH] Add --no-autostash flag to git pull --rebase Paul Tan
2016-02-26 17:09     ` Mehul Jain
2016-02-26 11:51 ` [GSoC] Microproject :- Teaching git pull --rebase the --no-autostash flag Paul Tan
2016-02-26 12:05   ` Mehul Jain
2016-02-26 13:16 ` Matthieu Moy
2016-02-26 19:17   ` Philip Oakley

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=1456485825-21309-2-git-send-email-mehul.jain2029@gmail.com \
    --to=mehul.jain2029@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=me@ikke.info \
    --cc=pyokagan@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).