diff options
author | 2022-07-01 14:53:30 -0400 | |
---|---|---|
committer | 2022-07-01 15:01:18 -0400 | |
commit | 28d8d469ed8db68225fd50755655dcda61bd9a78 (patch) | |
tree | b86d32fd36bc95159a142a19fdd9a64d3bea8516 | |
parent | dosym: fix EAPI check for -r flag (diff) | |
download | portage-28d8d469ed8db68225fd50755655dcda61bd9a78.tar.gz portage-28d8d469ed8db68225fd50755655dcda61bd9a78.tar.bz2 portage-28d8d469ed8db68225fd50755655dcda61bd9a78.zip |
git: mark repository as safe for newer gits
While this doesn't solve the odd permissions issue for communication
b/t gemato & git & portage, it does stop it manifesting.
This fixes compatibility with >=dev-vcs/git-2.35.2.
Bug: https://bugs.gentoo.org/838223
Bug: https://bugs.gentoo.org/838271
Signed-off-by: Mike Gilbert <floppym@gentoo.org>
-rw-r--r-- | lib/portage/sync/modules/git/git.py | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/lib/portage/sync/modules/git/git.py b/lib/portage/sync/modules/git/git.py index 98670e1f9..381e31700 100644 --- a/lib/portage/sync/modules/git/git.py +++ b/lib/portage/sync/modules/git/git.py @@ -1,8 +1,9 @@ -# Copyright 2005-2020 Gentoo Authors +# Copyright 2005-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 import io import logging +import re import subprocess import portage @@ -104,15 +105,19 @@ class GitSync(NewBase): exitcode = portage.process.spawn_bash( "cd %s ; exec %s" % (portage._shell_quote(self.repo.location), git_cmd), - **self.spawn_kwargs + **self.spawn_kwargs, ) if exitcode != os.EX_OK: msg = "!!! git clone error in %s" % self.repo.location self.logger(self.xterm_titles, msg) writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1) return (exitcode, False) + + self.add_safe_directory() + if not self.verify_head(): return (1, False) + return (os.EX_OK, True) def update(self): @@ -152,6 +157,8 @@ class GitSync(NewBase): " %s" % self.repo.module_specific_options["sync-git-pull-extra-opts"] ) + self.add_safe_directory() + try: remote_branch = portage._unicode_decode( subprocess.check_output( @@ -184,7 +191,7 @@ class GitSync(NewBase): exitcode = portage.process.spawn( gc_cmd, cwd=portage._unicode_encode(self.repo.location), - **self.spawn_kwargs + **self.spawn_kwargs, ) if exitcode != os.EX_OK: msg = "!!! git gc error in %s" % self.repo.location @@ -207,7 +214,7 @@ class GitSync(NewBase): exitcode = portage.process.spawn_bash( "cd %s ; exec %s" % (portage._shell_quote(self.repo.location), git_cmd), - **self.spawn_kwargs + **self.spawn_kwargs, ) if exitcode != os.EX_OK: @@ -231,7 +238,7 @@ class GitSync(NewBase): exitcode = portage.process.spawn( merge_cmd, cwd=portage._unicode_encode(self.repo.location), - **self.spawn_kwargs + **self.spawn_kwargs, ) if exitcode != os.EX_OK: @@ -341,3 +348,29 @@ class GitSync(NewBase): except subprocess.CalledProcessError: ret = (1, False) return ret + + def add_safe_directory(self): + # Add safe.directory to system gitconfig if not already configured. + # Workaround for bug #838271 and bug #838223. + location_escaped = re.escape(self.repo.location) + result = subprocess.run( + [ + self.bin_command, + "config", + "--get", + "safe.directory", + f"^{location_escaped}$", + ] + ) + if result.returncode == 1: + result = subprocess.run( + [ + self.bin_command, + "config", + "--system", + "--add", + "safe.directory", + self.repo.location, + ] + ) + return result.returncode == 0 |