## # systr_check_repo # # Assert that the local repository path exists and is valid. ## function systr_check_repo { if [ $# -lt 1 ]; then echo "Fatal: too few arguments to systr_check_repo" exit 1 fi path="$1" ( cd "$path" if [ ! -f "refs/HEAD" ]; then echo "Fatal: $path is not a repository" exit 1 fi ) } ## # systr_init_wktree [] # # Assert that the repository at : exists, then setup # the .systr directory at the CWD. ## function systr_init_wktree { if [ $# -lt 1 ]; then echo "Fatal: too few arguments to systr_init_wktree" exit 1 fi if [ $# -gt 1 ]; then remote="$1" shift else remote="" fi path="$1" if [[ "$remote" == "" ]]; then systr_check_repo "$path" else ssh "$remote" "systrunk check-repo \"$path\"" fi mkdir -p .systr/ echo "$remote" >.systr/remote echo "$path" >.systr/path echo "NULL" >.systr/BASE echo "NULL" >.systr/TRAC echo "Setup worktree at $(pwd)" } ## # systrunk checkout [[] ] # # Reset a worktree to the state at . If is given, # checkout also initializes a new worktree at the CWD. If # is given, the path is assumed to be located on a remote machine # and is contacted over SSH. While resetting to the state at # , all local uncommitted changes are lost. # # After checkout, BASE and TRAC will be set to . ## function systr_checkout { # check arguments # if [ $# -lt 2 ]; then echo "Missing required parameters" exit fi # init worktree # if [ $# -gt 2 ]; then init_wktree $@ fi # perform checkout # read remote <.systr/remote read path <.systr/path version=$2 if [[ "$version" == "NULL" ]]; then echo "Checking out NULL :: Checkout not performed" exit fi commit=$(get_commit "$version") symref=$(get_symref "$version") echo "$commit" >.systr/BASE echo "$symref" >.systr/TRAC if [[ "$commit" == "NULL" ]]; then echo "Nothing to checkout" exit fi echo "Checking out files..." # local repository # if [[ "$remote" == "" ]]; then rsync -az --info=progress2 --info=stats2 \ --delete --exclude='*.systr' \ "$path/$commit/" . # remote repository # else rsync -az -e ssh --info=progress2 --info=stats2 \ --delete --exclude='*.systr' \ "$remote:$path/$commit/" . fi }