fix: cache SVN creds before git svn clone, feed /dev/null to stdin
This commit is contained in:
@@ -119,6 +119,7 @@ class Mirror:
|
|||||||
shutil.rmtree(import_dir)
|
shutil.rmtree(import_dir)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
self._cache_svn_credentials()
|
||||||
self._run_git_svn_clone(import_dir)
|
self._run_git_svn_clone(import_dir)
|
||||||
self._push_import_to_bare(import_dir)
|
self._push_import_to_bare(import_dir)
|
||||||
mappings = self._read_rev_maps(import_dir)
|
mappings = self._read_rev_maps(import_dir)
|
||||||
@@ -178,6 +179,27 @@ class Mirror:
|
|||||||
except subprocess.TimeoutExpired:
|
except subprocess.TimeoutExpired:
|
||||||
raise MirrorError("git svn --version timed out")
|
raise MirrorError("git svn --version timed out")
|
||||||
|
|
||||||
|
def _cache_svn_credentials(self):
|
||||||
|
"""Pre-populate SVN auth cache so git svn doesn't prompt."""
|
||||||
|
svn_cfg = self.config.svn
|
||||||
|
if not svn_cfg.username:
|
||||||
|
return
|
||||||
|
import subprocess
|
||||||
|
try:
|
||||||
|
r = subprocess.run(
|
||||||
|
["svn", "info", "--non-interactive",
|
||||||
|
svn_cfg.url.rstrip("/") + "/" + svn_cfg.trunk]
|
||||||
|
+ svn_cfg.auth_args(),
|
||||||
|
capture_output=True, timeout=30,
|
||||||
|
)
|
||||||
|
if r.returncode != 0:
|
||||||
|
err = (r.stderr or b"").decode("utf-8", errors="replace").strip()
|
||||||
|
logger.warning("SVN credential cache failed (non-fatal): %s", err)
|
||||||
|
else:
|
||||||
|
logger.debug("SVN credentials cached")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning("SVN credential cache skipped: %s", e)
|
||||||
|
|
||||||
def _run_git_svn_clone(self, target: Path):
|
def _run_git_svn_clone(self, target: Path):
|
||||||
"""Execute git svn clone --no-metadata for the initial import."""
|
"""Execute git svn clone --no-metadata for the initial import."""
|
||||||
svn_cfg = self.config.svn
|
svn_cfg = self.config.svn
|
||||||
@@ -203,6 +225,7 @@ class Mirror:
|
|||||||
|
|
||||||
process = subprocess.Popen(
|
process = subprocess.Popen(
|
||||||
args,
|
args,
|
||||||
|
stdin=subprocess.DEVNULL,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.STDOUT,
|
stderr=subprocess.STDOUT,
|
||||||
text=True,
|
text=True,
|
||||||
|
|||||||
Reference in New Issue
Block a user