Skip to content

Commit 7581d76

Browse files
committed
Merge branch 'release/v2025.10'
2 parents 6fd6bbb + 88bb603 commit 7581d76

File tree

121 files changed

+1213
-1047
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

121 files changed

+1213
-1047
lines changed

README.md

+8-6
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
* Supports SSH access with each remote
1919
* GIT commands with GUI
2020
* Clone/Fetch/Pull/Push...
21-
* Merge/Rebase/Reset/Revert/Amend/Cherry-pick...
22-
* Amend/Reword
21+
* Merge/Rebase/Reset/Revert/Cherry-pick...
22+
* Amend/Reword/Squash
2323
* Interactive rebase
2424
* Branches
2525
* Remotes
@@ -40,17 +40,15 @@
4040
* Git LFS
4141
* Issue Link
4242
* Workspace
43+
* Custom Action
4344
* Using AI to generate commit message (C# port of [anjerodev/commitollama](https://github.com/anjerodev/commitollama))
4445

4546
> [!WARNING]
4647
> **Linux** only tested on **Debian 12** on both **X11** & **Wayland**.
4748
4849
## Translation Status
4950

50-
[![en_US](https://img.shields.io/badge/en__US-%E2%88%9A-brightgreen)](TRANSLATION.md) [![de__DE](https://img.shields.io/badge/de__DE-99.07%25-yellow)](TRANSLATION.md) [![es__ES](https://img.shields.io/badge/es__ES-%E2%88%9A-brightgreen)](TRANSLATION.md) [![fr__FR](https://img.shields.io/badge/fr__FR-91.66%25-yellow)](TRANSLATION.md) [![it__IT](https://img.shields.io/badge/it__IT-99.87%25-yellow)](TRANSLATION.md) [![pt__BR](https://img.shields.io/badge/pt__BR-91.39%25-yellow)](TRANSLATION.md) [![ru__RU](https://img.shields.io/badge/ru__RU-%E2%88%9A-brightgreen)](TRANSLATION.md) [![zh__CN](https://img.shields.io/badge/zh__CN-%E2%88%9A-brightgreen)](TRANSLATION.md) [![zh__TW](https://img.shields.io/badge/zh__TW-%E2%88%9A-brightgreen)](TRANSLATION.md)
51-
52-
> [!NOTE]
53-
> You can find the missing keys in [TRANSLATION.md](TRANSLATION.md)
51+
You can find the current translation status in [TRANSLATION.md](TRANSLATION.md)
5452

5553
## How to Use
5654

@@ -201,3 +199,7 @@ dotnet run --project src/SourceGit.csproj
201199
Thanks to all the people who contribute.
202200

203201
[![Contributors](https://contrib.rocks/image?repo=sourcegit-scm/sourcegit&columns=20)](https://github.com/sourcegit-scm/sourcegit/graphs/contributors)
202+
203+
## Third-Party Components
204+
205+
For detailed license information, see [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md).

THIRD-PARTY-LICENSES.md

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# Third-Party Licenses
2+
3+
This project incorporates components from the following third parties:
4+
5+
## Packages
6+
7+
### AvaloniaUI
8+
9+
- **Source**: https://github.com/AvaloniaUI/Avalonia
10+
- **Version**: 11.2.5
11+
- **License**: MIT License
12+
- **License Link**: https://github.com/AvaloniaUI/Avalonia/blob/master/licence.md
13+
14+
### AvaloniaEdit
15+
16+
- **Source**: https://github.com/AvaloniaUI/AvaloniaEdit
17+
- **Version**: 11.2.0
18+
- **License**: MIT License
19+
- **License Link**: https://github.com/AvaloniaUI/AvaloniaEdit/blob/master/LICENSE
20+
21+
### LiveChartsCore.SkiaSharpView.Avalonia
22+
23+
- **Source**: https://github.com/beto-rodriguez/LiveCharts2
24+
- **Version**: 2.0.0-rc5.4
25+
- **License**: MIT License
26+
- **License Link**: https://github.com/beto-rodriguez/LiveCharts2/blob/master/LICENSE
27+
28+
### TextMateSharp
29+
30+
- **Source**: https://github.com/danipen/TextMateSharp
31+
- **Version**: 1.0.66
32+
- **License**: MIT License
33+
- **License Link**: https://github.com/danipen/TextMateSharp/blob/master/LICENSE.md
34+
35+
### OpenAI .NET SDK
36+
37+
- **Source**: https://github.com/openai/openai-dotnet
38+
- **Version**: 2.2.0-beta2
39+
- **License**: MIT License
40+
- **License Link**: https://github.com/openai/openai-dotnet/blob/main/LICENSE
41+
42+
### Azure.AI.OpenAI
43+
44+
- **Source**: https://github.com/Azure/azure-sdk-for-net
45+
- **Version**: 2.2.0-beta2
46+
- **License**: MIT License
47+
- **License Link**: https://github.com/Azure/azure-sdk-for-net/blob/main/LICENSE.txt
48+
49+
## Fonts
50+
51+
### JetBrainsMono
52+
53+
- **Source**: https://github.com/JetBrains/JetBrainsMono
54+
- **Commit**: v2.304
55+
- **License**: SIL Open Font License, Version 1.1
56+
- **License Link**: https://github.com/JetBrains/JetBrainsMono/blob/v2.304/OFL.txt
57+
58+
## Grammar Files
59+
60+
### haxe-TmLanguage
61+
62+
- **Source**: https://github.com/vshaxe/haxe-TmLanguage
63+
- **Commit**: ddad8b4c6d0781ac20be0481174ec1be772c5da5
64+
- **License**: MIT License
65+
- **License Link**: https://github.com/vshaxe/haxe-TmLanguage/blob/ddad8b4c6d0781ac20be0481174ec1be772c5da5/LICENSE.md
66+
67+
### coc-toml
68+
69+
- **Source**: https://github.com/kkiyama117/coc-toml
70+
- **Commit**: aac3e0c65955c03314b2733041b19f903b7cc447
71+
- **License**: MIT License
72+
- **License Link**: https://github.com/kkiyama117/coc-toml/blob/aac3e0c65955c03314b2733041b19f903b7cc447/LICENSE
73+
74+
### eclipse-buildship
75+
76+
- **Source**: https://github.com/eclipse/buildship
77+
- **Commit**: 6bb773e7692f913dec27105129ebe388de34e68b
78+
- **License**: Eclipse Public License 1.0
79+
- **License Link**: https://github.com/eclipse-buildship/buildship/blob/6bb773e7692f913dec27105129ebe388de34e68b/README.md
80+
81+
### vscode-jsp-lang
82+
83+
- **Source**: https://github.com/samuel-weinhardt/vscode-jsp-lang
84+
- **Commit**: 0e89ecdb13650dbbe5a1e85b47b2e1530bf2f355
85+
- **License**: MIT License
86+
- **License Link**: https://github.com/samuel-weinhardt/vscode-jsp-lang/blob/0e89ecdb13650dbbe5a1e85b47b2e1530bf2f355/LICENSE

TRANSLATION.md

+23-111
Original file line numberDiff line numberDiff line change
@@ -1,116 +1,51 @@
1-
### de_DE.axaml: 99.07%
1+
# Translation Status
22

3+
This document shows the translation status of each locale file in the repository.
4+
5+
## Details
6+
7+
### ![en_US](https://img.shields.io/badge/en__US-%E2%88%9A-brightgreen)
8+
9+
### ![de__DE](https://img.shields.io/badge/de__DE-98.92%25-yellow)
310

411
<details>
5-
<summary>Missing Keys</summary>
12+
<summary>Missing keys in de_DE.axaml</summary>
613

714
- Text.BranchUpstreamInvalid
815
- Text.Configure.CustomAction.WaitForExit
916
- Text.Diff.First
1017
- Text.Diff.Last
1118
- Text.Preferences.AI.Streaming
1219
- Text.Preferences.Appearance.EditorTabWidth
20+
- Text.Preferences.General.ShowTagsInGraph
1321
- Text.StashCM.SaveAsPatch
1422

1523
</details>
1624

17-
### es_ES.axaml: 100.00%
18-
19-
20-
<details>
21-
<summary>Missing Keys</summary>
22-
23-
24-
25-
</details>
26-
27-
### fr_FR.axaml: 91.66%
28-
25+
### ![es__ES](https://img.shields.io/badge/es__ES-99.87%25-yellow)
2926

3027
<details>
31-
<summary>Missing Keys</summary>
28+
<summary>Missing keys in es_ES.axaml</summary>
3229

33-
- Text.AIAssistant.Regen
34-
- Text.AIAssistant.Use
35-
- Text.ApplyStash
36-
- Text.ApplyStash.DropAfterApply
37-
- Text.ApplyStash.RestoreIndex
38-
- Text.ApplyStash.Stash
39-
- Text.BranchCM.CustomAction
40-
- Text.BranchUpstreamInvalid
41-
- Text.Clone.RecurseSubmodules
42-
- Text.Configure.CustomAction.Scope.Branch
43-
- Text.Configure.CustomAction.WaitForExit
44-
- Text.CreateBranch.Name.WarnSpace
45-
- Text.DeleteRepositoryNode.Path
46-
- Text.DeleteRepositoryNode.TipForGroup
47-
- Text.DeleteRepositoryNode.TipForRepository
48-
- Text.Diff.First
49-
- Text.Diff.Last
50-
- Text.InProgress.CherryPick.Head
51-
- Text.InProgress.Merge.Operating
52-
- Text.InProgress.Rebase.StoppedAt
53-
- Text.InProgress.Revert.Head
54-
- Text.Merge.Source
55-
- Text.MergeMultiple
56-
- Text.MergeMultiple.CommitChanges
57-
- Text.MergeMultiple.Strategy
58-
- Text.MergeMultiple.Targets
59-
- Text.Preferences.AI.Streaming
60-
- Text.Preferences.Appearance.EditorTabWidth
61-
- Text.Preferences.Appearance.FontSize
62-
- Text.Preferences.Appearance.FontSize.Default
63-
- Text.Preferences.Appearance.FontSize.Editor
64-
- Text.Preferences.General.DateFormat
65-
- Text.Preferences.General.ShowChildren
66-
- Text.Preferences.Git.SSLVerify
67-
- Text.Repository.CustomActions
68-
- Text.Repository.FilterCommits
69-
- Text.Repository.FilterCommits.Default
70-
- Text.Repository.FilterCommits.Exclude
71-
- Text.Repository.FilterCommits.Include
72-
- Text.Repository.HistoriesLayout
73-
- Text.Repository.HistoriesLayout.Horizontal
74-
- Text.Repository.HistoriesLayout.Vertical
75-
- Text.Repository.HistoriesOrder
76-
- Text.Repository.HistoriesOrder.ByDate
77-
- Text.Repository.HistoriesOrder.Topo
78-
- Text.Repository.Notifications.Clear
79-
- Text.Repository.Skip
80-
- Text.Repository.Tags.OrderByCreatorDate
81-
- Text.Repository.Tags.OrderByNameAsc
82-
- Text.Repository.Tags.OrderByNameDes
83-
- Text.Repository.Tags.Sort
84-
- Text.Repository.UseRelativeTimeInHistories
85-
- Text.ScanRepositories
86-
- Text.SetUpstream
87-
- Text.SetUpstream.Local
88-
- Text.SetUpstream.Unset
89-
- Text.SetUpstream.Upstream
90-
- Text.SHALinkCM.NavigateTo
91-
- Text.Stash.AutoRestore
92-
- Text.Stash.AutoRestore.Tip
93-
- Text.StashCM.SaveAsPatch
94-
- Text.WorkingCopy.CommitToEdit
95-
- Text.WorkingCopy.SignOff
30+
- Text.Preferences.General.ShowTagsInGraph
9631

9732
</details>
9833

99-
### it_IT.axaml: 99.87%
34+
### ![fr__FR](https://img.shields.io/badge/fr__FR-%E2%88%9A-brightgreen)
10035

36+
### ![it__IT](https://img.shields.io/badge/it__IT-99.87%25-yellow)
10137

10238
<details>
103-
<summary>Missing Keys</summary>
39+
<summary>Missing keys in it_IT.axaml</summary>
10440

105-
- Text.Preferences.Appearance.EditorTabWidth
41+
- Text.Preferences.General.ShowTagsInGraph
10642

10743
</details>
10844

109-
### pt_BR.axaml: 91.39%
110-
45+
### ![pt__BR](https://img.shields.io/badge/pt__BR-91.12%25-yellow)
11146

11247
<details>
113-
<summary>Missing Keys</summary>
48+
<summary>Missing keys in pt_BR.axaml</summary>
11449

11550
- Text.AIAssistant.Regen
11651
- Text.AIAssistant.Use
@@ -153,6 +88,7 @@
15388
- Text.Preferences.Appearance.EditorTabWidth
15489
- Text.Preferences.General.DateFormat
15590
- Text.Preferences.General.ShowChildren
91+
- Text.Preferences.General.ShowTagsInGraph
15692
- Text.Preferences.Git.SSLVerify
15793
- Text.Repository.FilterCommits
15894
- Text.Repository.HistoriesLayout
@@ -180,32 +116,8 @@
180116

181117
</details>
182118

183-
### ru_RU.axaml: 100.00%
184-
185-
186-
<details>
187-
<summary>Missing Keys</summary>
188-
189-
190-
191-
</details>
192-
193-
### zh_CN.axaml: 100.00%
194-
195-
196-
<details>
197-
<summary>Missing Keys</summary>
198-
199-
200-
201-
</details>
202-
203-
### zh_TW.axaml: 100.00%
119+
### ![ru__RU](https://img.shields.io/badge/ru__RU-%E2%88%9A-brightgreen)
204120

121+
### ![zh__CN](https://img.shields.io/badge/zh__CN-%E2%88%9A-brightgreen)
205122

206-
<details>
207-
<summary>Missing Keys</summary>
208-
209-
210-
211-
</details>
123+
### ![zh__TW](https://img.shields.io/badge/zh__TW-%E2%88%9A-brightgreen)

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2025.09
1+
2025.10

build/scripts/localization-check.js

+17-28
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ const repoRoot = path.join(__dirname, '../../');
66
const localesDir = path.join(repoRoot, 'src/Resources/Locales');
77
const enUSFile = path.join(localesDir, 'en_US.axaml');
88
const outputFile = path.join(repoRoot, 'TRANSLATION.md');
9-
const readmeFile = path.join(repoRoot, 'README.md');
109

1110
const parser = new xml2js.Parser();
1211

@@ -18,46 +17,36 @@ async function parseXml(filePath) {
1817
async function calculateTranslationRate() {
1918
const enUSData = await parseXml(enUSFile);
2019
const enUSKeys = new Set(enUSData.ResourceDictionary['x:String'].map(item => item.$['x:Key']));
21-
22-
const translationRates = [];
23-
const badges = [];
24-
2520
const files = (await fs.readdir(localesDir)).filter(file => file !== 'en_US.axaml' && file.endsWith('.axaml'));
2621

27-
// Add en_US badge first
28-
badges.push(`[![en_US](https://img.shields.io/badge/en__US-%E2%88%9A-brightgreen)](TRANSLATION.md)`);
22+
const lines = [];
23+
24+
lines.push('# Translation Status');
25+
lines.push('This document shows the translation status of each locale file in the repository.');
26+
lines.push(`## Details`);
27+
lines.push(`### ![en_US](https://img.shields.io/badge/en__US-%E2%88%9A-brightgreen)`);
2928

3029
for (const file of files) {
30+
const locale = file.replace('.axaml', '').replace('_', '__');
3131
const filePath = path.join(localesDir, file);
3232
const localeData = await parseXml(filePath);
3333
const localeKeys = new Set(localeData.ResourceDictionary['x:String'].map(item => item.$['x:Key']));
34-
3534
const missingKeys = [...enUSKeys].filter(key => !localeKeys.has(key));
36-
const translationRate = ((enUSKeys.size - missingKeys.length) / enUSKeys.size) * 100;
3735

38-
translationRates.push(`### ${file}: ${translationRate.toFixed(2)}%\n`);
39-
translationRates.push(`<details>\n<summary>Missing Keys</summary>\n\n${missingKeys.map(key => `- ${key}`).join('\n')}\n\n</details>`);
36+
if (missingKeys.length > 0) {
37+
const progress = ((enUSKeys.size - missingKeys.length) / enUSKeys.size) * 100;
38+
const badgeColor = progress >= 75 ? 'yellow' : 'red';
4039

41-
// Add badges
42-
const locale = file.replace('.axaml', '').replace('_', '__');
43-
if (translationRate === 100) {
44-
badges.push(`[![${locale}](https://img.shields.io/badge/${locale}-%E2%88%9A-brightgreen)](TRANSLATION.md)`);
40+
lines.push(`### ![${locale}](https://img.shields.io/badge/${locale}-${progress.toFixed(2)}%25-${badgeColor})`);
41+
lines.push(`<details>\n<summary>Missing keys in ${file}</summary>\n\n${missingKeys.map(key => `- ${key}`).join('\n')}\n\n</details>`)
4542
} else {
46-
const badgeColor = translationRate >= 75 ? 'yellow' : 'red';
47-
badges.push(`[![${locale}](https://img.shields.io/badge/${locale}-${translationRate.toFixed(2)}%25-${badgeColor})](TRANSLATION.md)`);
48-
}
43+
lines.push(`### ![${locale}](https://img.shields.io/badge/${locale}-%E2%88%9A-brightgreen)`);
44+
}
4945
}
5046

51-
console.log(translationRates.join('\n\n'));
52-
53-
await fs.writeFile(outputFile, translationRates.join('\n\n') + '\n', 'utf8');
54-
55-
// Update README.md
56-
let readmeContent = await fs.readFile(readmeFile, 'utf8');
57-
const badgeSection = `## Translation Status\n\n${badges.join(' ')}`;
58-
console.log(badgeSection);
59-
readmeContent = readmeContent.replace(/## Translation Status\n\n.*\n\n/, badgeSection + '\n\n');
60-
await fs.writeFile(readmeFile, readmeContent, 'utf8');
47+
const content = lines.join('\n\n');
48+
console.log(content);
49+
await fs.writeFile(outputFile, content, 'utf8');
6150
}
6251

6352
calculateTranslationRate().catch(err => console.error(err));

src/App.axaml.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ private void Check4Update(bool manually = false)
532532
catch (Exception e)
533533
{
534534
if (manually)
535-
ShowSelfUpdateResult(e);
535+
ShowSelfUpdateResult(new Models.SelfUpdateFailed(e));
536536
}
537537
});
538538
}

0 commit comments

Comments
 (0)