Rob Hoelz wrote:
> --- a/remote.c
> +++ b/remote.c
> @@ -465,7 +465,11 @@ static void alias_all_urls(void)
> if (!remotes[i])
> continue;
> for (j = 0; j < remotes[i]->pushurl_nr; j++) {
> - remotes[i]->pushurl[j] =
> alias_url(remotes[i]->pushurl[j], &rewrites);
> + char *copy = xstrdup(remotes[i]->pushurl[j]);
> + remotes[i]->pushurl[j] =
> alias_url(remotes[i]->pushurl[j], &rewrites_push);
> + if (!strcmp(copy, remotes[i]->pushurl[j]))
> + remotes[i]->pushurl[j] =
> alias_url(remotes[i]->pushurl[j], &rewrites);
> + free(copy);
Interesting.
Suppose I configure
[url "git://anongit.myserver.example.com/"]
insteadOf = myserver.example.com:
[url "myserver:"]
pushInsteadOf = myserver.example.com:
The above code would make the insteadOf rule apply instead of
pushInsteadOf, even when pushing. Perhaps something like the
following would work?
const char *url = remotes[i]->pushurl[j];
remotes[i]->pushurl[j] = alias_url(url, &rewrites_push);
if (remotes[i]->pushurl[j] == url)
/* No url.*.pushinsteadof configuration
matched. */
remotes[i]->pushurl[j] = alias_url(url,
&rewrites);
> --- a/t/t5516-fetch-push.sh
> +++ b/t/t5516-fetch-push.sh
> @@ -244,6 +244,83 @@ test_expect_success 'push with pushInsteadOf and
> explicit pushurl (pushInsteadOf
> )
> '
>
> +test_expect_success 'push with pushInsteadOf and explicit pushurl (pushurl +
> pushInsteadOf does rewrite in this case)' '
> + mk_empty &&
> + rm -rf ro rw &&
> + TRASH="$(pwd)/" &&
> + mkdir ro &&
> + mkdir rw &&
> + git init --bare rw/testrepo &&
> + test_config "url.file://$TRASH/ro/.insteadOf" ro: &&
> + test_config "url.file://$TRASH/rw/.pushInsteadOf" rw: &&
> + test_config remote.r.url ro:wrong &&
> + test_config remote.r.pushurl rw:testrepo &&
> + git push r refs/heads/master:refs/remotes/origin/master &&
> + (
> + cd rw/testrepo &&
> + echo "$the_commit commit refs/remotes/origin/master" >
> expected &&
> + git for-each-ref refs/remotes/origin > actual &&
> + test_cmp expected actual
> + )
Looks good. The usual style in git tests is to include no space
after >redirection operators:
git for-each-ref refs/remotes/origin >actual &&
Hope that helps,
Jonathan
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html