Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

外部モジュール(bregonig.dll とか)の管理方法を検討する #81

Closed
m-tmatma opened this issue Jun 10, 2018 · 35 comments
Closed
Labels
installer installer 関連 management 運営に関する話題 【ChangeLog除外】
Milestone

Comments

@m-tmatma
Copy link
Member

外部モジュール(bregonig.dll とか)の管理方法を検討する

@berryzplus
Copy link
Contributor

bregonig.dll は appveyor から wget できそうな気がします。

migemoとかppaはどうなのかよく分かっていませんが、
SakuraDownと似た方式にすればかき集めてこれるんではないかと。

リストがあるならそれを元に wget してもいいかも知れません。

@k-takata
Copy link
Member

bregonigは https://bitbucket.org/k_takata/bregonig/downloads/ に置いてあるものが公式バイナリです。
appveyorには置いていません。(appveyorのartifactsは、半年しか保持されなくなった点にも注意。)

@m-tmatma
Copy link
Member Author

bregonig.dll は appveyor から wget できそうな気がします。

外部ソースに依存すると外部ソースが利用できない or できなくなると
インストーラを作成できなくなるので外部モジュール管理用のリポジトリを作って
git submodule で参照したらいいのではないかと思ってます。

@m-tmatma
Copy link
Member Author

最初は、外部ファイルを展開して登録するのを
想定していたので、git submodule で登録するのが
いいと思ったが、zip のまま登録するのなら
直コミットでもいい気がします。

@KENCHjp
Copy link
Member

KENCHjp commented Jun 17, 2018

外部ファイルは展開して直コミットでいいかなと思っているのですが、いかがでしょう?
管理用リポジトリを外に作メリットがあまり見出せなくて。
複数プロジェクトにまたがって使うとかあれば別なのかもしれませんが。

@KENCHjp
Copy link
Member

KENCHjp commented Jun 17, 2018

#41 の下の方に話題がありますが、sinst_src.zipも全部展開たほうがいいかなと、keywordも差分管理したほうがいいかとおもってます。

@m-tmatma
Copy link
Member Author

sinst_src.zipも全部展開たほうがいいかなと、keywordも差分管理したほうがいいかとおもってます。

sinst_src.zip は自前のプロジェクトで管理するものだし、
テキストファイルなので展開して登録でいいと思うのですが、

外部ファイルに関しては、元ファイルをアーカイブのまま登録して
展開して使うとタイムスタンプを保持できてメリットが
あるんじゃないかと思います。

DLL などのバイナリファイルだとタイムスタンプって
結構意味があると思います。

@KENCHjp
Copy link
Member

KENCHjp commented Jun 17, 2018

@m-tmatma さん

展開して使うとタイムスタンプを保持できてメリットが
あるんじゃないかと思います。

なるほどです。コミッターというかリソース管理って観点だとそれがいいですね。
単純に運用チーム目線だと、チェックアウトしてすぐパッケージ作成にとりかかれるのを、いったん解凍とか入るなって思ったのですが、まぁバッチ化してればあまり問題ないかもですね。

@berryzplus
Copy link
Contributor

コミットログみた感じだと、
zip化した理由はタイムスタンプがずれるのを嫌ったため
と読み取れます。

そういえば TortoiseSVN だとcheckout時のタイムスタンプは現在時刻になったような。
時代が変わってますねぇ・・・
sinst_src.zip は展開してコミットでいいと思います。
現状どうなってるかウォッチできてません。

zip のまま登録するのなら直コミットでもいい気がします。

展開するなら submodule で参照するカタチになりますが、
サブモジュールは自動更新にならなかったり面倒くさそうだなぁ・・・とGit詳しくない人が言うw

appveyor は 7zip の利用実績があるようなので、zipの展開処理に不安はないと思っています。
とくに理由がなければ外部の配布物は、展開せずにコミットがいいような気がします。

@m-tmatma
Copy link
Member Author

そういえば TortoiseSVN だとcheckout時のタイムスタンプは現在時刻になったような。
時代が変わってますねぇ・・・

クライアント側の設定で
use-commit-times = yes
を設定すればチェックアウトしたときにタイムスタンプを維持してくれます。

ただそれだとクライアント側の設定に依存するので
以前 "svn:use-commit-times" というプロパティを設定されたファイルに対して
チェックアウトしたときに、コミット時のタイムスタンプを維持する機能を
subversion に追加する patch を送ったことがあります。

https://groups.google.com/forum/#!topic/subversion-development/hWFQcN38n0M

このときは、提案が成功しなかったです。というか途中で断念したように思います。

@berryzplus
Copy link
Contributor

