Add support for git-credential-helper
This patch adds an additional field `options` to scm_dict, which can be
used to provide additional information to the backends.
It implements a single new option for GitWrapper. This option allows
setting a custom git credentials wrapper. This can be useful if Pungi
needs to get files from a git repository that requires authentication.
The helper can be as simple as this (assuming the username is already
provided in the url):
#!/bin/sh
echo password=i-am-secret
The helper would need to be referenced by an absolute path from the
pungi configuration, or prefixed with ! to have git interpret it as a
shell script and look it up in PATH.
See https://git-scm.com/docs/gitcredentials for more details.
Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
JIRA: RHELCMP-11808
This commit is contained in:
parent
e4c525ecbf
commit
ada8f4e346
8 changed files with 139 additions and 51 deletions
|
|
@ -16,7 +16,7 @@ import six
|
|||
from pungi import compose
|
||||
from pungi import util
|
||||
|
||||
from tests.helpers import touch, PungiTestCase, mk_boom
|
||||
from tests.helpers import touch, PungiTestCase, mk_boom, GIT_WITH_CREDS
|
||||
|
||||
|
||||
class TestGitRefResolver(unittest.TestCase):
|
||||
|
|
@ -32,6 +32,20 @@ class TestGitRefResolver(unittest.TestCase):
|
|||
universal_newlines=True,
|
||||
)
|
||||
|
||||
@mock.patch("pungi.util.run")
|
||||
def test_successful_resolve_with_credentials(self, run):
|
||||
run.return_value = (0, "CAFEBABE\tHEAD\n")
|
||||
|
||||
url = util.resolve_git_url(
|
||||
"https://git.example.com/repo.git?somedir#HEAD", "!ch"
|
||||
)
|
||||
|
||||
self.assertEqual(url, "https://git.example.com/repo.git?somedir#CAFEBABE")
|
||||
run.assert_called_once_with(
|
||||
GIT_WITH_CREDS + ["ls-remote", "https://git.example.com/repo.git", "HEAD"],
|
||||
universal_newlines=True,
|
||||
)
|
||||
|
||||
@mock.patch("pungi.util.run")
|
||||
def test_successful_resolve_branch(self, run):
|
||||
run.return_value = (0, "CAFEBABE\trefs/heads/f24\n")
|
||||
|
|
@ -211,11 +225,12 @@ class TestGitRefResolver(unittest.TestCase):
|
|||
self.assertEqual(resolver(url2), "2")
|
||||
self.assertEqual(resolver(url3, ref2), "beef")
|
||||
self.assertEqual(
|
||||
mock_resolve_url.call_args_list, [mock.call(url1), mock.call(url2)]
|
||||
mock_resolve_url.call_args_list,
|
||||
[mock.call(url1, None), mock.call(url2, None)],
|
||||
)
|
||||
self.assertEqual(
|
||||
mock_resolve_ref.call_args_list,
|
||||
[mock.call(url3, ref1), mock.call(url3, ref2)],
|
||||
[mock.call(url3, ref1, None), mock.call(url3, ref2, None)],
|
||||
)
|
||||
|
||||
@mock.patch("pungi.util.resolve_git_url")
|
||||
|
|
@ -227,7 +242,7 @@ class TestGitRefResolver(unittest.TestCase):
|
|||
resolver(url)
|
||||
with self.assertRaises(util.GitUrlResolveError):
|
||||
resolver(url)
|
||||
self.assertEqual(mock_resolve.call_args_list, [mock.call(url)])
|
||||
self.assertEqual(mock_resolve.call_args_list, [mock.call(url, None)])
|
||||
|
||||
|
||||
class TestGetVariantData(unittest.TestCase):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue