git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Apr 20, 2014, 18:12 UTC
Message-ID
<53540df5ad0fb_18fb153d2ec8b@nysa.notmuch>
In-Reply-To
<CANNJ_zjVaymTUmSSFHfSpmcH7H2v62nsHaUoxRfi098zqLi_Ow@mail.gmail.com>
Delcypher wrote:
Show 100 quoted lines
> > 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.
This is what I get:
% git pull                                                                                                          /tmp/boogie[master] nysa
searching for changes
no changes found
Already up-to-date.
 % cat > .git/hg/origin/clone/.hg/hgrc <<EOF
[ui]
quiet = True
EOF
 % git pull                                                                                                          /tmp/boogie[master] nysa
Already up-to-date.
So clearly there is something different on my side.
What version of Mercurial are you using?
-- 
Felipe Contreras
Previous: DelcypherNext: Delcypher
Message 5 of 10 in “git-remote-hg : Enable use of, $GIT_DIR/hg/origin/clone/.hg/hgrc”
  1. git-remote-hg : Enable use of, $GIT_DIR/hg/origin/clone/.hg/hgrcDaniel Liew, Feb 21, 2014
  2. DelcypherMar 24, 2014
  3. Felipe ContrerasApr 12, 2014
  4. DelcypherApr 15, 2014
  5. Felipe ContrerasApr 20, 2014
  6. DelcypherApr 20, 2014
  7. Felipe ContrerasApr 20, 2014
  8. DelcypherApr 20, 2014
  9. Felipe ContrerasApr 20, 2014
  10. DelcypherApr 20, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.