https://groups.google.com/forum/#!topic/subversion-development/hWFQcN38n0M
このときは、提案が成功しなかったです。というか途中で断念したように思います。

こ、これは!・・・お疲れ様でした。

レビューコメントめちゃくちゃ読みづらいですね。
表示のされ方によるところも大きいと思うんですが、
そもそも何を言ってるのか分からない部分が多々あります。

ああ、英語読む気ないとかそういう話じゃないですよw

どうして欲しいか分からないレビューコメントは辛いですね。
反面教師と考えなきゃいけないのかな、と思います。

全然関係ないんですけど、 MinGW 向けツールのうち windres のための改造は、
本家GCC(MinGW64/MinGW32/CygWin)に還元したほうがよいような気がしています。
優先度は思いっきり低いんですが、精神的ハードルは思いっきり高いというやっかいな案件。

@KageShiron
Copy link
Member

勝手にまとめてみました。キーワードファイルって、サクラエディタの側に設定画面を用意しなくても勝手にファイルをいじってもらう方が色々楽な気がしてます

プロジェクト内

  • サクラエディタ本体
  • ヘルプファイル
  • キーワードファイル(展開したい)

プロジェクト内や本体に取り込めないか

  • multifile
  • SakuExt
  • サクラダウン

再配布すれば良さそう

どれも更新の頻度は低い(or止まっている)ので、無理に自動追従する仕組みを作るより更新があれば手動追加で良さそう。

  • bregoni.dll
  • diff.exe
  • ctags.exe
  • C/Migemo
  • Migemo辞書

廃止すれば良さそう

  • PPAライブラリ (すでに本家が開発を終了しているっぽい)

@k-takata
Copy link
Member

  • ctags.exe

Exuberant Ctagsは更新されなくなって久しいですが、後継のUniversal Ctagsの開発が進められています。Windows版のデイリービルドは以下で公開しています。
https://github.com/universal-ctags/ctags-win32
(Universal Ctagsの正式リリースはまだ出ていませんが。)

「更新があれば手動追加で良さそう」という点には同意ですが。

@m-tmatma
Copy link
Member Author

bregoni.dll

これはインストーラに入れときたいです。

理由は

  • 既存のインストーラに含まれている
  • 多くの人が正規表現を使う(と思う)

@KENCHjp
Copy link
Member

KENCHjp commented Jun 17, 2018

@KageShiron さんの「再配布すればよさそう」はインストーラーに含んで配るっていみじゃないのでしょうか?
ユーザーが任意にダウンロードしてもらうっていみじゃなくて。
ただバージョンアップを自動で追尾しなくてもいいのではって意味で。

@m-tmatma
Copy link
Member Author

#133 で sinst_src.zip を展開して登録するようにしました。

@m-tmatma
Copy link
Member Author

@KageShiron さんの「再配布すればよさそう」はインストーラーに含んで配るっていみじゃないのでしょうか?

「再配布」とあるからそうですね。

@KENCHjp
Copy link
Member

KENCHjp commented Jun 17, 2018

これはインストーラに入れときたいです。

これを私がふかよみしすぎたようです。
失礼しました。

m-tmatma added a commit to m-tmatma/sakura that referenced this issue Jun 18, 2018
@m-tmatma
Copy link
Member Author

berryzplus pushed a commit to berryzplus/sakura-editor that referenced this issue Jul 5, 2018
@m-tmatma m-tmatma added this to the next release milestone Jul 8, 2018
@beru beru added installer installer 関連 management 運営に関する話題 【ChangeLog除外】 labels Sep 18, 2018
@KENCHjp
Copy link
Member

KENCHjp commented Sep 23, 2018

@KageShiron さんまとめて頂きましたが、確かにdiff.exeは入れたいですね。
ctags.exeと同じような感じでいけそうですかね?

@m-tmatma
Copy link
Member Author

m-tmatma commented Nov 8, 2018

@KageShiron さんまとめて頂きましたが、確かにdiff.exeは入れたいですね。
ctags.exeと同じような感じでいけそうですかね?

入手先はありますか?

@KageShiron
Copy link
Member

KageShiron commented Nov 8, 2018

#477 で止まってますね・・・
入手先が確定できれば、プルリク作ってみます

@KageShiron
Copy link
Member

だんだんバッチが複雑になってきたので、もう展開するメリットのほうが大きい気がします。タイムスタンプについても、必要ならPEヘッダーのTimeDateStampを見ればいいのでは?と思ってます

@m-tmatma
Copy link
Member Author

だんだんバッチが複雑になってきたので、

バッチファイル分割すればいいのでは?

@berryzplus
Copy link
Contributor

