diff --git a/git/cmd.py b/git/cmd.py index 9d4006b9d..9ef1e3a65 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -488,12 +488,12 @@ def check_unsafe_options(cls, options: List[str], unsafe_options: List[str]) -> """ # Options can be of the form `foo` or `--foo bar` `--foo=bar`, # so we need to check if they start with "--foo" or if they are equal to "foo". - bare_options = [ + bare_unsafe_options = [ option.lstrip("-") for option in unsafe_options ] for option in options: - for unsafe_option, bare_option in zip(unsafe_options, bare_options): + for unsafe_option, bare_option in zip(unsafe_options, bare_unsafe_options): if option.startswith(unsafe_option) or option == bare_option: raise UnsafeOptionError( f"{unsafe_option} is not allowed, use `allow_unsafe_options=True` to allow it." @@ -1193,12 +1193,12 @@ def transform_kwargs(self, split_single_char_options: bool = True, **kwargs: Any return args @classmethod - def __unpack_args(cls, arg_list: Sequence[str]) -> List[str]: + def _unpack_args(cls, arg_list: Sequence[str]) -> List[str]: outlist = [] if isinstance(arg_list, (list, tuple)): for arg in arg_list: - outlist.extend(cls.__unpack_args(arg)) + outlist.extend(cls._unpack_args(arg)) else: outlist.append(str(arg_list)) @@ -1283,7 +1283,7 @@ def _call_process( # Prepare the argument list opt_args = self.transform_kwargs(**opts_kwargs) - ext_args = self.__unpack_args([a for a in args if a is not None]) + ext_args = self._unpack_args([a for a in args if a is not None]) if insert_after_this_arg is None: args_list = opt_args + ext_args diff --git a/git/remote.py b/git/remote.py index 1eff00b96..520544b66 100644 --- a/git/remote.py +++ b/git/remote.py @@ -1029,12 +1029,11 @@ def pull( self._assert_refspec() kwargs = add_progress(kwargs, self.repo.git, progress) - if not allow_unsafe_protocols and refspec: - if isinstance(refspec, str): - Git.check_unsafe_protocols(refspec) - else: - for ref in refspec: - Git.check_unsafe_protocols(ref) + refspec = Git._unpack_args(refspec or []) + if not allow_unsafe_protocols: + for ref in refspec: + Git.check_unsafe_protocols(ref) + if not allow_unsafe_options: Git.check_unsafe_options(options=list(kwargs.keys()), unsafe_options=self.unsafe_git_pull_options) @@ -1084,12 +1083,10 @@ def push( be 0.""" kwargs = add_progress(kwargs, self.repo.git, progress) - if not allow_unsafe_protocols and refspec: - if isinstance(refspec, str): - Git.check_unsafe_protocols(refspec) - else: - for ref in refspec: - Git.check_unsafe_protocols(ref) + refspec = Git._unpack_args(refspec or []) + if not allow_unsafe_protocols: + for ref in refspec: + Git.check_unsafe_protocols(ref) if not allow_unsafe_options: Git.check_unsafe_options(options=list(kwargs.keys()), unsafe_options=self.unsafe_git_push_options) diff --git a/test/test_git.py b/test/test_git.py index 6ba833b4a..e7d236deb 100644 --- a/test/test_git.py +++ b/test/test_git.py @@ -39,12 +39,12 @@ def test_call_process_calls_execute(self, git): self.assertEqual(git.call_args, ((["git", "version"],), {})) def test_call_unpack_args_unicode(self): - args = Git._Git__unpack_args("Unicode€™") + args = Git._unpack_args("Unicode€™") mangled_value = "Unicode\u20ac\u2122" self.assertEqual(args, [mangled_value]) def test_call_unpack_args(self): - args = Git._Git__unpack_args(["git", "log", "--", "Unicode€™"]) + args = Git._unpack_args(["git", "log", "--", "Unicode€™"]) mangled_value = "Unicode\u20ac\u2122" self.assertEqual(args, ["git", "log", "--", mangled_value])