Re: [PATCH v4 4/7] remote rename/remove: handle branch.<name>.pushRemote config values

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

 



Hi Bert,

On Fri, 24 Jan 2020, Bert Wesarg wrote:

> When renaming or removing a remote with
>
>     git remote rename X Y
>     git remote remove X
>
> Git already renames/removes any config values from
>
>     branch.<name>.remote = X
>
> to
>
>     branch.<name>.remote = Y
>
> As branch.<name>.pushRemote also names a remote, it now also renames
> or removes these config values from
>
>     branch.<name>.pushRemote = X
>
> to
>
>     branch.<name>.pushRemote = Y
>
> Signed-off-by: Bert Wesarg <bert.wesarg@xxxxxxxxxxxxxx>
>
> ---

This commit seems to cause a failure in t5505:
https://dev.azure.com/gitgitgadget/git/_build/results?buildId=27833&view=ms.vss-test-web.build-test-results-tab

Here is the excerpt of the log:

-- snip --
[...]
expecting success of 5505.15 'show':
	(
		cd test &&
		git config --add remote.origin.fetch refs/heads/master:refs/heads/upstream &&
		git fetch &&
		git checkout -b ahead origin/master &&
		echo 1 >>file &&
		test_tick &&
		git commit -m update file &&
		git checkout master &&
		git branch --track octopus origin/master &&
		git branch --track rebase origin/master &&
		git branch -d -r origin/master &&
		git config --add remote.two.url ../two &&
		git config --add remote.two.pushurl ../three &&
		git config branch.rebase.rebase true &&
		git config branch.octopus.merge "topic-a topic-b topic-c" &&
		(
			cd ../one &&
			echo 1 >file &&
			test_tick &&
			git commit -m update file
		) &&
		git config --add remote.origin.push : &&
		git config --add remote.origin.push refs/heads/master:refs/heads/upstream &&
		git config --add remote.origin.push +refs/tags/lastbackup &&
		git config --add remote.two.push +refs/heads/ahead:refs/heads/master &&
		git config --add remote.two.push refs/heads/master:refs/heads/another &&
		git remote show origin two >output &&
		git branch -d rebase octopus &&
		test_i18ncmp expect output
	)

+ cd test
+ git config --add remote.origin.fetch refs/heads/master:refs/heads/upstream
+ git fetch
>From /home/virtualbox/git/t/trash directory.t5505-remote/one
 * [new branch]      master     -> upstream
+ git checkout -b ahead origin/master
Switched to a new branch 'ahead'
Branch 'ahead' set up to track remote branch 'master' from 'origin'.
+ echo 1
+ test_tick
+ test -z
+ test_tick=1112911993
+ GIT_COMMITTER_DATE=1112911993 -0700
+ GIT_AUTHOR_DATE=1112911993 -0700
+ export GIT_COMMITTER_DATE GIT_AUTHOR_DATE
+ git commit -m update file
[ahead 847549e] update
 Author: A U Thor <author@xxxxxxxxxxx>
 1 file changed, 1 insertion(+)
+ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
+ git branch --track octopus origin/master
Branch 'octopus' set up to track remote branch 'master' from 'origin'.
+ git branch --track rebase origin/master
Branch 'rebase' set up to track remote branch 'master' from 'origin'.
+ git branch -d -r origin/master
Deleted remote-tracking branch origin/master (was 9d34b14).
+ git config --add remote.two.url ../two
+ git config --add remote.two.pushurl ../three
+ git config branch.rebase.rebase true
+ git config branch.octopus.merge topic-a topic-b topic-c
+ cd ../one
+ echo 1
+ test_tick
+ test -z set
+ test_tick=1112912053
+ GIT_COMMITTER_DATE=1112912053 -0700
+ GIT_AUTHOR_DATE=1112912053 -0700
+ export GIT_COMMITTER_DATE GIT_AUTHOR_DATE
+ git commit -m update file
[master 6329a3c] update
 Author: A U Thor <author@xxxxxxxxxxx>
 1 file changed, 1 insertion(+)
