Comments
Patch
@@ -28,6 +28,11 @@ Configs::
# the local directory to store lfs files for sharing across local clones.
# If not set, the cache is located in an OS specific cache location.
usercache = /path/to/global/cache
+
+ [experimental]
+ # Some servers will check the User-Agent header, and send back html if it
+ # doesn't look like a git client. Set this to True to masquerade as git.
+ lfs.git-user-agent = True
"""
from __future__ import absolute_import
@@ -63,6 +68,10 @@ testedwith = 'ships-with-hg-core'
configtable = {}
configitem = registrar.configitem(configtable)
+configitem('experimental', 'lfs.git-user-agent',
+ default=False,
+)
+
configitem('lfs', 'url',
default=configitem.dynamicdefault,
)
@@ -101,7 +101,10 @@ class _gitlfsremote(object):
self.ui = ui
baseurl, authinfo = url.authinfo()
self.baseurl = baseurl.rstrip('/')
- self.urlopener = urlmod.opener(ui, authinfo)
+ useragent = None
+ if repo.ui.configbool('experimental', 'lfs.git-user-agent'):
+ useragent = 'git/2.15.1 mercurial/%s' % util.version()
+ self.urlopener = urlmod.opener(ui, authinfo, useragent)
self.retry = ui.configint('lfs', 'retry')
def writebatch(self, pointers, fromstore):
@@ -466,7 +466,7 @@ class cookiehandler(urlreq.basehandler):
handlerfuncs = []
-def opener(ui, authinfo=None):
+def opener(ui, authinfo=None, useragent=None):
'''
construct an opener suitable for urllib2
authinfo will be added to the password manager
@@ -512,8 +512,14 @@ def opener(ui, authinfo=None):
# own distribution name. Since servers should not be using the user
# agent string for anything, clients should be able to define whatever
# user agent they deem appropriate.
- agent = 'mercurial/proto-1.0 (Mercurial %s)' % util.version()
- opener.addheaders = [(r'User-agent', pycompat.sysstr(agent))]
+ #
+ # The custom user agent is for lfs, because unfortunately some servers
+ # do look at this value.
+ if not useragent:
+ agent = 'mercurial/proto-1.0 (Mercurial %s)' % util.version()
+ opener.addheaders = [(r'User-agent', pycompat.sysstr(agent))]
+ else:
+ opener.addheaders = [(r'User-agent', pycompat.sysstr(useragent))]
# This header should only be needed by wire protocol requests. But it has
# been sent on all requests since forever. We keep sending it for backwards