OSDN Git Service

バージョン取得でレジストリの値を信頼するか否かをソフトリストの情報から判断するように変更。
authorttp <ttp@users.sourceforge.jp>
Sat, 15 Oct 2011 02:11:37 +0000 (11:11 +0900)
committerttp <ttp@users.sourceforge.jp>
Sat, 15 Oct 2011 02:11:37 +0000 (11:11 +0900)
(チケット #25237 ソフトウェア情報不具合 の Firefox 対応)

na-get-lib/NaGet.Packages/Package.cs
na-get-lib/NaGet.Packages/PackageListsManager.cs

index 6b9706a..5f1fcfd 100644 (file)
@@ -35,6 +35,18 @@ namespace NaGet.Packages
        }\r
        \r
        /// <summary>\r
+       /// バージョン取得手段の種類を返す。\r
+       /// </summary>\r
+       public enum VersionInfoKey\r
+       {\r
+               /// <summary>\r
+               /// レジストリ情報を優先\r
+               /// </summary>\r
+               [XmlEnum(Name="registry")]\r
+               REGISTRY,\r
+       }\r
+       \r
+       /// <summary>\r
        /// パッケージ情報を格納するクラス\r
        /// </summary>\r
        public class Package\r
@@ -85,6 +97,11 @@ namespace NaGet.Packages
                public string UninstallerKey;\r
                \r
                /// <summary>\r
+               /// バージョン取得のルール\r
+               /// </summary>\r
+               public VersionInfoKey? VersionInfoKey;\r
+               \r
+               /// <summary>\r
                /// サイレントインストールのための引数。\r
                /// インストーラー形式のみ有効で、nullもしくは空文字列の場合は\r
                /// サイレントインストールができないことをあらわす\r
index 70435c1..34bb015 100644 (file)
@@ -151,20 +151,30 @@ namespace NaGet.Packages
                                int count = installedPkgList.FindAll(PackageList<InstalledPackage>.GetPredicateForPackageName(pkg.Name)).Count;\r
 \r
                                foreach (InstallationLog log in systemInstalledLogList.FindAll(createPackageNamePredicator(pkg))) {\r
-                                       // 1. バージョンがアンインストール情報から取得できなかったときは無条件で登録\r
+                                       // 1. バージョンがアンインストール情報から取得できなかったときは無条件で登録\r
                                        // 2. 同一名パッケージがない場合は無条件で登録\r
                                        // 3. 複数個同一パッケージがインストールされている場合は、バージョン比較して登録。\r
                                        if (string.IsNullOrEmpty(pkg.Version) ||\r
                                            count < 2 ||\r
                                            log.Package.Version == pkg.Version) {\r
-                                               \r
                                                // 補完したパッケージ情報への差し替え\r
+                                               \r
                                                UninstallInformation pkgUninstInfo = pkg.UninstallInfo;\r
+                                               string pkgVersion = pkg.Version;\r
+                                               VersionInfoKey? pkgVersionInfoKey = pkg.VersionInfoKey;\r
+                                                       \r
                                                NaGet.Utils.FieldCopy<Package,InstalledPackage>(log.Package, ref pkg);\r
+                                               \r
+                                               \r
                                                pkg.UninstallInfo = pkgUninstInfo;\r
                                                if (pkg.UninstallInfo.InstallDate == null) { // インストール日時の補完\r
                                                        pkg.UninstallInfo.InstallDate = log.Date;\r
                                                }\r
+                                               if (pkgVersionInfoKey.HasValue && pkgVersionInfoKey.Value == VersionInfoKey.REGISTRY) { // レジストリのバージョンを信頼する場合、バージョン情報の補完\r
+                                                       if (! string.IsNullOrEmpty(pkgVersion)) {\r
+                                                               pkg.Version = pkgVersion;\r
+                                                       }\r
+                                               }\r
                                                \r
                                                break;\r
                                        }\r