Re-design of submodules used in blender.git #104755

Merged
Sergey Sharybin merged 12 commits from Sergey/blender:submodules_refactor into blender-v3.5-release 2023-02-21 16:40:14 +01:00
570 changed files with 2039093 additions and 211 deletions

20
.gitignore vendored
View File

@ -39,7 +39,7 @@ Desktop.ini
/doc/python_api/rst/bmesh.ops.rst
# in-source lib downloads
/build_files/build_environment/downloads
/build_files/build_environment/downloads/
# in-source buildbot signing configuration
/build_files/buildbot/codesign/config_server.py
@ -48,4 +48,20 @@ Desktop.ini
waveletNoiseTile.bin
# testing environment
/Testing
/Testing/
# Translations.
/locale/user-config.py
# External repositories.
/scripts/addons/
/scripts/addons_contrib/
# Ignore old submodules directories.
# Eventually need to get rid of those, but for the first time of transition
# avoid indidents when the folders exists after bisect and developers staging
# them by accident.
/release/scripts/addons/
/release/datafiles/locale/
/release/scripts/addons_contrib/
/source/tools/
Sergey marked this conversation as resolved

As far as I can tell the trailing slashes make no difference, but maybe best to leave them out for consistency.

As far as I can tell the trailing slashes make no difference, but maybe best to leave them out for consistency.
Review

We quickly talked about this with Brecht. Decided to add them everywhere instead. Seems to be that in the current state of .gitignore we use the trailing slash more than we don't :)

We quickly talked about this with Brecht. Decided to add them everywhere instead. Seems to be that in the current state of .gitignore we use the trailing slash more than we don't :)

20
.gitmodules vendored
View File

@ -1,20 +0,0 @@
[submodule "release/scripts/addons"]
path = release/scripts/addons
url = ../blender-addons.git
branch = main
ignore = all
[submodule "release/scripts/addons_contrib"]
path = release/scripts/addons_contrib
url = ../blender-addons-contrib.git
branch = main
ignore = all
[submodule "release/datafiles/locale"]
path = release/datafiles/locale
url = ../blender-translations.git
branch = main
ignore = all
[submodule "source/tools"]
path = source/tools
url = ../blender-dev-tools.git
branch = main
ignore = all

View File

@ -954,21 +954,6 @@ endif()
# -----------------------------------------------------------------------------
# Check if Sub-modules are Cloned
if(WITH_INTERNATIONAL)
file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/datafiles/locale")
list(LENGTH RESULT DIR_LEN)
if(DIR_LEN EQUAL 0)
message(
WARNING
"Translation path '${CMAKE_SOURCE_DIR}/release/datafiles/locale' is missing, "
"This is a 'git submodule', which are known not to work with bridges to other version "
"control systems."
)
set(TRANSLATIONS_FOUND OFF)
set_and_warn_library_found("Translations" TRANSLATIONS_FOUND WITH_INTERNATIONAL)
endif()
endif()
if(WITH_PYTHON)
# While we have this as an '#error' in 'bpy_capi_utils.h',
Sergey marked this conversation as resolved

Is this check even needed anymore now that you have included all the locale files into the main repository?

I think this check should always succeed now if a standard git clone was successful.
Either way, the error message doesn't make sense anymore as it is not a external repository anymore.

Is this check even needed anymore now that you have included all the `locale` files into the main repository? I think this check should always succeed now if a standard git clone was successful. Either way, the error message doesn't make sense anymore as it is not a external repository anymore.
Review

Indeed this block can be removed.

Indeed this block can be removed.
# upgrading Python tends to cause confusion for users who build.
@ -984,14 +969,14 @@ if(WITH_PYTHON)
)
endif()
file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/scripts/addons")
file(GLOB RESULT "${CMAKE_SOURCE_DIR}/scripts/addons")
list(LENGTH RESULT DIR_LEN)
if(DIR_LEN EQUAL 0)
message(
WARNING
"Addons path '${CMAKE_SOURCE_DIR}/release/scripts/addons' is missing, "
"This is a 'git submodule', which are known not to work with bridges to other version "
"control systems: * CONTINUING WITHOUT ADDONS *"
"Addons path '${CMAKE_SOURCE_DIR}/cripts/addons' is missing. "
"This is an external repository which needs to be checked out. Use `make update` to do so. "
"* CONTINUING WITHOUT ADDONS *"
)
endif()
endif()

View File

@ -69,7 +69,7 @@ Static Source Code Checking
* check_cmake: Runs our own cmake file checker which detects errors in the cmake file list definitions.
* check_pep8: Checks all Python script are pep8 which are tagged to use the stricter formatting.
* check_mypy: Checks all Python scripts using mypy,
see: source/tools/check_source/check_mypy_config.py scripts which are included.
see: tools/check_source/check_mypy_config.py scripts which are included.
Documentation Checking
@ -85,7 +85,7 @@ Spell Checkers
* check_spelling_osl: Check for spelling errors (OSL only).
* check_spelling_py: Check for spelling errors (Python only).
Note: an additional word-list is maintained at: 'source/tools/check_source/check_spelling_c_config.py'
Note: an additional word-list is maintained at: 'tools/check_source/check_spelling_c_config.py'
Note: that spell checkers can take a 'CHECK_SPELLING_CACHE' filepath argument,
so re-running does not need to re-check unchanged files.
@ -490,22 +490,22 @@ check_smatch: .FORCE
$(PYTHON) "$(BLENDER_DIR)/build_files/cmake/cmake_static_check_smatch.py"
check_mypy: .FORCE
@$(PYTHON) "$(BLENDER_DIR)/source/tools/check_source/check_mypy.py"
@$(PYTHON) "$(BLENDER_DIR)/tools/check_source/check_mypy.py"
check_wiki_file_structure: .FORCE
@PYTHONIOENCODING=utf_8 $(PYTHON) \
"$(BLENDER_DIR)/source/tools/check_wiki/check_wiki_file_structure.py"
"$(BLENDER_DIR)/tools/check_wiki/check_wiki_file_structure.py"
check_spelling_py: .FORCE
@cd "$(BUILD_DIR)" ; \
PYTHONIOENCODING=utf_8 $(PYTHON) \
"$(BLENDER_DIR)/source/tools/check_source/check_spelling.py" \
"$(BLENDER_DIR)/release/scripts"
"$(BLENDER_DIR)/tools/check_source/check_spelling.py" \
"$(BLENDER_DIR)/scripts"
check_spelling_c: .FORCE
@cd "$(BUILD_DIR)" ; \
PYTHONIOENCODING=utf_8 $(PYTHON) \
"$(BLENDER_DIR)/source/tools/check_source/check_spelling.py" \
"$(BLENDER_DIR)/tools/check_source/check_spelling.py" \
--cache-file=$(CHECK_SPELLING_CACHE) \
"$(BLENDER_DIR)/source" \
"$(BLENDER_DIR)/intern/cycles" \
@ -515,21 +515,21 @@ check_spelling_c: .FORCE
check_spelling_osl: .FORCE
@cd "$(BUILD_DIR)" ; \
PYTHONIOENCODING=utf_8 $(PYTHON) \
"$(BLENDER_DIR)/source/tools/check_source/check_spelling.py" \
"$(BLENDER_DIR)/tools/check_source/check_spelling.py" \
--cache-file=$(CHECK_SPELLING_CACHE) \
"$(BLENDER_DIR)/intern/cycles/kernel/shaders"
check_descriptions: .FORCE
@$(BLENDER_BIN) --background -noaudio --factory-startup --python \
"$(BLENDER_DIR)/source/tools/check_source/check_descriptions.py"
"$(BLENDER_DIR)/tools/check_source/check_descriptions.py"
check_deprecated: .FORCE
@PYTHONIOENCODING=utf_8 $(PYTHON) \
source/tools/check_source/check_deprecated.py
tools/check_source/check_deprecated.py
check_licenses: .FORCE
@PYTHONIOENCODING=utf_8 $(PYTHON) \
"$(BLENDER_DIR)/source/tools/check_source/check_licenses.py" \
"$(BLENDER_DIR)/tools/check_source/check_licenses.py" \
"--show-headers=$(SHOW_HEADERS)"
check_pep8: .FORCE
@ -538,7 +538,7 @@ check_pep8: .FORCE
check_cmake: .FORCE
@PYTHONIOENCODING=utf_8 $(PYTHON) \
source/tools/check_source/check_cmake_consistency.py
tools/check_source/check_cmake_consistency.py
# -----------------------------------------------------------------------------
@ -576,8 +576,8 @@ update_code: .FORCE
@$(PYTHON) ./build_files/utils/make_update.py --no-libraries
format: .FORCE
@PATH="${LIBDIR}/llvm/bin/:$(PATH)" $(PYTHON) source/tools/utils_maintenance/clang_format_paths.py $(PATHS)
@$(PYTHON) source/tools/utils_maintenance/autopep8_format_paths.py --autopep8-command="$(AUTOPEP8)" $(PATHS)
@PATH="${LIBDIR}/llvm/bin/:$(PATH)" $(PYTHON) tools/utils_maintenance/clang_format_paths.py $(PATHS)
@$(PYTHON) tools/utils_maintenance/autopep8_format_paths.py --autopep8-command="$(AUTOPEP8)" $(PATHS)
# -----------------------------------------------------------------------------

