2025-12-01
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# SPDX-FileCopyrightText: 2025 Blender Studio Tools Authors
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from typing import Tuple
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
|
||||
from .threaded.execute_subprocess import execute_command
|
||||
|
||||
|
||||
def get_svn_info(path: Path or str) -> Tuple[str, str]:
|
||||
"""Use the `svn info` command to get the root dir, the URL, and the relative URL."""
|
||||
path = Path(path)
|
||||
if not path.exists():
|
||||
return "", ""
|
||||
|
||||
try:
|
||||
dirpath_str = str(path.as_posix())
|
||||
svn_info = execute_command(dirpath_str, ["svn", "info"])
|
||||
except subprocess.CalledProcessError as e:
|
||||
error_msg = e.stderr.decode()
|
||||
if "is not a working copy" in error_msg:
|
||||
return None, None
|
||||
elif "E200009" in error_msg:
|
||||
# If we're in a folder that wasn't yet added to the repo,
|
||||
# try again one folder higher.
|
||||
parent = path.parent
|
||||
if parent == path:
|
||||
return None, None
|
||||
return get_svn_info(path.parent)
|
||||
else:
|
||||
raise e
|
||||
|
||||
lines = svn_info.split("\n")
|
||||
root_dir = lines[1].split("Working Copy Root Path: ")[1]
|
||||
# On Windows, for some reason the path has a \r character at the end,
|
||||
# which breaks absolutely everything.
|
||||
root_dir = root_dir.replace("\r", "")
|
||||
|
||||
full_url = lines[2].split("URL: ")[1]
|
||||
relative_url = lines[3].split("Relative URL: ")[1][1:]
|
||||
base_url = full_url
|
||||
if len(relative_url) > 1:
|
||||
base_url = full_url.replace(relative_url, "").strip()
|
||||
|
||||
return root_dir, base_url
|
||||
Reference in New Issue
Block a user