Pages

2009-03-08

OpenMetaのバックアップ

TagitなどのIronic製OpenMetaツールはOMメタデータのバックアップ機構を備えています。OMSavePanelとかもIronicのライブラリを使っているのでこれに対応してるんですが、ちょっと自分で実装する機会があったのでどんな仕様になっているか簡単に調べてみました。

まず、バックアップの実体はプロパティリスト。次の3つのキーをもつ辞書。

omDict
ファイルに付けられたOMメタデータ(com.apple.metadata:kOMか単にkOMで始まるのも)の辞書
bu_path
バックアップするファイルのパス文字列
bu_alias
バックアップするファイルのaliasのデータ

で、これを保存するんだけど、バックアップは全部~/Library/Application Support/OpenMeta/backups以下に保存されることになっている。だけどここに直接保存されるんじゃなくて、バックアップする時点の年と月をパスに追加する。例えば2009年3が月だったら/Library/Application Support/OpenMeta/backups/2009/3みたいな感じ。

そしてファイル名も少し面倒。

  1. ファイル名を40文字以内に切り詰める。元のファイル名が40文字を超える場合は最初と最後の20文字を抜き出してくっつける。
  2. ファイルの親ディレクトリのパスのELF Hashを得る。

で、(切り詰めたファイル名)__(親ディレクトリのハッシュ).ombackが保存するファイル名。ここにさっきの辞書を保存してやればバックアップは完了。ちなみにこのバックアップパスはkBackupStampOMって名前で対象ファイルのxattrにセットされるからいつでも取り出せます。