#!/bin/sh set -e SCRIPT=$(readlink -f "$0") SCRIPTPATH=$(dirname "$SCRIPT") [ -z "${SCRIPTPATH}" ] && exit 1 [ "${SCRIPTPATH}" = "/" ] && exit 1 TMP_DIR="$SCRIPTPATH/tmp" SVN_URL_ROOT="https://svn.blender.org/svnroot/bf-blender" mkdir -p ${TMP_DIR} function checkout_or_update_svn() { url=$1 dir=$2 if [ -d ${dir} ]; then echo " Updating SVN checkout ${dir}" svn up ${dir} > /dev/null else echo " Checking out ${url} to ${dir}" svn co ${url} ${dir} > /dev/null fi } function git_commit() { message=$1 git commit -m "${message}" > /dev/null } function git_init() { git init . > /dev/null git lfs track "*.a" > /dev/null git lfs track "*.dylib" > /dev/null git lfs track "*.lib" > /dev/null git lfs track "*.exe" > /dev/null git lfs track "*.dll" > /dev/null git lfs track "*.so" > /dev/null git lfs track "*.blend" > /dev/null git lfs track "*.png" > /dev/null git lfs track "*.exr" > /dev/null git lfs track "*.tx" > /dev/null git lfs track "*.jpg" > /dev/null git lfs track "*.zip" > /dev/null git lfs track "/*/bin/*" > /dev/null git add . > /dev/null git_commit "Initial commit" git remote add origin "git@projects.blender.org/blender/`basename ${PWD}`" cat <> .gitignore # Python temporary paths. __pycache__/ EOT } function git_trunk_to_main() { git_lib_dir_name=$1 git_lib_dir="${SCRIPTPATH}/${git_lib_dir_name}.git" pushd ${git_lib_dir} > /dev/null git checkout main > /dev/null git reset trunk --hard > /dev/null git branch -d trunk > /dev/null popd > /dev/null } function convert_svn_repo() { svn_lib_dir_name=$1 svn_tag=$2 git_lib_dir_name=$3 git_branch=$4 [ -z "${git_lib_dir_name}" ] && exit 1 svn_lib_dir="${TMP_DIR}/${svn_lib_dir_name}" git_lib_dir="${SCRIPTPATH}/${git_lib_dir_name}.git" echo "--> Converting ${svn_lib_dir_name}:${svn_tag} to ${git_lib_dir_name}:${git_branch}" if [ ! -d "${git_lib_dir}" ]; then echo " Initializing git repository" mkdir -p ${git_lib_dir} pushd ${git_lib_dir} > /dev/null git_init else pushd ${git_lib_dir} > /dev/null fi if [ ${git_branch} == "main" ]; then echo > /dev/null # pass else git checkout -b ${git_branch} > /dev/null fi if [ ${svn_tag} == "trunk" ]; then svn_url="${SVN_URL_ROOT}/trunk/lib/${svn_lib_dir_name}" svn_checkout_dir=${svn_lib_dir} else svn_url="${SVN_URL_ROOT}/tags/${svn_tag}/lib/${svn_lib_dir_name}" svn_checkout_dir="${svn_lib_dir}_${svn_tag}" fi checkout_or_update_svn ${svn_url} ${svn_checkout_dir} echo " Copying files from SVN to Git" rsync -av --delete --exclude='.svn' --exclude='.git*' ${svn_checkout_dir}/ ${git_lib_dir} > /dev/null echo " Committing files" git add . > /dev/null git_commit "Initial commit of files from ${svn_tag}" popd > /dev/null } # - [ ] asset_bundles/ # - [X] assets/ # - [X] benchmarks/ # - [X] darwin/ # - [X] darwin_arm64/ # - [X] linux_centos7_x86_64/ # - [X] linux_x86_64_glibc_228/ # - [X] packages/ # - [ ] resources/ # - [X] tests/ # - [X] win64_vc15/ # echo "==> Cleaning up" # rm -rf "${SCRIPTPATH}/lib_linux_x64.git" # rm -rf "${SCRIPTPATH}/lib_macos_x64.git" # rm -rf "${SCRIPTPATH}/lib_macos_arm64.git" # rm -rf "${SCRIPTPATH}/lib_windows_x64.git" # rm -rf "${SCRIPTPATH}/assets.git" # rm -rf "${SCRIPTPATH}/benchmarks.git" # rm -rf "${SCRIPTPATH}/packages.git" # rm -rf "${SCRIPTPATH}/tests.git" # darwin if [ ! -d "${SCRIPTPATH}/lib_macos_x64.git" ]; then convert_svn_repo darwin blender-3.3-release lib_macos_x64 blender-v3.3-release convert_svn_repo darwin blender-3.6-release lib_macos_x64 blender-v3.6-release convert_svn_repo darwin trunk lib_macos_x64 trunk git_trunk_to_main lib_macos_x64 fi # darwin_arm64 if [ ! -d "${SCRIPTPATH}/lib_macos_arm64.git" ]; then convert_svn_repo darwin_arm64 blender-3.3-release lib_macos_arm64 blender-v3.3-release convert_svn_repo darwin_arm64 blender-3.6-release lib_macos_arm64 blender-v3.6-release convert_svn_repo darwin_arm64 trunk lib_macos_arm64 trunk git_trunk_to_main lib_macos_arm64 fi if [ ! -d "${SCRIPTPATH}/lib_linux_x64.git" ]; then # linux_centos7_x86_64 convert_svn_repo linux_centos7_x86_64 blender-3.3-release lib_linux_x64 blender-v3.3-release # linux_x86_64_glibc_228 convert_svn_repo linux_x86_64_glibc_228 blender-3.6-release lib_linux_x64 blender-v3.6-release convert_svn_repo linux_x86_64_glibc_228 trunk lib_linux_x64 trunk git_trunk_to_main lib_linux_x64 fi # win64_vc15 if [ ! -d "${SCRIPTPATH}/lib_windows_x64.git" ]; then convert_svn_repo win64_vc15 blender-3.3-release lib_windows_x64 blender-v3.3-release convert_svn_repo win64_vc15 blender-3.6-release lib_windows_x64 blender-v3.6-release convert_svn_repo win64_vc15 trunk lib_windows_x64 trunk git_trunk_to_main lib_windows_x64 fi # assets if [ ! -d "${SCRIPTPATH}/assets.git" ]; then convert_svn_repo assets blender-3.3-release assets blender-v3.3-release convert_svn_repo assets blender-3.6-release assets blender-v3.6-release convert_svn_repo assets trunk assets trunk git_trunk_to_main assets fi # benchmarks if [ ! -d "${SCRIPTPATH}/benchmarks.git" ]; then convert_svn_repo benchmarks blender-3.3-release benchmarks blender-v3.3-release convert_svn_repo benchmarks blender-3.6-release benchmarks blender-v3.6-release convert_svn_repo benchmarks trunk benchmarks trunk git_trunk_to_main benchmarks fi # tests if [ ! -d "${SCRIPTPATH}/test_files.git" ]; then convert_svn_repo tests blender-3.3-release test_files blender-v3.3-release convert_svn_repo tests blender-3.6-release test_files blender-v3.6-release convert_svn_repo tests trunk test_files trunk git_trunk_to_main test_files fi # packages if [ ! -d "${SCRIPTPATH}/packages.git" ]; then convert_svn_repo packages blender-3.3-release packages blender-v3.3-release convert_svn_repo packages blender-3.6-release packages blender-v3.6-release convert_svn_repo packages trunk packages trunk git_trunk_to_main packages fi