From c61c94fb66deaad15087dc21c1f71ccb7bb16f96 Mon Sep 17 00:00:00 2001 From: Malf Furious Date: Thu, 27 Apr 2017 23:40:11 -0400 Subject: Add checkout module --- checkout.sh | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 checkout.sh (limited to 'checkout.sh') diff --git a/checkout.sh b/checkout.sh new file mode 100644 index 0000000..5ea4b70 --- /dev/null +++ b/checkout.sh @@ -0,0 +1,61 @@ +## +# 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 +} -- cgit v1.2.3