テストパッケージです。YAMLファイルに書けるあらゆるUTF-8の範囲の文字が許容される。†パッケージのバージョン。ドットで区切られた数値を使用する。(下位)ドットで区切られた各桁ごとに直感的に上位の数値から比較される。ゼロパディングは必要としない。下記のようなバージョンも正しく処理される。2.0.100パッケージのアップデートを考慮し、新しいパッケージは常に大きい数値を使うべきである。パーケージリストリポジトリに登録するバージョンはこれの上位桁数値である。パッケージリストリポジトリに登録されたバージョンが2.2だった場合、package.txtによるバージョンが2.2または2.2.*でないなら不正なpackage.txtとして認識される。互換性の無いバージョンアップでは上位桁のバージョンを変え、パッケージリストリポジトリに別バージョンとしてアーカイブを登録することが推奨される。アップデートの時にはインストール済みのパッケージとこの数値が一致する場合処理がスキップされるので、少しでも変更があった場合は必ずバージョンをあげるべきである。†パッケージのタイプ。既定のタイプ文字列を指定する。あるパッケージの名前とバージョンの情報を持った配列を指定する。基本的に前に記述されたものから順に処理される。nameにパッケージ名、versionに有効なバージョンを記載する。1.9バージョンは単一の値を指定するか、最大を示すmaxまたは最小を示すminを指定することができる。パッケージリストリポジトリに対応する上位桁バージョンが無い場合失敗する。対象のpackage.txtのバージョンがこれに一致しない場合も失敗する。バージョンを記載しないことも可能である。制約内でとりうる最新のバージョンがインストールされるが、互換性の問題等も出る場合があるので上限バージョン等も適切に指定することを推奨する。†パッケージの簡易な説明。任意の文字列を指定する。†パッケージの内容を示すタグ。任意の文字列を配列で指定する。piyo順不同に処理される。†パッケージのWebサイト。下記のようなURLと説明(省略可)を含むリストを指定する。複数のサイトが指定できるが、1つ目のみが代表的なサイトとして使用されることを想定して記述すべきである。http://等の一般的なスキームのほか、アーカイブ内からのパスを示すarchive://とアーカイブリポジトリ内からのパスを示すrepository://が使える。sitesにおいてarchive://は非推奨である。†パッケージのreadme。http://等の一般的なスキームのほか、アーカイブ内からのパスを示すarchive://とアーカイブリポジトリ内からのパスを示すrepository://が使える。†パッケージのchangelog。http://等の一般的なスキームのほか、アーカイブ内からのパスを示すarchive://とアーカイブリポジトリ内からのパスを示すrepository://が使える。†パッケージのイメージ。下記のようなURLと説明(省略可)を含むリストを指定する。複数のサムネイルが指定できるが、1枚目のみが代表的なサムネイルとして表示されることを想定して記述すべきである。サポートされる画像形式は画像表示可能なWebブラウザが一般的に対応しているJPG,GIF,PNG,SVGとする。これ以外の画像形式(TIFF)等は表示を保証されない。http://等の一般的なスキームのほか、アーカイブ内からのパスを示すarchive://とアーカイブリポジトリ内からのパスを示すrepository://が使える。既定のタイプ文字列を指定する。place属性のルートをどこにおくかの区別をする。'ghost'ならゴーストディレクトリのルート、'baseware'ならベースウェアのルート、これを指定しない場合カレントディレクトリとなる。†パッケージの配置場所。パス文字列を指定する。place_onで決められたルートからここで指定したディレクトリを掘って、その下にアーカイブを展開する。†パッケージアーカイブのディレクトリから先頭のディレクトリを省いて解凍する。この値のレベルだけ先頭のディレクトリが削除されて解凍される。†パッケージの使用条件(ライセンス)。†package.txtのplace_on属性=ghostゴーストのルートディレクトリをパッケージのベースルートディレクトリとする。そのためパッケージマネージャのカレントディレクトリから上の階層をたどってinstall.txtを含むディレクトリをベースルートディレクトリとする。見つからなかった場合はカレントディレクトリをベースルートディレクトリとする。このとき警告を出すべきである。このベースルートディレクトリをルートとして同place属性にある位置をパッケージのルートディレクトリとする。package.txtのplace_on属性=basewareベースウェアのルートディレクトリをパッケージのベースルートディレクトリとする。そのためパッケージマネージャのカレントディレクトリから上の階層をたどってinstall.txtとshellを含まずballoonを含むディレクトリをベースルートディレクトリとする。見つからなかった場合はカレントディレクトリをベースルートディレクトリとする。このとき警告を出すべきである。このベースルートディレクトリをルートとして同place属性にある位置をパッケージのルートディレクトリとする。package.txtのplace_on属性なしカレントディレクトリをベースルートディレクトリとする。このベースルートディレクトリをルートとして同place属性にある位置をパッケージのルートディレクトリとする。†パッケージのルートディレクトリ以下にアーカイブを解凍する。このときベースルートディレクトリ下の".germ.package.[パッケージ名]"にインストール情報を記録する。この[パッケージ名]はURLエンコード([A-Za-z0-9]と[-_!~.()']を除く文字(encodeURIComponent()の回避文字から[*]を除いたもの)について)されたパッケージ名である。インストール情報はpackage_informationキーにpackage.txtの内容、elementsキーにアーカイブから解凍したファイルのパス(パッケージのルートディレクトリからの相対パス)を記録したYAMLである。空)の場合のベースルートディレクトリをパッケージマネージャのカレントディレクトリから上の階層をたどって検索する。それぞれのディレクトリでインストール情報のファイル名を探し、見つかればそれを使う。どのディレクトリでも見つからなければ失敗する。†インストール情報を参照し、まずファイルのみを削除する。次にディレクトリを削除するが、削除できなかったディレクトリはそのまま残す。最後にインストール情報ファイルを削除する。†インストール時のフックコードの実行は一般のパッケージマネージャではよく採用されているが、伺かパッケージマネージャの構成ファイルは人が登録制でなく信頼性が低いと考えられるので禁止する。インストール時のリネームも同様であり、つまりパッケージはアーカイブの解凍された状態が最終状態である必要がある。†package.txt等の仕様が互換性なく再策定されたので、このプログラムは旧仕様の範囲では動作しますが、今後の伺かパッケージマネージャとしては使えません。新仕様対応版をいつか作ろうと思います。†ZIPの中にあるgerm.cmdが実行できます。コマンドを実行してみてください。testinstall/remove/search/list/info/getをとりあえず実装しました。リポジトリはとりあえずhttp://germ.narazaka.net/に静的ファイルでおいてます。embryoから考えて辞書で引いたらこうなったです。†このソフトウェアにはApacheライセンスのソフトウェアrequestが使われています。MITライセンス(http://narazaka.net/license/MIT?2014)の元で配布いたします。日本語名については、混乱せぬようUTF-8で記述を明示しといた方が安全かも。22:51:18指摘の点、UTF-8固定としました。あとアーカイブ配置の仕様を変更しました。......まだ色々変更ありそう。02:33:18依存関係、サンプルあった方が叩き台になります?いくつかモデルケース抱えてます。07:18:37そうですね。色々なケース把握して実装したほうがよさげなのでサンプルおねがいします。