diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-08-30 14:33:35 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-08-30 14:33:35 +0000 |
commit | 051f37c1c849e7f6a5e0c87bb9952eaecf0193d8 (patch) | |
tree | 5c4c8fa7cf0ed66172098e45a84fa5c5127fd962 | |
parent | 59f87fe3d6cf55d88115d101f4fb9e1ea38f18c8 (diff) | |
parent | 997c20bb379ed5d7b143133dffd955aaa1df4b5e (diff) | |
download | git-review-051f37c1c849e7f6a5e0c87bb9952eaecf0193d8.tar.gz |
Merge "Support git without git credential"
-rwxr-xr-x | git_review/cmd.py | 14 | ||||
-rw-r--r-- | git_review/tests/test_unit.py | 29 |
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') |