berryzplus commented Nov 23, 2018

現状

No 場所 説明 今はいってるもの
1 /installer/externals インストーラに同梱する外部リソース bregonig, ctag
2 /externals ビルド時に使う外部リソース cppcheck, doxygen
3 /sakura_core/extmodule 外部ライブラリを使うための定義と実装(ヘッダが外部成果物の丸コピなので SAKURA editor のソースと言えない) bregonig, htmlhelp, migemo

3だけ種類が違うんだけど、全体把握には必要なはず。

@ds14050
Copy link
Contributor

ds14050 commented Nov 26, 2018

だんだんバッチが複雑になってきたので、もう展開するメリットのほうが大きい気がします。

#630 「インストーラの同梱ファイルの調整」にも関係することですが、@KageShiron さんのために zipArtifacts.zip を書き直しています(嘘です)。

(特に目的を定めずに)書き直しているのは本当で、こんな感じになりました>master...ds14050:re_zA.bat

zipArtifacts.txt という3カラムの TSV ファイルで管理するので、バッチの読み書きは(デバッグする時以外は!)不要です。

@KageShiron
Copy link
Member

展開したパターンのPRを作ろうとしてたものの、忙しくて時間が取れず💦
展開すればディレクトリごとコピーするだけなので、100行以上バッチを削除できて簡潔になると思ってます

余談ですが、Find-*系のバッチは↓にある%~$PATH:1みたいな変数展開で非常に簡潔に検索できそう・・・と気づきました
http://capm-network.com/?tag=Windows%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%A4%89%E6%95%B0

動きそうならこちらも後でPR出す予定なものの、リアルがいそがし・・・😢
https://gist.github.com/KageShiron/137e436cc22096e21257a606b5e3a159

@ds14050
Copy link
Contributor

ds14050 commented Nov 26, 2018

100行以上バッチを削除できて簡潔になると思ってます

簡潔さは大事です。いかに書かないかに頭を絞るべきなんです。すべてをコードで表現すればすべてがスペシャルケースとなり、最大限の自由と引き換えのカオスと非線形に膨れあがる複雑さの前にプログラマは早晩敗北してしまいます。

@ds14050
Copy link
Contributor

ds14050 commented Nov 26, 2018

Find-*系のバッチは(マナー違反だとは思いますが)標準インストールパスを狙い撃ちにしています。PATH 環境変数は役に立たないでしょう。

(追記) PATH に追加したものを使うんですね。for コマンドよりさらに簡潔。
(追記) %ENV% ではなく %0,...,%9 変数が必要なので find-7z.bat の中で call :label "7z" することになると思います。
(追記) if コマンドの括弧で囲まれた部分は最初にすべての %ENV% を展開してから実行されます。設定と参照の逐次実行には別の方法が必要です。

@m-tmatma
Copy link
Member Author

zipArtifacts.txt という3カラムの TSV ファイルで管理するので、バッチの読み書きは(デバッグする時以外は!)不要です。

この新しいバッチをメンテするのが大変そうです。非常に難解です。

@ds14050
Copy link
Contributor

ds14050 commented Nov 27, 2018

この新しいバッチをメンテするのが大変そうです。非常に難解です。

書いた自分はそうは思いませんが、そうですよねえ。それがビックリマークが付いている所以です。>「デバッグする時以外は!」

@ds14050
Copy link
Contributor

ds14050 commented Nov 27, 2018

zip ファイルをフォルダ扱いして内部のファイルをコピー元に指定できる機能なんてのもあってイチオシなんですけどね……(未練があるようだ)。

(追記) ビルドは完了しています>https://ci.appveyor.com/project/ds14050/sakura-clone/builds/20581672
ログはここから>https://ci.appveyor.com/project/ds14050/sakura-clone/builds/20581672/job/rmmg42yo5y0ix2ps#L13320
生成物に sha256.txt が入っていたりという微妙な違いがあります。

@ds14050
Copy link
Contributor

ds14050 commented Nov 27, 2018

最初の計画は「new subroutine: Set_BASENAME」だけでした。

(追記) よく見たらこのコミットには call :Set_BASENAME がありませんでした。次のコミットに混じっちゃったんですね。

@m-tmatma
Copy link
Member Author

現在、バイナリを installer\externals に登録する形で運用している。

@m-tmatma
Copy link
Member Author

現在、バイナリを installer\externals に登録する形で運用している。

現状これで運用していて問題出ていないのでクローズします。
何かあればチケット登録すればいいかと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
installer installer 関連 management 運営に関する話題 【ChangeLog除外】
Projects
None yet
Development

No branches or pull requests

7 participants