View File

@ -901,11 +901,11 @@ endif()
if(WINDOWS_PYTHON_DEBUG)
# Include the system scripts in the blender_python_system_scripts project.
file(GLOB_RECURSE inFiles "${CMAKE_SOURCE_DIR}/release/scripts/*.*" )
file(GLOB_RECURSE inFiles "${CMAKE_SOURCE_DIR}/scripts/*.*" )
add_custom_target(blender_python_system_scripts SOURCES ${inFiles})
foreach(_source IN ITEMS ${inFiles})
get_filename_component(_source_path "${_source}" PATH)
string(REPLACE "${CMAKE_SOURCE_DIR}/release/scripts/" "" _source_path "${_source_path}")
string(REPLACE "${CMAKE_SOURCE_DIR}/scripts/" "" _source_path "${_source_path}")
string(REPLACE "/" "\\" _group_path "${_source_path}")
source_group("${_group_path}" FILES "${_source}")
endforeach()
@ -940,7 +940,7 @@ if(WINDOWS_PYTHON_DEBUG)
file(WRITE ${USER_PROPS_FILE} "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">
<PropertyGroup>
<LocalDebuggerCommandArguments>-con --env-system-scripts \"${CMAKE_SOURCE_DIR}/release/scripts\" </LocalDebuggerCommandArguments>
<LocalDebuggerCommandArguments>-con --env-system-scripts \"${CMAKE_SOURCE_DIR}/scripts\" </LocalDebuggerCommandArguments>
</PropertyGroup>
</Project>")
endif()

View File

@ -1,53 +1,3 @@
#
# Used by Buildbot build pipeline make_update.py script only for now
# We intended to update the make_update.py in the branches to use this file eventually
#
update-code:
git:
submodules:
- branch: blender-v3.5-release
commit_id: HEAD
path: release/scripts/addons
- branch: blender-v3.5-release
commit_id: HEAD
path: release/scripts/addons_contrib
- branch: blender-v3.5-release
commit_id: HEAD
path: release/datafiles/locale
- branch: blender-v3.5-release
commit_id: HEAD
path: source/tools
svn:
libraries:
darwin-arm64:
branch: tags/blender-3.5-release
commit_id: HEAD
path: lib/darwin_arm64
darwin-x86_64:
branch: tags/blender-3.5-release
commit_id: HEAD
path: lib/darwin
linux-x86_64:
branch: tags/blender-3.5-release
commit_id: HEAD
path: lib/linux_x86_64_glibc_228
windows-amd64:
branch: tags/blender-3.5-release
commit_id: HEAD
path: lib/win64_vc15
tests:
branch: tags/blender-3.5-release
commit_id: HEAD
path: lib/tests
benchmarks:
branch: trunk
commit_id: HEAD
path: lib/benchmarks
assets:
branch: trunk
commit_id: HEAD
path: lib/assets
#
# Buildbot only configs
#

View File

@ -135,7 +135,7 @@ def submodules_to_manifest(
submodule = line.split()[1]
# Don't use native slashes as GIT for MS-Windows outputs forward slashes.
if skip_addon_contrib and submodule == "release/scripts/addons_contrib":
if skip_addon_contrib and submodule == "scripts/addons_contrib":
continue
for path in git_ls_files(blender_srcdir / submodule):

View File

@ -16,14 +16,28 @@ import shutil
import sys
import make_utils
from pathlib import Path
from make_utils import call, check_output
from urllib.parse import urljoin
from typing import (
List,
Iterable,
Optional,
)
class Submodule:
path: str
branch: str
branch_fallback: str
def __init__(self, path: str, branch: str, branch_fallback: str) -> None:
self.path = path
self.branch = branch
self.branch_fallback = branch_fallback
def print_stage(text: str) -> None:
print("")
print(text)
@ -196,73 +210,257 @@ def git_update_skip(args: argparse.Namespace, check_remote_exists: bool = True)
return ""
def use_upstream_workflow(args: argparse.Namespace) -> bool:
return make_utils.git_remote_exist(args.git_command, "upstream")
def work_tree_update_upstream_workflow(args: argparse.Namespace, use_fetch=True) -> str:
"""
Update the Blender repository using the Github style of fork organization
Returns true if the current local branch has been updated to the upstream state.
Otherwise false is returned.
"""
branch_name = make_utils.git_branch(args.git_command)
if use_fetch:
call((args.git_command, "fetch", "upstream"))
upstream_branch = f"upstream/{branch_name}"
if not make_utils.git_branch_exists(args.git_command, upstream_branch):
return "no_branch"
retcode = call((args.git_command, "merge", "--ff-only", upstream_branch), exit_on_error=False)
if retcode != 0:
return "Unable to fast forward\n"
return ""
def work_tree_update(args: argparse.Namespace, use_fetch=True) -> str:
"""
Update the Git working tree using the best strategy
This function detects whether it is a github style of fork remote organization is used, or
is it a repository which origin is an upstream.
"""
if use_upstream_workflow(args):
message = work_tree_update_upstream_workflow(args, use_fetch)
if message != "no_branch":
return message
# If there is upstream configured but the local branch is not in the upstream, try to
# update the branch from the fork.
update_command = [args.git_command, "pull", "--rebase"]
call(update_command)
return ""
# Update blender repository.
def blender_update(args: argparse.Namespace) -> None:
def blender_update(args: argparse.Namespace) -> str:
print_stage("Updating Blender Git Repository")
call([args.git_command, "pull", "--rebase"])
return work_tree_update(args)
# Update submodules.
def submodules_update(
args: argparse.Namespace,
release_version: Optional[str],
branch: Optional[str],
) -> str:
print_stage("Updating Submodules")
if make_utils.command_missing(args.git_command):
sys.stderr.write("git not found, can't update code\n")
sys.exit(1)
def resolve_external_url(blender_url: str, repo_name: str) -> str:
return urljoin(blender_url + "/", "../" + repo_name)
Sergey marked this conversation as resolved

I was expecting this to move rather than copy. Now the directory stays behind. If we wanted to do that it should be git ignored at least? I guess also for bisect.

I was expecting this to move rather than copy. Now the directory stays behind. If we wanted to do that it should be git ignored at least? I guess also for bisect.
# Update submodules to appropriate given branch,
# falling back to main if none is given and/or found in a sub-repository.
def external_script_copy_old_submodule_over(args: argparse.Namespace, directory_name: str) -> None:
blender_git_root = Path(get_blender_git_root())
scripts_dir = blender_git_root / "scripts"
external_dir = scripts_dir / directory_name
old_submodule_relative_dir = Path("release") / "scripts" / directory_name
print(f"Moving {old_submodule_relative_dir} to scripts/{directory_name} ...")
old_submodule_dir = blender_git_root / old_submodule_relative_dir
shutil.move(old_submodule_dir, external_dir)
# Remove old ".git" which is a file with path to a submodule bare repo inside of main
# repo .git/modules directory.
(external_dir / ".git").unlink()
bare_repo_relative_dir = Path(".git") / "modules" / "release" / "scripts" / directory_name
print(f"Copying {bare_repo_relative_dir} to scripts/{directory_name}/.git ...")
bare_repo_dir = blender_git_root / bare_repo_relative_dir
shutil.copytree(bare_repo_dir, external_dir / ".git")
git_config = external_dir / ".git" / "config"
call((args.git_command, "config", "--file", git_config, "--unset", "core.worktree"))
def external_script_initialize_if_needed(args: argparse.Namespace,
repo_name: str,
directory_name: str) -> None:
"""Initialize checkout of an external repository scripts directory"""
blender_git_root = Path(get_blender_git_root())
blender_dot_git = blender_git_root / ".git"
scripts_dir = blender_git_root / "scripts"
external_dir = scripts_dir / directory_name
if external_dir.exists():
return
print(f"Initializing scripts/{directory_name} ...")
old_submodule_dot_git = blender_git_root / "release" / "scripts" / directory_name / ".git"
if old_submodule_dot_git.exists() and blender_dot_git.is_dir():
external_script_copy_old_submodule_over(args, directory_name)
return
origin_name = "upstream" if use_upstream_workflow(args) else "origin"
blender_url = make_utils.git_get_remote_url(args.git_command, origin_name)
external_url = resolve_external_url(blender_url, repo_name)
call((args.git_command, "clone", "--origin", origin_name, external_url, external_dir))
def external_script_add_origin_if_needed(args: argparse.Namespace,
repo_name: str,
directory_name: str) -> str:
"""
Add remote called 'origin' if there is a fork of the external repository available
This is only done when using Github style upstream workflow in the main repository.
"""
if not use_upstream_workflow(args):
return ""
cwd = os.getcwd()
blender_git_root = Path(get_blender_git_root())
scripts_dir = blender_git_root / "scripts"
external_dir = scripts_dir / directory_name
origin_blender_url = make_utils.git_get_remote_url(args.git_command, "origin")
origin_external_url = resolve_external_url(origin_blender_url, repo_name)
try:
os.chdir(external_dir)
if (make_utils.git_remote_exist(args.git_command, "origin") or
not make_utils.git_remote_exist(args.git_command, "upstream")):
return
if not make_utils.git_is_remote_repository(args.git_command, origin_external_url):
return
print(f"Adding origin remote to {directory_name} pointing to fork ...")
# Non-obvious tricks to introduce the new remote called "origin" to the existing
# submodule configuration.
#
# This is all within the content of creating a fork of a submodule after `make update`
# has been run and possibly local branches tracking upstream were added.
#
# The idea here goes as following:
#
# - Rename remote "upstream" to "origin", which takes care of changing the names of
# remotes the local branches are tracking.
#
# - Change the URL to the "origin", which so was was still pointing to upstream.
#
# - Re-introduce the "upstream" remote, with the same URL as it had prior to rename.
upstream_url = make_utils.git_get_remote_url(args.git_command, "upstream")
call((args.git_command, "remote", "rename", "upstream", "origin"))
make_utils.git_set_config(args.git_command, f"remote.origin.url", origin_external_url)
call((args.git_command, "remote", "add", "upstream", upstream_url))
finally:
os.chdir(cwd)
return ""
def external_scripts_update(args: argparse.Namespace,
repo_name: str,
directory_name: str,
branch: Optional[str]) -> str:
"""Update a single external checkout with the given name in the scripts folder"""
external_script_initialize_if_needed(args, repo_name, directory_name)
external_script_add_origin_if_needed(args, repo_name, directory_name)
print(f"Updating scripts/{directory_name} ...")
cwd = os.getcwd()
blender_git_root = Path(get_blender_git_root())
scripts_dir = blender_git_root / "scripts"
external_dir = scripts_dir / directory_name
# Update externals to appropriate given branch, falling back to main if none is given and/or
# found in a sub-repository.
branch_fallback = "main"
if not branch:
branch = branch_fallback
submodules = [
("release/scripts/addons", branch, branch_fallback),
("release/scripts/addons_contrib", branch, branch_fallback),
("release/datafiles/locale", branch, branch_fallback),
("source/tools", branch, branch_fallback),
]
# Initialize submodules only if needed.
for submodule_path, submodule_branch, submodule_branch_fallback in submodules:
if not os.path.exists(os.path.join(submodule_path, ".git")):
call([args.git_command, "submodule", "update", "--init", "--recursive"])
break
# Checkout appropriate branch and pull changes.
skip_msg = ""
for submodule_path, submodule_branch, submodule_branch_fallback in submodules:
cwd = os.getcwd()
try:
os.chdir(submodule_path)
msg = git_update_skip(args, check_remote_exists=False)
if msg:
skip_msg += submodule_path + " skipped: " + msg + "\n"
else:
# Find a matching branch that exists.
call([args.git_command, "fetch", "origin"])
if make_utils.git_branch_exists(args.git_command, submodule_branch):
pass
elif make_utils.git_branch_exists(args.git_command, submodule_branch_fallback):
submodule_branch = submodule_branch_fallback
else:
# Skip.
submodule_branch = ""
# Switch to branch and pull.
if submodule_branch:
if make_utils.git_branch(args.git_command) != submodule_branch:
call([args.git_command, "checkout", submodule_branch])
call([args.git_command, "pull", "--rebase", "origin", submodule_branch])
finally:
os.chdir(cwd)
try:
os.chdir(external_dir)
msg = git_update_skip(args, check_remote_exists=False)
if msg:
skip_msg += directory_name + " skipped: " + msg + "\n"
else:
# Find a matching branch that exists.
for remote in ("origin", "upstream"):
if make_utils.git_remote_exist(args.git_command, remote):
call([args.git_command, "fetch", remote])
submodule_branch = branch
if make_utils.git_branch_exists(args.git_command, submodule_branch):
pass
elif make_utils.git_branch_exists(args.git_command, branch_fallback):
submodule_branch = branch_fallback
else:
# Skip.
submodule_branch = ""
# Switch to branch and pull.
if submodule_branch:
if make_utils.git_branch(args.git_command) != submodule_branch:
call([args.git_command, "checkout", submodule_branch])
# Don't use extra fetch since all remotes of interest have been already fetched
# some lines above.
skip_msg += work_tree_update(args, use_fetch=False)
finally:
os.chdir(cwd)
return skip_msg
def scripts_submodules_update(args: argparse.Namespace, branch: Optional[str]) -> str:
"""Update working trees of addons and addons_contrib within the scripts/ directory"""
msg = ""
msg += external_scripts_update(args, "blender-addons", "addons", branch)
msg += external_scripts_update(args, "blender-addons-contrib", "addons_contrib", branch)
return msg
def submodules_update(args: argparse.Namespace, branch: Optional[str]) -> str:
"""Update submodules or other externally tracked source trees"""
msg = ""
msg += scripts_submodules_update(args, branch)
return msg
if __name__ == "__main__":
args = parse_arguments()
blender_skip_msg = ""
@ -285,9 +483,9 @@ if __name__ == "__main__":
if blender_skip_msg:
blender_skip_msg = "Blender repository skipped: " + blender_skip_msg + "\n"
else:
blender_update(args)
blender_skip_msg = "Blender repository skipped: " + blender_update(args) + "\n"
if not args.no_submodules:
submodules_skip_msg = submodules_update(args, release_version, branch)
submodules_skip_msg = submodules_update(args, branch)
# Report any skipped repositories at the end, so it's not as easy to miss.
skip_msg = blender_skip_msg + submodules_skip_msg

View File

@ -9,7 +9,9 @@ import re
import shutil
import subprocess
import sys
import os
from pathlib import Path
from urllib.parse import urljoin
from typing import (
Sequence,
@ -19,7 +21,7 @@ from typing import (
def call(cmd: Sequence[str], exit_on_error: bool = True, silent: bool = False) -> int:
if not silent:
print(" ".join(cmd))
print(" ".join([str(x) for x in cmd]))
# Flush to ensure correct order output on Windows.
sys.stdout.flush()
@ -55,10 +57,48 @@ def check_output(cmd: Sequence[str], exit_on_error: bool = True) -> str:
def git_branch_exists(git_command: str, branch: str) -> bool:
return (
call([git_command, "rev-parse", "--verify", branch], exit_on_error=False, silent=True) == 0 or
call([git_command, "rev-parse", "--verify", "remotes/upstream/" + branch], exit_on_error=False, silent=True) == 0 or
call([git_command, "rev-parse", "--verify", "remotes/origin/" + branch], exit_on_error=False, silent=True) == 0
)
def git_get_remote_url(git_command: str, remote_name: str) -> bool:
return check_output((git_command, "ls-remote", "--get-url", remote_name))
def git_remote_exist(git_command: str, remote_name: str) -> bool:
"""Check whether there is a remote with the given name"""
# `git ls-remote --get-url upstream` will print an URL if there is such remote configured, and
# otherwise will print "upstream".
remote_url = check_output((git_command, "ls-remote", "--get-url", remote_name))
return remote_url != remote_name
def git_get_resolved_submodule_url(git_command: str, blender_url: str, submodule_path: str) -> str:
git_root = check_output([git_command, "rev-parse", "--show-toplevel"])
dot_gitmodules = os.path.join(git_root, ".gitmodules")
submodule_key_prefix = f"submodule.{submodule_path}"
submodule_key_url = f"{submodule_key_prefix}.url"
gitmodule_url = git_get_config(
git_command, submodule_key_url, file=dot_gitmodules)
# A bit of a trickery to construct final URL.
# Only works for the relative submodule URLs.
#
# Note that unless the LHS URL ends up with a slash urljoin treats the last component as a
# file.
assert gitmodule_url.startswith('..')
return urljoin(blender_url + "/", gitmodule_url)
def git_is_remote_repository(git_command: str, repo: str) -> bool:
"""Returns true if the given repository is a valid/clonable git repo"""
exit_code = call((git_command, "ls-remote", repo, "HEAD"), exit_on_error=False, silent=True)
return exit_code == 0
def git_branch(git_command: str) -> str:
# Get current branch name.
try:
@ -70,6 +110,20 @@ def git_branch(git_command: str) -> str:
return branch.strip().decode('utf8')
def git_get_config(git_command: str, key: str, file: Optional[str] = None) -> str:
if file:
return check_output([git_command, "config", "--file", file, "--get", key])
return check_output([git_command, "config", "--get", key])
def git_set_config(git_command: str, key: str, value: str, file: Optional[str] = None) -> str:
if file:
return check_output([git_command, "config", "--file", file, key, value])
return check_output([git_command, "config", key, value])
def git_tag(git_command: str) -> Optional[str]:
# Get current tag name.
try:

View File

@ -4,9 +4,9 @@ if "%GIT%" == "" (
)
cd "%BLENDER_DIR%"
for /f "delims=" %%i in ('"%GIT%" rev-parse HEAD') do echo Branch_hash=%%i
cd "%BLENDER_DIR%/release/datafiles/locale"
cd "%BLENDER_DIR%/locale"
for /f "delims=" %%i in ('"%GIT%" rev-parse HEAD') do echo Locale_hash=%%i
cd "%BLENDER_DIR%/release/scripts/addons"
cd "%BLENDER_DIR%/scripts/addons"
for /f "delims=" %%i in ('"%GIT%" rev-parse HEAD') do echo Addons_Hash=%%i
cd "%BLENDER_DIR%"
:EOF

View File

@ -31,7 +31,7 @@ For an overview of BMesh data types and how they reference each other see:
Example Script
--------------
.. literalinclude:: __/__/__/release/scripts/templates_py/bmesh_simple.py
.. literalinclude:: __/__/__/scripts/templates_py/bmesh_simple.py
Standalone Module

View File

@ -288,7 +288,7 @@ In Python, this is done by defining a class, which is a subclass of an existing
Example Operator
----------------
.. literalinclude:: __/__/__/release/scripts/templates_py/operator_simple.py
.. literalinclude:: __/__/__/scripts/templates_py/operator_simple.py
Once this script runs, ``SimpleOperator`` is registered with Blender
and can be called from Operator Search or added to the toolbar.
@ -320,7 +320,7 @@ Example Panel
Panels are registered as a class, like an operator.
Notice the extra ``bl_`` variables used to set the context they display in.
.. literalinclude:: __/__/__/release/scripts/templates_py/ui_panel_simple.py
.. literalinclude:: __/__/__/scripts/templates_py/ui_panel_simple.py
To run the script:

View File

@ -367,13 +367,13 @@ except ImportError:
# Note that ".." is replaced by "__" in the RST files,
# to avoid having to match Blender's source tree.
EXTRA_SOURCE_FILES = (
"../../../release/scripts/templates_py/bmesh_simple.py",
"../../../release/scripts/templates_py/gizmo_operator.py",
"../../../release/scripts/templates_py/gizmo_operator_target.py",
"../../../release/scripts/templates_py/gizmo_simple.py",
"../../../release/scripts/templates_py/operator_simple.py",
"../../../release/scripts/templates_py/ui_panel_simple.py",
"../../../release/scripts/templates_py/ui_previews_custom_icon.py",
"../../../scripts/templates_py/bmesh_simple.py",
"../../../scripts/templates_py/gizmo_operator.py",
"../../../scripts/templates_py/gizmo_operator_target.py",
"../../../scripts/templates_py/gizmo_simple.py",
"../../../scripts/templates_py/operator_simple.py",
"../../../scripts/templates_py/ui_panel_simple.py",
"../../../scripts/templates_py/ui_previews_custom_icon.py",
"../examples/bmesh.ops.1.py",
"../examples/bpy.app.translations.py",
)
@ -1816,7 +1816,7 @@ def pyrna2sphinx(basepath):
# operators
def write_ops():
API_BASEURL = "https://projects.blender.org/blender/blender/src/branch/main/release/scripts"
API_BASEURL = "https://projects.blender.org/blender/blender/src/branch/main/scripts"
API_BASEURL_ADDON = "https://projects.blender.org/blender/blender-addons"
API_BASEURL_ADDON_CONTRIB = "https://projects.blender.org/blender/blender-addons-contrib"

65
locale/languages Normal file
View File

@ -0,0 +1,65 @@
# File used by Blender to know which languages (translations) are available,
# and to generate translation menu.
#
# File format:
# ID:MENULABEL:ISOCODE
# ID must be unique, except for 0 value (marks categories for menu).
# Line starting with a # are comments!
#
# Automatically generated by bl_i18n_utils/update_languages_menu.py script.
# Highest ID currently in use: 48
#
0:Complete:
0:Automatic (Automatic):DEFAULT
1:English (English):en_US
9:Spanish (Español):es
8:French (Français):fr_FR
2:Japanese (日本語):ja_JP
47:Slovak (Slovenčina):sk_SK
41:Vietnamese (tiếng Việt):vi_VN
13:Simplified Chinese (简体中文):zh_CN
#
0:In Progress:
10:Catalan (Català):ca_AD
11:Czech (Český):cs_CZ
5:German (Deutsch):de_DE
4:Italian (Italiano):it_IT
48:Georgian (ქართული):ka
24:Korean (한국어):ko_KR
32:Brazilian Portuguese (Português do Brasil):pt_BR
12:Portuguese (Português):pt_PT
15:Russian (Русский):ru_RU
18:Ukrainian (Українська):uk_UA
14:Traditional Chinese (繁體中文):zh_TW
#
0:Starting:
45:Abkhaz (Аԥсуа бызшәа):ab
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #37:Amharic (አማርኛ):am_ET
21:Arabic (ﺔﻴﺑﺮﻌﻟﺍ):ar_EG
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #22:Bulgarian (Български):bg_BG
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #23:Greek (Ελληνικά):el_GR
35:Esperanto (Esperanto):eo
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #36:Spanish from Spain (Español de España):es_ES
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #34:Estonian (Eestlane):et_EE
42:Basque (Euskara):eu_EU
26:Persian (ﯽﺳﺭﺎﻓ):fa_IR
6:Finnish (Suomi):fi_FI
43:Hausa (Hausa):ha
33:Hebrew (תירִבְעִ):he_IL
40:Hindi (मानक हिन्दी):hi_IN
16:Croatian (Hrvatski):hr_HR
31:Hungarian (Magyar):hu_HU
27:Indonesian (Bahasa indonesia):id_ID
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #44:Kazakh (қазақша):kk_KZ
29:Kyrgyz (Кыргыз тили):ky_KG
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #25:Nepali (नेपाली):ne_NP
3:Dutch (Nederlandse taal):nl_NL
19:Polish (Polski):pl_PL
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #20:Romanian (Român):ro_RO
17:Serbian (Српски):sr_RS
28:Serbian Latin (Srpski latinica):sr_RS@latin
7:Swedish (Svenska):sv_SE
46:Thai (ภาษาไทย):th_TH
30:Turkish (Türkçe):tr_TR
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #38:Uzbek (Oʻzbek):uz_UZ
# Skipped (see IMPORT_LANGUAGES_SKIP in settings.py). #39:Uzbek Cyrillic (Ўзбек):uz_UZ@cyrillic

720
locale/po/ab.po Normal file
View File

@ -0,0 +1,720 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 3.5.0 Beta (b'5fd4d47206ff')\n"
"Report-Msgid-Bugs-To: \n"
"\"POT-Creation-Date: 2019-02-25 20:41:30\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Daniel Tlisha <daniel.abzakh@gmail.com>\n"
"Language-Team: Abkhaz language team <daniel.abzakh@gmail.com>\n"
"Language: ab\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit"
msgid "Select"
msgstr "Алхра"
msgid "Add"
msgstr "Ацҵара"
msgid "Subtract"
msgstr "Ацхра"
msgid "Empty"
msgstr "Аҭацәы"
msgid "Edge"
msgstr "Акьыԥшь"
msgid "Face"
msgstr "Ахаҿы"
msgid "Object"
msgstr "Амаҭәар"
msgid "Texts"
msgstr "Аҳәоуқәа"
msgid "Main Images"
msgstr "Ихадоу Асахьақәа"
msgid "Main Lights"
msgstr "Ихадоу Алашарақәа"
msgid "Main Meshes"
msgstr "Ихадоу Аҿарԥагақәа"
msgid "Mode"
msgstr "А́иҿкаашьа"
msgid "Marker"
msgstr "Ашьҭа"
msgid "Image"
msgstr "Асахьанҵа"
msgid "Rotation"
msgstr "Агьежьра"
msgid "Scale"
msgstr "Ашәага"
msgid "Curve"
msgstr "Архәара"
msgid "Difference"
msgstr "Аиԥшымра"
msgid "Armature"
msgstr "Абаҩ"
msgid "Camera"
msgstr "Акамера"
msgid "Location"
msgstr "Аҭыԥ"
msgid "Cursor"
msgstr "Ахырхага"
msgid "Plane"
msgstr "Аҟьаҟьа"
msgid "View"
msgstr "Аԥшра"
msgid "Render"
msgstr "Архиара"
msgid "Shading"
msgstr "Аршәшьра"
msgctxt "ID"
msgid "Armature"
msgstr "Абаҩ"
msgctxt "ID"
msgid "Camera"
msgstr "Акамера"
msgctxt "ID"
msgid "Image"
msgstr "Асахьанҵа"
msgctxt "ID"
msgid "Lattice"
msgstr "Аҭыџьеихац"
msgctxt "ID"
msgid "Library"
msgstr "Ашәҟәыԥхьарҭа"
msgctxt "ID"
msgid "Light"
msgstr "Алашара"
msgctxt "ID"
msgid "Metaball"
msgstr "Метампыл"
msgctxt "ID"
msgid "Speaker"
msgstr "Абжьы Ахыҵхырҭа"
msgid "Vertex"
msgstr "Ақәыцә"
msgid "Group"
msgstr "Агәыԥ"
msgid "Cone"
msgstr "Аконус"
msgid "Sphere"
msgstr "Асфера"
msgid "End"
msgstr "Алгара"
msgid "Start"
msgstr "Алагара"
msgid "Window"
msgstr "Аԥенџьыр"
msgid "Edit Mode"
msgstr "Аиҭакра Аиҿкаашьа"
msgid "Lattice"
msgstr "Аҭыџьеихац"
msgid "Library"
msgstr "Ашәҟәыԥхьарҭа"
msgid "Local"
msgstr "Ҷыдала"
msgid "Global"
msgstr "Зеиԥшла"
msgctxt "Light"
msgid "Light"
msgstr "Алашара"
msgctxt "Light"
msgid "Sun"
msgstr "Амра"
msgid "Cube"
msgstr "Акуб"
msgid "Roughness"
msgstr "Аџьаџьара"
msgid "Specular"
msgstr "Ацырцырра"
msgid "Circle"
msgstr "Аицыгьежь"
msgid "Object Mode"
msgstr "Амаҭәар Аиҿкаашьа"
msgid "Sculpt Mode"
msgstr "Ашәаҳара Аиҿкаашьа"
msgid "Vertex Paint"
msgstr "Ақәыцә Ашәра"
msgid "Weight Paint"
msgstr "Акапан Ашәра"
msgid "Texture Paint"
msgstr "Атекстура Ашәра"
msgctxt "ID"
msgid "Empty"
msgstr "Аҭацәы"
msgid "3D Cursor"
msgstr "3Д Ахырхага"
msgid "Edit"
msgstr "Аиҭакра"
msgid "Text"
msgstr "Аҳәоу"
msgid "Mesh"
msgstr "Аҿарҧага"
msgid "File"
msgstr "Ашәҟәы"
msgid "Help"
msgstr "Аилыркаа"
msgid "Metaball"
msgstr "Метампыл"
msgid "Light"
msgstr "Алашара"
msgid "Intersect"
msgstr "Аихҵәара"
msgid "Ball"
msgstr "Ампыл"
msgid "New"
msgstr "Аҿыц"
msgid "Keying"
msgstr " Аиҭаганҵа"
msgctxt "Operator"
msgid "Add Circle"
msgstr "Ацҵара Аицыгьежь"
msgctxt "Operator"
msgid "Add Cube"
msgstr "Ацҵара Акуб"
msgctxt "Operator"
msgid "Add Ico Sphere"
msgstr "Ацҵара Ico Асфера"
msgctxt "Operator"
msgid "Add Monkey"
msgstr "Ацҵара Амаамын"
msgctxt "Operator"
msgid "Add Plane"
msgstr "Ацҵара Аҟьаҟьа"
msgctxt "Operator"
msgid "Add UV Sphere"
msgstr "Ацҵара UV Асфера"
msgctxt "Operator"
msgid "Add Armature"
msgstr "Ацҵара Абаҩ"
msgctxt "Operator"
msgid "Add Camera"
msgstr "Ацҵара Акамера"
msgid "Monkey"
msgstr "Амаамын"
msgctxt "Operator"
msgid "Add Light"
msgstr "Ацҵара Алашара"
msgctxt "Operator"
msgid "Add Metaball"
msgstr "Ацҵара Метампыл"
msgctxt "Operator"
msgid "Add Speaker"
msgstr "Ацҵара Абжьы Ахыҵхырҭа"
msgctxt "Operator"
msgid "Add Text"
msgstr "Ацҵара Аҳәоу"
msgctxt "Scene"
msgid "New"
msgstr "Аҿыц"
msgid "Overlays"
msgstr "Ақәҵакәа"
msgctxt "Operator"
msgid "Scale"
msgstr "Ашәага"
msgid "Playback"
msgstr "Арҳәара"
msgctxt "Operator"
msgid "Circle"
msgstr "Аицыгьежь"
msgctxt "Sequence"
msgid "Image"
msgstr "Асахьанҵа"
msgctxt "Sequence"
msgid "Text"
msgstr "Аҳәоу"
msgctxt "MovieClip"
msgid "View"
msgstr "Аԥшра"
msgid "Speaker"
msgstr "Абжьы Ахыҵхырҭа"
msgctxt "WindowManager"
msgid "Armature"
msgstr "Абаҩ"
msgctxt "WindowManager"
msgid "Metaball"
msgstr "Метампы"
msgctxt "WindowManager"
msgid "Lattice"
msgstr "Аҭыџьеихац"
msgctxt "WindowManager"
msgid "Image"
msgstr "Асахьанҵа"
msgctxt "WindowManager"
msgid "Text"
msgstr "Аҳәоу"
msgctxt "Operator"
msgid "Location"
msgstr "Аҭыԥ"
msgctxt "Image"
msgid "New"
msgstr "Аҿыц"
msgctxt "Operator"
msgid "Text"
msgstr "Аҳәоу"
msgctxt "Operator"
msgid "Rotation"
msgstr "Агьежьра"
msgctxt "Text"
msgid "New"
msgstr "Аҿыц"
msgid "location"
msgstr "Аҭыԥ"
msgctxt "Operator"
msgid "Plane"
msgstr "Аҟьаҟьа"
msgctxt "Operator"
msgid "Cube"
msgstr "Акуб"
msgctxt "Operator"
msgid "UV Sphere"
msgstr "UV Асфера"
msgctxt "Operator"
msgid "Ico Sphere"
msgstr "Ico Асфера "
msgctxt "Operator"
msgid "Cylinder"
msgstr "Ацилиндр"
msgctxt "Operator"
msgid "Cone"
msgstr "Аконус"
msgctxt "Operator"
msgid "Monkey"
msgstr "Амаамын"
msgctxt "Operator"
msgid "Camera"
msgstr "Акамера"
msgctxt "Operator"
msgid "Speaker"
msgstr "Абжьы Ахыҵхырҭа"
msgctxt "Operator"
msgid "Armature"
msgstr "Абаҩ"
msgctxt "Operator"
msgid "Lattice"
msgstr "Аҭыџьеихац"
msgctxt "Object"
msgid "New"
msgstr "Аҿыц"
msgctxt "Mesh"
msgid "New"
msgstr "Аҿыц"
msgctxt "Curve"
msgid "New"
msgstr "Аҿыц"
msgctxt "Metaball"
msgid "New"
msgstr "Аҿыц"
msgctxt "Material"
msgid "New"
msgstr "Аҿыц"
msgctxt "Texture"
msgid "New"
msgstr "Аҿыц"
msgctxt "Lattice"
msgid "New"
msgstr "Аҿыц"
msgctxt "Light"
msgid "New"
msgstr "Аҿыц"
msgctxt "Camera"
msgid "New"
msgstr "Аҿыц"
msgctxt "World"
msgid "New"
msgstr "Аҿыц"
msgctxt "Screen"
msgid "New"
msgstr "Аҿыц"
msgctxt "Speaker"
msgid "New"
msgstr "Аҿыц"
msgctxt "Sound"
msgid "New"
msgstr "Аҿыц"
msgctxt "Armature"
msgid "New"
msgstr "Аҿыц"
msgctxt "Action"
msgid "New"
msgstr "Аҿыц"
msgctxt "NodeTree"
msgid "New"
msgstr "Аҿыц"
msgctxt "Brush"
msgid "New"
msgstr "Аҿыц"
msgctxt "ParticleSettings"
msgid "New"
msgstr "Аҿыц"
msgctxt "GPencil"
msgid "New"
msgstr "Аҿыц"
msgctxt "FreestyleLineStyle"
msgid "New"
msgstr "Аҿыц"
msgctxt "WorkSpace"
msgid "New"
msgstr "Аҿыц"
msgctxt "LightProbe"
msgid "New"
msgstr "Аҿыц"
msgctxt "Action"
msgid "Group"
msgstr "Агәыԥ"
msgid "Front Orthographic"
msgstr "Аԥхьа Аҩышьаԥҟара"
msgid "Front Perspective"
msgstr "Аԥхьа Ԥхьаԥшра"
msgid "Back Orthographic"
msgstr "Ашьҭахь Аҩышьаԥҟара"
msgid "Back Perspective"
msgstr "Ашьҭахь Ԥхьаԥшра"
msgid "Top Orthographic"
msgstr "Ақә Аҩышьаԥҟара"
msgid "Top Perspective"
msgstr "Ақә Ԥхьаԥшра"
msgid "Bottom Orthographic"
msgstr "Ҵаҟа Аҩышьаԥҟара"
msgid "Bottom Perspective"
msgstr "Ҵаҟа Ԥхьаԥшра"
msgid "Right Orthographic"
msgstr "Арӷьа Аҩышьаԥҟара"
msgid "Right Perspective"
msgstr "Арӷьа Ԥхьаԥшра"
msgid "Left Orthographic"
msgstr "Арма Аҩышьаԥҟара"
msgid "Left Perspective"
msgstr "Арма Ԥхьаԥшра"
msgid "Camera Perspective"
msgstr "Акамера Ԥхьаԥшра"
msgid "Camera Orthographic"
msgstr "Акамера Аҩышьаԥҟара"
msgid "User Orthographic"
msgstr "Ахархәаҩ Аҩышьаԥҟара"
msgid "User Perspective"
msgstr "Ахархәаҩ Ԥхьаԥшра"
msgid "global"
msgstr "Зеиԥшла"
msgid "local"
msgstr "Ҷыдала"
msgid "view"
msgstr "Аԥшра"
msgid "cursor"
msgstr "Ахырхага"
msgctxt "Armature"
msgid "Group"
msgstr "Агәыԥ"

41082
locale/po/ar.po Normal file

File diff suppressed because it is too large Load Diff

72547
locale/po/ca.po Normal file

File diff suppressed because it is too large Load Diff

48103
locale/po/cs.po Normal file

File diff suppressed because it is too large Load Diff

66345
locale/po/de.po Normal file

File diff suppressed because it is too large Load Diff

75
locale/po/eo.po Normal file
View File

@ -0,0 +1,75 @@
msgid "Select"
msgstr "Elektas"
msgid "Add"
msgstr "Aldonia"
msgid "View"
msgstr "Rigardi"
msgid "Render"
msgstr "Por Kapitulacigi"
msgid "Window"
msgstr "Fenestro"
msgid "Edit Mode"
msgstr "Prilaborado Modo"
msgid "Links"
msgstr "Ligiloj"
msgid "Object Mode"
msgstr "Objekto Modo"
msgid "Sculpt Mode"
msgstr "Skulptaĵo Modo"
msgid "File"
msgstr "Dosiero"
msgid "Help"
msgstr "Helpo"
msgid "New"
msgstr "Nova"
msgctxt "Operator"
msgid "Select"
msgstr "Elektas"
msgid "View Z Axis"
msgstr "Montri Z Axis"
msgid "View X Axis"
msgstr "Montri X Axis"
msgctxt "Operator"
msgid "Render"
msgstr "Por Kapitulacigi"
msgctxt "Operator"
msgid "Recover Last Session"
msgstr "Restaŭri lasta kunsido"
msgid "Recent"
msgstr "Freŝaj"

126298
locale/po/es.po Normal file

File diff suppressed because it is too large Load Diff

99778
locale/po/es_ES.po Normal file

File diff suppressed because it is too large Load Diff

2578
locale/po/eu.po Normal file

File diff suppressed because it is too large Load Diff

4305
locale/po/fa.po Normal file

File diff suppressed because it is too large Load Diff

12368
locale/po/fi.po Normal file

File diff suppressed because it is too large Load Diff

128050
locale/po/fr.po Normal file

File diff suppressed because it is too large Load Diff

123
locale/po/ha.po Normal file
View File

@ -0,0 +1,123 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 3.5.0 Beta (b'5fd4d47206ff')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-20 13:46:36\n"
"PO-Revision-Date: 2017-12-25 14:01+0100\n"
"Last-Translator: UMAR HARUNA ABDULLAHI <umarbrowser20@gmail.com>\n"
"Language-Team: BlenderNigeria <pyc0der@outlook.com>\n"
"Language: ha\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.11"
msgid "Name"
msgstr "Suna"
msgid "Action F-Curves"
msgstr "Aikin F-Curves"
msgid "Collection of action F-Curves"
msgstr "Karban bayanan aikin F-Curves"
msgid "Action Group"
msgstr "Aikin Kunguya"
msgid "Groups of F-Curves"
msgstr "Kungiyar F-Curves"
msgid "Channels"
msgstr "Channels"
msgid "F-Curves in this group"
msgstr "F-Curves acikin wannan kungiya"
msgid "Color Set"
msgstr "Sashin Launi"
msgid "Custom color set to use"
msgstr "Hadaddiyar sashin launin daza a saka"
msgid "Default Colors"
msgstr "Launi na ainihi"
msgid "01 - Theme Color Set"
msgstr "01 - Theme Color Set"
msgid "02 - Theme Color Set"
msgstr "02 - Theme Color Set"
msgid "03 - Theme Color Set"
msgstr "03 - Theme Color Set"
msgid "04 - Theme Color Set"
msgstr "04 - Theme Color Set"
msgid "Custom Color Set"
msgstr "Hadaddiyar sashin launuka"
msgid "Colors"
msgstr "launuka"
msgid "Copy of the colors associated with the group's color set"
msgstr "Ari launukan dasuka danganta da launukannan"
msgid "Color set is user-defined instead of a fixed theme color set"
msgstr "Launukan nawanda yasane ba na gyararren theme ba"
msgid "Lock"
msgstr "rufe"
msgid "Action group is locked"
msgstr "Aikin kungiya ya rufe"
msgid "Select"
msgstr "Zabi"
msgid "Action group is selected"
msgstr "An zabi aikin kungiya"
msgid "Expanded"
msgstr "budadde"
msgid "Action Groups"
msgstr "Aikin kungiyoyi"
msgid "Collection of action groups"
msgstr "Karban aikin kungiyoyi"
msgid "Action Pose Markers"
msgstr "Aikin Pose Markers"
msgid "Collection of timeline markers"
msgstr "Sashin lokacin markers"

531
locale/po/he.po Normal file
View File

@ -0,0 +1,531 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 3.5.0 Beta (b'5fd4d47206ff')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-20 13:46:36\n"
"PO-Revision-Date: 2012-10-07 13:56+0300\n"
"Last-Translator: Barak Itkin <lightningismyname@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Virtaal 0.7.0"
msgid "Name"
msgstr "םש"
msgid "Color"
msgstr "עבצ"
msgid "Value"
msgstr "ךרע"
msgid "Off"
msgstr "יובכ"
msgid "Add"
msgstr "ףסוה"
msgid "Width"
msgstr "בחור"
msgid "Vector"
msgstr "רוטקו"
msgid "Indirect"
msgstr "ףיקע"
msgid "Speed"
msgstr "תוריהמ"
msgid "Strength"
msgstr "המצוע"
msgid "Random"
msgstr "יארקא"
msgid "Remove"
msgstr "רסה"
msgid "Vertex Color"
msgstr "דוקדוק עבצ"
msgid "Smooth"
msgstr "קלח"
msgid "Saturation"
msgstr "היוור"
msgid "Path"
msgstr "ביתנ"
msgid "Rotation"
msgstr "בוביס"
msgid "Left"
msgstr "לאמש"
msgid "Right"
msgstr "ןימי"
msgid "Center"
msgstr "זכרמ"
msgid "Gamma"
msgstr "אמג"
msgid "Constant"
msgstr "עובק"
msgid "Position"
msgstr "םוקמ"
msgid "Output"
msgstr "טלפ"
msgid "Default"
msgstr "לדחמ תרירב"
msgid "Location"
msgstr "םוקימ"
msgid "White Level"
msgstr "ןבל תמר"
msgid "Surface"
msgstr "חטשמ"
msgid "View"
msgstr "הגוצת"
msgid "Scene"
msgstr "הנצס"
msgid "Shrink"
msgstr "ץווכ"
msgid "Modifiers"
msgstr "םינשמ"
msgid "Frequency"
msgstr "תורידת"
msgid "Size"
msgstr "לדוג"
msgid "Environment"
msgstr "הביבס"
msgid "End"
msgstr "ףוס"
msgid "Start"
msgstr "הלחתה"
msgid "Density"
msgstr "תופיפצ"
msgid "Generated"
msgstr "רצוימ"
msgid "Window"
msgstr "ןולח"
msgid "Header"
msgstr "תרתוכ"
msgid "Tools"
msgstr "םילכ"
msgid "Edit Mode"
msgstr "הכירע בצמ"
msgid "Mirror"
msgstr "הארמ"
msgid "Space"
msgstr "חוור"
msgid "Red"
msgstr "םודא"
msgid "Green"
msgstr "קורי"
msgid "Blue"
msgstr "לוחכ"
msgid "Mask"
msgstr "הכסמ"
msgid "Up"
msgstr "הלעמ"
msgid "Mean"
msgstr "עצוממ"
msgid "Movie"
msgstr "טרס"
msgid "Roughness"
msgstr "תוסג"
msgid "Specular"
msgstr "רלקפסא"
msgid "Both"
msgstr "םהינש"
msgid "Sculpt Mode"
msgstr "לוסיפ בצמ"
msgid "Vertex Paint"
msgstr "םידוקדוק תעיבצ"
msgid "Weight Paint"
msgstr "לקשמ תעיבצ"
msgid "Quadratic"
msgstr "יעוביר"
msgid "Mist"
msgstr "לפרע"
msgid "Color Management"
msgstr "עבצ לוהינ"
msgid "Apply"
msgstr "לחה"
msgid "Python"
msgstr "Python"
msgid "System"
msgstr "תכרעמ"
msgid "Convert"
msgstr "רמה"
msgid "World"
msgstr "םלוע"
msgid "Lift"
msgstr "יוליע"
msgid "Y Axis"
msgstr "Y ריצ"
msgid "Background"
msgstr "עקר"
msgid "Reflection"
msgstr "תופקתשה"
msgid "Emission"
msgstr "הטילפ"
msgid "Down"
msgstr "הטמ"
msgid "Lamp"
msgstr "הרונמ"
msgid "Reset"
msgstr "לוחתא"
msgid "Manual"
msgstr "ינדי"
msgid "Credits"
msgstr "תודות"
msgid "Detail"
msgstr "טוריפ"
msgid "Dimension"
msgstr "דמימ"
msgid "Location:"
msgstr ":םוקימ"
msgid "Nothing selected"
msgstr "רבד רחבנ אל"
msgctxt "Operator"
msgid "Change Shortcut"
msgstr "ךרד־רוציק הנש"
msgctxt "Operator"
msgid "Reset All to Default Values"
msgstr "לדחמה תרירב יכרעל לכה לחתא"
msgctxt "Operator"
msgid "Remove Shortcut"
msgstr "ךרד־רוציק רסה"
msgid "Value:"
msgstr ":ךרע"
msgid "(Gamma Corrected)"
msgstr "(אמג ןקותמ)"
msgid "Shortcut: %s"
msgstr "%s :ךרד־רוציק"
msgid "Python: %s"
msgstr "Python: %s"
msgid "Radians: %f"
msgstr "%f :םינאידר"
msgid "Expression: %s"
msgstr "%s :יוטיב"
msgid "Library: %s"
msgstr "%s :היירפס"
msgid "Disabled: %s"
msgstr "%s :תבשומ"
msgid "Python: %s.%s"
msgstr "Python: %s.%s"
msgid "No Properties"
msgstr "םינייפאמ אלל"
msgid "Delete points"
msgstr "תודוקנ קחמ"
msgid "Stop this job"
msgstr "וז הדובע רוצע"
msgid "%d items"
msgstr "%d םיטירפ"
msgid "Fields"
msgstr "תודש"
msgid "File Path:"
msgstr ":ץבוק ביתנ"
msgid "File path"
msgstr "ץבוק ביתנ"
msgid "Cancel"
msgstr "לוטיב"
msgid "File name"
msgstr "ץבוק םש"
msgid "Add Modifier"
msgstr "הנשמ ףסוה"
msgid "Select Layer"
msgstr "הבכש רחב"
msgid " + Z"
msgstr " + Z"
msgid "Label Size"
msgstr "תיוות לדוג"
msgid "Squash"
msgstr "ךעמ"
msgid "Disconnect"
msgstr "קתנ"
msgid "Dependency Loop"
msgstr "תויולת תאלול"
msgid "Vertex:"
msgstr ":דוקדוק"
msgid "Median:"
msgstr ":ןויצח"
msgid "Radius X:"
msgstr ":X סוידר"
msgid "Radius Y:"
msgstr ":Y סוידר"
msgid "Weight:"
msgstr ":לקשמ"
msgid "Radius:"
msgstr ":סוידר"
msgid "Mean Radius:"
msgstr ":עצוממ סוידר"
msgid "Modify"
msgstr "הנש"
msgid "Color Space:"
msgstr ":עבצ בחרמ"
msgid "Key Color"
msgstr "חתפמ עבצ"
msgid "Image 1"
msgstr "1 הנומת"
msgid "Image 2"
msgstr "2 הנומת"
msgid "Std Dev"
msgstr "ןקת תייטס"
msgid "Path:"
msgstr ":ביתנ"
msgid "Add Input"
msgstr "טלק ףסוה"
msgid "Incoming"
msgstr "סנכנ"
msgid "Color2"
msgstr "2עבצ"
msgid "Row Height"
msgstr "הרוש הבוג"
msgid "Bricks 1"
msgstr "1 םינבל"
msgid "Bricks 2"
msgstr "2 םינבל"

7300
locale/po/hi.po Normal file

File diff suppressed because it is too large Load Diff

9
locale/po/hr.po Normal file
View File

@ -0,0 +1,9 @@
msgctxt "Operator"
msgid "Duplicate Objects"
msgstr "bbbbbbbbbbbbb"
msgid "Duplicate Objects"
msgstr "aaaaaaaaa"

21219
locale/po/hu.po Normal file

File diff suppressed because it is too large Load Diff

27271
locale/po/id.po Normal file

File diff suppressed because it is too large Load Diff

60880
locale/po/it.po Normal file

File diff suppressed because it is too large Load Diff

128626
locale/po/ja.po Normal file

File diff suppressed because it is too large Load Diff

43107
locale/po/ka.po Normal file

File diff suppressed because it is too large Load Diff

89826
locale/po/ko.po Normal file

File diff suppressed because it is too large Load Diff

4170
locale/po/ky.po Normal file

File diff suppressed because it is too large Load Diff

9751
locale/po/nl.po Normal file

File diff suppressed because it is too large Load Diff

11564
locale/po/pl.po Normal file

File diff suppressed because it is too large Load Diff

68171
locale/po/pt.po Normal file

File diff suppressed because it is too large Load Diff

76649
locale/po/pt_BR.po Normal file

File diff suppressed because it is too large Load Diff

92634
locale/po/ru.po Normal file

File diff suppressed because it is too large Load Diff

128065
locale/po/sk.po Normal file

File diff suppressed because it is too large Load Diff

28383
locale/po/sr.po Normal file

File diff suppressed because it is too large Load Diff

28363
locale/po/sr@latin.po Normal file

File diff suppressed because it is too large Load Diff

2810
locale/po/sv.po Normal file

File diff suppressed because it is too large Load Diff

5922
locale/po/th.po Normal file

File diff suppressed because it is too large Load Diff

6297
locale/po/tr.po Normal file

File diff suppressed because it is too large Load Diff

104399
locale/po/uk.po Normal file

File diff suppressed because it is too large Load Diff

122861
locale/po/vi.po Normal file

File diff suppressed because it is too large Load Diff

127996
locale/po/zh_CN.po Normal file

File diff suppressed because it is too large Load Diff

61951
locale/po/zh_TW.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -33,15 +33,15 @@ aggressive = 2
# Exclude:
# - `./extern/` because it's maintained separately.
# - `./release/scripts/addons*` & `./source/tools/` because they are external repositories
# - `./scripts/addons*` & `./tools/` because they are external repositories
# which can contain their own configuration and be handled separately.
# - `./release/scripts/modules/rna_manual_reference.py` because it's a generated data-file.
# - `./scripts/modules/rna_manual_reference.py` because it's a generated data-file.
exclude = """
./extern/*,
./release/scripts/addons/*,
./release/scripts/addons_contrib/*,
./release/scripts/modules/rna_manual_reference.py,
./source/tools/*,
./scripts/addons/*,
./scripts/addons_contrib/*,
./scripts/modules/rna_manual_reference.py,
./tools/*,
"""
# Omit settings such as `jobs`, `in_place` & `recursive` as they can cause editor utilities that auto-format on save

@ -1 +0,0 @@
Subproject commit 4331c8e76c2f42b9fd903716c333d6cdeaa5cebd

View File

@ -1,7 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/**
* Generated by 'source/tools/utils/blender_theme_as_c.py'
* Generated by 'tools/utils/blender_theme_as_c.py'
*
* Do not hand edit this file!
*/

@ -1 +0,0 @@
Subproject commit b3f0ffc587d197b37eac9a1566d1d24b7bee7d9a

@ -1 +0,0 @@
Subproject commit 14ab9273409ea0231d08ba6e86fdc73d4e459e99

Some files were not shown because too many files have changed in this diff Show More