The Diary of Aska

Dropbox API Command 不具合対応祭り(SSL_verify_mode/case insensitive/download log/unexpected EOF/Proxy)

あけましておめでとうございます。

5つほどバグの連絡を受けていたのですがなかなか手が付けられず正月が明けてしまいましたが遂に諸々の不具合対応が終わりました。

FreeBSD Portsだけは私の直轄でなく一応更新の連絡はしているのですが反映に時間が掛かります、お急ぎの場合はcpanまたはgithubをご利用下さい。

SSL verify の警告メッセージ

依存モジュールの一つ IO::Socket::SSL がv1.79から SSL_verify_mode の指定をしないと警告が出るようになっていました。

gfxさんから神パッチを頂き WebService::Dropbox をバージョンアップすると警告が出ないようになりました、ありがとうございます、ありがとうございます。

余談ですが WebService::Dropbox のバグの9割は dropbox-api 経由で発見されています。

$ cpanm WebService::Dropbox
WebService::Dropbox is up to date. (1.15)

case insensitive問題

Folder => folder といった具合にDropbox上のフォルダ名を変更した際に、同期ダウンロードが出来なくなる不具合で、こちらも修正済みです。

ローカルの Folderfolder にリネームする対応までやるか検討したのですが、公式クライアントの挙動に合わせ既に folder がある場合 folder そのまま利用しています。

Dropboxも大文字小文字を区別しない為、同期アップロードで Folder の中身をアップロードする際、同じ階層に folder があると folder にアップロードされます。

ダウンロードのログがダウンロード処理前に出力される

ダウンロードに失敗しても成功時と同じログが出力されるという酷いバグがありました。

失敗時は download failure ファイル名 (エラー内容 at ... ) at ... というログに変更しました。

remote_base: /tmp
local_base: /tmp
** download **
download Gentoo.iso
download failure CentOS.iso (Unexpected EOF while reading content body at ... ) at ...

... の部分になかなか冗長な文字列が付いてくるのですがご容赦下さい。

大きなファイルのダウンロードが安定しない

こればかりはハード・インフラ・DropboxのAPIサーバーの御機嫌など諸都合あり一発で確実に通すのば厳しい上にAPIでレジューム機能が提供されていないのでリトライを繰り返すしかありません :/

指定回数リトライするシェルスクリプトを用意したいのでよろしければご利用下さい。

OS Xで濁音を含むファイル名のログが化ける

UTF-8-macですね、ログも文字化けしないようにしました。

Proxy対応

大抵のLinuxコマンド同様に環境変数でproxy指定できるようになりました、暴発しないように -e オプション 指定時のみ有効にしています。

初回リリース時から対応していればデフォルトの挙動に出来たのですが下位互換性の都合上オプションとなりました。

$ HTTP_PROXY="http://127.0.0.1:8888" dropbox-api コマンド パス等 -e

printオプション追加

Dropbox API のレスポンスデータに2つの要素が増えていたいので -p オプション でそれぞれ指定できるように対応。

使用例

$ dropbox-api ls -p "%d\t%s\t%R\t%CY/%Cm/%Cd %CH:%CM:%CS \t %p\n"
-       0 bytes 21ba501118116   2011/11/24 00:05:29      /!"#$%&'(=~|@`{}[]+*;,<>:_?-^.txt
-       61.1 KB 1ecc901118116   2011/10/04 12:07:00      /aerith.json
d       -       22bb501118116   -/-/- -:-:-      /Apps
d       -       2482701118116   -/-/- -:-:-      /backup
d       -       1013601118116   -/-/- -:-:-      /bookma
-       1.6 KB  2302701118116   2011/12/29 13:42:02      /C81a.txt
d       -       8eb01118116     -/-/- -:-:-      /document
d       -       149c901118116   -/-/- -:-:-      /site
d       -       2791b01118116   -/-/- -:-:-      /test
d       -       1013501118116   -/-/- -:-:-      /web
d       -       f2fc01118116    -/-/- -:-:-      /work
d       -       2463c01118116   -/-/- -:-:-      /カメラアップロード

余談

実はまだ不具合があって同期アップロードで同期できているけどタイムスタンプがローカルの方が新しい状態だとアップロード処理してもDropbox側のファイル更新日時が書き換わらないので次回実行時以降も無駄に転送処理が走ってしまいます、リモートの更新日時を上書きできない制約というのはとてもいやらしくローカル側の更新日時をアップロードで書き換えるのも嫌だし、メタファイルを持たせるのも気が進まない感じで放置されています。このエコの時代にそれはイカンだろうという事で対応を考えているところです。

今年もよろしくお願いします。

諸情報

Dropbox API Command は以下で公開しています。