by shigemk2

当面は技術的なことしか書かない

ghq pull 89 memo

~/.gitconfigvcs = svn としつつ、 ghq get -p svn://svn.zabbix.com/trunk を実行すると、エラーになってcheckoutできない。

ghq get -p svn://svn.zabbix.com/trunk
     clone ssh://git@svn.zabbix.com/trunk -> /path/to/svn.zabbix.com/trunk
       svn checkout ssh://git@svn.zabbix.com/trunk /path/to/svn.zabbix.com/trunk
svn: E170000: Unrecognized URL scheme for 'ssh://git@svn.zabbix.com/trunk'
     error /usr/bin/svn: exit status 1

理由は、git以外のvcsを指定したときにghq get -pを実行したから。-pオプションは、指定したURLをgitプロトコルに変換するものだが(上のログ参照)、vcsがgitじゃなくても-pをつけたらこのURL変換が適用される。これはバグなので、直した。

  • reflect.TypeOf(remote).Elem() == reflect.TypeOf(GitHubRepository{}) みたいなことをして型チェックしようと思ったけど、isSSHのチェックのタイミングでremoteが使えないからシンプルにGitConfig関数でghq.vcsを取得する方法を選んだ
  • ghq.vcsって必須の設定じゃない。何も指定しなかったらRunSilentlyをgit/hg/svnで実行して、エラーにならないものでどのvcsか判断している 実際のコード
  • テスト書けてないから死にたい

github.com