[PATCH] url: add distribution and version to user-agent request header (BC)

Gregory Szorc gregory.szorc at gmail.com
Thu Jul 14 14:04:50 EDT 2016


On Thu, Jul 14, 2016 at 10:48 AM, Augie Fackler <raf at durin42.com> wrote:

> On Wed, Jul 13, 2016 at 10:18:26PM -0700, Gregory Szorc wrote:
> > # HG changeset patch
> > # User Gregory Szorc <gregory.szorc at gmail.com>
> > # Date 1468473406 25200
> > #      Wed Jul 13 22:16:46 2016 -0700
> > # Node ID 6ad61d5001b1fbfebf317d0557f158d4b34a0772
> > # Parent  52433f89f816e21ca992ac8c4a41cba0345f1b73
> > url: add distribution and version to user-agent request header (BC)
>
> It's actually intentional that we don't advertise hg version in either
> direction to my recollection.


Do you know why?


> That said, I have been meaning to write
> a patch like this (but with it behind a config knob) so that big
> companies can track how many versions of hg are in use. Can you do a
> v2 with this off by default behind a config knob?
>

I /can/. But I'm not thrilled about making it optional because open source
projects (like Mozilla) don't have a good way of force turning it on :/


>
> >
> > As a server operator, I've always wanted to know what Mercurial
> > version clients are running. Unfortunately, there is no easy
> > way to discern this today: the best you can do is sniff capabilities
> > from getbundle commands and those aren't updated frequently enough
> > to tell you anything that interesting.
> >
> > This patch adds the distribution name and version to the user-agent
> > HTTP request header. We choose "Mercurial" for the distribution
> > name because that seems appropriate. The version string comes
> > from __version__. It should have no spaces and should therefore be
> > safe to include outside of quotes, parenthesis, etc.
> >
> > Flagging the patch as BC so it shows up in release notes. This
> > change should be backwards compatible. But I'm sure there is a server
> > operator somewhere filtering on the existing user-agent request
> > header. So I want to make noise about this change.
> >
> > diff --git a/mercurial/url.py b/mercurial/url.py
> > --- a/mercurial/url.py
> > +++ b/mercurial/url.py
> > @@ -500,18 +500,22 @@ def opener(ui, authinfo=None):
> >          ui.debug('http auth: user %s, password %s\n' %
> >                   (user, passwd and '*' * len(passwd) or 'not set'))
> >
> >      handlers.extend((httpbasicauthhandler(passmgr),
> >                       httpdigestauthhandler(passmgr)))
> >      handlers.extend([h(ui, passmgr) for h in handlerfuncs])
> >      opener = urlreq.buildopener(*handlers)
> >
> > -    # 1.0 here is the _protocol_ version
> > -    opener.addheaders = [('User-agent', 'mercurial/proto-1.0')]
> > +    opener.addheaders = [('User-agent',
> > +                          # 1.0 here is the _protocol_ version
> > +                          # "Mercurial/%s" identifies the distribution
> name
> > +                          # and version. Other implementations of the
> client
> > +                          # should choose a different name.
> > +                          'mercurial/proto-1.0 Mercurial/%s' %
> util.version())]
> >      opener.addheaders.append(('Accept', 'application/mercurial-0.1'))
> >      return opener
> >
> >  def open(ui, url_, data=None):
> >      u = util.url(url_)
> >      if u.scheme:
> >          u.scheme = u.scheme.lower()
> >          url_, authinfo = u.authinfo()
> > _______________________________________________
> > Mercurial-devel mailing list
> > Mercurial-devel at mercurial-scm.org
> > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20160714/c01615f2/attachment.html>


More information about the Mercurial-devel mailing list