aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authortypebrook <typebrook@gmail.com>2020-01-12 22:56:11 +0800
committertypebrook <typebrook@gmail.com>2020-01-12 22:56:11 +0800
commit8dc3ab646f1afa93fdcf7f8e61d0385ac0c8c8d3 (patch)
tree3d2b078c1c0b26a0d1a7013c2e80d1358553de3b
parentb05efca2fb2e87f3cbf993a1c07d23ac27cdba0e (diff)
update
-rwxr-xr-xgist81
1 files changed, 55 insertions, 26 deletions
diff --git a/gist b/gist
index 834d6cf..80996b1 100755
--- a/gist
+++ b/gist
@@ -17,6 +17,7 @@
17# gist 17# gist
18# 18#
19# * clone gist repos which are not in local 19# * clone gist repos which are not in local
20# * pull master branch if a local repo is behind its remote
20# gist [sync | s] 21# gist [sync | s]
21# 22#
22# * Go to local gist repo 23# * Go to local gist repo
@@ -50,24 +51,47 @@ mkdir -p $folder
50index=$folder/index 51index=$folder/index
51 52
52# Validate settings. 53# Validate settings.
53[ "$TRACE" ] && set -x && echo foo 54[ "$TRACE" ] && set -x
55
56# Show the list of gist, but not updated time
57_show_list() {
58 cat $index | cut -d' ' -f1-2,4-
59}
54 60
55# get the list of gists 61# get the list of gists
56_update() { 62_update() {
57 curl -s -H "$auth_header" $github_api/users/$user/gists |\ 63 curl -s -H "$auth_header" $github_api/users/$user/gists |\
58 jq '.[] | "\( .html_url ) \(.files | keys | length) \(.comments) \( .description )"' |\ 64 tee jojo |\
59 tr -d '"' | tac | nl |\ 65 jq '.[] | "\(.html_url) \([.files[] | .raw_url]) \(.files | keys | length) \(.comments) \(.description)"' |\
60 while read line_num link file_num comment_num description; do 66 tac | nl |\
61 echo $line_num $link $file_num $comment_num $(echo $description | cut -c -70) 67 while read line_num link blobs file_num comment_num description; do
62 done | tee $index 68 blob_code=$(echo $blobs | jq -r '.[]' | sed -r 's#.*raw/(.*)/.*#\1#' | sort | cut -c -7 | paste -sd '-')
69 echo $line_num $link $blob_code $file_num $comment_num $(echo $description | cut -c -80) | tr -d '"'
70 done > $index && \
71 _show_list
63} 72}
64 73
65# clone repos which are not in the local
66# TODO pull if repo is outdated
67_sync_repos() { 74_sync_repos() {
75 # clone repos which are not in the local
68 comm -13 <(find $folder -maxdepth 1 -type d | sed '1d; s#.*/##' | sort) \ 76 comm -13 <(find $folder -maxdepth 1 -type d | sed '1d; s#.*/##' | sort) \
69 <(cat $index | cut -d' ' -f2 | sed 's#.*/##' | sort) |\ 77 <(cat $index | cut -d' ' -f2 | sed 's#.*/##' | sort) |\
70 xargs -I{} git clone git@github.com:{}.git $folder/{} 78 xargs -I{} git clone git@github.com:{}.git $folder/{}
79
80 # pull if remote repo has different blob objects
81 cat $index | cut -d' ' -f2,3 |\
82 while read url blob_code_remote; do
83 repo=$folder/$(echo $url | sed 's#.*/##')
84 blob_code_local=$(cd $repo && git ls-tree master | cut -d' ' -f3 | cut -c-7 | sort | paste -sd '-')
85
86 cd $repo && \
87 [[ $blob_code_local != $blob_code_remote ]] && \
88 [[ $(git rev-parse origin/master) == $(git rev-parse master) ]] && \
89 git pull
90 done
91}
92
93_gist_id() {
94 cat $index | sed -n "$1"p | cut -d' ' -f2 | sed -r 's#.*/##'
71} 95}
72 96
73_goto_gist() { 97_goto_gist() {
@@ -76,17 +100,17 @@ _goto_gist() {
76 echo Not a valid gist number: $1 100 echo Not a valid gist number: $1
77 echo Use the number in the first column instead: 101 echo Use the number in the first column instead:
78 echo 102 echo
79 cat $index 103 show_list
80 return 0 104 return 0
81 fi 105 fi
82 106
83 GIST_ID=$(cat $index | sed -n "$1"p | cut -d' ' -f2 | sed -r 's#.*/##') 107 GIST_ID=$(_gist_id $1)
84 echo This gist is at $folder/$GIST_ID 108 echo This gist is at $folder/$GIST_ID
85 cd $folder/$GIST_ID && tig --all 2> /dev/null 109 cd $folder/$GIST_ID && tig --all 2> /dev/null
86} 110}
87 111
88_delete_gist() { 112_delete_gist() {
89 GIST_ID=$(cat $index | sed -n "$1"p | cut -d' ' -f2 | sed -r 's#.*/##') 113 GIST_ID=$(_gist_id $1)
90 curl -X DELETE -s -H "$auth_header" $github_api/gists/$GIST_ID && \ 114 curl -X DELETE -s -H "$auth_header" $github_api/gists/$GIST_ID && \
91 _update 115 _update
92} 116}
@@ -99,33 +123,37 @@ _clean_repos() {
99} 123}
100 124
101_show_detail() { 125_show_detail() {
102 GIST_ID=$(cat $index | sed -n "$1"p | cut -d' ' -f2 | sed -r 's#.*/##') 126 GIST_ID=$(_gist_id $1)
103 curl -s -H "$auth_header" $github_api/gists/$GIST_ID |\ 127 curl -s -H "$auth_header" $github_api/gists/$GIST_ID |\
104 jq '{site: .html_url, API: .url, created_at: .created_at, updated_at: .updated_at, files: (.files | keys)}' 128 jq '{site: .html_url, description: .description, API: .url, created_at: .created_at, updated_at: .updated_at, files: (.files | keys)}'
105 129
106 curl -s -H "$auth_header" $github_api/gists/$GIST_ID/comments |\ 130 curl -s -H "$auth_header" $github_api/gists/$GIST_ID/comments |\
107 jq '.[] | {user: .user.login, created_at: .created_at, updated_at: .updated_at, body: .body}' 131 jq '.[] | {user: .user.login, created_at: .created_at, updated_at: .updated_at, body: .body}'
108} 132}
109 133
110# create a new gist with a file and description 134# create a new gist with files
111# TODO support folder of files 135# TODO support folder of files
112_create_gist() { 136_create_gist() {
113 FILE=$(basename $1) 137 echo -n 'description: '
114 138 read DESC
115 jq --arg FILE "$FILE" --arg DESC "$2" '. as $content | { 139
116 public: true, 140 echo $@ | tr " " "\n" |\
117 files: { 141 while read file; do
118 ($FILE): {content: $content} 142 FILE=$(basename $file)
119 }, 143 jq --arg FILE "$FILE" '. as $content | { ($FILE): {content: $content} }' -Rs $file
144 done |\
145 jq -s --arg DESC "$DESC" '{
146 public: true,
147 files: add,
120 description: ($DESC) 148 description: ($DESC)
121 }' -R -s $1 |\ 149 }' |\
122 curl -s -H "$auth_header" --data @- $github_api/gists > /dev/null && \ 150 curl -s -H "$auth_header" --data @- $github_api/gists > /dev/null && \
123 _update 151 _update && _sync_repos
124} 152}
125 153
126# update description of a gist 154# update description of a gist
127_edit_gist() { 155_edit_gist() {
128 GIST_ID=$(cat $index | sed -n "$1"p | cut -d' ' -f2 | sed -r 's#.*/##') 156 GIST_ID=$(_gist_id $1)
129 157
130 jq -n --arg DESC "$2" '{ description: ($DESC) }' |\ 158 jq -n --arg DESC "$2" '{ description: ($DESC) }' |\
131 curl -X PATCH -H "$auth_header" --data @- $github_api/gists/$GIST_ID > /dev/null && \ 159 curl -X PATCH -H "$auth_header" --data @- $github_api/gists/$GIST_ID > /dev/null && \
@@ -134,10 +162,11 @@ _edit_gist() {
134 162
135case "$1" in 163case "$1" in
136 "") 164 "")
137 cat $index 165 _show_list
138 ;; 166 ;;
139 create | c) 167 create | c)
140 _create_gist "$2" "$3" 168 shift;
169 _create_gist $@
141 ;; 170 ;;
142 edit | e) 171 edit | e)
143 _edit_gist "$2" "$3" 172 _edit_gist "$2" "$3"