commit 3efea3829041993bea51432af25b994cfa8339f3
parent edbf683f40087d978176e9a47c725c7e34a6b3d4
Author: yao-msft <50888816+yao-msft@users.noreply.github.com>
Date: Wed, 16 Apr 2025 11:06:57 -0700
Better DefaultInstallVersion (#5389)
DefaultInstallVersion being null causes larger than expected issues. The
change proposes to return latest applicable version if exists, to
minimize duplicate installs/ upgrade failures. If no latest applicable
version, return latest available version if exists.
###### Microsoft Reviewers: [Open in
CodeFlow](https://microsoft.github.io/open-pr/?codeflow=https://github.com/microsoft/winget-cli/pull/5389)
Diffstat:
2 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/src/Microsoft.Management.Deployment/CatalogPackage.cpp b/src/Microsoft.Management.Deployment/CatalogPackage.cpp
@@ -67,9 +67,9 @@ namespace winrt::Microsoft::Management::Deployment::implementation
return m_availableVersions.GetView();
}
- void CatalogPackage::InitializeDefaultInstallVersion()
+ void CatalogPackage::InitializeLatestApplicableVersion()
{
- std::call_once(m_defaultInstallVersionOnceFlag,
+ std::call_once(m_latestApplicableVersionOnceFlag,
[&]()
{
using namespace AppInstaller::Pinning;
@@ -126,15 +126,27 @@ namespace winrt::Microsoft::Management::Deployment::implementation
auto latestVersionImpl = winrt::make_self<wil::details::module_count_wrapper<
winrt::Microsoft::Management::Deployment::implementation::PackageVersionInfo>>();
latestVersionImpl->Initialize(std::move(latestApplicableVersion));
- m_defaultInstallVersion = *latestVersionImpl;
+ m_latestApplicableVersion = *latestVersionImpl;
}
});
}
Microsoft::Management::Deployment::PackageVersionInfo CatalogPackage::DefaultInstallVersion()
{
- InitializeDefaultInstallVersion();
- return m_defaultInstallVersion;
+ InitializeLatestApplicableVersion();
+
+ if (m_latestApplicableVersion)
+ {
+ return m_latestApplicableVersion;
+ }
+ else if (AvailableVersions().Size() > 0)
+ {
+ return GetPackageVersionInfo(AvailableVersions().GetAt(0));
+ }
+ else
+ {
+ return nullptr;
+ }
}
Microsoft::Management::Deployment::PackageVersionInfo CatalogPackage::GetPackageVersionInfo(Microsoft::Management::Deployment::PackageVersionId const& versionKey)
@@ -156,7 +168,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation
bool CatalogPackage::IsUpdateAvailable()
{
- InitializeDefaultInstallVersion();
+ InitializeLatestApplicableVersion();
return m_updateAvailable;
}
diff --git a/src/Microsoft.Management.Deployment/CatalogPackage.h b/src/Microsoft.Management.Deployment/CatalogPackage.h
@@ -38,12 +38,12 @@ namespace winrt::Microsoft::Management::Deployment::implementation
bool m_updateAvailable = false;
Windows::Foundation::Collections::IVector<winrt::Microsoft::Management::Deployment::PackageVersionId> m_availableVersions{ winrt::single_threaded_vector<winrt::Microsoft::Management::Deployment::PackageVersionId>() };
winrt::Microsoft::Management::Deployment::PackageVersionInfo m_installedVersion{ nullptr };
- winrt::Microsoft::Management::Deployment::PackageVersionInfo m_defaultInstallVersion{ nullptr };
+ winrt::Microsoft::Management::Deployment::PackageVersionInfo m_latestApplicableVersion{ nullptr };
std::once_flag m_installedVersionOnceFlag;
std::once_flag m_availableVersionsOnceFlag;
- std::once_flag m_defaultInstallVersionOnceFlag;
+ std::once_flag m_latestApplicableVersionOnceFlag;
- void InitializeDefaultInstallVersion();
+ void InitializeLatestApplicableVersion();
#endif
};
-}-
\ No newline at end of file
+}