tyru / open-browser-github.vim

Open GitHub URL of current file, etc. from Vim editor (supported GitHub Enterprise)
BSD 3-Clause "New" or "Revised" License
173 stars 14 forks source link

Open GitHub in a suitable protocol #17

Closed mono0x closed 8 years ago

mono0x commented 8 years ago

GitHub Enterprise は組織によっては HTTPS をサポートしない環境で利用されているため、HTTP または HTTPS のどちらかに固定するのではなく、リポジトリによって適切なプロトコルで開いてほしいと思います。

hub browse -u を利用すると、適切に設定されていれば正確な URL が得られるので、個人的には hub を利用するようになると嬉しいです。ただ、HTTPS 固定で困らない方も多いでしょうから、hub が入っている場合には hub を利用し、入っていない場合には HTTPS 固定 (またはオプション指定) といった動作になるのが望ましいかなと思います。

% hub browse -u -- blob/master/README.md
https://github.com/tyru/open-browser-github.vim/blob/master/README.md
tyru commented 8 years ago

関連:#16

mattn commented 8 years ago

@mono0x git config で hub.protocol 設定してたりしますか?それか git clone を http:// でやってるとか。hub は hub.protocol もしくは clone したスキーマから hub browse 時の protocol を決めています。

tyru commented 8 years ago

@mattn 現状 open-browser-github.vim は #16 からhttps 固定で開くようになったので、そもそも hub.protocol を見てないです。 多少重くなりそうですが、git config hub.protocol も見る必要がありそうですね… それか git remote -v から取得するか。

現状ホスト名は git config hub.host だけ見るようにしてますが、 @mono0x さんは「リポジトリによって適切なプロトコルで開いてほしい」とのことなので、 いっそ全部 git remote -v から取ってきた方がうれしいですかね?> @mono0x

mattn commented 8 years ago

@tyru いえ、 @mono0x さんの「hub browse -u を利用すると、適切に設定されていれば正確な URL が得られる」は hub.protocol を設定しているのが理由なのか、それとも http:// で clone しているのが理由なのかが知りたいです。

mono0x commented 8 years ago

@mattn ~/.config/hub で protocol を http に設定していますが、git config の hub.protocol は設定していません。hub browse は ~/.config/hub は見ますが hub.protocol は見ていないはずです ( https://github.com/github/hub/blob/aa4611dd9add76b1facda9906fcdf8078a2e89e6/github/project.go#L150-L161 )。

hub.protocol は remote にアクセスする際のプロトコルを指定するためのもので、https または ssh しか指定できません ( https://github.com/github/hub/blob/aa4611dd9add76b1facda9906fcdf8078a2e89e6/github/project.go#L75-L81 )。ですので、hub.protocol を見るのは適切ではないと思います。

@tyru hub も ~/.config/hub で指定しなければ remote を見るようなので、git remote -v はよさそうです。私は現在 remote としては SSH の URL 指定しているので、remote は http にして pushInsteadOf で SSH を使うようにする必要はありそうですが。

mattn commented 8 years ago

NewProjectFromURL に protocool が空以外で入ってくる場合はそちらが使われます。 で、その protocol は git のスキームのURLから得られる様です。 https://github.com/github/hub/blob/master/commands/browse.go#L80-L108

mattn commented 8 years ago

github の仕様でもあるので変わるかもしれませんし、同じ仕様を模倣するより hub が入ってたら hub browse -u を使う、くらいでいいと思います。

tyru commented 8 years ago

プロトコル(スキーム)の取得方法の案一覧

  1. git remote -v の出力から取ってくる
    • メリット:hub コマンドがなくても動く (git は元々必須)
    • デメリット:SSH等のURLが指定されていた場合は検出に失敗する
  2. hub browse -u
    • メリット:GitHubの仕様なのでGitHub製のツールに乗っかった方が安心
    • デメリット:hub コマンドがない場合は使えない
  3. hub browse -u のアルゴリズムを open-browser-github.vim 側で実装
    • メリット:hub コマンドがなくても動く
    • デメリット:独自実装による仕様の追従漏れの可能性
tyru commented 8 years ago

@mono0x ありがとうございました。