Re: [BUG] Possible bug in `remote set-url --add --push`

2013-01-14 Thread Jardel Weyrich
On 14/01/2013, at 17:09, Junio C Hamano gits...@pobox.com wrote:

 Michael J Gruber g...@drmicha.warpmail.net writes:
 
 It seems to me that everything works as designed, and that the man page
 talk about push URLs can be read in two ways,...
 
 Hmph, but I had an impression that Jardel's original report was that
 one of the --add --pushurl was not adding but was replacing.  If
 that was a false alarm, everything you said makes sense to me.
 
 Thanks.

I failed to explain my reasoning. But I learned quite a bit from this 
discussion. I understood that the defaul push url is not used by git-push when 
there's at least one pushurl for a given remote.

If that's by design, I still fail to comprehend the exact reason.
If you allow me, I'd like you to forget about the concepts for a minute, and 
focus on the user experience.
Imagine a simple hypothetical scenario in which the user wants to push to 2 
distinct repositories. He already has cloned the repo from the 1st repository, 
thus (theoretically) all he needs to do, is to add a new repository for push. 
He then uses `remote set-url --add --push 2nd-repo` (which I personally 
thought would suffice). However, if he tries to push a new commit to this 
remote, it would be pushed _only_ to the 2nd-repo.

This is exactly what I thought to be a bug. If it's intended to work the way I 
described in the previous scenario, I'll have to ask and/or research to 
understand the reason behind this -- Why does having a pushurl make git-push 
_not_ to push to the default push location (the 1st repo in my scenario) as 
well? Could you describe a scenario in which that behavior is useful and/or 
better than the behavior I expected?

Please, pardon me for not being as clear as needed. I appreciate your time on 
this. Thank you all.

Sent from my mobile.--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [BUG] Possible bug in `remote set-url --add --push`

2013-01-12 Thread Jardel Weyrich
Step 1:

jweyrich@pharao:test_clone1 [* master]$ git remote -v
origin /Volumes/sandbox/test (fetch)
origin /Volumes/sandbox/test (push)

jweyrich@pharao:test_clone1 [* master]$ git config -l | grep '^remote\.origin'
remote.origin.url=/Volumes/sandbox/test
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

Step 3:

jweyrich@pharao:test_clone1 [* master]$ git remote set-url --add
--push origin /Volumes/sandbox/test_clone2
origin /Volumes/sandbox/test (fetch)
origin /Volumes/sandbox/test_clone2/ (push)

jweyrich@pharao:test_clone1 [* master]$ git config -l | grep '^remote\.origin'
remote.origin.url=/Volumes/sandbox/test
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.pushurl=/Volumes/sandbox/test_clone2/