+ git config --add remote.origin.push :
+ git config --add remote.origin.push refs/heads/master:refs/heads/upstream
+ git config --add remote.origin.push +refs/tags/lastbackup
+ git config --add remote.two.push +refs/heads/ahead:refs/heads/master
+ git config --add remote.two.push refs/heads/master:refs/heads/another
+ git remote show origin two
error: src refspec refs/tags/lastbackup does not match any
+ git branch -d rebase octopus
Deleted branch rebase (was 9d34b14).
Deleted branch octopus (was 9d34b14).
+ test_i18ncmp expect output
+ test_have_prereq C_LOCALE_OUTPUT
+ save_IFS=

+ IFS=,
+ set -- C_LOCALE_OUTPUT
+ IFS=

+ total_prereq=0
+ ok_prereq=0
+ missing_prereq=
+ negative_prereq=
+ total_prereq=1
+ satisfied_this_prereq=t
+ ok_prereq=1
+ test 1 = 1
+ test_cmp expect output
+ diff -u expect output
--- expect	2020-01-25 00:44:41.496720000 +0000
+++ output	2020-01-25 00:44:43.513861900 +0000
@@ -5,13 +5,6 @@
   Remote branches:
     master new (next fetch will store in remotes/origin)
     side   tracked
-  Local branches configured for 'git pull':
-    ahead    merges with remote master
-    master   merges with remote master
-    octopus  merges with remote topic-a
-                and with remote topic-b
-                and with remote topic-c
-    rebase  rebases onto remote master
   Local refs configured for 'git push':
     master pushes to master   (local out of date)
     master pushes to upstream (create)
error: last command exited with $?=1
not ok 15 - show
#
#		(
#			cd test &&
#			git config --add remote.origin.fetch refs/heads/master:refs/heads/upstream &&
#			git fetch &&
#			git checkout -b ahead origin/master &&
#			echo 1 >>file &&
#			test_tick &&
#			git commit -m update file &&
#			git checkout master &&
#			git branch --track octopus origin/master &&
#			git branch --track rebase origin/master &&
#			git branch -d -r origin/master &&
#			git config --add remote.two.url ../two &&
#			git config --add remote.two.pushurl ../three &&
#			git config branch.rebase.rebase true &&
#			git config branch.octopus.merge "topic-a topic-b topic-c" &&
#			(
#				cd ../one &&
#				echo 1 >file &&
#				test_tick &&
#				git commit -m update file
#			) &&
#			git config --add remote.origin.push : &&
#			git config --add remote.origin.push refs/heads/master:refs/heads/upstream &&
#			git config --add remote.origin.push +refs/tags/lastbackup &&
#			git config --add remote.two.push +refs/heads/ahead:refs/heads/master &&
#			git config --add remote.two.push refs/heads/master:refs/heads/another &&
#			git remote show origin two >output &&
#			git branch -d rebase octopus &&
#			test_i18ncmp expect output
#		)
#
-- snap --

Could you have a look to see whether the code or the test need to be
adjusted?

Thanks,
Dscho

