2017年4月28日金曜日

go-swagger をアップデートしたときに「Your local changes to the following files would be overwritten by merge」が発生

概要

go get で go-swagger をアップデートしたときに最新版をうまくマージできない現象が発生しました
対象方法を紹介します

環境

  • Ubuntu 16.04
  • golang 1.8.1
  • go-swagger 0.8.0 -> 0.10.0

エラー詳細

アップデート時に使用したコマンドは以下の通り

  • go get -u github.com/go-swagger/go-swagger/cmd/swagger

そして以下のエラーが発生

go get -u github.com/go-swagger/go-swagger/cmd/swagger
# cd /root/go/src/github.com/go-swagger/go-swagger; git pull --ff-only
error: Your local changes to the following files would be overwritten by merge:
        generator/bindata.go
        generator/client.go
        generator/shared.go
        scan/path.go
        scan/responses.go
Please, commit your changes or stash them before you can merge.
Aborting
Updating 00f4a1f..e62bb82
package github.com/go-swagger/go-swagger/cmd/swagger: exit status 1

単純にマージできないだけだったので、対象のディレクトリをごそっと削除して再度インストールしてあげます
その前に clean で swagger コマンド自体を削除します

  • go clean -i github.com/go-swagger/go-swagger/cmd/swagger
  • cd /root/go/src/github.com/go-swagger/go-swagger
  • cd ../ && rm -rf go-swagger
  • go get -u github.com/go-swagger/go-swagger/cmd/swagger

でエラーなく最新版をインストールすることができました

コードも実は修正する必要あり

go-swagger が生成してくれる main 的なソース「restapi/configure_your_project_name.go」ですがこいつも修正しないと最新版ではエラーが発生すると思います
configureServer の引数が 1 つ増えているので以下のように最後に一つ引数を追加してあげましょう

func configureServer(s *graceful.Server, scheme, addr string) {
...
}

最後に

go-swagger をバージョンアップした際に対応したことを紹介しました
オープンソースだしまだメジャーバージョンアップでもないので何とも言えませんが、後方互換性がないアップデートだとちょっと焦ります

0 件のコメント:

コメントを投稿