このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

配布パッケージに関する概念 2

/META-INF/index.json を基点にして各種ファイルを配置すればいいだろう。

インストール先は抽象化して、プレースとして指定する。プレースの構造は:


type Place = {
"container" : string(minlength=1),
"role" : string(minlength=1),
@[default("tree")]
"layout" : ("flat" | "tree"),
@[default("**")]
"allowedName": string(remark="globパターン")?,
@[default(null)]
"forbiddenName": (null | string(remark="globパターン"))?,
};

placeDef.jsonは [Place*] か、またはそれをハッシュにしたオブジェクト。キーは role@container にする。

placeDef.jsonは固定的だが、placeAssign.jsonはあるプロジェクトごとに変わる。placeAssign.jsonでは、アプリケーションプレース(特定のアプリケーション配下のプレース)以外のプレースの物理パスを決める。アプリケーション以外のコンテナは、_project と _system (増えるかもしれない)。アプリケーションごとのassignは_manifest.xjsonに書いてあるはず。

プレースの下はmafsのファイルツリーがぶら下がる。ファイルは何らかのフィーチャ(一意的)に所属し、フィーチャには一意的にモディフィケーション(オペレーションはcreate, update)が紐付く。フィーチャには元のパッケージが対応し、フィーチャの変更履歴(ログ)はパッケージごとに管理される。

[追記]
パッケージ管理系のディレクトリ構造は:

  1. tools/
  2. tools/caplib.py
  3. tools/capman.py
  4. log/{package}/
  5. log/{package}/{modification}.log
  6. status/
  7. status/currentFiles.json
  8. status/currentFeatures.json
  9. meta/{package}_{ver}/
  10. docs/{package}_{ver}/
  11. archive/{package}_{ver}.cap.zip

[/追記]