Merge branch 'main' of https://github.com/microsoft/PowerToys into leilzh/sparse

This commit is contained in:
Leilei Zhang
2025-10-19 21:50:25 +08:00
4 changed files with 72 additions and 36 deletions

View File

@@ -269,7 +269,7 @@ jobs:
# Build PowerToys.DSC.exe for ARM64 (x64 uses existing binary from previous build)
- task: VSBuild@1
displayName: Build PowerToys.DSC.exe (x64 for generating manifests)
condition: ne(variables['BuildPlatform'], 'x64')
condition: and(succeeded(), ne(variables['BuildPlatform'], 'x64'))
inputs:
solution: src/dsc/v3/PowerToys.DSC/PowerToys.DSC.csproj
msbuildArgs: /t:Build /m /restore
@@ -544,15 +544,16 @@ jobs:
flattenFolders: True
targetFolder: $(JobOutputDirectory)
- task: CopyFiles@2
displayName: Stage Symbols
inputs:
contents: |-
**\*.pdb
!**\vc143.pdb
!**\*test*.pdb
flattenFolders: True
targetFolder: $(JobOutputDirectory)/symbols-$(BuildPlatform)/
- pwsh: |-
$Symbols = Get-ChildItem "$(BuildPlatform)" -Recurse -Filter *.pdb -Exclude "vc143.pdb","*test*.pdb" |
Group-Object Name | ForEach-Object { $_.Group[0] }
$OutDir = "$(JobOutputDirectory)/symbols-$(BuildPlatform)"
New-Item -Type Directory $OutDir -EA:Ignore
Write-Host "Linking $($Symbols.Length) symbols into place at $OutDir"
ForEach($s in $Symbols) {
New-Item -Type HardLink -Target $s.FullName (Join-Path $OutDir $s.Name)
}
displayName: Stage Unique Symbols (as hard links)
- pwsh: |-
$p = "$(JobOutputDirectory)\"
@@ -580,21 +581,30 @@ jobs:
# Publishing the GPO files
- pwsh: |-
New-Item "$(JobOutputDirectory)/gpo" -Type Directory
Copy-Item src\gpo\assets\* "$(JobOutputDirectory)/gpo" -Recurse
$GpoArchive = "$(JobOutputDirectory)\GroupPolicyObjectFiles-${{ parameters.versionNumber }}.zip"
tar -c -v --format=zip -C .\src\gpo\assets -f $GpoArchive *
displayName: Stage GPO files
# Running the tests may result in future jobs consuming artifacts out of this build
- ${{ if or(eq(parameters.runTests, true), eq(parameters.buildTests, true)) }}:
- task: CopyFiles@2
displayName: Stage entire build output
inputs:
sourceFolder: '$(Build.SourcesDirectory)'
contents: '$(BuildPlatform)/$(BuildConfiguration)/**/*'
targetFolder: '$(JobOutputDirectory)\$(BuildPlatform)\$(BuildConfiguration)'
# Running the tests may result in future jobs consuming artifacts out of this build
# Instead of running an expensive file copy step, move everything over since the build is totally done.
- pwsh: |-
# It seems weird, but this is for compatibility. Our artifacts historically contained the folder x64/Release/x64/Release (for example).
$FinalOutputRoot = "$(JobOutputDirectory)\$(BuildPlatform)\$(BuildConfiguration)\$(BuildPlatform)"
$ProjectBuildRoot = "$(Build.SourcesDirectory)\$(BuildPlatform)"
$ProjectBuildDirectory = "$ProjectBuildRoot\$(BuildConfiguration)"
New-Item -Type Directory $FinalOutputRoot -EA:Ignore
Move-Item $ProjectBuildDirectory $FinalOutputRoot
displayName: Move entire output directory into artifacts
- ${{ if eq(parameters.publishArtifacts, true) }}:
- publish: $(JobOutputDirectory)
artifact: $(JobOutputArtifactName)
displayName: Publish all outputs
condition: always()
condition: succeeded()
- publish: $(JobOutputDirectory)
artifact: $(JobOutputArtifactName)-failure-$(System.JobAttempt)
displayName: Publish failure logs
condition: or(failed(), canceled())

View File

