27 lines
975 B
Python

from git import Repo
from git.exc import GitError
import hashlib
import os
from SCons.Script import *
def cook(env: Environment, repo_name: str, remote_url: str, git_ref: str = "main") -> dict:
repo_dir = os.path.join(env['CLONE_DIR'], 'git', repo_name, '_bare')
try:
repo = Repo(repo_dir)
origin = repo.remotes['origin']
except GitError:
print(f'Initializing git repository for SDL at {repo_dir}.')
repo = Repo.init(repo_dir, bare=True)
origin = repo.create_remote('origin', remote_url)
worktree_dir = os.path.join(env['CLONE_DIR'], 'git', repo_name, hashlib.shake_128(git_ref.encode('utf-8')).hexdigest(6)) # TODO: commit hash would be better, right?
if not os.path.exists(worktree_dir):
print(f'Checking out into {worktree_dir}.')
origin.fetch()
os.makedirs(worktree_dir)
repo.git.worktree('add', worktree_dir, git_ref)
return {
'checkout_root': worktree_dir
}