mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-26 21:17:20 -08:00
Compare commits
6 commits
904ec16486
...
908b982170
Author | SHA1 | Date | |
---|---|---|---|
|
908b982170 | ||
|
2f2579772f | ||
|
1212677f6a | ||
|
adbeb78ba3 | ||
|
87689e141f | ||
|
1bda4de2c1 |
24 changed files with 67 additions and 492 deletions
39
.github/workflows/publish-packages.yml
vendored
39
.github/workflows/publish-packages.yml
vendored
|
@ -1,39 +0,0 @@
|
||||||
name: Publish to Buildkite
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
secrets:
|
|
||||||
BUILDKITE_TOKEN:
|
|
||||||
required: true
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
name: Publish to Buildkite
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
runtime: [linux-x64, linux-arm64]
|
|
||||||
steps:
|
|
||||||
- name: Download package artifacts
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: package.${{ matrix.runtime }}
|
|
||||||
path: packages
|
|
||||||
|
|
||||||
- name: Publish DEB package
|
|
||||||
env:
|
|
||||||
BUILDKITE_TOKEN: ${{ secrets.BUILDKITE_TOKEN }}
|
|
||||||
run: |
|
|
||||||
FILE=$(echo packages/*.deb)
|
|
||||||
curl -X POST https://api.buildkite.com/v2/packages/organizations/sourcegit/registries/sourcegit-deb/packages \
|
|
||||||
-H "Authorization: Bearer $BUILDKITE_TOKEN" \
|
|
||||||
-F "file=@$FILE" \
|
|
||||||
--fail
|
|
||||||
|
|
||||||
- name: Publish RPM package
|
|
||||||
env:
|
|
||||||
BUILDKITE_TOKEN: ${{ secrets.BUILDKITE_TOKEN }}
|
|
||||||
run: |
|
|
||||||
FILE=$(echo packages/*.rpm)
|
|
||||||
curl -X POST https://api.buildkite.com/v2/packages/organizations/sourcegit/registries/sourcegit-rpm/packages \
|
|
||||||
-H "Authorization: Bearer $BUILDKITE_TOKEN" \
|
|
||||||
-F "file=@$FILE" \
|
|
||||||
--fail
|
|
5
.github/workflows/release.yml
vendored
5
.github/workflows/release.yml
vendored
|
@ -24,11 +24,6 @@ jobs:
|
||||||
uses: ./.github/workflows/package.yml
|
uses: ./.github/workflows/package.yml
|
||||||
with:
|
with:
|
||||||
version: ${{ needs.version.outputs.version }}
|
version: ${{ needs.version.outputs.version }}
|
||||||
publish-packages:
|
|
||||||
name: Publish Packages
|
|
||||||
uses: ./.github/workflows/publish-packages.yml
|
|
||||||
secrets:
|
|
||||||
BUILDKITE_TOKEN: ${{ secrets.BUILDKITE_TOKEN }}
|
|
||||||
release:
|
release:
|
||||||
needs: [package, version]
|
needs: [package, version]
|
||||||
name: Release
|
name: Release
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
|
|
||||||
## Translation Status
|
## Translation Status
|
||||||
|
|
||||||
[![en_US](https://img.shields.io/badge/en__US-100%25-brightgreen)](TRANSLATION.md) [![de__DE](https://img.shields.io/badge/de__DE-99.72%25-yellow)](TRANSLATION.md) [![es__ES](https://img.shields.io/badge/es__ES-100.00%25-brightgreen)](TRANSLATION.md) [![fr__FR](https://img.shields.io/badge/fr__FR-97.17%25-yellow)](TRANSLATION.md) [![it__IT](https://img.shields.io/badge/it__IT-97.59%25-yellow)](TRANSLATION.md) [![pt__BR](https://img.shields.io/badge/pt__BR-99.01%25-yellow)](TRANSLATION.md) [![ru__RU](https://img.shields.io/badge/ru__RU-99.86%25-yellow)](TRANSLATION.md) [![zh__CN](https://img.shields.io/badge/zh__CN-100.00%25-brightgreen)](TRANSLATION.md) [![zh__TW](https://img.shields.io/badge/zh__TW-100.00%25-brightgreen)](TRANSLATION.md)
|
[![en_US](https://img.shields.io/badge/en__US-100%25-brightgreen)](TRANSLATION.md) [![de__DE](https://img.shields.io/badge/de__DE-99.86%25-yellow)](TRANSLATION.md) [![es__ES](https://img.shields.io/badge/es__ES-97.87%25-yellow)](TRANSLATION.md) [![fr__FR](https://img.shields.io/badge/fr__FR-97.30%25-yellow)](TRANSLATION.md) [![it__IT](https://img.shields.io/badge/it__IT-97.73%25-yellow)](TRANSLATION.md) [![pt__BR](https://img.shields.io/badge/pt__BR-99.15%25-yellow)](TRANSLATION.md) [![ru__RU](https://img.shields.io/badge/ru__RU-100.00%25-brightgreen)](TRANSLATION.md) [![zh__CN](https://img.shields.io/badge/zh__CN-100.00%25-brightgreen)](TRANSLATION.md) [![zh__TW](https://img.shields.io/badge/zh__TW-100.00%25-brightgreen)](TRANSLATION.md)
|
||||||
|
|
||||||
## How to Use
|
## How to Use
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{
|
||||||
.github\workflows\package.yml = .github\workflows\package.yml
|
.github\workflows\package.yml = .github\workflows\package.yml
|
||||||
.github\workflows\release.yml = .github\workflows\release.yml
|
.github\workflows\release.yml = .github\workflows\release.yml
|
||||||
.github\workflows\localization-check.yml = .github\workflows\localization-check.yml
|
.github\workflows\localization-check.yml = .github\workflows\localization-check.yml
|
||||||
.github\workflows\publish-packages.yml = .github\workflows\publish-packages.yml
|
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{49A7C2D6-558C-4FAA-8F5D-EEE81497AED7}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{49A7C2D6-558C-4FAA-8F5D-EEE81497AED7}"
|
||||||
|
|
|
@ -1,25 +1,38 @@
|
||||||
### de_DE.axaml: 99.72%
|
### de_DE.axaml: 99.86%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
- Text.CommitDetail.Files.Search
|
|
||||||
- Text.WorkingCopy.CommitToEdit
|
- Text.WorkingCopy.CommitToEdit
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### es_ES.axaml: 100.00%
|
### es_ES.axaml: 97.87%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
|
- Text.CommitDetail.Info.Children
|
||||||
|
- Text.Fetch.Force
|
||||||
|
- Text.Preference.Appearance.FontSize
|
||||||
|
- Text.Preference.Appearance.FontSize.Default
|
||||||
|
- Text.Preference.Appearance.FontSize.Editor
|
||||||
|
- Text.Preference.General.ShowChildren
|
||||||
|
- Text.Repository.FilterCommits
|
||||||
|
- Text.Repository.FilterCommits.Default
|
||||||
|
- Text.Repository.FilterCommits.Exclude
|
||||||
|
- Text.Repository.FilterCommits.Include
|
||||||
|
- Text.Repository.HistoriesOrder
|
||||||
|
- Text.Repository.HistoriesOrder.ByDate
|
||||||
|
- Text.Repository.HistoriesOrder.Topo
|
||||||
|
- Text.SHALinkCM.NavigateTo
|
||||||
|
- Text.WorkingCopy.CommitToEdit
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### fr_FR.axaml: 97.17%
|
### fr_FR.axaml: 97.30%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -28,7 +41,6 @@
|
||||||
- Text.CherryPick.AppendSourceToMessage
|
- Text.CherryPick.AppendSourceToMessage
|
||||||
- Text.CherryPick.Mainline.Tips
|
- Text.CherryPick.Mainline.Tips
|
||||||
- Text.CommitCM.CherryPickMultiple
|
- Text.CommitCM.CherryPickMultiple
|
||||||
- Text.CommitDetail.Files.Search
|
|
||||||
- Text.Fetch.Force
|
- Text.Fetch.Force
|
||||||
- Text.Preference.Appearance.FontSize
|
- Text.Preference.Appearance.FontSize
|
||||||
- Text.Preference.Appearance.FontSize.Default
|
- Text.Preference.Appearance.FontSize.Default
|
||||||
|
@ -48,13 +60,12 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### it_IT.axaml: 97.59%
|
### it_IT.axaml: 97.73%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
- Text.CommitDetail.Files.Search
|
|
||||||
- Text.CommitDetail.Info.Children
|
- Text.CommitDetail.Info.Children
|
||||||
- Text.Configure.IssueTracker.AddSampleGitLabMergeRequest
|
- Text.Configure.IssueTracker.AddSampleGitLabMergeRequest
|
||||||
- Text.Configure.OpenAI.Preferred
|
- Text.Configure.OpenAI.Preferred
|
||||||
|
@ -74,13 +85,12 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### pt_BR.axaml: 99.01%
|
### pt_BR.axaml: 99.15%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
- Text.CommitDetail.Files.Search
|
|
||||||
- Text.CommitDetail.Info.Children
|
- Text.CommitDetail.Info.Children
|
||||||
- Text.Fetch.Force
|
- Text.Fetch.Force
|
||||||
- Text.Preference.General.ShowChildren
|
- Text.Preference.General.ShowChildren
|
||||||
|
@ -90,13 +100,13 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### ru_RU.axaml: 99.86%
|
### ru_RU.axaml: 100.00%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
- Text.CommitDetail.Files.Search
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ URL: https://sourcegit-scm.github.io/
|
||||||
Source: https://github.com/sourcegit-scm/sourcegit/archive/refs/tags/v%_version.tar.gz
|
Source: https://github.com/sourcegit-scm/sourcegit/archive/refs/tags/v%_version.tar.gz
|
||||||
Requires: libX11.so.6()(%{__isa_bits}bit)
|
Requires: libX11.so.6()(%{__isa_bits}bit)
|
||||||
Requires: libSM.so.6()(%{__isa_bits}bit)
|
Requires: libSM.so.6()(%{__isa_bits}bit)
|
||||||
Requires: libicu
|
|
||||||
|
|
||||||
%define _build_id_links none
|
%define _build_id_links none
|
||||||
|
|
||||||
|
|
|
@ -164,12 +164,7 @@ namespace SourceGit
|
||||||
var resDic = new ResourceDictionary();
|
var resDic = new ResourceDictionary();
|
||||||
var overrides = JsonSerializer.Deserialize(File.ReadAllText(themeOverridesFile), JsonCodeGen.Default.ThemeOverrides);
|
var overrides = JsonSerializer.Deserialize(File.ReadAllText(themeOverridesFile), JsonCodeGen.Default.ThemeOverrides);
|
||||||
foreach (var kv in overrides.BasicColors)
|
foreach (var kv in overrides.BasicColors)
|
||||||
{
|
resDic[$"Color.{kv.Key}"] = kv.Value;
|
||||||
if (kv.Key.Equals("SystemAccentColor", StringComparison.Ordinal))
|
|
||||||
resDic["SystemAccentColor"] = kv.Value;
|
|
||||||
else
|
|
||||||
resDic[$"Color.{kv.Key}"] = kv.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (overrides.GraphColors.Count > 0)
|
if (overrides.GraphColors.Count > 0)
|
||||||
Models.CommitGraph.SetPens(overrides.GraphColors, overrides.GraphPenThickness);
|
Models.CommitGraph.SetPens(overrides.GraphColors, overrides.GraphPenThickness);
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
namespace SourceGit.Commands
|
namespace SourceGit.Commands
|
||||||
{
|
{
|
||||||
public class QueryRevisionFileNames : Command
|
public class QueryCurrentRevisionFiles : Command
|
||||||
{
|
{
|
||||||
public QueryRevisionFileNames(string repo, string revision)
|
public QueryCurrentRevisionFiles(string repo)
|
||||||
{
|
{
|
||||||
WorkingDirectory = repo;
|
WorkingDirectory = repo;
|
||||||
Context = repo;
|
Context = repo;
|
||||||
Args = $"ls-tree -r -z --name-only {revision}";
|
Args = "ls-tree -r --name-only HEAD";
|
||||||
}
|
}
|
||||||
|
|
||||||
public string[] Result()
|
public string[] Result()
|
||||||
{
|
{
|
||||||
var rs = ReadToEnd();
|
var rs = ReadToEnd();
|
||||||
if (rs.IsSuccess)
|
if (rs.IsSuccess)
|
||||||
return rs.StdOut.Split('\0', System.StringSplitOptions.RemoveEmptyEntries);
|
return rs.StdOut.Split('\n', System.StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
|
@ -12,7 +12,7 @@ namespace SourceGit.Commands
|
||||||
{
|
{
|
||||||
WorkingDirectory = repo;
|
WorkingDirectory = repo;
|
||||||
Context = repo;
|
Context = repo;
|
||||||
Args = $"ls-tree -z {sha}";
|
Args = $"ls-tree {sha}";
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(parentFolder))
|
if (!string.IsNullOrEmpty(parentFolder))
|
||||||
Args += $" -- \"{parentFolder}\"";
|
Args += $" -- \"{parentFolder}\"";
|
||||||
|
@ -20,27 +20,11 @@ namespace SourceGit.Commands
|
||||||
|
|
||||||
public List<Models.Object> Result()
|
public List<Models.Object> Result()
|
||||||
{
|
{
|
||||||
var rs = ReadToEnd();
|
Exec();
|
||||||
if (rs.IsSuccess)
|
|
||||||
{
|
|
||||||
var start = 0;
|
|
||||||
var end = rs.StdOut.IndexOf('\0', start);
|
|
||||||
while (end > 0)
|
|
||||||
{
|
|
||||||
var line = rs.StdOut.Substring(start, end - start);
|
|
||||||
Parse(line);
|
|
||||||
start = end + 1;
|
|
||||||
end = rs.StdOut.IndexOf('\0', start);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (start < rs.StdOut.Length)
|
|
||||||
Parse(rs.StdOut.Substring(start));
|
|
||||||
}
|
|
||||||
|
|
||||||
return _objects;
|
return _objects;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Parse(string line)
|
protected override void OnReadline(string line)
|
||||||
{
|
{
|
||||||
var match = REG_FORMAT().Match(line);
|
var match = REG_FORMAT().Match(line);
|
||||||
if (!match.Success)
|
if (!match.Success)
|
||||||
|
|
|
@ -7,8 +7,6 @@ namespace SourceGit.Models
|
||||||
public List<string> Ahead { get; set; } = new List<string>();
|
public List<string> Ahead { get; set; } = new List<string>();
|
||||||
public List<string> Behind { get; set; } = new List<string>();
|
public List<string> Behind { get; set; } = new List<string>();
|
||||||
|
|
||||||
public bool IsVisible => Ahead.Count > 0 || Behind.Count > 0;
|
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
if (Ahead.Count == 0 && Behind.Count == 0)
|
if (Ahead.Count == 0 && Behind.Count == 0)
|
||||||
|
|
|
@ -121,7 +121,6 @@
|
||||||
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Search Changes...</x:String>
|
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Search Changes...</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">FILES</x:String>
|
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">FILES</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">LFS File</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">LFS File</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Search" xml:space="preserve">Search Files...</x:String>
|
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Submodule</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Submodule</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMATION</x:String>
|
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMATION</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTHOR</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTHOR</x:String>
|
||||||
|
|
|
@ -126,12 +126,10 @@
|
||||||
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Buscar Cambios...</x:String>
|
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Buscar Cambios...</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">ARCHIVOS</x:String>
|
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">ARCHIVOS</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">Archivo LFS</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">Archivo LFS</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Search" xml:space="preserve">Buscar Archivos...</x:String>
|
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Submódulo</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Submódulo</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMACIÓN</x:String>
|
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMACIÓN</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTOR</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTOR</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Changed" xml:space="preserve">CAMBIADO</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Changed" xml:space="preserve">CAMBIADO</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Children" xml:space="preserve">HIJOS</x:String>
|
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Committer" xml:space="preserve">COMMITTER</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Committer" xml:space="preserve">COMMITTER</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.ContainsIn" xml:space="preserve">Ver refs que contienen este commit</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.ContainsIn" xml:space="preserve">Ver refs que contienen este commit</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.ContainsIn.Title" xml:space="preserve">COMMIT ESTÁ CONTENIDO EN</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.ContainsIn.Title" xml:space="preserve">COMMIT ESTÁ CONTENIDO EN</x:String>
|
||||||
|
@ -274,7 +272,6 @@
|
||||||
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">Fast-Forward (sin checkout)</x:String>
|
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">Fast-Forward (sin checkout)</x:String>
|
||||||
<x:String x:Key="Text.Fetch" xml:space="preserve">Fetch</x:String>
|
<x:String x:Key="Text.Fetch" xml:space="preserve">Fetch</x:String>
|
||||||
<x:String x:Key="Text.Fetch.AllRemotes" xml:space="preserve">Fetch todos los remotos</x:String>
|
<x:String x:Key="Text.Fetch.AllRemotes" xml:space="preserve">Fetch todos los remotos</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Force" xml:space="preserve">Utilizar opción '--force'</x:String>
|
|
||||||
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">Fetch sin etiquetas</x:String>
|
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">Fetch sin etiquetas</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">Remoto:</x:String>
|
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">Remoto:</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">Fetch Cambios Remotos</x:String>
|
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">Fetch Cambios Remotos</x:String>
|
||||||
|
@ -440,9 +437,6 @@
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">Servidor</x:String>
|
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">Servidor</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">APARIENCIA</x:String>
|
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">APARIENCIA</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">Fuente por defecto</x:String>
|
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">Fuente por defecto</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize" xml:space="preserve">Tamaño de fuente</x:String>
|
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Default" xml:space="preserve">Por defecto</x:String>
|
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Editor" xml:space="preserve">Editor</x:String>
|
|
||||||
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">Fuente Monospace</x:String>
|
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">Fuente Monospace</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Usar solo fuente monospace en el editor de texto</x:String>
|
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Usar solo fuente monospace en el editor de texto</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">Tema</x:String>
|
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">Tema</x:String>
|
||||||
|
@ -458,7 +452,6 @@
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Idioma</x:String>
|
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Idioma</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">Commits en el historial</x:String>
|
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">Commits en el historial</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Mostrar hora del autor en lugar de la hora del commit en el gráfico</x:String>
|
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Mostrar hora del autor en lugar de la hora del commit en el gráfico</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowChildren" xml:space="preserve">Mostrar hijos en los detalles de commit</x:String>
|
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Longitud de la guía del asunto</x:String>
|
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Longitud de la guía del asunto</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Habilitar Auto CRLF</x:String>
|
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Habilitar Auto CRLF</x:String>
|
||||||
|
@ -548,13 +541,6 @@
|
||||||
<x:String x:Key="Text.Repository.EnableReflog" xml:space="preserve">Habilitar Opción '--reflog'</x:String>
|
<x:String x:Key="Text.Repository.EnableReflog" xml:space="preserve">Habilitar Opción '--reflog'</x:String>
|
||||||
<x:String x:Key="Text.Repository.Explore" xml:space="preserve">Abrir en el Explorador</x:String>
|
<x:String x:Key="Text.Repository.Explore" xml:space="preserve">Abrir en el Explorador</x:String>
|
||||||
<x:String x:Key="Text.Repository.Filter" xml:space="preserve">Buscar Ramas/Etiquetas/Submódulos</x:String>
|
<x:String x:Key="Text.Repository.Filter" xml:space="preserve">Buscar Ramas/Etiquetas/Submódulos</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits" xml:space="preserve">Visibilidad en el Gráfico</x:String>
|
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">Desestablecer</x:String>
|
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">Ocultar en el Gráfico de Commits</x:String>
|
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">Filtrar en el Gráfico de Commits</x:String>
|
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">Cambiar Modo de Ordenación</x:String>
|
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Fecha de Commit (--date-order)</x:String>
|
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Topológicamente (--topo-order)</x:String>
|
|
||||||
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">RAMAS LOCALES</x:String>
|
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">RAMAS LOCALES</x:String>
|
||||||
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">Navegar a HEAD</x:String>
|
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">Navegar a HEAD</x:String>
|
||||||
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">Habilitar Opción '--first-parent'</x:String>
|
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">Habilitar Opción '--first-parent'</x:String>
|
||||||
|
@ -607,7 +593,6 @@
|
||||||
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">Actualización de Software</x:String>
|
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">Actualización de Software</x:String>
|
||||||
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">Actualmente no hay actualizaciones disponibles.</x:String>
|
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">Actualmente no hay actualizaciones disponibles.</x:String>
|
||||||
<x:String x:Key="Text.SHALinkCM.CopySHA" xml:space="preserve">Copiar SHA</x:String>
|
<x:String x:Key="Text.SHALinkCM.CopySHA" xml:space="preserve">Copiar SHA</x:String>
|
||||||
<x:String x:Key="Text.SHALinkCM.NavigateTo" xml:space="preserve">Ir a</x:String>
|
|
||||||
<x:String x:Key="Text.Squash" xml:space="preserve">Squash Commits</x:String>
|
<x:String x:Key="Text.Squash" xml:space="preserve">Squash Commits</x:String>
|
||||||
<x:String x:Key="Text.Squash.Into" xml:space="preserve">En:</x:String>
|
<x:String x:Key="Text.Squash.Into" xml:space="preserve">En:</x:String>
|
||||||
<x:String x:Key="Text.SSHKey" xml:space="preserve">Clave Privada SSH:</x:String>
|
<x:String x:Key="Text.SSHKey" xml:space="preserve">Clave Privada SSH:</x:String>
|
||||||
|
@ -685,7 +670,6 @@
|
||||||
<x:String x:Key="Text.WorkingCopy.CommitAndPush" xml:space="preserve">COMMIT & PUSH</x:String>
|
<x:String x:Key="Text.WorkingCopy.CommitAndPush" xml:space="preserve">COMMIT & PUSH</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.CommitMessageHelper" xml:space="preserve">Plantilla/Historias</x:String>
|
<x:String x:Key="Text.WorkingCopy.CommitMessageHelper" xml:space="preserve">Plantilla/Historias</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.CommitTip" xml:space="preserve">Activar evento de clic</x:String>
|
<x:String x:Key="Text.WorkingCopy.CommitTip" xml:space="preserve">Activar evento de clic</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.CommitToEdit" xml:space="preserve">Commit (Editar)</x:String>
|
|
||||||
<x:String x:Key="Text.WorkingCopy.CommitWithAutoStage" xml:space="preserve">Stagear todos los cambios y commit</x:String>
|
<x:String x:Key="Text.WorkingCopy.CommitWithAutoStage" xml:space="preserve">Stagear todos los cambios y commit</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithoutFiles" xml:space="preserve">¡Commit vacío detectado! ¿Quieres continuar (--allow-empty)?</x:String>
|
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithoutFiles" xml:space="preserve">¡Commit vacío detectado! ¿Quieres continuar (--allow-empty)?</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.Conflicts" xml:space="preserve">CONFLICTOS DETECTADOS</x:String>
|
<x:String x:Key="Text.WorkingCopy.Conflicts" xml:space="preserve">CONFLICTOS DETECTADOS</x:String>
|
||||||
|
|
|
@ -124,7 +124,6 @@
|
||||||
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">查找变更...</x:String>
|
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">查找变更...</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">文件列表</x:String>
|
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">文件列表</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">LFS文件</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">LFS文件</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Search" xml:space="preserve">查找文件...</x:String>
|
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">子模块</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">子模块</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">基本信息</x:String>
|
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">基本信息</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">修改者</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">修改者</x:String>
|
||||||
|
|
|
@ -124,7 +124,6 @@
|
||||||
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">搜尋變更...</x:String>
|
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">搜尋變更...</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">檔案列表</x:String>
|
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">檔案列表</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">LFS 檔案</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">LFS 檔案</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Search" xml:space="preserve">搜尋檔案...</x:String>
|
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">子模組</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">子模組</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">基本資訊</x:String>
|
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">基本資訊</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">作者</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">作者</x:String>
|
||||||
|
|
|
@ -856,7 +856,12 @@
|
||||||
</Border.Effect>
|
</Border.Effect>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
<Border BorderThickness="0" Margin="8,4" MaxHeight="400">
|
<Border BorderThickness="0"
|
||||||
|
Margin="8,4"
|
||||||
|
MaxWidth="{DynamicResource FlyoutThemeMaxWidth}"
|
||||||
|
MinHeight="{DynamicResource MenuFlyoutThemeMinHeight}"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
CornerRadius="{DynamicResource OverlayCornerRadius}">
|
||||||
<ScrollViewer Theme="{StaticResource FluentMenuScrollViewer}">
|
<ScrollViewer Theme="{StaticResource FluentMenuScrollViewer}">
|
||||||
<ItemsPresenter Name="PART_ItemsPresenter"
|
<ItemsPresenter Name="PART_ItemsPresenter"
|
||||||
Margin="{DynamicResource MenuFlyoutScrollerMargin}"
|
Margin="{DynamicResource MenuFlyoutScrollerMargin}"
|
||||||
|
|
|
@ -82,7 +82,7 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
private set;
|
private set;
|
||||||
} = [];
|
} = new AvaloniaList<string>();
|
||||||
|
|
||||||
public string SearchChangeFilter
|
public string SearchChangeFilter
|
||||||
{
|
{
|
||||||
|
@ -106,70 +106,13 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
private set;
|
private set;
|
||||||
} = [];
|
} = new AvaloniaList<Models.CommitLink>();
|
||||||
|
|
||||||
public AvaloniaList<Models.IssueTrackerRule> IssueTrackerRules
|
public AvaloniaList<Models.IssueTrackerRule> IssueTrackerRules
|
||||||
{
|
{
|
||||||
get => _repo.Settings?.IssueTrackerRules;
|
get => _repo.Settings?.IssueTrackerRules;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string RevisionFileSearchFilter
|
|
||||||
{
|
|
||||||
get => _revisionFileSearchFilter;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (SetProperty(ref _revisionFileSearchFilter, value))
|
|
||||||
{
|
|
||||||
RevisionFileSearchSuggestion.Clear();
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(value))
|
|
||||||
{
|
|
||||||
if (_revisionFiles.Count == 0)
|
|
||||||
{
|
|
||||||
var sha = Commit.SHA;
|
|
||||||
|
|
||||||
Task.Run(() =>
|
|
||||||
{
|
|
||||||
var files = new Commands.QueryRevisionFileNames(_repo.FullPath, sha).Result();
|
|
||||||
|
|
||||||
Dispatcher.UIThread.Invoke(() => {
|
|
||||||
if (sha == Commit.SHA)
|
|
||||||
{
|
|
||||||
_revisionFiles.Clear();
|
|
||||||
_revisionFiles.AddRange(files);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(_revisionFileSearchFilter))
|
|
||||||
UpdateRevisionFileSearchSuggestion();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateRevisionFileSearchSuggestion();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
IsRevisionFileSearchSuggestionOpen = false;
|
|
||||||
GC.Collect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public AvaloniaList<string> RevisionFileSearchSuggestion
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
} = [];
|
|
||||||
|
|
||||||
public bool IsRevisionFileSearchSuggestionOpen
|
|
||||||
{
|
|
||||||
get => _isRevisionFileSearchSuggestionOpen;
|
|
||||||
set => SetProperty(ref _isRevisionFileSearchSuggestionOpen, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CommitDetail(Repository repo)
|
public CommitDetail(Repository repo)
|
||||||
{
|
{
|
||||||
_repo = repo;
|
_repo = repo;
|
||||||
|
@ -204,23 +147,17 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
_repo = null;
|
_repo = null;
|
||||||
_commit = null;
|
_commit = null;
|
||||||
|
|
||||||
if (_changes != null)
|
if (_changes != null)
|
||||||
_changes.Clear();
|
_changes.Clear();
|
||||||
if (_visibleChanges != null)
|
if (_visibleChanges != null)
|
||||||
_visibleChanges.Clear();
|
_visibleChanges.Clear();
|
||||||
if (_selectedChanges != null)
|
if (_selectedChanges != null)
|
||||||
_selectedChanges.Clear();
|
_selectedChanges.Clear();
|
||||||
|
|
||||||
_signInfo = null;
|
_signInfo = null;
|
||||||
_searchChangeFilter = null;
|
_searchChangeFilter = null;
|
||||||
_diffContext = null;
|
_diffContext = null;
|
||||||
_viewRevisionFileContent = null;
|
_viewRevisionFileContent = null;
|
||||||
_cancelToken = null;
|
_cancelToken = null;
|
||||||
|
|
||||||
WebLinks.Clear();
|
|
||||||
_revisionFiles.Clear();
|
|
||||||
RevisionFileSearchSuggestion.Clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NavigateTo(string commitSHA)
|
public void NavigateTo(string commitSHA)
|
||||||
|
@ -238,11 +175,6 @@ namespace SourceGit.ViewModels
|
||||||
SearchChangeFilter = string.Empty;
|
SearchChangeFilter = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearRevisionFileSearchFilter()
|
|
||||||
{
|
|
||||||
RevisionFileSearchFilter = string.Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Models.Commit GetParent(string sha)
|
public Models.Commit GetParent(string sha)
|
||||||
{
|
{
|
||||||
return new Commands.QuerySingleCommit(_repo.FullPath, sha).Result();
|
return new Commands.QuerySingleCommit(_repo.FullPath, sha).Result();
|
||||||
|
@ -611,8 +543,6 @@ namespace SourceGit.ViewModels
|
||||||
private void Refresh()
|
private void Refresh()
|
||||||
{
|
{
|
||||||
_changes = null;
|
_changes = null;
|
||||||
_revisionFiles.Clear();
|
|
||||||
|
|
||||||
FullMessage = string.Empty;
|
FullMessage = string.Empty;
|
||||||
SignInfo = null;
|
SignInfo = null;
|
||||||
Changes = [];
|
Changes = [];
|
||||||
|
@ -620,10 +550,6 @@ namespace SourceGit.ViewModels
|
||||||
SelectedChanges = null;
|
SelectedChanges = null;
|
||||||
ViewRevisionFileContent = null;
|
ViewRevisionFileContent = null;
|
||||||
Children.Clear();
|
Children.Clear();
|
||||||
RevisionFileSearchFilter = string.Empty;
|
|
||||||
IsRevisionFileSearchSuggestionOpen = false;
|
|
||||||
|
|
||||||
GC.Collect();
|
|
||||||
|
|
||||||
if (_commit == null)
|
if (_commit == null)
|
||||||
return;
|
return;
|
||||||
|
@ -790,24 +716,6 @@ namespace SourceGit.ViewModels
|
||||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateRevisionFileSearchSuggestion()
|
|
||||||
{
|
|
||||||
var suggestion = new List<string>();
|
|
||||||
foreach (var file in _revisionFiles)
|
|
||||||
{
|
|
||||||
if (file.Contains(_revisionFileSearchFilter, StringComparison.OrdinalIgnoreCase) &&
|
|
||||||
file.Length != _revisionFileSearchFilter.Length)
|
|
||||||
suggestion.Add(file);
|
|
||||||
|
|
||||||
if (suggestion.Count >= 100)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
RevisionFileSearchSuggestion.Clear();
|
|
||||||
RevisionFileSearchSuggestion.AddRange(suggestion);
|
|
||||||
IsRevisionFileSearchSuggestionOpen = suggestion.Count > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
[GeneratedRegex(@"^version https://git-lfs.github.com/spec/v\d+\r?\noid sha256:([0-9a-f]+)\r?\nsize (\d+)[\r\n]*$")]
|
[GeneratedRegex(@"^version https://git-lfs.github.com/spec/v\d+\r?\noid sha256:([0-9a-f]+)\r?\nsize (\d+)[\r\n]*$")]
|
||||||
private static partial Regex REG_LFS_FORMAT();
|
private static partial Regex REG_LFS_FORMAT();
|
||||||
|
|
||||||
|
@ -828,8 +736,5 @@ namespace SourceGit.ViewModels
|
||||||
private DiffContext _diffContext = null;
|
private DiffContext _diffContext = null;
|
||||||
private object _viewRevisionFileContent = null;
|
private object _viewRevisionFileContent = null;
|
||||||
private Commands.Command.CancelToken _cancelToken = null;
|
private Commands.Command.CancelToken _cancelToken = null;
|
||||||
private List<string> _revisionFiles = [];
|
|
||||||
private string _revisionFileSearchFilter = string.Empty;
|
|
||||||
private bool _isRevisionFileSearchSuggestionOpen = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -427,12 +427,12 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
// Ignore
|
// Ignore
|
||||||
}
|
}
|
||||||
_autoFetchTimer.Dispose();
|
|
||||||
_autoFetchTimer = null;
|
|
||||||
|
|
||||||
_settings = null;
|
_settings = null;
|
||||||
_historiesFilterMode = Models.FilterMode.None;
|
_historiesFilterMode = Models.FilterMode.None;
|
||||||
|
|
||||||
|
_autoFetchTimer.Dispose();
|
||||||
|
_autoFetchTimer = null;
|
||||||
|
|
||||||
_watcher?.Dispose();
|
_watcher?.Dispose();
|
||||||
_histories.Cleanup();
|
_histories.Cleanup();
|
||||||
_workingCopy.Cleanup();
|
_workingCopy.Cleanup();
|
||||||
|
@ -2147,7 +2147,7 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
var files = new Commands.QueryRevisionFileNames(_fullpath, "HEAD").Result();
|
var files = new Commands.QueryCurrentRevisionFiles(_fullpath).Result();
|
||||||
Dispatcher.UIThread.Invoke(() =>
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
{
|
{
|
||||||
if (_searchCommitFilterType != 3)
|
if (_searchCommitFilterType != 3)
|
||||||
|
|
|
@ -16,18 +16,6 @@
|
||||||
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal">
|
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal">
|
||||||
<Path Width="14" Height="14" Margin="8,0" Data="{StaticResource Icons.Branch}"/>
|
<Path Width="14" Height="14" Margin="8,0" Data="{StaticResource Icons.Branch}"/>
|
||||||
<TextBlock Text="{Binding Target.FriendlyName}"/>
|
<TextBlock Text="{Binding Target.FriendlyName}"/>
|
||||||
<Border Height="18"
|
|
||||||
Margin="8,0,0,0"
|
|
||||||
Padding="8,0"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
CornerRadius="9"
|
|
||||||
Background="{DynamicResource Brush.Badge}"
|
|
||||||
IsVisible="{Binding Target.TrackStatus.IsVisible}">
|
|
||||||
<TextBlock Foreground="{DynamicResource Brush.BadgeFG}"
|
|
||||||
FontFamily="{DynamicResource Fonts.Monospace}"
|
|
||||||
FontSize="10"
|
|
||||||
Text="{Binding Target.TrackStatus}"/>
|
|
||||||
</Border>
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<Border Grid.Row="1" Grid.Column="1" Height="32" IsVisible="{Binding !Target.IsLocal}">
|
<Border Grid.Row="1" Grid.Column="1" Height="32" IsVisible="{Binding !Target.IsLocal}">
|
||||||
|
|
|
@ -42,22 +42,9 @@
|
||||||
|
|
||||||
<ListBox.ItemTemplate>
|
<ListBox.ItemTemplate>
|
||||||
<DataTemplate DataType="m:Branch">
|
<DataTemplate DataType="m:Branch">
|
||||||
<Grid Height="26" ColumnDefinitions="22,*,Auto">
|
<Grid Height="26" ColumnDefinitions="22,*">
|
||||||
<Path Grid.Column="0" Width="10" Height="10" Margin="4,0,8,0" Data="{StaticResource Icons.Branch}" />
|
<Path Grid.Column="0" Width="10" Height="10" Margin="4,0,8,0" Data="{StaticResource Icons.Branch}" />
|
||||||
<TextBlock Grid.Column="1" Text="{Binding FriendlyName}" Classes="primary" />
|
<TextBlock Grid.Column="1" Text="{Binding FriendlyName}" Classes="primary" />
|
||||||
<Border Grid.Column="2"
|
|
||||||
Height="18"
|
|
||||||
Margin="8,0"
|
|
||||||
Padding="8,0"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
CornerRadius="9"
|
|
||||||
Background="{DynamicResource Brush.Badge}"
|
|
||||||
IsVisible="{Binding TrackStatus.IsVisible}">
|
|
||||||
<TextBlock Foreground="{DynamicResource Brush.BadgeFG}"
|
|
||||||
FontFamily="{DynamicResource Fonts.Monospace}"
|
|
||||||
FontSize="10"
|
|
||||||
Text="{Binding TrackStatus}"/>
|
|
||||||
</Border>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListBox.ItemTemplate>
|
</ListBox.ItemTemplate>
|
||||||
|
|
|
@ -430,43 +430,31 @@ namespace SourceGit.Views
|
||||||
if (ShowAsDateTime)
|
if (ShowAsDateTime)
|
||||||
return DateTime.UnixEpoch.AddSeconds(timestamp).ToLocalTime().ToString("yyyy/MM/dd HH:mm:ss");
|
return DateTime.UnixEpoch.AddSeconds(timestamp).ToLocalTime().ToString("yyyy/MM/dd HH:mm:ss");
|
||||||
|
|
||||||
var now = DateTime.Now;
|
var today = DateTime.Today;
|
||||||
var localTime = DateTime.UnixEpoch.AddSeconds(timestamp).ToLocalTime();
|
var localTime = DateTime.UnixEpoch.AddSeconds(timestamp).ToLocalTime();
|
||||||
var span = now - localTime;
|
|
||||||
if (span.TotalMinutes < 1)
|
|
||||||
return App.Text("Period.JustNow");
|
|
||||||
|
|
||||||
if (span.TotalHours < 1)
|
if (localTime >= today)
|
||||||
return App.Text("Period.MinutesAgo", (int)span.TotalMinutes);
|
|
||||||
|
|
||||||
if (span.TotalDays < 1)
|
|
||||||
return App.Text("Period.HoursAgo", (int)span.TotalHours);
|
|
||||||
|
|
||||||
var lastDay = now.AddDays(-1).Date;
|
|
||||||
if (localTime >= lastDay)
|
|
||||||
return App.Text("Period.Yesterday");
|
|
||||||
|
|
||||||
if ((localTime.Year == now.Year && localTime.Month == now.Month) || span.TotalDays < 28)
|
|
||||||
{
|
{
|
||||||
var diffDay = now.Date - localTime.Date;
|
var now = DateTime.Now;
|
||||||
return App.Text("Period.DaysAgo", (int)diffDay.TotalDays);
|
var timespan = now - localTime;
|
||||||
|
if (timespan.TotalHours > 1)
|
||||||
|
return App.Text("Period.HoursAgo", (int)timespan.TotalHours);
|
||||||
|
|
||||||
|
return timespan.TotalMinutes < 1 ? App.Text("Period.JustNow") : App.Text("Period.MinutesAgo", (int)timespan.TotalMinutes);
|
||||||
}
|
}
|
||||||
|
|
||||||
var lastMonth = now.AddMonths(-1).Date;
|
var diffYear = today.Year - localTime.Year;
|
||||||
if (localTime.Year == lastMonth.Year && localTime.Month == lastMonth.Month)
|
if (diffYear == 0)
|
||||||
return App.Text("Period.LastMonth");
|
|
||||||
|
|
||||||
if (localTime.Year == now.Year || localTime > now.AddMonths(-11))
|
|
||||||
{
|
{
|
||||||
var diffMonth = (12 + now.Month - localTime.Month) % 12;
|
var diffMonth = today.Month - localTime.Month;
|
||||||
return App.Text("Period.MonthsAgo", diffMonth);
|
if (diffMonth > 0)
|
||||||
|
return diffMonth == 1 ? App.Text("Period.LastMonth") : App.Text("Period.MonthsAgo", diffMonth);
|
||||||
|
|
||||||
|
var diffDay = today.Day - localTime.Day;
|
||||||
|
return diffDay == 1 ? App.Text("Period.Yesterday") : App.Text("Period.DaysAgo", diffDay);
|
||||||
}
|
}
|
||||||
|
|
||||||
var diffYear = now.Year - localTime.Year;
|
return diffYear == 1 ? App.Text("Period.LastYear") : App.Text("Period.YearsAgo", diffYear);
|
||||||
if (diffYear == 1)
|
|
||||||
return App.Text("Period.LastYear");
|
|
||||||
|
|
||||||
return App.Text("Period.YearsAgo", diffYear);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private IDisposable _refreshTimer = null;
|
private IDisposable _refreshTimer = null;
|
||||||
|
|
|
@ -144,68 +144,6 @@ namespace SourceGit.Views
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetSearchResult(string file)
|
|
||||||
{
|
|
||||||
_rows.Clear();
|
|
||||||
_searchResult.Clear();
|
|
||||||
|
|
||||||
var rows = new List<ViewModels.RevisionFileTreeNode>();
|
|
||||||
if (string.IsNullOrEmpty(file))
|
|
||||||
{
|
|
||||||
MakeRows(rows, _tree, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var vm = DataContext as ViewModels.CommitDetail;
|
|
||||||
if (vm == null || vm.Commit == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var objects = vm.GetRevisionFilesUnderFolder(file);
|
|
||||||
if (objects == null || objects.Count != 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var routes = file.Split('/', StringSplitOptions.None);
|
|
||||||
if (routes.Length == 1)
|
|
||||||
{
|
|
||||||
_searchResult.Add(new ViewModels.RevisionFileTreeNode
|
|
||||||
{
|
|
||||||
Backend = objects[0]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var last = _searchResult;
|
|
||||||
var prefix = string.Empty;
|
|
||||||
for (var i = 0; i < routes.Length - 1; i++)
|
|
||||||
{
|
|
||||||
var folder = new ViewModels.RevisionFileTreeNode
|
|
||||||
{
|
|
||||||
Backend = new Models.Object
|
|
||||||
{
|
|
||||||
Type = Models.ObjectType.Tree,
|
|
||||||
Path = prefix + routes[i],
|
|
||||||
},
|
|
||||||
IsExpanded = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
last.Add(folder);
|
|
||||||
last = folder.Children;
|
|
||||||
prefix = folder.Backend + "/";
|
|
||||||
}
|
|
||||||
|
|
||||||
last.Add(new ViewModels.RevisionFileTreeNode
|
|
||||||
{
|
|
||||||
Backend = objects[0]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
MakeRows(rows, _searchResult, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
_rows.AddRange(rows);
|
|
||||||
GC.Collect();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ToggleNodeIsExpanded(ViewModels.RevisionFileTreeNode node)
|
public void ToggleNodeIsExpanded(ViewModels.RevisionFileTreeNode node)
|
||||||
{
|
{
|
||||||
_disableSelectionChangingEvent = true;
|
_disableSelectionChangingEvent = true;
|
||||||
|
@ -251,7 +189,6 @@ namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
_tree.Clear();
|
_tree.Clear();
|
||||||
_rows.Clear();
|
_rows.Clear();
|
||||||
_searchResult.Clear();
|
|
||||||
|
|
||||||
var vm = DataContext as ViewModels.CommitDetail;
|
var vm = DataContext as ViewModels.CommitDetail;
|
||||||
if (vm == null || vm.Commit == null)
|
if (vm == null || vm.Commit == null)
|
||||||
|
@ -371,6 +308,5 @@ namespace SourceGit.Views
|
||||||
private List<ViewModels.RevisionFileTreeNode> _tree = [];
|
private List<ViewModels.RevisionFileTreeNode> _tree = [];
|
||||||
private AvaloniaList<ViewModels.RevisionFileTreeNode> _rows = [];
|
private AvaloniaList<ViewModels.RevisionFileTreeNode> _rows = [];
|
||||||
private bool _disableSelectionChangingEvent = false;
|
private bool _disableSelectionChangingEvent = false;
|
||||||
private List<ViewModels.RevisionFileTreeNode> _searchResult = [];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:vm="using:SourceGit.ViewModels"
|
xmlns:vm="using:SourceGit.ViewModels"
|
||||||
xmlns:v="using:SourceGit.Views"
|
xmlns:v="using:SourceGit.Views"
|
||||||
xmlns:c="using:SourceGit.Converters"
|
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
x:Class="SourceGit.Views.RevisionFiles"
|
x:Class="SourceGit.Views.RevisionFiles"
|
||||||
x:DataType="vm:CommitDetail">
|
x:DataType="vm:CommitDetail">
|
||||||
|
@ -15,96 +14,17 @@
|
||||||
<ColumnDefinition Width="*" MinWidth="100"/>
|
<ColumnDefinition Width="*" MinWidth="100"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<!-- Left -->
|
<!-- File Tree -->
|
||||||
<Grid Grid.Column="0" RowDefinitions="26,*">
|
<Border Grid.Column="0" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1" Background="{DynamicResource Brush.Contents}">
|
||||||
<Grid Grid.Row="0" Height="26">
|
<v:RevisionFileTreeView Revision="{Binding Commit.SHA}"/>
|
||||||
<TextBox Grid.Row="0"
|
</Border>
|
||||||
x:Name="TxtSearchRevisionFiles"
|
|
||||||
Height="26"
|
|
||||||
BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}"
|
|
||||||
Background="Transparent"
|
|
||||||
CornerRadius="4"
|
|
||||||
Watermark="{DynamicResource Text.CommitDetail.Files.Search}"
|
|
||||||
Text="{Binding RevisionFileSearchFilter, Mode=TwoWay}"
|
|
||||||
KeyDown="OnSearchBoxKeyDown"
|
|
||||||
TextChanged="OnSearchBoxTextChanged">
|
|
||||||
<TextBox.InnerLeftContent>
|
|
||||||
<Path Width="14" Height="14" Margin="4,0,0,0" Fill="{DynamicResource Brush.FG2}" Data="{StaticResource Icons.Search}"/>
|
|
||||||
</TextBox.InnerLeftContent>
|
|
||||||
|
|
||||||
<TextBox.InnerRightContent>
|
|
||||||
<Button Classes="icon_button"
|
|
||||||
IsVisible="{Binding RevisionFileSearchFilter, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
|
|
||||||
Command="{Binding ClearRevisionFileSearchFilter}">
|
|
||||||
<Path Width="14" Height="14" Fill="{DynamicResource Brush.FG2}" Data="{StaticResource Icons.Clear}"/>
|
|
||||||
</Button>
|
|
||||||
</TextBox.InnerRightContent>
|
|
||||||
</TextBox>
|
|
||||||
|
|
||||||
<Popup PlacementTarget="{Binding #TxtSearchRevisionFiles}"
|
|
||||||
Placement="BottomEdgeAlignedLeft"
|
|
||||||
HorizontalOffset="-8" VerticalAlignment="-8"
|
|
||||||
IsOpen="{Binding IsRevisionFileSearchSuggestionOpen}">
|
|
||||||
<Border Margin="8" VerticalAlignment="Top" Effect="drop-shadow(0 0 8 #80000000)">
|
|
||||||
<Border Background="{DynamicResource Brush.Popup}" CornerRadius="4" Padding="4" BorderThickness="0.65" BorderBrush="{DynamicResource Brush.Accent}">
|
|
||||||
<ListBox x:Name="SearchSuggestionBox"
|
|
||||||
Background="Transparent"
|
|
||||||
SelectionMode="Single"
|
|
||||||
ItemsSource="{Binding RevisionFileSearchSuggestion}"
|
|
||||||
MaxHeight="400"
|
|
||||||
Focusable="True"
|
|
||||||
KeyDown="OnSearchSuggestionBoxKeyDown">
|
|
||||||
<ListBox.Styles>
|
|
||||||
<Style Selector="ListBoxItem">
|
|
||||||
<Setter Property="Padding" Value="0"/>
|
|
||||||
<Setter Property="MinHeight" Value="26"/>
|
|
||||||
<Setter Property="CornerRadius" Value="4"/>
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style Selector="ListBox">
|
|
||||||
<Setter Property="FocusAdorner">
|
|
||||||
<FocusAdornerTemplate>
|
|
||||||
<Grid/>
|
|
||||||
</FocusAdornerTemplate>
|
|
||||||
</Setter>
|
|
||||||
</Style>
|
|
||||||
</ListBox.Styles>
|
|
||||||
|
|
||||||
<ListBox.ItemsPanel>
|
|
||||||
<ItemsPanelTemplate>
|
|
||||||
<StackPanel Orientation="Vertical"/>
|
|
||||||
</ItemsPanelTemplate>
|
|
||||||
</ListBox.ItemsPanel>
|
|
||||||
|
|
||||||
<ListBox.ItemTemplate>
|
|
||||||
<DataTemplate DataType="x:String">
|
|
||||||
<StackPanel Background="Transparent" Orientation="Vertical" Margin="8,4" DoubleTapped="OnSearchSuggestionDoubleTapped">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<Path Width="12" Height="12" Data="{StaticResource Icons.File}"/>
|
|
||||||
<TextBlock Classes="primary" Margin="6,0,0,0" Text="{Binding Converter={x:Static c:PathConverters.PureFileName}}"/>
|
|
||||||
</StackPanel>
|
|
||||||
<TextBlock Classes="primary" FontSize="12" Margin="18,2,0,0" Foreground="{DynamicResource Brush.FG2}" Text="{Binding Converter={x:Static c:PathConverters.PureDirectoryName}}"/>
|
|
||||||
</StackPanel>
|
|
||||||
</DataTemplate>
|
|
||||||
</ListBox.ItemTemplate>
|
|
||||||
</ListBox>
|
|
||||||
</Border>
|
|
||||||
</Border>
|
|
||||||
</Popup>
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
<!-- File Tree -->
|
|
||||||
<Border Grid.Row="1" Margin="0,4,0,0" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1" Background="{DynamicResource Brush.Contents}">
|
|
||||||
<v:RevisionFileTreeView x:Name="FileTree" Revision="{Binding Commit.SHA}"/>
|
|
||||||
</Border>
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
<GridSplitter Grid.Column="1"
|
<GridSplitter Grid.Column="1"
|
||||||
MinWidth="1"
|
MinWidth="1"
|
||||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||||
Background="Transparent"/>
|
Background="Transparent"/>
|
||||||
|
|
||||||
<!-- Right: File Content Viewer -->
|
<!-- File Content Viewer -->
|
||||||
<Grid Grid.Column="2">
|
<Grid Grid.Column="2">
|
||||||
<Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}">
|
<Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}">
|
||||||
<v:RevisionFileContentViewer Content="{Binding ViewRevisionFileContent}"/>
|
<v:RevisionFileContentViewer Content="{Binding ViewRevisionFileContent}"/>
|
||||||
|
|
|
@ -3,7 +3,6 @@ using System;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls.Primitives;
|
using Avalonia.Controls.Primitives;
|
||||||
using Avalonia.Input;
|
|
||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
|
|
||||||
|
@ -119,81 +118,5 @@ namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnSearchBoxKeyDown(object _, KeyEventArgs e)
|
|
||||||
{
|
|
||||||
var vm = DataContext as ViewModels.CommitDetail;
|
|
||||||
if (vm == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (e.Key == Key.Enter)
|
|
||||||
{
|
|
||||||
FileTree.SetSearchResult(vm.RevisionFileSearchFilter);
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
else if (e.Key == Key.Down || e.Key == Key.Up)
|
|
||||||
{
|
|
||||||
if (vm.IsRevisionFileSearchSuggestionOpen)
|
|
||||||
{
|
|
||||||
SearchSuggestionBox.Focus(NavigationMethod.Tab);
|
|
||||||
SearchSuggestionBox.SelectedIndex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
else if (e.Key == Key.Escape)
|
|
||||||
{
|
|
||||||
if (vm.IsRevisionFileSearchSuggestionOpen)
|
|
||||||
{
|
|
||||||
vm.RevisionFileSearchSuggestion.Clear();
|
|
||||||
vm.IsRevisionFileSearchSuggestionOpen = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnSearchBoxTextChanged(object _, TextChangedEventArgs e)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(TxtSearchRevisionFiles.Text))
|
|
||||||
FileTree.SetSearchResult(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnSearchSuggestionBoxKeyDown(object _, KeyEventArgs e)
|
|
||||||
{
|
|
||||||
var vm = DataContext as ViewModels.CommitDetail;
|
|
||||||
if (vm == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (e.Key == Key.Escape)
|
|
||||||
{
|
|
||||||
vm.RevisionFileSearchSuggestion.Clear();
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
else if (e.Key == Key.Enter && SearchSuggestionBox.SelectedItem is string content)
|
|
||||||
{
|
|
||||||
vm.RevisionFileSearchFilter = content;
|
|
||||||
TxtSearchRevisionFiles.CaretIndex = content.Length;
|
|
||||||
FileTree.SetSearchResult(vm.RevisionFileSearchFilter);
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnSearchSuggestionDoubleTapped(object sender, TappedEventArgs e)
|
|
||||||
{
|
|
||||||
var vm = DataContext as ViewModels.CommitDetail;
|
|
||||||
if (vm == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var content = (sender as StackPanel)?.DataContext as string;
|
|
||||||
if (!string.IsNullOrEmpty(content))
|
|
||||||
{
|
|
||||||
vm.RevisionFileSearchFilter = content;
|
|
||||||
TxtSearchRevisionFiles.CaretIndex = content.Length;
|
|
||||||
FileTree.SetSearchResult(vm.RevisionFileSearchFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -239,6 +239,7 @@
|
||||||
Margin="8,0,0,0"
|
Margin="8,0,0,0"
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
IsChecked="{Binding UseAmend, Mode=TwoWay}"
|
IsChecked="{Binding UseAmend, Mode=TwoWay}"
|
||||||
|
IsVisible="{Binding InProgressContext, Converter={x:Static ObjectConverters.IsNull}}"
|
||||||
Content="{DynamicResource Text.WorkingCopy.Amend}"/>
|
Content="{DynamicResource Text.WorkingCopy.Amend}"/>
|
||||||
|
|
||||||
<v:LoadingIcon Grid.Column="5" Width="18" Height="18" IsVisible="{Binding IsCommitting}"/>
|
<v:LoadingIcon Grid.Column="5" Width="18" Height="18" IsVisible="{Binding IsCommitting}"/>
|
||||||
|
|
Loading…
Reference in a new issue