@@ -2,8 +2,10 @@
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Collections.Generic;
using Microsoft.CmdPal.Core.ViewModels.Models;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
namespace Microsoft.CmdPal.Core.ViewModels;
@@ -13,6 +15,8 @@ public partial class FiltersViewModel : ExtensionObjectViewModel
public string CurrentFilterId { get; private set; } = string.Empty;
public IFilterItemViewModel? CurrentFilter { get; private set; }
public IFilterItemViewModel[] Filters { get; private set; } = [];
public bool ShouldShowFilters => Filters.Length > 0;
@@ -30,11 +34,13 @@ public partial class FiltersViewModel : ExtensionObjectViewModel
if (_filtersModel.Unsafe is not null)
{
var filters = _filtersModel.Unsafe.GetFilters();
Filters = BuildFilters(filters ?? []);
UpdateProperty(nameof(Filters), nameof(ShouldShowFilters));
var currentFilterId = _filtersModel.Unsafe.CurrentFilterId ?? string.Empty;
CurrentFilterId = _filtersModel.Unsafe.CurrentFilterId ?? string.Empty;
UpdateProperty(nameof(CurrentFilterId));
var result = BuildFilters(filters ?? [], currentFilterId);
Filters = result.Items;
CurrentFilterId = currentFilterId;
CurrentFilter = result.Selected;
UpdateProperty(nameof(Filters), nameof(ShouldShowFilters), nameof(CurrentFilterId), nameof(CurrentFilter));
return;
}
@@ -45,27 +51,48 @@ public partial class FiltersViewModel : ExtensionObjectViewModel
}
Filters = [];
UpdateProperty(nameof(Filters), nameof(ShouldShowFilters));
CurrentFilterId = string.Empty;
UpdateProperty(nameof(CurrentFilterId));
CurrentFilter = null;
UpdateProperty(nameof(Filters), nameof(ShouldShowFilters), nameof(CurrentFilterId), nameof(CurrentFilter));
}
private IFilterItemViewModel[] BuildFilters(IFilterItem[] filters)
private (IFilterItemViewModel[] Items, IFilterItemViewModel? Selected) BuildFilters(IFilterItem[] filters, string currentFilterId)
{
return [..filters.Select<IFilterItem, IFilterItemViewModel>(filter =>
if (filters is null || filters.Length == 0)
{
return ([], null);
}
var items = new List<IFilterItemViewModel>(filters.Length);
FilterItemViewModel? firstFilterItem = null;
FilterItemViewModel? selectedFilterItem = null;
foreach (var filter in filters)
{
if (filter is IFilter filterItem)
{
var filterItemViewModel = new FilterItemViewModel(filterItem!, PageContext);
var filterItemViewModel = new FilterItemViewModel(filterItem, PageContext);
filterItemViewModel.InitializeProperties();
return filterItemViewModel;
if (firstFilterItem is null)
{
firstFilterItem = filterItemViewModel;
}
if (selectedFilterItem is null && filterItemViewModel.Id == currentFilterId)
{
selectedFilterItem = filterItemViewModel;
}
items.Add(filterItemViewModel);
}
else
{
return new SeparatorViewModel();
items.Add(new SeparatorViewModel());
}
})];
}
return (items.ToArray(), selectedFilterItem ?? firstFilterItem);
}
public override void SafeCleanup()

View File

@@ -52,7 +52,7 @@ public partial class ContentFormViewModel(IFormContent _form, WeakReference<IPag
}
catch (Exception ex)
{
Logger.LogError("Error building card from template: {Message}", ex.Message);
Logger.LogError("Error building card from template", ex);
error = ex;
return false;
}

View File

@@ -74,8 +74,7 @@
ItemsSource="{x:Bind ViewModel.Filters, Mode=OneWay}"
PlaceholderText="Filters"
PreviewKeyDown="FiltersComboBox_PreviewKeyDown"
SelectedValue="{x:Bind ViewModel.CurrentFilterId, Mode=OneWay}"
SelectedValuePath="Id"
SelectedValue="{x:Bind ViewModel.CurrentFilter, Mode=OneWay}"
SelectionChanged="FiltersComboBox_SelectionChanged"
Style="{StaticResource ComboBoxStyle}"
Visibility="{x:Bind ViewModel.ShouldShowFilters, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}">