OSDN Git Service

na-get-lib,キャッシュフォルダの構成を複数インストーラーファイル対応に変更(キャッシュフォルダを異なるアーキテクチャやOSで共有したときにハッシュ値不適合となっ...
[applistation/AppliStation.git] / na-get-lib / NaGet.Packages.Install / Installation.cs
index c7f9e1a..ef4de37 100644 (file)
@@ -23,8 +23,8 @@ namespace NaGet.Packages.Install
                        set {\r
                                installedPackage = value;\r
                                \r
                        set {\r
                                installedPackage = value;\r
                                \r
+                               installerIndex = getPreferInstallerIndex(value);\r
                                installerFile = getArchiveFilePath();\r
                                installerFile = getArchiveFilePath();\r
-                               installerIndex = GetPreferInstallerIndex(value);\r
                        }\r
                }\r
 \r
                        }\r
                }\r
 \r
@@ -355,11 +355,13 @@ namespace NaGet.Packages.Install
                        return exitCode;\r
                }\r
                \r
                        return exitCode;\r
                }\r
                \r
+               #region インストーラーファイル設定時の処理\r
+               \r
                /// <summary>\r
                /// もっともふさわしいインストーラー番号を返す\r
                /// </summary>\r
                /// <returns></returns>\r
                /// <summary>\r
                /// もっともふさわしいインストーラー番号を返す\r
                /// </summary>\r
                /// <returns></returns>\r
-               public static int GetPreferInstallerIndex(Package InstalledPackage)\r
+               private static int getPreferInstallerIndex(Package InstalledPackage)\r
                {\r
                        if (InstalledPackage.Type == InstallerType.CANNOT_INSTALL) { // インストール不能パッケージ\r
                                return -1;\r
                {\r
                        if (InstalledPackage.Type == InstallerType.CANNOT_INSTALL) { // インストール不能パッケージ\r
                                return -1;\r
@@ -390,14 +392,16 @@ namespace NaGet.Packages.Install
                /// <summary>\r
                /// インストーラーの保存先パスを生成\r
                /// </summary>\r
                /// <summary>\r
                /// インストーラーの保存先パスを生成\r
                /// </summary>\r
+               /// <remarks>installerIndexが求まっているものとして仮定して処理する</remarks>\r
                private string getArchiveFilePath()\r
                {\r
                        Package package = this.InstalledPackage;\r
                        \r
                        string folderName = string.Format("{0}({1})", package.Name, package.Version);\r
                private string getArchiveFilePath()\r
                {\r
                        Package package = this.InstalledPackage;\r
                        \r
                        string folderName = string.Format("{0}({1})", package.Name, package.Version);\r
+                       string subFolderName = string.Format("installer.{0}", (installerIndex >= 0)? installerIndex.ToString("D") : "X");\r
                        string fileName = NaGet.Utils.Url2filename(new Uri(package.Installer[0].Url.Href));\r
                        \r
                        string fileName = NaGet.Utils.Url2filename(new Uri(package.Installer[0].Url.Href));\r
                        \r
-                       string folder = Path.Combine(NaGet.Env.ArchiveFolderPath, folderName);\r
+                       string folder = Path.Combine(NaGet.Env.ArchiveFolderPath, Path.Combine(folderName, subFolderName));\r
                        \r
                        if (! File.Exists(Path.Combine(folder, fileName))) {\r
                                if (Directory.Exists(folder)) {\r
                        \r
                        if (! File.Exists(Path.Combine(folder, fileName))) {\r
                                if (Directory.Exists(folder)) {\r
@@ -417,6 +421,8 @@ namespace NaGet.Packages.Install
                        return Path.Combine(folder, fileName);\r
                }\r
                \r
                        return Path.Combine(folder, fileName);\r
                }\r
                \r
+               #endregion\r
+               \r
                /// <summary>\r
                /// すでにインストールされているパッケージを取得する\r
                /// </summary>\r
                /// <summary>\r
                /// すでにインストールされているパッケージを取得する\r
                /// </summary>\r
@@ -536,6 +542,8 @@ namespace NaGet.Packages.Install
                        return string.Join(" ", strs);\r
                }\r
                \r
                        return string.Join(" ", strs);\r
                }\r
                \r
+               #region 便利メソッド群\r
+               \r
                /// <summary>\r
                /// パッケージ配列をインストール処理配列に変換する便利メソッド\r
                /// </summary>\r
                /// <summary>\r
                /// パッケージ配列をインストール処理配列に変換する便利メソッド\r
                /// </summary>\r
@@ -549,5 +557,18 @@ namespace NaGet.Packages.Install
                        }\r
                        return insts;\r
                }\r
                        }\r
                        return insts;\r
                }\r
+               \r
+               /// <summary>\r
+               /// パッケージがインストール可能かを戻します。\r
+               /// </summary>\r
+               /// <param name="pkg">検査対象のパッケージ</param>\r
+               /// <returns>インストール可能か否か</returns>\r
+               public static bool IsInstallablePackage(Package pkg)\r
+               {\r
+                       int installerIndex = getPreferInstallerIndex(pkg);\r
+                       return installerIndex >= 0;\r
+               }\r
+               \r
+               #endregion\r
        }\r
 }\r
        }\r
 }\r