diff --git a/git_command.py b/git_command.py index a4081f45..dc542c36 100644 --- a/git_command.py +++ b/git_command.py @@ -134,6 +134,7 @@ class UserAgent(object): _os = None _repo_ua = None + _git_ua = None @property def os(self): @@ -165,6 +166,17 @@ class UserAgent(object): return self._repo_ua + @property + def git(self): + """The UA when running git.""" + if self._git_ua is None: + self._git_ua = 'git/%s (%s) git-repo/%s' % ( + git.version_tuple().full, + self.os, + RepoSourceVersion()) + + return self._git_ua + user_agent = UserAgent() def git_require(min_version, fail=False, msg=''): @@ -214,6 +226,7 @@ class GitCommand(object): if 'GIT_ALLOW_PROTOCOL' not in env: _setenv(env, 'GIT_ALLOW_PROTOCOL', 'file:git:http:https:ssh:persistent-http:persistent-https:sso:rpc') + _setenv(env, 'GIT_HTTP_USER_AGENT', user_agent.git) if project: if not cwd: diff --git a/tests/test_git_command.py b/tests/test_git_command.py index 5ceb0b33..51171a32 100644 --- a/tests/test_git_command.py +++ b/tests/test_git_command.py @@ -68,3 +68,11 @@ class UserAgentUnitTest(unittest.TestCase): # the general form. m = re.match(r'^git-repo/[^ ]+ ([^ ]+) git/[^ ]+ Python/[0-9.]+', ua) self.assertIsNotNone(m) + + def test_smoke_git(self): + """Make sure git UA returns something useful.""" + ua = git_command.user_agent.git + # We can't dive too deep because of OS/tool differences, but we can check + # the general form. + m = re.match(r'^git/[^ ]+ ([^ ]+) git-repo/[^ ]+', ua) + self.assertIsNotNone(m)