2 using System.Collections.Generic;
3 using System.Reflection;
6 namespace NaGet.Packages.Install
9 ///
\8dX
\90V
\83\
\83t
\83g
\82ð
\92T
\82·
11 public sealed class UpgradeFinder
13 private UpgradeFinder()
17 private static Package getUpgradePkg(Package pkg, PackageList<Package> pkgList, PackageList<InstalledPackage> instPkgList, string[] exclude, IComparer<string> verComp)
19 Package avaiablePkg = pkgList.GetPackageForName(pkg.Name);
20 bool canUpgrade = false;
22 if (avaiablePkg != null) {
24 if (verComp.Compare(pkg.Version, avaiablePkg.Version) < 0 &&
25 instPkgList.GetPackageForPackage(pkg.Name, avaiablePkg.Version) == null) {
28 if (Array.IndexOf(exclude, pkg.Name) >= 0) {
34 return (canUpgrade)? avaiablePkg : null;
37 public static IEnumerable<Package> GetUpgradePackages(PackageListsManager pkgListMan)
39 PackageList<Package> packageList = pkgListMan.AvailablePkgList;
40 string[] exclude = NaGet.Env.ExcludeUpdatePackageNames ?? new string[0];
42 VersionComparetor verComp = new VersionComparetor();
44 foreach (InstalledPackage pkg in pkgListMan.InstalledPkgList) {
45 Package availablePkg = getUpgradePkg(pkg, packageList, pkgListMan.InstalledPkgList, exclude, verComp);
46 if (availablePkg != null) { // if it has an upgrade, yield
47 yield return availablePkg;
50 foreach (InstalledPackage pkg in pkgListMan.SystemInstalledPkgList) {
51 Package availablePkg = getUpgradePkg(pkg, packageList, pkgListMan.SystemInstalledPkgList, exclude, verComp);
52 if (availablePkg != null) { // if it has an upgrade, yield
53 yield return availablePkg;