mirror of
https://gerrit.googlesource.com/git-repo
synced 2024-12-21 07:16:21 +00:00
move UserAgent to git_command for wider user
We can't import the main module, so move the UserAgent helper out of it and into the git_command module so it can be used in more places. Bug: https://crbug.com/gerrit/11144 Change-Id: I8093c8a20bd1dc7d612d0e2a85180341817c0d86 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/231057 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: David Pursehouse <dpursehouse@collab.net>
This commit is contained in:
parent
e37aa5f331
commit
369814b4a7
@ -98,6 +98,52 @@ class _GitCall(object):
|
|||||||
return fun
|
return fun
|
||||||
git = _GitCall()
|
git = _GitCall()
|
||||||
|
|
||||||
|
|
||||||
|
_user_agent = None
|
||||||
|
|
||||||
|
def RepoUserAgent():
|
||||||
|
"""Return a User-Agent string suitable for HTTP-like services.
|
||||||
|
|
||||||
|
We follow the style as documented here:
|
||||||
|
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent
|
||||||
|
"""
|
||||||
|
global _user_agent
|
||||||
|
|
||||||
|
if _user_agent is None:
|
||||||
|
py_version = sys.version_info
|
||||||
|
|
||||||
|
os_name = sys.platform
|
||||||
|
if os_name == 'linux2':
|
||||||
|
os_name = 'Linux'
|
||||||
|
elif os_name == 'win32':
|
||||||
|
os_name = 'Win32'
|
||||||
|
elif os_name == 'cygwin':
|
||||||
|
os_name = 'Cygwin'
|
||||||
|
elif os_name == 'darwin':
|
||||||
|
os_name = 'Darwin'
|
||||||
|
|
||||||
|
p = GitCommand(
|
||||||
|
None, ['describe', 'HEAD'],
|
||||||
|
cwd=os.path.dirname(__file__),
|
||||||
|
capture_stdout=True)
|
||||||
|
if p.Wait() == 0:
|
||||||
|
repo_version = p.stdout
|
||||||
|
if repo_version and repo_version[-1] == '\n':
|
||||||
|
repo_version = repo_version[0:-1]
|
||||||
|
if repo_version and repo_version[0] == 'v':
|
||||||
|
repo_version = repo_version[1:]
|
||||||
|
else:
|
||||||
|
repo_version = 'unknown'
|
||||||
|
|
||||||
|
_user_agent = 'git-repo/%s (%s) git/%s Python/%d.%d.%d' % (
|
||||||
|
repo_version,
|
||||||
|
os_name,
|
||||||
|
git.version_tuple().full,
|
||||||
|
py_version.major, py_version.minor, py_version.micro)
|
||||||
|
|
||||||
|
return _user_agent
|
||||||
|
|
||||||
|
|
||||||
def git_require(min_version, fail=False, msg=''):
|
def git_require(min_version, fail=False, msg=''):
|
||||||
git_version = git.version_tuple()
|
git_version = git.version_tuple()
|
||||||
if min_version <= git_version:
|
if min_version <= git_version:
|
||||||
|
48
main.py
48
main.py
@ -46,7 +46,7 @@ except ImportError:
|
|||||||
from color import SetDefaultColoring
|
from color import SetDefaultColoring
|
||||||
import event_log
|
import event_log
|
||||||
from repo_trace import SetTrace
|
from repo_trace import SetTrace
|
||||||
from git_command import git, GitCommand
|
from git_command import git, GitCommand, RepoUserAgent
|
||||||
from git_config import init_ssh, close_ssh
|
from git_config import init_ssh, close_ssh
|
||||||
from command import InteractiveCommand
|
from command import InteractiveCommand
|
||||||
from command import MirrorSafeCommand
|
from command import MirrorSafeCommand
|
||||||
@ -244,10 +244,6 @@ class _Repo(object):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def _MyRepoPath():
|
|
||||||
return os.path.dirname(__file__)
|
|
||||||
|
|
||||||
|
|
||||||
def _CheckWrapperVersion(ver, repo_path):
|
def _CheckWrapperVersion(ver, repo_path):
|
||||||
if not repo_path:
|
if not repo_path:
|
||||||
repo_path = '~/bin/repo'
|
repo_path = '~/bin/repo'
|
||||||
@ -299,51 +295,13 @@ def _PruneOptions(argv, opt):
|
|||||||
continue
|
continue
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
_user_agent = None
|
|
||||||
|
|
||||||
def _UserAgent():
|
|
||||||
global _user_agent
|
|
||||||
|
|
||||||
if _user_agent is None:
|
|
||||||
py_version = sys.version_info
|
|
||||||
|
|
||||||
os_name = sys.platform
|
|
||||||
if os_name == 'linux2':
|
|
||||||
os_name = 'Linux'
|
|
||||||
elif os_name == 'win32':
|
|
||||||
os_name = 'Win32'
|
|
||||||
elif os_name == 'cygwin':
|
|
||||||
os_name = 'Cygwin'
|
|
||||||
elif os_name == 'darwin':
|
|
||||||
os_name = 'Darwin'
|
|
||||||
|
|
||||||
p = GitCommand(
|
|
||||||
None, ['describe', 'HEAD'],
|
|
||||||
cwd = _MyRepoPath(),
|
|
||||||
capture_stdout = True)
|
|
||||||
if p.Wait() == 0:
|
|
||||||
repo_version = p.stdout
|
|
||||||
if len(repo_version) > 0 and repo_version[-1] == '\n':
|
|
||||||
repo_version = repo_version[0:-1]
|
|
||||||
if len(repo_version) > 0 and repo_version[0] == 'v':
|
|
||||||
repo_version = repo_version[1:]
|
|
||||||
else:
|
|
||||||
repo_version = 'unknown'
|
|
||||||
|
|
||||||
_user_agent = 'git-repo/%s (%s) git/%s Python/%d.%d.%d' % (
|
|
||||||
repo_version,
|
|
||||||
os_name,
|
|
||||||
git.version_tuple().full,
|
|
||||||
py_version[0], py_version[1], py_version[2])
|
|
||||||
return _user_agent
|
|
||||||
|
|
||||||
class _UserAgentHandler(urllib.request.BaseHandler):
|
class _UserAgentHandler(urllib.request.BaseHandler):
|
||||||
def http_request(self, req):
|
def http_request(self, req):
|
||||||
req.add_header('User-Agent', _UserAgent())
|
req.add_header('User-Agent', RepoUserAgent())
|
||||||
return req
|
return req
|
||||||
|
|
||||||
def https_request(self, req):
|
def https_request(self, req):
|
||||||
req.add_header('User-Agent', _UserAgent())
|
req.add_header('User-Agent', RepoUserAgent())
|
||||||
return req
|
return req
|
||||||
|
|
||||||
def _AddPasswordFromUserInput(handler, msg, req):
|
def _AddPasswordFromUserInput(handler, msg, req):
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import re
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
import git_command
|
import git_command
|
||||||
@ -47,3 +48,15 @@ class GitCallUnitTest(unittest.TestCase):
|
|||||||
self.assertLess(ver, (9999, 9999, 9999))
|
self.assertLess(ver, (9999, 9999, 9999))
|
||||||
|
|
||||||
self.assertNotEqual('', ver.full)
|
self.assertNotEqual('', ver.full)
|
||||||
|
|
||||||
|
|
||||||
|
class RepoUserAgentUnitTest(unittest.TestCase):
|
||||||
|
"""Tests the RepoUserAgent function."""
|
||||||
|
|
||||||
|
def test_smoke(self):
|
||||||
|
"""Make sure it returns something useful."""
|
||||||
|
ua = git_command.RepoUserAgent()
|
||||||
|
# We can't dive too deep because of OS/tool differences, but we can check
|
||||||
|
# the general form.
|
||||||
|
m = re.match(r'^git-repo/[^ ]+ ([^ ]+) git/[^ ]+ Python/[0-9.]+', ua)
|
||||||
|
self.assertIsNotNone(m)
|
||||||
|
Loading…
Reference in New Issue
Block a user