Re: [PATCH] git-remote-hg : Enable use of, $GIT_DIR/hg/origin/clone/.hg/hgrc

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

 



> What is the problem you are trying to solve?
The problem I was trying to solve is I wanted my authentication
details to be in a hgrc local to the repository.

The problem is git-remote-hg will parse
``.git/hg/origin/clone/.hg/hgrc`` but will ignore any settings in it
(this seems a little silly).
You can see that git-remote-hg parses this by placing invalid syntax
in the file.

> Is there a way to test that this
> code is working correctly?

The effects are much more obvious if you use a mercurial repository
that uses https and then you try to push to it with authentication
details in ``.git/hg/origin/clone/.hg/hgrc``. For example

[auth]
cc.prefix = hg.codeplex.com
cc.username = USERNAME
cc.password = PASSWORD
cc.schemes = https

pushing will fail because the authorisation details get completely
ignored and you will get an exception raised with a stack trace like
this...

Traceback (most recent call last):
  File "/home/dsl11/dev/git-remote-hg/git-remote-hg", line 1254, in <module>
    sys.exit(main(sys.argv))
  File "/home/dsl11/dev/git-remote-hg/git-remote-hg", line 1238, in main
    do_export(parser)
  File "/home/dsl11/dev/git-remote-hg/git-remote-hg", line 1119, in do_export
    if not push(parser.repo, peer, parsed_refs, p_revs):
  File "/home/dsl11/dev/git-remote-hg/git-remote-hg", line 1007, in push
    ret = push_unsafe(repo, remote, parsed_refs, p_revs)
  File "/home/dsl11/dev/git-remote-hg/git-remote-hg", line 990, in push_unsafe
    return remote.unbundle(cg, remoteheads, 'push')
  File "/usr/lib/python2.7/site-packages/mercurial/wireproto.py", line
308, in unbundle
    ret, output = self._callpush("unbundle", cg, heads=heads)
  File "/usr/lib/python2.7/site-packages/mercurial/httppeer.py", line
201, in _callpush
    r = self._call(cmd, data=fp, headers=headers, **args)
  File "/usr/lib/python2.7/site-packages/mercurial/httppeer.py", line
171, in _call
    fp = self._callstream(cmd, **args)
  File "/usr/lib/python2.7/site-packages/mercurial/httppeer.py", line
118, in _callstream
    resp = self.urlopener.open(req)
  File "/usr/lib/python2.7/urllib2.py", line 410, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 442, in error
    result = self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 897, in http_error_401
    url, req, headers)
  File "/usr/lib/python2.7/site-packages/mercurial/url.py", line 436,
in http_error_auth_reqed
    self, auth_header, host, req, headers)
  File "/usr/lib/python2.7/urllib2.py", line 872, in http_error_auth_reqed
    response = self.retry_http_basic_auth(host, req, realm)
  File "/usr/lib/python2.7/urllib2.py", line 878, in retry_http_basic_auth
    user, pw = self.passwd.find_user_password(realm, host)
  File "/usr/lib/python2.7/site-packages/mercurial/url.py", line 36,
in find_user_password
    raise util.Abort(_('http authorization required'))
mercurial.error.Abort: http authorization required


However, if you don't have a repository to hand you could also do the
following to observe the settings in the repository's hgrc being
respected

1. Clone a repository
$ git clone hg::https://hg.codeplex.com/boogie

2. Add setting to ``.git/hg/origin/clone/.hg/hgrc``

[ui]
quiet = True

3. With the current of git-remote-hg, when you do a pull you see

$ git pull
searching for changes
no changes found
Already up-to-date.

You can see that "quiet" is **not** being respected. If use my patch
to git-remote-hg and run again you see


$ git pull
Already up-to-date.

which shows "quiet" being respected.

>> Prior to this patch the mercurial repository's hgrc file was ignored
>> which I consider to be a bug.
>
> It might be, although the internal repository is not supposed to be used by the
> user.
>
>> Signed-off-by: Dan Liew <delcypher@xxxxxxxxx>
>> ---
>>  contrib/remote-helpers/git-remote-hg | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/contrib/remote-helpers/git-remote-hg
>> b/contrib/remote-helpers/git-remote-hg
>> index eb89ef6..451842a 100755
>> --- a/contrib/remote-helpers/git-remote-hg
>> +++ b/contrib/remote-helpers/git-remote-hg
>> @@ -421,7 +421,7 @@ def get_repo(url, alias):
>>
>>          repo = hg.repository(myui, local_path)
>>          try:
>> -            peer = hg.peer(myui, {}, url)
>> +            peer = hg.peer(repo._unfilteredrepo.ui, {}, url)
>
> Why not repo.unfiltered.ui? Or just repo.ui.

using repo.unfiltered.ui makes git-remote-hg return "ERROR: Repository error"

Using "repo.ui" works correctly. I simply did not know that was there
because I was debugging using PyDev in Eclipse and I could only find a
ui object in repo.unfiltered.ui. PyDev does not show "repo.ui" but it
clearly works so using repo.ui is probably better than
repo._unfilteredrepo.ui

Thanks,
Dan Liew.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[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]