## # creat_commit_dir_local # # Create new commit directory, and assign its commit ID. Commit ID is # printed to stdout. ## function creat_commit_dir_local { cd "$path" mktemp -d XXXXXXXX } ## # systrunk commit [=TRAC] # # Create a snapshot of the current state of the worktree and record # it in the repository. Your worktree must be up-to-date with # before you can commit. The branch committed to is updated to # reference the new commit. If does not exist in the # repository, it is created. If is a commit ID instead of # a symbolic reference, the new commit will not exist on any branch, # but an anonymous one referenced by TRAC. ## function systr_commit { read remote <.systr/remote read path <.systr/path read BASE <.systr/BASE read TRAC <.systr/TRAC if [ $# -gt 1 ]; then branch=$2 else branch="$TRAC" fi branchcommit=$(get_commit "$branch") || branchcommit="$BASE" if [[ "$BASE" != "$branchcommit" ]]; then echo "Worktree is out-of-date, won't commit" exit fi # local repository # if [[ "$remote" == "" ]]; then newcommit=$(creat_commit_dir_local) mesgfile=$(mktemp -t systr-edit-mesg.XXXXXX) echo "" >$mesgfile echo "# --" >>$mesgfile systrunk status | sed 's/^/# /' >>$mesgfile vi $mesgfile echo "Sending files..." rsync -az --info=progress2 --info=stats2 \ --delete --exclude='*.systr' \ --link-dest="$path/$branchcommit/" \ . "$path/$newcommit/" sed '/^#/ d' <$mesgfile >"$path/$newcommit/.mesg.systr" echo "$branchcommit" >"$path/$newcommit/.commit.systr" if [ -f ".systr/author" ]; then cat .systr/author >"$path/$newcommit/.author.systr" else echo "Anonymous" >"$path/$newcommit/.author.systr" fi if [ -f ".systr/email" ]; then cat .systr/email >"$path/$newcommit/.email.systr" else echo "" >"$path/$newcommit/.email.systr" fi echo "$newcommit" >"$path/$branch" echo "$newcommit" >.systr/BASE if [[ "$TRAC" == "$BASE" ]]; then echo "$newcommit" >.systr/TRAC else echo "$branch" >.systr/TRAC fi # remote repository # else exit fi }