kyoh86 / denops-docbase.vim

0 stars 0 forks source link

postのbufferを保存する際にリモート側の差分も取り込む #13

Open kyoh86 opened 6 months ago

kyoh86 commented 6 months ago
kyoh86 commented 5 months ago

本質的ではない。 保存前に「自分が編集開始したときとの差分があれば、警告する」みたいな方が良い。

kyoh86 commented 5 months ago

そしてそれはトランザクションなしには(徹底的には)やれない。

kyoh86 commented 5 months ago

警告するだけだともったいないというか面倒くさいので、こうしたい。

差分を適用しようとしたときに、もしコンフリクトが起きたらgitのmergeがそうするように、その部分にマーカーを挿入したものをバッファに適用する。

<<<<<<<
our
=======
their
>>>>>>>

こうだよね。

これがあれば rhysd/conflict-marker.vim でGitと同じようにコンフリクトとシンプルに戦えるから良いと思う。

kyoh86 commented 5 months ago

仕様まとめ

防ぐためにはどうするか

差分を適用しようとしたときに、もしコンフリクトが起きたらgitのmergeがそうするように、その部分にマーカーを挿入したものをバッファに適用する。

<<<<<<<
our
=======
their
>>>>>>>

こうだよね。

これがあれば rhysd/conflict-marker.vim でGitと同じようにコンフリクトとシンプルに戦えるから良いと思う。

あと、そもそも編集が行われてないんだったらこういう保存周りの処理を一切呼ばないようにしたい。コストの無駄なので。

kyoh86 commented 5 months ago

diffは下手に頑張らず、外部コマンドに頼った方がよさそう。 diff a.txt b.txt | patch --merge c.txt --mergeが肝

--merge  Merge using conflict markers instead of creating reject files.
kyoh86 commented 5 months ago

diff の --from-file --to-file 使えば、どちらか片方はSTDINに任せられる

kyoh86 commented 5 months ago

jsdiffの話

https://github.com/kpdecker/jsdiff/issues/307 もろにマージ欲しいと書いてる人がいる。 exportはされてるけどREADMEに書かれてない、しかも変更がめちゃくちゃ古い。 https://github.com/kpdecker/jsdiff/blob/master/src/patch/merge.js

https://github.com/kpdecker/jsdiff/issues/181 ここで欲されて実装されたけどパブリックにならないまま放置されてる

https://github.com/kpdecker/jsdiff/issues/341 今分かってるバグはこれ。