2025-12-01

This commit is contained in:
2026-03-17 14:58:51 -06:00
parent 183e865f8b
commit 4b82b57113
6846 changed files with 954887 additions and 162606 deletions
@@ -0,0 +1,72 @@
# SPDX-FileCopyrightText: 2022 Blender Studio Tools Authors
#
# SPDX-License-Identifier: GPL-3.0-or-later
import subprocess
from typing import List
from ..util import get_addon_prefs
def get_credential_commands(context) -> List[str]:
repo = context.scene.svn.get_repo(context)
assert (
repo.is_cred_entered
), "No username or password entered for this repository. The UI shouldn't have allowed you to get into a state where you can press an SVN operation button without having your credentials entered, so this is a bug!"
return ["--username", f"{repo.username}", "--password", f"{repo.password}"]
def execute_command(path: str, command: str) -> str:
output_bytes = subprocess.check_output(
command,
shell=False,
cwd=path + "/",
stderr=subprocess.PIPE,
start_new_session=True,
)
return output_bytes.decode(encoding='utf-8', errors='replace')
def execute_svn_command(
context,
command: List[str],
*,
ignore_errors=False,
print_errors=True,
use_cred=False,
) -> str:
"""Execute an svn command in the root of the current svn repository.
So any file paths that are part of the command should be relative to the
SVN root.
"""
repo = context.scene.svn.get_repo(context)
if "svn" not in command:
command.insert(0, "svn")
if use_cred:
command += get_credential_commands(context)
command.append("--non-interactive")
command.append("--trust-server-cert")
prefs = get_addon_prefs(context)
if prefs.debug_mode:
print(" ".join(command))
try:
if repo.is_valid_svn:
return execute_command(repo.directory, command)
except subprocess.CalledProcessError as error:
if ignore_errors:
return ""
else:
err_msg = error.stderr.decode()
if print_errors:
print(f"Command returned error: {command}")
print(err_msg)
raise error
def check_svn_installed():
code, message = subprocess.getstatusoutput('svn')
return code != 127