aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xgist19
1 files changed, 13 insertions, 6 deletions
diff --git a/gist b/gist
index a115958..5b05f04 100755
--- a/gist
+++ b/gist
@@ -267,7 +267,7 @@ _check_repo_status() {
267 else 267 else
268 cd "$1" || exit 1 268 cd "$1" || exit 1
269 # git status is not clean or working on non-master branch 269 # git status is not clean or working on non-master branch
270 if [[ -n $(git status --short) || $(git branch) =~ '\* (main|master)' ]] &>/dev/null; then 270 if [[ -n $(git status --short) || $(git branch) =~ "\* $(_remote_head)" ]] &>/dev/null; then
271 echo "\e[36m[working]\e[0m" 271 echo "\e[36m[working]\e[0m"
272 else 272 else
273 # files contents are not the same with the last time called GIST API, so warn user to call 'gist fetch' 273 # files contents are not the same with the last time called GIST API, so warn user to call 'gist fetch'
@@ -470,20 +470,27 @@ _query_user() {
470 done || { echo "Failed to query $1's gists"; exit 1; } 470 done || { echo "Failed to query $1's gists"; exit 1; }
471} 471}
472 472
473_remote_head() {
474 [ -d .git/ ] || return 1
475 local origin_head_content="$(cat .git/refs/remotes/origin/HEAD)"
476 echo ${origin_head_content##*/}
477}
478
473# Return the unique code for current commit, to compare repo status and the result of 'gist fetch' 479# Return the unique code for current commit, to compare repo status and the result of 'gist fetch'
474# Because there is no way to get commit SHA with 'gist fetch' 480# Because there is no way to get commit SHA with 'gist fetch'
475_blob_code() { 481_blob_code() {
476 cd "$1" && git ls-tree master | cut -d' ' -f3 | cut -c-7 | sort | paste -sd '-' 482 cd "$1" || return 1
483 cd "$1" && git ls-tree $(_remote_head) | cut -d' ' -f3 | cut -c-7 | sort | paste -sd '-'
477} 484}
478 485
479_pull_if_needed() { 486_pull_if_needed() {
480 sed -ne "/$1 / p" "$INDEX" \ 487 sed -ne "/$1 / p" "$INDEX" \
481 | while read -r "${INDEX_FORMAT[@]}"; do 488 | while read -r "${INDEX_FORMAT[@]}"; do
482 local repo; repo=$folder/$1 489 local repo=$folder/$1
483 local blob_code_local; blob_code_local=$(_blob_code "$repo") 490 local blob_code_local=$(_blob_code "$repo")
484 cd "$repo" \ 491 cd "$repo" \
485 && [[ $blob_code_local != "$blob_code" ]] \ 492 && [[ $blob_code_local != "$blob_code" ]] \
486 && [[ $(git rev-parse origin/master) == $(git rev-parse master) ]] \ 493 && [[ $(git rev-parse origin/HEAD) == $(git rev-parse $(remote_head)) ]] \
487 && git pull & 494 && git pull &
488 done 495 done
489} 496}
@@ -653,7 +660,7 @@ _push_to_remote() {
653 git add . && git commit -m 'update' 660 git add . && git commit -m 'update'
654 fi 661 fi
655 if [[ -n $(git cherry) ]]; then 662 if [[ -n $(git cherry) ]]; then
656 git push origin master && \ 663 git push && \
657 http_method GET "$GITHUB_API/gists/${GIST_ID}" | _update_gist $index 664 http_method GET "$GITHUB_API/gists/${GIST_ID}" | _update_gist $index
658 fi 665 fi
659} 666}