gistコマンドが便利すぐる

gitのAccount Setting画面にあったAPI Tokenというのが何じゃろと思ったら、すぐそばのリンクからgistというコマンドの存在を知りました。今更?

↓これ

これをインストールするとコンソールから、

gist < file.txt
echo secret | gist --private # or -p
gist 1234 > something.txt

とかするだけで、gistを使うことができるのですね。
なにこれすごい。


割と短いrubyスクリプトですが、すごくべんりです。


ただ、自分の環境で実行すると、参照はできるんですけど、書き込みがソケットエラーになってしまいました。
エラーメッセージを見るとプロキシ関係っぽいです。

$ gist < test.txt 
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `initialize': getaddrinfo: nodename nor servname provided, or not known (SocketError)
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `open'
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `connect'
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:53:in `timeout'
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:93:in `timeout'
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `connect'
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:553:in `do_start'
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:542:in `start'
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:404:in `post_form'
        from /Users/nobeans/bin/gist:34:in `write'
        from /Users/nobeans/bin/gist:82


ソースをみるとプロキシ対応はされてるようなのですが、@proxyインスタンス変数の初期化が実行されてないため、http_proxy環境変数の設定が無視されてしまってます。


というわけで、以下のようにとりあえず修正してみたらうまく動きました。

$ diff gist.orig gist -u
--- gist.orig   2009-11-19 10:19:22.000000000 +0900
+++ gist        2009-11-19 10:19:47.000000000 +0900
@@ -17,8 +17,6 @@
        class << self
                GIST_URL = 'http://gist.github.com/%s.txt'
 
-               @proxy = ENV['http_proxy'] ? URI(ENV['http_proxy']) : nil
-
                def read(gist_id)
                        return help if gist_id.nil? || gist_id[/^\-h|help$/]
                        return open(GIST_URL % gist_id).read unless gist_id.to_i.zero?
@@ -27,8 +25,9 @@
 
                def write(content, private_gist)
                        url = URI.parse('http://gist.github.com/gists')
-                       if @proxy
-                               req = Net::HTTP::Proxy(@proxy.host, @proxy.port).post_form(url, data(nil, nil, content, private_gist))
+                       proxy = ENV['http_proxy'] ? URI(ENV['http_proxy']) : nil
+                       if proxy
+                               req = Net::HTTP::Proxy(proxy.host, proxy.port).post_form(url, data(nil, nil, content, private_gist))
                        else
                                req = Net::HTTP.post_form(url, data(nil, nil, content, private_gist))
                        end


あまりにも簡単に使えるので、これからはもうちょっとgistを活用していこうかな、と思いました。