This project has been moved to https://github.com/weakish/gister
Please update your bookmark and git remote.
This project has been moved to https://github.com/weakish/gister
Please update your bookmark and git remote.
| #!/bin/sh | |
| ### a command line tool to access https://gist.github.com | |
| ## by Jakukyo Friel <[email protected]> and licensed under Apache v2. | |
| ## Depends: | |
| # gist.rb | |
| # curl | |
| # git | |
| # csearch | |
| # jq | |
| ## Ref: | |
| # github API: https://develop.github.com/v3/ | |
| # gist API: https://developer.github.com/v3/gists/ | |
| # gist.rb: https://github.com/defunkt/gist | |
| # gist clients: https://gist.github.com/370230 | |
| # csearch: https://code.google.com/p/codesearch/ | |
| # jq: http://stedolan.github.io/jq/ | |
| ## Versions | |
| semver='1.0.0' # released on 2013-09-16 | |
| # - Use new storage hierarchy (seperate work tree and repo) | |
| # - Support github OAuth. | |
| # - Fetch all gists of the user (including private ones). | |
| # - Switch to csearch as code search backend. | |
| # - Change license to Apache v2 License. | |
| # semver='0.3.0' # released on 2012-05-04 | |
| # - Change backend back to gist.rb, since pygist stops to work due to api change. | |
| # - fetch_list() fetches public gists only. | |
| # (I myself only creates public gists. So I'm too lazy to deal with | |
| # new oauth api. Patches are welcomed.) | |
| # semver='0.2.0' # released on 2012-04-17 | |
| # - change backend from gist.rb to pygsit | |
| # - remove clone_my_gists() | |
| # - fetch_list() fetches priveate gists too. | |
| # - fix a bug to actually support multiple files | |
| # - add support for gist description | |
| # - add gistid to pasteboard | |
| # semver='0.1.0' # released on 2011-06-11 | |
| # - bugfix: implement clone properly (yaml -> json) | |
| # - simplify publish() | |
| # semver=0.0.0 # released on 2011-04-04 | |
| help() { | |
| cat<<'END' | |
| gister -- shell script to access https://gist.github.com | |
| gister [OPTION] | |
| gister description file.txt [...] | |
| Options: | |
| -l get info of all your gists | |
| -m migrate from <1.0.0 | |
| -s regexp code search (command line) | |
| -v version | |
| -h this help page | |
| Usage: | |
| Run `gister -l` and a list of your gists will be saved in gists.list. There are two | |
| ways to set up the location of gists.list: Using env var GIST_HOME or | |
| set the gist.home option using git config. Refer gist(ruby) manual on how | |
| to set up GitHub user. | |
| `gister description file.txt ...` will create the gist with the provided description, | |
| clone the gist repo, put the gistid to clipborad, and open the url in | |
| your `x-www-browser`. | |
| `gister` will pass all arguments to gist as `gist -c -o -d description ...`, so you use other options that gist understands, | |
| e.g. `gister descrption -P` will work. | |
| END | |
| } | |
| main() { | |
| gisthome=${GIST_HOME:=`git config --get gist.home`} | |
| gist_title=${GIST_TITLE:=`git config --get gist.title`} | |
| github_user=${GITHUB_USER:=`git config --get github.user`} | |
| github_oauth_token=`cat $HOME/.gist` | |
| case $1 in | |
| -h) help;; | |
| -l) fetch_list;; | |
| -m) migrate;; | |
| -s) code_search $2;; | |
| -v) echo gister $semver;; | |
| *) publish "$@";; | |
| esac | |
| } | |
| fetch_list() { | |
| echo 'I can only fetch up to 10 million gists for you.' | |
| mv $gisthome/gists.list $gisthome/gists.list.backup | |
| curl -s -H "Authorization: token $github_oauth_token" 'https://api.github.com/gists?per_page=100' > $gisthome/gists.list | |
| for i in `seq 2 100000`; do | |
| if ! (curl -s -H 'Authorization: token 1928954e4f8b569c207f25c1f4efa2943b26c392' "https://api.github.com/gists?page=$i&per_page=100" | jq '.' | grep --silent '^\[]$'); then | |
| curl -s -H 'Authorization: token 1928954e4f8b569c207f25c1f4efa2943b26c392' "https://api.github.com/gists?page=$i&per_page=100" >> $gisthome/gists.list | |
| else | |
| break | |
| fi | |
| done | |
| } | |
| publish() { | |
| local gist_description="$1" | |
| shift 1 | |
| local gist_argv="$@" | |
| # post gist and open it in browser | |
| gist -c -o -d "$gist_description" $gist_argv | |
| # record the id | |
| local gist_id=`xsel -o | grep -o -E '/[0-9a-f]+$' | sed -e 's/\///'` | |
| # add a record | |
| cd $gisthome | |
| curl -s -H "Authorization: token $github_oauth_token" 'https://api.github.com/gists?per_page=1' >> gists.list | |
| # clone | |
| cd $gisthome/tree | |
| git clone [email protected]:$gist_id.git --separate-git-dir ../repo/$gist_id | |
| # code search index | |
| export CSEARCHINDEX=$gisthome/.csearchindex | |
| cindex | |
| } | |
| code_search() { | |
| export CSEARCHINDEX=$gisthome/.csearchindex | |
| csearch -i -l -n $1 | |
| } | |
| migrate() { | |
| # migrate to new storage | |
| cd $gisthome | |
| mkdir tree | |
| ls --file-type --hide gonzui.db --hide tree | grep '/$' | xargs -I '{}' mv '{}' tree | |
| mkdir repo | |
| cd tree | |
| ls | xargs -I '{}' git init --separate-git-dir ../repo/'{}' '{}' | |
| # index via new engine | |
| cd $gisthome | |
| export CSEARCHINDEX=$gisthome/.csearchindex | |
| cindex $gisthome/tree | |
| } | |
| main "$@" |