From 53b619e1c927c518c27150c8ac0a4c99791c61cd Mon Sep 17 00:00:00 2001 From: Malf Furious Date: Tue, 9 Oct 2018 22:14:41 -0400 Subject: Add diff / shortdiff ops --- diff.sh | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.sh | 4 ++++ make.sh | 2 +- 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 diff.sh diff --git a/diff.sh b/diff.sh new file mode 100644 index 0000000..9f3480c --- /dev/null +++ b/diff.sh @@ -0,0 +1,60 @@ +## +# systrunk diff [=BASE] [=WKTREE] +# +# Perform a unified diff (diff -u) between and , which +# should be two revisions in the repository. If not supplied, +# will be the worktree. Otherwise, there is no way to specify the +# worktree. +## +function systr_diff +{ + if [ $# -lt 2 ]; then + to="." + else + to=$(systr_repo_resolve_reference "$2") + to="$path/revs/$to/" + fi + + if [ $# -lt 1 ]; then + from="$BASE" + else + from=$(systr_repo_resolve_reference "$1") + fi + + from="$path/revs/$from/" + + diff -ruNd --color=auto --exclude='*.systr' "$from" "$to" +} + +## +# systrunk shortdiff [=BASE] [=WKTREE] +# +# Indicate only names of files that have been changed, added, +# or removed between and , which should be two +# revisions in the repository. If not supplied, will be +# the worktree. Otherwise, there is no way to specify the +# worktree. +## +function systr_short_diff +{ + if [ $# -lt 2 ]; then + to="." + else + to=$(systr_repo_resolve_reference "$2") + to="$path/revs/$to/" + fi + + if [ $# -lt 1 ]; then + from="$BASE" + else + from=$(systr_repo_resolve_reference "$1") + fi + + if [[ "$from" == "NULL" ]]; then + exit + fi + + from="$path/revs/$from/" + + diff -qr --exclude='*.systr' "$from" "$to" +} diff --git a/main.sh b/main.sh index f5a2df7..63c43ff 100644 --- a/main.sh +++ b/main.sh @@ -55,6 +55,10 @@ function main systr_short_log "$@" elif [[ "$cmd" == "log" ]]; then systr_log "$@" + elif [[ "$cmd" == "shortdiff" ]]; then + systr_short_diff "$@" + elif [[ "$cmd" == "diff" ]]; then + systr_diff "$@" elif [[ "$cmd" == "merge" ]]; then systr_merge "$@" elif [[ "$cmd" == "update" ]]; then diff --git a/make.sh b/make.sh index 7c40920..0ba5124 100755 --- a/make.sh +++ b/make.sh @@ -1,5 +1,5 @@ #!/usr/bin/bash echo "#!/usr/bin/bash -e" >systrunk cat rsync.sh repo-access.sh repo-mutate.sh >>systrunk -cat checkout.sh commit.sh merge.sh main.sh >>systrunk +cat checkout.sh commit.sh merge.sh diff.sh main.sh >>systrunk chmod +x systrunk -- cgit v1.2.3 From b61e56981dd705b56496090972d085a8b77d5366 Mon Sep 17 00:00:00 2001 From: Malf Furious Date: Tue, 9 Oct 2018 22:24:55 -0400 Subject: Add -d option to status op `systrunk status -d` will now display a shortdiff in the status output. This is off by default since worktrees for system drives probabally won't want it all the time. --- repo-access.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/repo-access.sh b/repo-access.sh index 3e9fa8d..3685318 100644 --- a/repo-access.sh +++ b/repo-access.sh @@ -193,12 +193,13 @@ function systr_init } ## -# systrunk status +# systrunk status [-d] # # View current information such as which branch your worktree is # TRACking, which commit it is BASEd on, and how far out-of-date # it is. Additionally, report whether a merge or update operation -# is currently in-progress. +# is currently in-progress. If '-d' is given, status will be +# accompanied by a shortdiff of pending, uncommitted changes. ## function systr_status { @@ -237,4 +238,9 @@ function systr_status echo "Behind $dist commits" fi fi + + if [[ "$1" == "-d" ]]; then + echo "" + systrunk shortdiff && echo "No pending changes" + fi } -- cgit v1.2.3