diff options
| -rwxr-xr-x | gist | 46 |
1 files changed, 23 insertions, 23 deletions
| @@ -60,7 +60,7 @@ GITHUB_API=https://api.github.com | |||
| 60 | CONFIG=~/.config/gist.conf; mkdir -p ~/.config | 60 | CONFIG=~/.config/gist.conf; mkdir -p ~/.config |
| 61 | per_page=100 | 61 | per_page=100 |
| 62 | 62 | ||
| 63 | INDEX_FORMAT=('index' 'url' 'tags_string' 'blob_code' 'file_array' 'file_num' 'comment_num' 'author' 'created_at' 'updated_at' 'description') | 63 | INDEX_FORMAT=('index' 'public' 'url' 'tags_string' 'blob_code' 'file_array' 'file_num' 'comment_num' 'author' 'created_at' 'updated_at' 'description') |
| 64 | TAG_CHAR='-_[:alnum:]' | 64 | TAG_CHAR='-_[:alnum:]' |
| 65 | if [[ ! -t 0 ]]; then | 65 | if [[ ! -t 0 ]]; then |
| 66 | INPUT=$(cat) | 66 | INPUT=$(cat) |
| @@ -360,8 +360,8 @@ _parse_gists() { | |||
| 360 | _process_json ' | 360 | _process_json ' |
| 361 | raw = json.load(sys.stdin) | 361 | raw = json.load(sys.stdin) |
| 362 | for gist in raw: | 362 | for gist in raw: |
| 363 | print(gist["html_url"], end=" ") | ||
| 364 | print(gist["public"], end=" ") | 363 | print(gist["public"], end=" ") |
| 364 | print(gist["html_url"], end=" ") | ||
| 365 | print(",".join(file["raw_url"] for file in gist["files"].values()), end=" ") | 365 | print(",".join(file["raw_url"] for file in gist["files"].values()), end=" ") |
| 366 | print(",".join(file["filename"].replace(" ", "-") + "@" + str(file["language"]).replace(" ", "-") for file in gist["files"].values()), end=" ") | 366 | print(",".join(file["filename"].replace(" ", "-") + "@" + str(file["language"]).replace(" ", "-") for file in gist["files"].values()), end=" ") |
| 367 | print(len(gist["files"]), end=" ") | 367 | print(len(gist["files"]), end=" ") |
| @@ -375,13 +375,8 @@ for gist in raw: | |||
| 375 | 375 | ||
| 376 | # Parse response from 'gist fetch' to the format for index file | 376 | # Parse response from 'gist fetch' to the format for index file |
| 377 | _parse_response() { | 377 | _parse_response() { |
| 378 | local num=$start_from_num | ||
| 379 | _parse_gists \ | 378 | _parse_gists \ |
| 380 | | nl -s' ' \ | 379 | | while read -r "${INDEX_FORMAT[@]:1:2}" file_url_array "${INDEX_FORMAT[@]:5:7}"; do |
| 381 | | while read -r "${INDEX_FORMAT[@]:0:2}" public file_url_array "${INDEX_FORMAT[@]:4:7}"; do | ||
| 382 | local private_prefix=''; [[ $public == 'False' ]] && private_prefix=p | ||
| 383 | [[ -n $num ]] && local index=${num} && num=$(($num+1)); index=${private_prefix}${prefix}${index} | ||
| 384 | |||
| 385 | local blob_code=$(echo "$file_url_array" | tr ',' '\n' | sed -E -e 's#.*raw/(.*)/.*#\1#' | sort | cut -c -7 | paste -s -d '-' -) | 380 | local blob_code=$(echo "$file_url_array" | tr ',' '\n' | sed -E -e 's#.*raw/(.*)/.*#\1#' | sort | cut -c -7 | paste -s -d '-' -) |
| 386 | file_array=${file_array//@None/@Text} | 381 | file_array=${file_array//@None/@Text} |
| 387 | 382 | ||
| @@ -397,15 +392,13 @@ _parse_response() { | |||
| 397 | # Get latest list of gists from Github API | 392 | # Get latest list of gists from Github API |
| 398 | _fetch_gists() { | 393 | _fetch_gists() { |
| 399 | local route="users/$user/gists" | 394 | local route="users/$user/gists" |
| 400 | local prifix='' | ||
| 401 | if [[ $mark == s ]]; then | 395 | if [[ $mark == s ]]; then |
| 402 | route='gists/starred' | 396 | route='gists/starred' |
| 403 | prefix=s | ||
| 404 | fi | 397 | fi |
| 405 | 398 | ||
| 406 | # set global variable HEADER in http_method, so prevent using pipe | 399 | # set global variable HEADER in http_method, so prevent using pipe |
| 407 | HEADER=$(tmp_file HEADER) | 400 | HEADER=$(tmp_file HEADER) |
| 408 | HEADER=$HEADER http_method GET $GITHUB_API/$route${1} | start_from_num=$2 prefix=$prefix _parse_response | 401 | HEADER=$HEADER http_method GET $GITHUB_API/$route${1} | _parse_response |
| 409 | } | 402 | } |
| 410 | 403 | ||
| 411 | # consider if HEADER is not exist | 404 | # consider if HEADER is not exist |
| @@ -422,13 +415,17 @@ _fetch_gists_with_pagnation() { | |||
| 422 | [[ -z $next_page ]] && break | 415 | [[ -z $next_page ]] && break |
| 423 | printf "%-4s gists fetched\n" $(( ($next_page -1) * $per_page )) | 416 | printf "%-4s gists fetched\n" $(( ($next_page -1) * $per_page )) |
| 424 | 417 | ||
| 425 | _fetch_gists "?per_page=$per_page&page=$next_page" $(( $(wc -l <$fetched_records) +1 )) >> $fetched_records | 418 | _fetch_gists "?per_page=$per_page&page=$next_page" >> $fetched_records |
| 426 | done || return 1 | 419 | done || return 1 |
| 427 | 420 | ||
| 428 | [[ ! -s $fetched_records ]] && echo 'Not a single valid gist' && return 0 | 421 | [[ ! -s $fetched_records ]] && echo 'Not a single valid gist' && return 0 |
| 429 | 422 | ||
| 430 | sed -i'' -Ee "/^$mark/ d" $INDEX | 423 | sed -i'' -Ee "/^$mark/ d" $INDEX |
| 431 | tac <$fetched_records | nl -s' ' | sed -Ee 's/^ *([^ ]+) ([[:alpha:]]?)[[:digit:]]+/\2\1/' >> $INDEX | 424 | tac <$fetched_records | nl -s' ' \ |
| 425 | | while read -r "${INDEX_FORMAT[@]:0:2}" extra; do | ||
| 426 | local prefix=''; [[ $public == False ]] && prefix=p | ||
| 427 | echo $prefix$index $public $extra | ||
| 428 | done >> $INDEX | ||
| 432 | hint=$hint _show_list | 429 | hint=$hint _show_list |
| 433 | 430 | ||
| 434 | [[ $auto_sync != false ]] && (_sync_repos &> /dev/null &) | 431 | [[ $auto_sync != false ]] && (_sync_repos &> /dev/null &) |
| @@ -439,9 +436,8 @@ _fetch_gists_with_pagnation() { | |||
| 439 | 436 | ||
| 440 | # Get a single JSON object of gist from response, and update index file | 437 | # Get a single JSON object of gist from response, and update index file |
| 441 | _update_gist() { | 438 | _update_gist() { |
| 442 | local index=$1 | 439 | local record="$(sed -e '1 s/^/[/; $ s/$/]/' | index=$1 _parse_response)" |
| 443 | local record=$(sed -e '1 s/^/[/; $ s/$/]/' | start_from_num="${index#[[:alpha:]]}" _parse_response) | 440 | [[ -n $record ]] && sed -i'' -Ee "/^$1 / s^.+^$record^" $INDEX |
| 444 | [[ -n $record ]] && sed -i'' -Ee "/^$index / s^.+^$record^" $INDEX | ||
| 445 | } | 441 | } |
| 446 | 442 | ||
| 447 | # Fetch gists for a given user | 443 | # Fetch gists for a given user |
| @@ -478,7 +474,7 @@ _pull_if_needed() { | |||
| 478 | # Update local git repos | 474 | # Update local git repos |
| 479 | _sync_repos() { | 475 | _sync_repos() { |
| 480 | comm -1 <(ls -A "$folder" | sort) \ | 476 | comm -1 <(ls -A "$folder" | sort) \ |
| 481 | <(cut -d' ' -f1-2 < "$INDEX" | sed -ne "/^$mark/ s#.*/##p" | sort) \ | 477 | <(while read -r ${INDEX_FORMAT[@]}; do echo $index $url; done < "$INDEX" | sed -ne "/^$mark/ s#.*/##p" | sort) \ |
| 482 | | { | 478 | | { |
| 483 | result=$(cat) | 479 | result=$(cat) |
| 484 | 480 | ||
| @@ -505,7 +501,8 @@ _repo_url() { | |||
| 505 | 501 | ||
| 506 | # Get gist id from index files | 502 | # Get gist id from index files |
| 507 | _gist_id() { | 503 | _gist_id() { |
| 508 | GIST_ID=$(sed -En -e "/^$1 / s#^$1 [^ ]+/([[:alnum:]]+) .+#\1#p" $INDEX | head -1) | 504 | read -r ${INDEX_FORMAT[@]} <<<"$(sed -ne "/$1 / p" $INDEX)" |
| 505 | GIST_ID=${url##*/} | ||
| 509 | if [[ -z $GIST_ID || ! $1 =~ [0-9a-z]+ ]]; then | 506 | if [[ -z $GIST_ID || ! $1 =~ [0-9a-z]+ ]]; then |
| 510 | echo -e "$(hint=false _show_list | sed -Ee 's/^( *[0-9a-z]+)/\\e[5m\1\\e[0m/')" | 507 | echo -e "$(hint=false _show_list | sed -Ee 's/^( *[0-9a-z]+)/\\e[5m\1\\e[0m/')" |
| 511 | echo | 508 | echo |
| @@ -574,7 +571,7 @@ _delete_gist() { | |||
| 574 | # Remove repos which are not in index file anymore | 571 | # Remove repos which are not in index file anymore |
| 575 | _clean_repos() { | 572 | _clean_repos() { |
| 576 | comm -23 <(find $folder -maxdepth 1 -type d | sed -e '1d; s#.*/##' | sort) \ | 573 | comm -23 <(find $folder -maxdepth 1 -type d | sed -e '1d; s#.*/##' | sort) \ |
| 577 | <(cut -d' ' -f2 < "$INDEX" | sed -e 's#.*/##' | sort 2> /dev/null ) \ | 574 | <(while read -r ${INDEX_FORMAT[@]}; do echo $url; done < "$INDEX" | sed -e 's#.*/##' | sort 2> /dev/null ) \ |
| 578 | | while read -r dir; do | 575 | | while read -r dir; do |
| 579 | mv $folder/"$dir" /tmp && echo $folder/"$dir" is moved to /tmp | 576 | mv $folder/"$dir" /tmp && echo $folder/"$dir" is moved to /tmp |
| 580 | done | 577 | done |
| @@ -691,17 +688,20 @@ _create_gist() { | |||
| 691 | _set_gist "$@" || return 1 | 688 | _set_gist "$@" || return 1 |
| 692 | [[ -z ${files[*]} ]] && files+=($(_new_file "$filename")) | 689 | [[ -z ${files[*]} ]] && files+=($(_new_file "$filename")) |
| 693 | [[ -z $description ]] && read -e -r -p 'Type description: ' description < /dev/tty | 690 | [[ -z $description ]] && read -e -r -p 'Type description: ' description < /dev/tty |
| 691 | local index=$([[ $public == False ]] && echo p)$(( $(sed -e '/^s/ d' $INDEX | wc -l) +1 )) | ||
| 694 | 692 | ||
| 695 | echo 'Creating a new gist...' | 693 | echo 'Creating a new gist...' |
| 696 | http_data=$(tmp_file PATLOAD.CREATE) | 694 | http_data=$(tmp_file PATLOAD.CREATE) |
| 697 | echo -e "${files[*]}\n$description" \ | 695 | echo -e "${files[*]}\n$description" \ |
| 698 | | _gist_body > "$http_data" \ | 696 | | _gist_body > "$http_data" \ |
| 699 | && http_method POST $GITHUB_API/gists \ | 697 | && http_method POST $GITHUB_API/gists \ |
| 700 | | xargs -I{} -0 echo "[{}]" \ | 698 | | sed -e '1 s/^/\[/; $ s/$/\]/' \ |
| 701 | | start_from_num=$(( $(sed -e '/^s/ d' $INDEX | wc -l) +1 )) _parse_response \ | 699 | | index=$index _parse_response \ |
| 702 | | tee -a $INDEX \ | 700 | | tee -a $INDEX \ |
| 703 | | cut -d' ' -f2 | sed -E -e 's#.*/##' \ | 701 | | while read -r "${INDEX_FORMAT[@]}"; do |
| 704 | | (xargs -I{} git clone "$(_repo_url {})" $folder/{} &> /dev/null &) | 702 | local gist_id=${url/##*/} |
| 703 | (git clone "$(_repo_url $gist_id)" $folder/$gist_id &> /dev/null &) | ||
| 704 | done | ||
| 705 | 705 | ||
| 706 | # shellcheck disable=2181 | 706 | # shellcheck disable=2181 |
| 707 | if [[ $? -eq 0 ]]; then | 707 | if [[ $? -eq 0 ]]; then |