## # systr_repo_resolve_reference [] # # Resolve a revision to a commit ID. This function is polymorphic # for both local and remote repositories. The result is printed to # stdout. ## function systr_repo_resolve_reference { if [ $# -lt 1 ]; then echo "Fatal: too few arguments to systr_repo_resolve_reference" exit 1 fi symref="$1" if [ $# -gt 1 ]; then path="$2" fi if [[ "$symref" == "BASE" ]]; then cat ".systr/BASE" elif [[ "$symref" == "TRAC" ]]; then read trac <.systr/TRAC systr_repo_resolve_reference "$trac" elif [[ "$symref" == "NULL" ]]; then echo "NULL" elif [[ "$remote" == "" ]]; then ( cd "$path" if [[ "$symref" == "HEAD" ]]; then cat "refs/HEAD" elif [ -f "refs/$symref" ]; then cat "refs/$symref" elif [ -f "revs/$symref/.commit.systr" ]; then echo "$symref" else echo "$symref not a revision" >&2 exit 1 fi ) else ssh "$remote" "systrunk resv-ref \"$symref\" \"$path\"" fi } ## # systrunk log [=BASE] # # View commit history. Generates a dump of all commits reachable # from the given commit, or BASE if no argument given. Works for # either local/remote repository. ## function systr_repo_generate_log { if [ $# -lt 1 ]; then commit="$BASE" else commit=$(systr_repo_resolve_reference "$1") fi if [[ "$remote" == "" ]]; then while [[ "$commit" != "NULL" ]] do read date <"$path/revs/$commit/.date.systr" read author <"$path/revs/$commit/.author.systr" read email <"$path/revs/$commit/.email.systr" printf '%s %s\n' "$commit" "$date" printf '%s %s\n' "$author" "$email" echo "" cat "$path/revs/$commit/.mesg.systr" echo "" echo "" read commit <"$path/revs/$commit/.commit.systr" done else ssh "$remote" "systrunk log \"$commit\"" fi }