配布パッケージに関する概念 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)が紐付く。フィーチャには元のパッケージが対応し、フィーチャの変更履歴(ログ)はパッケージごとに管理される。
[追記]
パッケージ管理系のディレクトリ構造は:
- tools/
- tools/caplib.py
- tools/capman.py
- log/{package}/
- log/{package}/{modification}.log
- status/
- status/currentFiles.json
- status/currentFeatures.json
- meta/{package}_{ver}/
- docs/{package}_{ver}/
- archive/{package}_{ver}.cap.zip
[/追記]