summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-08-30 14:33:35 +0000
committerGerrit Code Review <review@openstack.org>2016-08-30 14:33:35 +0000
commit051f37c1c849e7f6a5e0c87bb9952eaecf0193d8 (patch)
tree5c4c8fa7cf0ed66172098e45a84fa5c5127fd962
parent59f87fe3d6cf55d88115d101f4fb9e1ea38f18c8 (diff)
parent997c20bb379ed5d7b143133dffd955aaa1df4b5e (diff)
downloadgit-review-051f37c1c849e7f6a5e0c87bb9952eaecf0193d8.tar.gz
Merge "Support git without git credential"
-rwxr-xr-xgit_review/cmd.py14
-rw-r--r--git_review/tests/test_unit.py29
2 files changed, 31 insertions, 12 deletions
diff --git a/git_review/cmd.py b/git_review/cmd.py
index a1faa34..65f5d65 100755
--- a/git_review/cmd.py
+++ b/git_review/cmd.py
@@ -174,11 +174,13 @@ def run_command_exc(klazz, *argv, **env):
return output
-def git_credentials(klazz, url):
- """Get credentials using git credential."""
+def git_credentials(url):
+ """Return credentials using git credential or None."""
cmd = 'git', 'credential', 'fill'
stdin = 'url=%s' % url
- out = run_command_exc(klazz, *cmd, stdin=stdin)
+ rc, out = run_command_status(*cmd, stdin=stdin)
+ if rc:
+ return None
data = dict(l.split('=', 1) for l in out.splitlines())
return data['username'], data['password']
@@ -203,8 +205,10 @@ def run_http_exc(klazz, url, **env):
try:
res = requests.get(url, **env)
if res.status_code == 401:
- env['auth'] = git_credentials(klazz, url)
- res = requests.get(url, **env)
+ creds = git_credentials(url)
+ if creds:
+ env['auth'] = creds
+ res = requests.get(url, **env)
except klazz:
raise
except Exception as err:
diff --git a/git_review/tests/test_unit.py b/git_review/tests/test_unit.py
index 008e8c2..3ef378b 100644
--- a/git_review/tests/test_unit.py
+++ b/git_review/tests/test_unit.py
@@ -245,7 +245,7 @@ class GitReviewUnitTest(testtools.TestCase):
self.assertEqual(255, err.code)
mock_get.assert_called_once_with(url)
- @mock.patch('git_review.cmd.run_command_exc')
+ @mock.patch('git_review.cmd.run_command_status')
@mock.patch('requests.get', return_value=FakeResponse(200))
def test_run_http_exc_without_auth(self, mock_get, mock_run):
url = 'http://user@gerrit.example.com'
@@ -254,21 +254,21 @@ class GitReviewUnitTest(testtools.TestCase):
self.assertFalse(mock_run.called)
mock_get.assert_called_once_with(url)
- @mock.patch('git_review.cmd.run_command_exc',
- return_value=FAKE_GIT_CREDENTIAL_FILL)
+ @mock.patch('git_review.cmd.run_command_status',
+ return_value=(0, FAKE_GIT_CREDENTIAL_FILL))
@mock.patch('requests.get',
side_effect=[FakeResponse(401), FakeResponse(200)])
def test_run_http_exc_with_auth(self, mock_get, mock_run):
url = 'http://user@gerrit.example.com'
cmd.run_http_exc(FakeException, url)
- mock_run.assert_called_once_with(mock.ANY, 'git', 'credential', 'fill',
+ mock_run.assert_called_once_with('git', 'credential', 'fill',
stdin='url=%s' % url)
calls = [mock.call(url), mock.call(url, auth=('user', 'pass'))]
mock_get.assert_has_calls(calls)
- @mock.patch('git_review.cmd.run_command_exc',
- return_value=FAKE_GIT_CREDENTIAL_FILL)
+ @mock.patch('git_review.cmd.run_command_status',
+ return_value=(0, FAKE_GIT_CREDENTIAL_FILL))
@mock.patch('requests.get', return_value=FakeResponse(401))
def test_run_http_exc_with_failing_auth(self, mock_get, mock_run):
url = 'http://user@gerrit.example.com'
@@ -278,11 +278,26 @@ class GitReviewUnitTest(testtools.TestCase):
self.fails('Exception expected')
except FakeException as err:
self.assertEqual(cmd.http_code_2_return_code(401), err.code)
- mock_run.assert_called_once_with(mock.ANY, 'git', 'credential', 'fill',
+ mock_run.assert_called_once_with('git', 'credential', 'fill',
stdin='url=%s' % url)
calls = [mock.call(url), mock.call(url, auth=('user', 'pass'))]
mock_get.assert_has_calls(calls)
+ @mock.patch('git_review.cmd.run_command_status',
+ return_value=(1, ''))
+ @mock.patch('requests.get', return_value=FakeResponse(401))
+ def test_run_http_exc_with_failing_git_creds(self, mock_get, mock_run):
+ url = 'http://user@gerrit.example.com'
+
+ try:
+ cmd.run_http_exc(FakeException, url)
+ self.fails('Exception expected')
+ except FakeException as err:
+ self.assertEqual(cmd.http_code_2_return_code(401), err.code)
+ mock_run.assert_called_once_with('git', 'credential', 'fill',
+ stdin='url=%s' % url)
+ mock_get.assert_called_once_with(url)
+
@mock.patch('sys.argv', ['argv0', '--track', 'branch'])
@mock.patch('git_review.cmd.check_remote')
@mock.patch('git_review.cmd.resolve_tracking')