ATOM

Atom Package「Remote-ftp」のローカルでのあれこれ

More than 3 years have passed since last update.

利用できるまでは下記を参考にさせていただきました。

http://loumo.jp/wp/archive/20151004000041/


保存した時に同期させたくない

Remote-ftpはローカルのファイルを保存すると設定してるリモート先に自動でアップロードしてくれます。

ですが自動でアップロードされてしまうと意図していないファイルを更新してしまうかもしれません。

それを回避する方法はパッケージの設定から

Auto Upload On Save → never

remote-ftp1.png

こうすることで自動アップロードを防ぐことができます。


ローカルファイルのUploadとSync local -> remoteの違い

ローカルのファイルをリモート先に更新するための方法には Upload と Sync local -> remote と二つの方法があります。

remote-ftp2.png

これらの違いがいまいち分からなかったので簡単に調べてみました。


Upload

こちらは単純に選択したものをアップロードするようです。

ローカルから反映するときは基本こちらを利用すれば良いようです。


Sync local -> remote

問題はこちら

どうやらこの Sync local -> remote は文字通り同期することのようです。

ただしファイル単体で実行しても特に何も起こらず?

ディレクトリ上でのみ利用できるようです。

さて、同期といいましても

結局ローカルのファイルをリモート先に更新するのは変わらないじゃないか!

と思ってしまいますが、実は内部的には選択したディレクトリ内とリモート先とで差分を見ていて、

差があるものだけ更新しているようです。

下のイメージを見て頂ければ想像付きやすいと思います。


1. 最初の状態

6.png

remote-ftp3.png

タイムスタンプは同じ時間です。


2. Uploadした時

2.txtを修正してUploadを行いました。

7.png

remote-ftp4.png


結果

1.txt → 更新される

2.txt → 更新される


3. Sync local -> remoteした時

同じように2.txtを修正してSync local -> remoteを行うと?

8.png

remote-ftp5.png


結果

1.txt → 更新されない

2.txt → 更新される

このように、Sync local -> remoteは差分をとり最低限のファイルを更新を行ってくれるので、大量のファイルを更新する時はとても重宝しますね。

と、思うじゃないですか?

実はこれには落とし穴があるんです。

というのもRemote-ftpでどうやって差分をとっているのだろうと思いRemote-ftpのソースを見ていると


Remote-FTP/lib/client.js

L559 ~

// Upload only if not present on remote or size differ
if (!remote || remote.size != local.size) {
self.connector.put(local.name, function () {
return n();
});
} else {


おお・・・英語はできないですが言ってることはなんとなく分かります。

恐らく差分のとり方はサイズの差と書いてありますね。(適当)

というわけで、2.txtのサイズを変えないよう文字を1文字変えてSync local -> remote してみましたところ、

見事に更新されませんでした

これは偶然ファイルのサイズが同じでうまく更新できないことも起きそうですね。


結論

ちょっと時間掛かるとしても、基本的にUploadを使いましょう。