After that, if I do a commit in test_clone1 and try to push to origin,
it pushes only to the test_clone2 rather than pushing to both test and
test_clone2 (it's a bare repo, sorry for using a misleading name).

Is `remote.remote_name.pushurl` required for the primary URL as
well? If not, then git-push is not handling that information as it
should.

On Sat, Jan 12, 2013 at 5:10 AM, Junio C Hamano gits...@pobox.com wrote:
 Jardel Weyrich jweyr...@gmail.com writes:

 I believe `remote set-url --add --push` has a bug. Performed tests
 with v1.8.0.1 and v1.8.1 (Mac OS X).

 Quoting the relevant part of the documentation:

 set-url
 Changes URL remote points to. Sets first URL remote points to matching 
 regex oldurl (first URL if no oldurl is given) to newurl. If oldurl 
 doesn’t match any URL, error occurs and nothing is changed.

 With --push, push URLs are manipulated instead of fetch URLs.
 With --add, instead of changing some URL, new URL is added.
 With --delete, instead of changing some URL, all URLs matching regex 
 url are deleted. Trying to delete all non-push URLs is an error.

 Here are some steps to reproduce:

 1. Show the remote URLs

 jweyrich@pharao:test_clone1 [* master]$ git remote -v
 origin  /Volumes/sandbox/test (fetch)
 origin  /Volumes/sandbox/test (push)

 2. Add a new push URL for origin

 jweyrich@pharao:test_clone1 [* master]$ git remote set-url --add --push 
 origin \
 /Volumes/sandbox/test_clone2

 3. Check what happened

 jweyrich@pharao:test_clone1 [* master]$ git remote -v
 origin  /Volumes/sandbox/test (fetch)
 origin  /Volumes/sandbox/test_clone2 (push)

 The original pushurl was replaced with the additional one, instead
 of being left and the new one getting added.  That looks certainly
 wrong.

 However, the result of applying the attached patch (either to
 v1.7.12 or v1.8.1) still passes the test and I do not think it is
 doing anything differently from what you described above.

 What do you get from

 git config -l | grep '^remote\.origin'

 in steps 1. and 3. in your procedure?  This question is trying to
 tell if your bug is in git remote -v or in git remote set-url.

 -- 8 --
 From 0f6cbc67db926e97707ae732b02e790b4604508e Mon Sep 17 00:00:00 2001
 From: Junio C Hamano gits...@pobox.com
 Date: Fri, 11 Jan 2013 23:04:16 -0800
 Subject: [PATCH] t5505: adding one pushurl from jweyrich

 Signed-off-by: Junio C Hamano gits...@pobox.com
 ---
  t/t5505-remote.sh | 19 +++
  1 file changed, 19 insertions(+)

 diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
 index c03ffdd..b31c5bb 100755
 --- a/t/t5505-remote.sh
 +++ b/t/t5505-remote.sh
 @@ -901,6 +901,25 @@ test_expect_success 'remote set-url --push --add aaa' '
 cmp expect actual
  '

 +test_expect_success 'remote set-url --push --add' '
 +   git config remote.jweyrich.url /Volumes/sandbox/test 
 +   git config remote.jweyrich.pushurl /Volumes/sandbox/test 
 +   git config remote.jweyrich.fetch 
 refs/heads/*:refs/remotes/jweyrich/* 
 +
 +   added=/Volumes/sandbox/test_clone2 
 +   {
 +   git config -l | grep ^remote\.jweyrich\. 
 +   echo remote.jweyrich.pushurl=$added
 +   } | sort expect 
 +
 +   git remote set-url --add --push jweyrich $added 
 +   git config -l | grep ^remote\.jweyrich\. | sort actual 
 +
 +   test_cmp expect actual 
 +
 +   git remote -v | grep ^jweyrich # this is just for debugging
 +'
 +
  test_expect_success 'remote set-url --push bar aaa' '
 git remote set-url --push someremote bar aaa 
 echo foo expect 
 --
 1.8.1.421.g6236851
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [BUG] Possible bug in `remote set-url --add --push`

2013-01-12 Thread Jardel Weyrich
On Sat, Jan 12, 2013 at 6:44 AM, Sascha Cunz sascha...@babbelbox.org wrote:
 Am Freitag, 11. Januar 2013, 23:10:36 schrieb Junio C Hamano:
 Jardel Weyrich jweyr...@gmail.com writes:
  I believe `remote set-url --add --push` has a bug. Performed tests
  with v1.8.0.1 and v1.8.1 (Mac OS X).
 
  Quoting the relevant part of the documentation:
  set-url
 
  Changes URL remote points to. Sets first URL remote points to
  matching regex oldurl (first URL if no oldurl is given) to
  newurl. If oldurl doesn’t match any URL, error occurs and
  nothing is changed.
 
  With --push, push URLs are manipulated instead of fetch URLs.
  With --add, instead of changing some URL, new URL is added.
  With --delete, instead of changing some URL, all URLs matching regex
  url are deleted. Trying to delete all non-push URLs is an error.
  Here are some steps to reproduce:
 
  1. Show the remote URLs
 
  jweyrich@pharao:test_clone1 [* master]$ git remote -v
  origin  /Volumes/sandbox/test (fetch)
  origin  /Volumes/sandbox/test (push)
 
  2. Add a new push URL for origin
 
  jweyrich@pharao:test_clone1 [* master]$ git remote set-url --add --push
  origin \
  /Volumes/sandbox/test_clone2
 
  3. Check what happened
 
  jweyrich@pharao:test_clone1 [* master]$ git remote -v
  origin  /Volumes/sandbox/test (fetch)
  origin  /Volumes/sandbox/test_clone2 (push)

 The original pushurl was replaced with the additional one, instead
 of being left and the new one getting added.  That looks certainly
 wrong.

 However, the result of applying the attached patch (either to
 v1.7.12 or v1.8.1) still passes the test and I do not think it is
 doing anything differently from what you described above.

 What do you get from

   git config -l | grep '^remote\.origin'

 in steps 1. and 3. in your procedure?  This question is trying to
 tell if your bug is in git remote -v or in git remote set-url.

 I'm not sure, if there is a bug at all. According to man git-push:

 The pushurl is used for pushes only. It is optional and defaults to
url.
 (From the section REMOTES - Named remote in configuration file)

 the command:
 git remote add foo g...@foo-fetch.org/some.git

 will set remote.foo.url to g...@foo-fetch.org. Subsequently, fetch and 
 push
 will use g...@foo-fetch.org as url.
 Fetch will use this url, because remote.foo.url explicitly sets this. push
 will use it in absence of a remote.foo.pushurl.

 Now, we're adding a push-url:
 git remote set-url --add --push foo g...@foo-push.org/some.git

 Relevant parts of config are now looking like:
 [remote foo]
 url = g...@foo-fetch.org/some.git
 pushurl = g...@foo-push.org/some.git

 Since, pushurl is now given explicitly, git push will use that one (and only
 that one).

 If we add another push-url now,
 git remote set-url --add --push foo g...@foo-push-also.org/some.git

 the next git-push will push to foo-push.org and foo-push-also.org.

 Now, using --set-url --delete on both of these urls restores the original
 state: only remote.foo.url is set; meaning implicitly pushurl defaults to
 url again.

 To me this is exactly what Jardel was observing:

 In step 2, Git replaced the original push URL instead of adding a new
 one. But it seems to happen only the first time I use `remote set-url
 --add --push`. Re-adding the original URL using the same command seems
 to work properly.

 And FWIW, if I delete (with set-url --delete) both URLs push, Git
 restores the original URL.

 Or am I missing something here?

You're right. However, as I quoted earlier, the git-remote man-page states:

   set-url
   Changes URL remote points to. suppressed
   With --push, push URLs are manipulated instead of fetch URLs.
   With --add, instead of changing some URL, new URL is added.

It explicitly mentions that it should **add a new URL**.
So when I do `git remote set-url --add --push origin
git://another/repo.git`, I expect git-push to use both the default
push URL and the new one. Or am I misinterpreting the man-page?


 Might be that the bug actually is that the expectation was

 git remote add foo g...@foo-fetch.org/some.git

 should have created a config like:

 [remote foo]
 url = g...@foo-fetch.org/some.git
 pushurl = g...@foo-fetch.org/some.git

 since that is what git remote -v reports.

 If that is the case, we might want to amend the output of 'git remote -v' with
 the information that a pushurl is not explicitly given and thus defaults to
 url.

Correct. Adding a remote doesn't automatically generate a pushurl for it.

To me, it seems that git-push checks for the existence of pushurl's in
the config, and if it finds any, it ignores the defaul push URL during
the actual push. In better words, it pushes only to pushurls, if it
finds any, otherwise it pushes to the default URL.

To comply with the statements in the git-remote man-page, git-remote
should add

[BUG] Possible bug in `remote set-url --add --push`

2013-01-11 Thread Jardel Weyrich
Hi,

I believe `remote set-url --add --push` has a bug. Performed tests
with v1.8.0.1 and v1.8.1 (Mac OS X).

Quoting the relevant part of the documentation:

 set-url
 Changes URL remote points to. Sets first URL remote points to matching 
 regex oldurl (first URL if no oldurl is given) to newurl. If oldurl 
 doesn’t match any URL, error occurs and nothing is changed.

 With --push, push URLs are manipulated instead of fetch URLs.
 With --add, instead of changing some URL, new URL is added.
 With --delete, instead of changing some URL, all URLs matching regex 
 url are deleted. Trying to delete all non-push URLs is an error.

Here are some steps to reproduce:

1. Show the remote URLs

jweyrich@pharao:test_clone1 [* master]$ git remote -v
origin  /Volumes/sandbox/test (fetch)
origin  /Volumes/sandbox/test (push)

2. Add a new push URL for origin

jweyrich@pharao:test_clone1 [* master]$ git remote set-url --add --push origin \
/Volumes/sandbox/test_clone2

3. Check what happened

jweyrich@pharao:test_clone1 [* master]$ git remote -v
origin  /Volumes/sandbox/test (fetch)
origin  /Volumes/sandbox/test_clone2 (push)

4. Missing an URL? Re-add the original one

jweyrich@pharao:test_clone1 [* master]$ git remote set-url --add --push origin \
/Volumes/sandbox/test

5. Check what happened, again

jweyrich@pharao:test_clone1 [* master]$ git remote -v
origin  /Volumes/sandbox/test (fetch)
origin  /Volumes/sandbox/test_clone2 (push)
origin  /Volumes/sandbox/test (push)

In step 2, Git replaced the original push URL instead of adding a new
one. But it seems to happen only the first time I use `remote set-url
--add --push`. Re-adding the original URL using the same command seems
to work properly.
And FWIW, if I delete (with set-url --delete) both URLs push, Git
restores the original URL.

Please, could someone try to reproduce?

- jw
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html