winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 553bc48f6271080bb608ae28a5492bb9963640f2
parent 0c0d6c0f7202e6934b4193ec2d04aab013a594f8
Author: yao-msft <50888816+yao-msft@users.noreply.github.com>
Date:   Tue, 27 Apr 2021 12:52:38 -0700

Make correlation logic from available source to installed source look at all versions instead of just latest (#904)


Diffstat:
Msrc/AppInstallerCommonCore/AppInstallerCommonCore.vcxproj | 46+++++-----------------------------------------
Msrc/AppInstallerRepositoryCore/CompositeSource.cpp | 59++++++++++++++++++++++++++++++++++-------------------------
2 files changed, 39 insertions(+), 66 deletions(-)

diff --git a/src/AppInstallerCommonCore/AppInstallerCommonCore.vcxproj b/src/AppInstallerCommonCore/AppInstallerCommonCore.vcxproj @@ -28,18 +28,6 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> - <ProjectConfiguration Include="Fuzzing|ARM"> - <Configuration>Fuzzing</Configuration> - <Platform>ARM</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Fuzzing|ARM64"> - <Configuration>Fuzzing</Configuration> - <Platform>ARM64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Fuzzing|Win32"> - <Configuration>Fuzzing</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> <ProjectConfiguration Include="Fuzzing|x64"> <Configuration>Fuzzing</Configuration> <Platform>x64</Platform> @@ -148,10 +136,6 @@ <RunCodeAnalysis>false</RunCodeAnalysis> <CodeAnalysisRuleSet>..\CodeAnalysis.ruleset</CodeAnalysisRuleSet> </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Fuzzing|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)x86\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <LinkIncremental>false</LinkIncremental> <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> @@ -170,10 +154,6 @@ <RunCodeAnalysis>false</RunCodeAnalysis> <CodeAnalysisRuleSet>..\CodeAnalysis.ruleset</CodeAnalysisRuleSet> </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> <LinkIncremental>false</LinkIncremental> <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> @@ -181,10 +161,6 @@ <RunCodeAnalysis>false</RunCodeAnalysis> <CodeAnalysisRuleSet>..\CodeAnalysis.ruleset</CodeAnalysisRuleSet> </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM64'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> <ItemDefinitionGroup> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> @@ -270,29 +246,17 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD;WINGET_DISABLE_FOR_FUZZING</PreprocessorDefinitions> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM'">$(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM64'">$(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Fuzzing|Win32'">$(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Fuzzing|x64'">$(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM'">true</TreatWarningAsError> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM64'">true</TreatWarningAsError> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Fuzzing|Win32'">true</TreatWarningAsError> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Fuzzing|x64'">true</TreatWarningAsError> - <LanguageStandard Condition="'$(Configuration)|$(Platform)'=='Fuzzing|x64'">stdcpp17</LanguageStandard> - <LanguageStandard Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM'">stdcpp17</LanguageStandard> - <LanguageStandard Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM64'">stdcpp17</LanguageStandard> - <LanguageStandard Condition="'$(Configuration)|$(Platform)'=='Fuzzing|Win32'">stdcpp17</LanguageStandard> - <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Fuzzing|x64'">MultiThreaded</RuntimeLibrary> + <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <TreatWarningAsError>true</TreatWarningAsError> + <LanguageStandard>stdcpp17</LanguageStandard> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <AdditionalOptions>%(AdditionalOptions) /fsanitize-coverage=inline-8bit-counters /fsanitize-coverage=edge /fsanitize-coverage=trace-cmp /fsanitize-coverage=trace-div</AdditionalOptions> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <GenerateWindowsMetadata>false</GenerateWindowsMetadata> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM'">Windows</SubSystem> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Fuzzing|ARM64'">Windows</SubSystem> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Fuzzing|Win32'">Windows</SubSystem> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Fuzzing|x64'">Windows</SubSystem> + <SubSystem>Windows</SubSystem> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/AppInstallerRepositoryCore/CompositeSource.cpp b/src/AppInstallerRepositoryCore/CompositeSource.cpp @@ -256,6 +256,11 @@ namespace AppInstaller::Repository return String < other.String; } + bool operator==(const SystemReferenceString& other) const + { + return Field == other.Field && String == other.String; + } + PackageMatchField Field; Utility::LocIndString String; }; @@ -303,32 +308,33 @@ namespace AppInstaller::Repository bool foundExistingPackage = false; PackageData result; - auto latestVersion = match.Package->GetLatestAvailableVersion(); - - foundExistingPackage = HandleSystemReferenceStringTypeForCheckForExistingResultFromAvailablePackageMatch( - match, - latestVersion.get(), - PackageVersionMultiProperty::PackageFamilyName, - PackageMatchField::PackageFamilyName, - "package family name"sv, - result); - - foundExistingPackage = HandleSystemReferenceStringTypeForCheckForExistingResultFromAvailablePackageMatch( - match, - latestVersion.get(), - PackageVersionMultiProperty::ProductCode, - PackageMatchField::ProductCode, - "product code"sv, - result) || foundExistingPackage; - - if (foundExistingPackage) - { - return {}; - } - else + for (auto const& versionKey : match.Package->GetAvailableVersionKeys()) { - return result; + auto packageVersion = match.Package->GetAvailableVersion(versionKey); + + foundExistingPackage = HandleSystemReferenceStringTypeForCheckForExistingResultFromAvailablePackageMatch( + match, + packageVersion.get(), + PackageVersionMultiProperty::PackageFamilyName, + PackageMatchField::PackageFamilyName, + "package family name"sv, + result); + + foundExistingPackage = HandleSystemReferenceStringTypeForCheckForExistingResultFromAvailablePackageMatch( + match, + packageVersion.get(), + PackageVersionMultiProperty::ProductCode, + PackageMatchField::ProductCode, + "product code"sv, + result) || foundExistingPackage; + + if (foundExistingPackage) + { + return {}; + } } + + return result; } private: @@ -381,7 +387,10 @@ namespace AppInstaller::Repository } } - data.SystemReferenceStrings.emplace_back(std::move(srs)); + if (std::find(data.SystemReferenceStrings.begin(), data.SystemReferenceStrings.end(), srs) == data.SystemReferenceStrings.end()) + { + data.SystemReferenceStrings.emplace_back(std::move(srs)); + } } return foundExistingPackage;