>
> Changes since v3:
>
>  * handle also 'git remote remove'
>
> Cc: Junio C Hamano <gitster@xxxxxxxxx>
> Cc: Johannes Schindelin <johannes.schindelin@xxxxxx>
> ---
>  builtin/remote.c  | 22 +++++++++++++++++++++-
>  t/t5505-remote.sh | 16 +++++++++++++++-
>  2 files changed, 36 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/remote.c b/builtin/remote.c
> index 9ee44c9f6c..a2379a14bf 100644
> --- a/builtin/remote.c
> +++ b/builtin/remote.c
> @@ -250,6 +250,7 @@ struct branch_info {
>  	char *remote_name;
>  	struct string_list merge;
>  	enum rebase_type rebase;
> +	char *push_remote_name;
>  };
>
>  static struct string_list branch_list = STRING_LIST_INIT_NODUP;
> @@ -267,7 +268,7 @@ static int config_read_branches(const char *key, const char *value, void *cb)
>  	char *name;
>  	struct string_list_item *item;
>  	struct branch_info *info;
> -	enum { REMOTE, MERGE, REBASE } type;
> +	enum { REMOTE, MERGE, REBASE, PUSH_REMOTE } type;
>  	size_t key_len;
>
>  	if (!starts_with(key, "branch."))
> @@ -280,6 +281,8 @@ static int config_read_branches(const char *key, const char *value, void *cb)
>  		type = MERGE;
>  	else if (strip_suffix(key, ".rebase", &key_len))
>  		type = REBASE;
> +	else if (strip_suffix(key, ".pushremote", &key_len))
> +		type = PUSH_REMOTE;
>  	else
>  		return 0;
>  	name = xmemdupz(key, key_len);
> @@ -315,6 +318,11 @@ static int config_read_branches(const char *key, const char *value, void *cb)
>  		 */
>  		info->rebase = rebase_parse_value(value);
>  		break;
> +	case PUSH_REMOTE:
> +		if (info->push_remote_name)
> +			warning(_("more than one %s"), orig_key);
> +		info->push_remote_name = xstrdup(value);
> +		break;
>  	default:
>  		BUG("unexpected type=%d", type);
>  	}
> @@ -682,6 +690,11 @@ static int mv(int argc, const char **argv)
>  			strbuf_addf(&buf, "branch.%s.remote", item->string);
>  			git_config_set(buf.buf, rename.new_name);
>  		}
> +		if (info->push_remote_name && !strcmp(info->push_remote_name, rename.old_name)) {
> +			strbuf_reset(&buf);
> +			strbuf_addf(&buf, "branch.%s.pushremote", item->string);
> +			git_config_set(buf.buf, rename.new_name);
> +		}
>  	}
>
>  	if (!refspec_updated)
> @@ -783,6 +796,13 @@ static int rm(int argc, const char **argv)
>  					die(_("could not unset '%s'"), buf.buf);
>  			}
>  		}
> +		if (info->push_remote_name && !strcmp(info->push_remote_name, remote->name)) {
> +			strbuf_reset(&buf);
> +			strbuf_addf(&buf, "branch.%s.pushremote", item->string);
> +			result = git_config_set_gently(buf.buf, NULL);
> +			if (result && result != CONFIG_NOTHING_SET)
> +				die(_("could not unset '%s'"), buf.buf);
> +		}
>  	}
>
>  	/*
> diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
> index 883b32efa0..082042b05a 100755
> --- a/t/t5505-remote.sh
> +++ b/t/t5505-remote.sh
> @@ -737,12 +737,14 @@ test_expect_success 'rename a remote' '
>  	git clone one four &&
>  	(
>  		cd four &&
> +		git config branch.master.pushRemote origin &&
>  		git remote rename origin upstream &&
>  		test -z "$(git for-each-ref refs/remotes/origin)" &&
>  		test "$(git symbolic-ref refs/remotes/upstream/HEAD)" = "refs/remotes/upstream/master" &&
>  		test "$(git rev-parse upstream/master)" = "$(git rev-parse master)" &&
>  		test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*" &&
> -		test "$(git config branch.master.remote)" = "upstream"
> +		test "$(git config branch.master.remote)" = "upstream" &&
> +		test "$(git config branch.master.pushRemote)" = "upstream"
>  	)
>  '
>
> @@ -784,6 +786,18 @@ test_expect_success 'rename succeeds with existing remote.<target>.prune' '
>  	git -C four.four remote rename origin upstream
>  '
>
> +test_expect_success 'remove a remote' '
> +	git clone one four.five &&
> +	(
> +		cd four.five &&
> +		git config branch.master.pushRemote origin &&
> +		git remote remove origin &&
> +		test -z "$(git for-each-ref refs/remotes/origin)" &&
> +		test_must_fail git config branch.master.remote &&
> +		test_must_fail git config branch.master.pushRemote
> +	)
> +'
> +
>  cat >remotes_origin <<EOF
>  URL: $(pwd)/one
>  Push: refs/heads/master:refs/heads/upstream
> --
> 2.24.1.497.g9abd7b20b4.dirty
>
>




[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