mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2025-01-23 01:36:57 -08:00
Merge branch 'release/v2025.02'
This commit is contained in:
commit
4f3e6398b0
110 changed files with 2427 additions and 1704 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
|
|
8
.github/workflows/release.yml
vendored
8
.github/workflows/release.yml
vendored
|
@ -24,12 +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:
|
|
||||||
needs: [package, version]
|
|
||||||
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
|
||||||
|
@ -44,7 +38,7 @@ jobs:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
TAG: ${{ github.ref_name }}
|
TAG: ${{ github.ref_name }}
|
||||||
VERSION: ${{ needs.version.outputs.version }}
|
VERSION: ${{ needs.version.outputs.version }}
|
||||||
run: gh release create "$TAG" -t "Release $VERSION" --notes-from-tag
|
run: gh release create "$TAG" -t "$VERSION" --notes-from-tag
|
||||||
- name: Download artifacts
|
- name: Download artifacts
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
|
50
README.md
50
README.md
|
@ -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.86%25-yellow)](TRANSLATION.md) [![es__ES](https://img.shields.io/badge/es__ES-99.86%25-yellow)](TRANSLATION.md) [![fr__FR](https://img.shields.io/badge/fr__FR-94.87%25-yellow)](TRANSLATION.md) [![it__IT](https://img.shields.io/badge/it__IT-95.42%25-yellow)](TRANSLATION.md) [![pt__BR](https://img.shields.io/badge/pt__BR-96.67%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)
|
[![en_US](https://img.shields.io/badge/en__US-100%25-brightgreen)](TRANSLATION.md) [![de__DE](https://img.shields.io/badge/de__DE-97.55%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-94.69%25-yellow)](TRANSLATION.md) [![it__IT](https://img.shields.io/badge/it__IT-93.33%25-yellow)](TRANSLATION.md) [![pt__BR](https://img.shields.io/badge/pt__BR-94.42%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)
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> You can find the missing keys in [TRANSLATION.md](TRANSLATION.md)
|
> You can find the missing keys in [TRANSLATION.md](TRANSLATION.md)
|
||||||
|
@ -102,37 +102,33 @@ For **macOS** users:
|
||||||
|
|
||||||
For **Linux** users:
|
For **Linux** users:
|
||||||
|
|
||||||
* For Debian/Ubuntu based distributions, you can add the `sourcegit` repository by following:
|
* Thanks [@aikawayataro](https://github.com/aikawayataro) for providing `rpm` and `deb` repositories, hosted on [Codeberg](https://codeberg.org/yataro/-/packages).
|
||||||
You may need to install curl and/or gpg first, if you're on a very minimal host:
|
|
||||||
|
`deb` how to:
|
||||||
```shell
|
```shell
|
||||||
apt update && apt install curl gpg -y
|
curl https://codeberg.org/api/packages/yataro/debian/repository.key | sudo tee /etc/apt/keyrings/sourcegit.asc
|
||||||
|
echo "deb [signed-by=/etc/apt/keyrings/sourcegit.asc] https://codeberg.org/api/packages/yataro/debian generic main" | sudo tee /etc/apt/sources.list.d/sourcegit.list
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install sourcegit
|
||||||
```
|
```
|
||||||
Install the registry signing key:
|
|
||||||
|
`rpm` how to:
|
||||||
```shell
|
```shell
|
||||||
curl -fsSL "https://packages.buildkite.com/sourcegit/sourcegit-deb/gpgkey" | gpg --dearmor -o /etc/apt/keyrings/sourcegit_sourcegit-deb-archive-keyring.gpg
|
curl https://codeberg.org/api/packages/yataro/rpm.repo | sed -e 's/gpgcheck=1/gpgcheck=0/' > sourcegit.repo
|
||||||
|
|
||||||
|
# Fedora 41 and newer
|
||||||
|
sudo dnf config-manager addrepo --from-repofile=./sourcegit.repo
|
||||||
|
# Fedora 40 and earlier
|
||||||
|
sudo dnf config-manager --add-repo ./sourcegit.repo
|
||||||
|
|
||||||
|
sudo dnf install sourcegit
|
||||||
```
|
```
|
||||||
Configure the source:
|
|
||||||
```shell
|
If your distribution isn't using `dnf`, please refer to the documentation of your distribution on how to add an `rpm` repository.
|
||||||
echo -e "deb [signed-by=/etc/apt/keyrings/sourcegit_sourcegit-deb-archive-keyring.gpg] https://packages.buildkite.com/sourcegit/sourcegit-deb/any/ any main\ndeb-src [signed-by=/etc/apt/keyrings/sourcegit_sourcegit-deb-archive-keyring.gpg] https://packages.buildkite.com/sourcegit/sourcegit-deb/any/ any main" > /etc/apt/sources.list.d/buildkite-sourcegit-sourcegit-deb.list
|
* `AppImage` files can be found on [AppImage hub](https://appimage.github.io/SourceGit/), `xdg-open` (`xdg-utils`) must be installed to support open native file manager.
|
||||||
```
|
* Make sure [git-credential-manager](https://github.com/git-ecosystem/git-credential-manager/releases) is installed on your Linux.
|
||||||
Update your local repository and install the package:
|
|
||||||
```shell
|
|
||||||
apt update && apt install sourcegit
|
|
||||||
```
|
|
||||||
* For RHEL/Fedora based distributions, you can add the `sourcegit` repository by following:
|
|
||||||
Configure the source:
|
|
||||||
```shell
|
|
||||||
sudo sh -c 'echo -e "[sourcegit-rpm]\nname=sourcegit-rpm\nbaseurl=https://packages.buildkite.com/sourcegit/sourcegit-rpm/rpm_any/rpm_any/\$basearch\nenabled=1\nrepo_gpgcheck=1\ngpgcheck=0\ngpgkey=https://packages.buildkite.com/sourcegit/sourcegit-rpm/gpgkey\npriority=1"' > /etc/yum.repos.d/sourcegit-rpm.repo
|
|
||||||
```
|
|
||||||
Install the package with this command:
|
|
||||||
```shell
|
|
||||||
sudo dnf install -y sourcegit
|
|
||||||
```
|
|
||||||
* `Appimage` files can be found on [AppimageHub](https://appimage.github.io/SourceGit/)
|
|
||||||
* `xdg-open` must be installed to support open native file manager.
|
|
||||||
* Make sure [git-credential-manager](https://github.com/git-ecosystem/git-credential-manager/releases) is installed on your linux.
|
|
||||||
* Maybe you need to set environment variable `AVALONIA_SCREEN_SCALE_FACTORS`. See https://github.com/AvaloniaUI/Avalonia/wiki/Configuring-X11-per-monitor-DPI.
|
* Maybe you need to set environment variable `AVALONIA_SCREEN_SCALE_FACTORS`. See https://github.com/AvaloniaUI/Avalonia/wiki/Configuring-X11-per-monitor-DPI.
|
||||||
* If you can NOT type accented characters, such as `ê`, `ó`, try to set the environment variable `AVALONIA_IM_MODULE` to `none`.
|
* If you can NOT type accented characters, such as `ê`, `ó`, try to set the environment variable `AVALONIA_IM_MODULE` to `none`.
|
||||||
|
|
||||||
## OpenAI
|
## OpenAI
|
||||||
|
|
||||||
|
|
|
@ -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}"
|
||||||
|
|
106
TRANSLATION.md
106
TRANSLATION.md
|
@ -1,40 +1,46 @@
|
||||||
### de_DE.axaml: 99.86%
|
### de_DE.axaml: 97.55%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
- Text.Preference.General.DateFormat
|
- Text.Configure.IssueTracker.AddSampleGiteeIssue
|
||||||
|
- Text.Configure.IssueTracker.AddSampleGiteePullRequest
|
||||||
|
- Text.Preferences.General.DateFormat
|
||||||
|
- Text.Preferences.Git.SSLVerify
|
||||||
|
- Text.Repository.HistoriesLayout
|
||||||
|
- Text.Repository.HistoriesLayout.Horizontal
|
||||||
|
- Text.Repository.HistoriesLayout.Vertical
|
||||||
|
- Text.Repository.HistoriesOrder
|
||||||
|
- Text.Repository.OnlyHighlightCurrentBranchInHistories
|
||||||
|
- Text.Repository.Tags.OrderByCreatorDate
|
||||||
|
- Text.Repository.Tags.OrderByNameAsc
|
||||||
|
- Text.Repository.Tags.OrderByNameDes
|
||||||
|
- Text.Repository.Tags.Sort
|
||||||
|
- Text.Repository.UseRelativeTimeInHistories
|
||||||
|
- Text.SetUpstream
|
||||||
|
- Text.SetUpstream.Local
|
||||||
|
- Text.SetUpstream.Unset
|
||||||
|
- Text.SetUpstream.Upstream
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### es_ES.axaml: 99.86%
|
### es_ES.axaml: 100.00%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
- Text.Preference.General.DateFormat
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### fr_FR.axaml: 94.87%
|
### fr_FR.axaml: 94.69%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
- Text.BranchCM.MergeMultiBranches
|
|
||||||
- Text.CherryPick.AppendSourceToMessage
|
|
||||||
- Text.CherryPick.Mainline.Tips
|
|
||||||
- Text.CommitCM.CherryPickMultiple
|
|
||||||
- Text.CommitCM.Merge
|
|
||||||
- Text.CommitCM.MergeMultiple
|
|
||||||
- Text.CommitDetail.Files.Search
|
|
||||||
- Text.Diff.UseBlockNavigation
|
|
||||||
- Text.Fetch.Force
|
|
||||||
- Text.FileCM.ResolveUsing
|
|
||||||
- Text.Hotkeys.Global.Clone
|
|
||||||
- Text.InProgress.CherryPick.Head
|
- Text.InProgress.CherryPick.Head
|
||||||
- Text.InProgress.Merge.Operating
|
- Text.InProgress.Merge.Operating
|
||||||
- Text.InProgress.Rebase.StoppedAt
|
- Text.InProgress.Rebase.StoppedAt
|
||||||
|
@ -44,27 +50,40 @@
|
||||||
- Text.MergeMultiple.CommitChanges
|
- Text.MergeMultiple.CommitChanges
|
||||||
- Text.MergeMultiple.Strategy
|
- Text.MergeMultiple.Strategy
|
||||||
- Text.MergeMultiple.Targets
|
- Text.MergeMultiple.Targets
|
||||||
- Text.Preference.Appearance.FontSize
|
- Text.Preferences.Appearance.FontSize
|
||||||
- Text.Preference.Appearance.FontSize.Default
|
- Text.Preferences.Appearance.FontSize.Default
|
||||||
- Text.Preference.Appearance.FontSize.Editor
|
- Text.Preferences.Appearance.FontSize.Editor
|
||||||
- Text.Preference.General.DateFormat
|
- Text.Preferences.General.DateFormat
|
||||||
- Text.Preference.General.ShowChildren
|
- Text.Preferences.General.ShowChildren
|
||||||
|
- Text.Preferences.Git.SSLVerify
|
||||||
- Text.Repository.CustomActions
|
- Text.Repository.CustomActions
|
||||||
- Text.Repository.FilterCommits
|
- Text.Repository.FilterCommits
|
||||||
- Text.Repository.FilterCommits.Default
|
- Text.Repository.FilterCommits.Default
|
||||||
- Text.Repository.FilterCommits.Exclude
|
- Text.Repository.FilterCommits.Exclude
|
||||||
- Text.Repository.FilterCommits.Include
|
- Text.Repository.FilterCommits.Include
|
||||||
|
- Text.Repository.HistoriesLayout
|
||||||
|
- Text.Repository.HistoriesLayout.Horizontal
|
||||||
|
- Text.Repository.HistoriesLayout.Vertical
|
||||||
- Text.Repository.HistoriesOrder
|
- Text.Repository.HistoriesOrder
|
||||||
- Text.Repository.HistoriesOrder.ByDate
|
- Text.Repository.HistoriesOrder.ByDate
|
||||||
- Text.Repository.HistoriesOrder.Topo
|
- Text.Repository.HistoriesOrder.Topo
|
||||||
- Text.Repository.Skip
|
- Text.Repository.Skip
|
||||||
|
- Text.Repository.Tags.OrderByCreatorDate
|
||||||
|
- Text.Repository.Tags.OrderByNameAsc
|
||||||
|
- Text.Repository.Tags.OrderByNameDes
|
||||||
|
- Text.Repository.Tags.Sort
|
||||||
|
- Text.Repository.UseRelativeTimeInHistories
|
||||||
- Text.ScanRepositories
|
- Text.ScanRepositories
|
||||||
|
- Text.SetUpstream
|
||||||
|
- Text.SetUpstream.Local
|
||||||
|
- Text.SetUpstream.Unset
|
||||||
|
- Text.SetUpstream.Upstream
|
||||||
- Text.SHALinkCM.NavigateTo
|
- Text.SHALinkCM.NavigateTo
|
||||||
- Text.WorkingCopy.CommitToEdit
|
- Text.WorkingCopy.CommitToEdit
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### it_IT.axaml: 95.42%
|
### it_IT.axaml: 93.33%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -75,6 +94,8 @@
|
||||||
- Text.CommitCM.MergeMultiple
|
- Text.CommitCM.MergeMultiple
|
||||||
- Text.CommitDetail.Files.Search
|
- Text.CommitDetail.Files.Search
|
||||||
- Text.CommitDetail.Info.Children
|
- Text.CommitDetail.Info.Children
|
||||||
|
- Text.Configure.IssueTracker.AddSampleGiteeIssue
|
||||||
|
- Text.Configure.IssueTracker.AddSampleGiteePullRequest
|
||||||
- Text.Configure.IssueTracker.AddSampleGitLabMergeRequest
|
- Text.Configure.IssueTracker.AddSampleGitLabMergeRequest
|
||||||
- Text.Configure.OpenAI.Preferred
|
- Text.Configure.OpenAI.Preferred
|
||||||
- Text.Configure.OpenAI.Preferred.Tip
|
- Text.Configure.OpenAI.Preferred.Tip
|
||||||
|
@ -90,23 +111,37 @@
|
||||||
- Text.MergeMultiple.CommitChanges
|
- Text.MergeMultiple.CommitChanges
|
||||||
- Text.MergeMultiple.Strategy
|
- Text.MergeMultiple.Strategy
|
||||||
- Text.MergeMultiple.Targets
|
- Text.MergeMultiple.Targets
|
||||||
- Text.Preference.General.DateFormat
|
- Text.Preferences.General.DateFormat
|
||||||
- Text.Preference.General.ShowChildren
|
- Text.Preferences.General.ShowChildren
|
||||||
|
- Text.Preferences.Git.SSLVerify
|
||||||
- Text.Repository.FilterCommits
|
- Text.Repository.FilterCommits
|
||||||
- Text.Repository.FilterCommits.Default
|
- Text.Repository.FilterCommits.Default
|
||||||
- Text.Repository.FilterCommits.Exclude
|
- Text.Repository.FilterCommits.Exclude
|
||||||
- Text.Repository.FilterCommits.Include
|
- Text.Repository.FilterCommits.Include
|
||||||
|
- Text.Repository.HistoriesLayout
|
||||||
|
- Text.Repository.HistoriesLayout.Horizontal
|
||||||
|
- Text.Repository.HistoriesLayout.Vertical
|
||||||
- Text.Repository.HistoriesOrder
|
- Text.Repository.HistoriesOrder
|
||||||
- Text.Repository.HistoriesOrder.ByDate
|
- Text.Repository.HistoriesOrder.ByDate
|
||||||
- Text.Repository.HistoriesOrder.Topo
|
- Text.Repository.HistoriesOrder.Topo
|
||||||
|
- Text.Repository.OnlyHighlightCurrentBranchInHistories
|
||||||
- Text.Repository.Skip
|
- Text.Repository.Skip
|
||||||
|
- Text.Repository.Tags.OrderByCreatorDate
|
||||||
|
- Text.Repository.Tags.OrderByNameAsc
|
||||||
|
- Text.Repository.Tags.OrderByNameDes
|
||||||
|
- Text.Repository.Tags.Sort
|
||||||
|
- Text.Repository.UseRelativeTimeInHistories
|
||||||
|
- Text.SetUpstream
|
||||||
|
- Text.SetUpstream.Local
|
||||||
|
- Text.SetUpstream.Unset
|
||||||
|
- Text.SetUpstream.Upstream
|
||||||
- Text.SHALinkCM.CopySHA
|
- Text.SHALinkCM.CopySHA
|
||||||
- Text.SHALinkCM.NavigateTo
|
- Text.SHALinkCM.NavigateTo
|
||||||
- Text.WorkingCopy.CommitToEdit
|
- Text.WorkingCopy.CommitToEdit
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### pt_BR.axaml: 96.67%
|
### pt_BR.axaml: 94.42%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -117,6 +152,8 @@
|
||||||
- Text.CommitCM.MergeMultiple
|
- Text.CommitCM.MergeMultiple
|
||||||
- Text.CommitDetail.Files.Search
|
- Text.CommitDetail.Files.Search
|
||||||
- Text.CommitDetail.Info.Children
|
- Text.CommitDetail.Info.Children
|
||||||
|
- Text.Configure.IssueTracker.AddSampleGiteeIssue
|
||||||
|
- Text.Configure.IssueTracker.AddSampleGiteePullRequest
|
||||||
- Text.Diff.UseBlockNavigation
|
- Text.Diff.UseBlockNavigation
|
||||||
- Text.Fetch.Force
|
- Text.Fetch.Force
|
||||||
- Text.FileCM.ResolveUsing
|
- Text.FileCM.ResolveUsing
|
||||||
|
@ -130,10 +167,25 @@
|
||||||
- Text.MergeMultiple.CommitChanges
|
- Text.MergeMultiple.CommitChanges
|
||||||
- Text.MergeMultiple.Strategy
|
- Text.MergeMultiple.Strategy
|
||||||
- Text.MergeMultiple.Targets
|
- Text.MergeMultiple.Targets
|
||||||
- Text.Preference.General.DateFormat
|
- Text.Preferences.General.DateFormat
|
||||||
- Text.Preference.General.ShowChildren
|
- Text.Preferences.General.ShowChildren
|
||||||
|
- Text.Preferences.Git.SSLVerify
|
||||||
- Text.Repository.FilterCommits
|
- Text.Repository.FilterCommits
|
||||||
|
- Text.Repository.HistoriesLayout
|
||||||
|
- Text.Repository.HistoriesLayout.Horizontal
|
||||||
|
- Text.Repository.HistoriesLayout.Vertical
|
||||||
|
- Text.Repository.HistoriesOrder
|
||||||
|
- Text.Repository.OnlyHighlightCurrentBranchInHistories
|
||||||
- Text.Repository.Skip
|
- Text.Repository.Skip
|
||||||
|
- Text.Repository.Tags.OrderByCreatorDate
|
||||||
|
- Text.Repository.Tags.OrderByNameAsc
|
||||||
|
- Text.Repository.Tags.OrderByNameDes
|
||||||
|
- Text.Repository.Tags.Sort
|
||||||
|
- Text.Repository.UseRelativeTimeInHistories
|
||||||
|
- Text.SetUpstream
|
||||||
|
- Text.SetUpstream.Local
|
||||||
|
- Text.SetUpstream.Unset
|
||||||
|
- Text.SetUpstream.Upstream
|
||||||
- Text.SHALinkCM.NavigateTo
|
- Text.SHALinkCM.NavigateTo
|
||||||
- Text.WorkingCopy.CommitToEdit
|
- Text.WorkingCopy.CommitToEdit
|
||||||
|
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
2025.01
|
2025.02
|
|
@ -1,7 +1,7 @@
|
||||||
Package: sourcegit
|
Package: sourcegit
|
||||||
Version: 8.23
|
Version: 8.23
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Depends: libx11-6, libice6, libsm6
|
Depends: libx11-6, libice6, libsm6, libicu | libicu76 | libicu74 | libicu72 | libicu71 | libicu70 | libicu69 | libicu68 | libicu67 | libicu66 | libicu65 | libicu63 | libicu60 | libicu57 | libicu55 | libicu52, xdg-utils
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Maintainer: longshuang@msn.cn
|
Maintainer: longshuang@msn.cn
|
||||||
Description: Open-source & Free Git GUI Client
|
Description: Open-source & Free Git GUI Client
|
||||||
|
|
|
@ -8,6 +8,7 @@ Source: https://github.com/sourcegit-scm/sourcegit/archive/refs/tags/v%_version.
|
||||||
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
|
Requires: libicu
|
||||||
|
Requires: xdg-utils
|
||||||
|
|
||||||
%define _build_id_links none
|
%define _build_id_links none
|
||||||
|
|
||||||
|
|
|
@ -29,20 +29,30 @@ namespace SourceGit
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
#if DISABLE_UPDATE_DETECTION
|
#if DISABLE_UPDATE_DETECTION
|
||||||
return false;
|
return false;
|
||||||
#else
|
#else
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly Command OpenPreferenceCommand = new Command(_ => OpenDialog(new Views.Preference()));
|
public static readonly Command OpenPreferencesCommand = new Command(_ => OpenDialog(new Views.Preferences()));
|
||||||
public static readonly Command OpenHotkeysCommand = new Command(_ => OpenDialog(new Views.Hotkeys()));
|
public static readonly Command OpenHotkeysCommand = new Command(_ => OpenDialog(new Views.Hotkeys()));
|
||||||
public static readonly Command OpenAppDataDirCommand = new Command(_ => Native.OS.OpenInFileManager(Native.OS.DataDir));
|
public static readonly Command OpenAppDataDirCommand = new Command(_ => Native.OS.OpenInFileManager(Native.OS.DataDir));
|
||||||
public static readonly Command OpenAboutCommand = new Command(_ => OpenDialog(new Views.About()));
|
public static readonly Command OpenAboutCommand = new Command(_ => OpenDialog(new Views.About()));
|
||||||
public static readonly Command CheckForUpdateCommand = new Command(_ => Check4Update(true));
|
public static readonly Command CheckForUpdateCommand = new Command(_ => (Current as App)?.Check4Update(true));
|
||||||
public static readonly Command QuitCommand = new Command(_ => Quit(0));
|
public static readonly Command QuitCommand = new Command(_ => Quit(0));
|
||||||
public static readonly Command CopyTextBlockCommand = new Command(p => CopyTextBlock(p as TextBlock));
|
public static readonly Command CopyTextBlockCommand = new Command(p =>
|
||||||
|
{
|
||||||
|
var textBlock = p as TextBlock;
|
||||||
|
if (textBlock == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (textBlock.Inlines is { Count: > 0 } inlines)
|
||||||
|
CopyText(inlines.Text);
|
||||||
|
else if (!string.IsNullOrEmpty(textBlock.Text))
|
||||||
|
CopyText(textBlock.Text);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,6 @@ namespace SourceGit
|
||||||
[JsonSerializable(typeof(Models.ThemeOverrides))]
|
[JsonSerializable(typeof(Models.ThemeOverrides))]
|
||||||
[JsonSerializable(typeof(Models.Version))]
|
[JsonSerializable(typeof(Models.Version))]
|
||||||
[JsonSerializable(typeof(Models.RepositorySettings))]
|
[JsonSerializable(typeof(Models.RepositorySettings))]
|
||||||
[JsonSerializable(typeof(ViewModels.Preference))]
|
[JsonSerializable(typeof(ViewModels.Preferences))]
|
||||||
internal partial class JsonCodeGen : JsonSerializerContext { }
|
internal partial class JsonCodeGen : JsonSerializerContext { }
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
<NativeMenuItem Header="{DynamicResource Text.Hotkeys}" Command="{x:Static s:App.OpenHotkeysCommand}"/>
|
<NativeMenuItem Header="{DynamicResource Text.Hotkeys}" Command="{x:Static s:App.OpenHotkeysCommand}"/>
|
||||||
<NativeMenuItem Header="{DynamicResource Text.SelfUpdate}" Command="{x:Static s:App.CheckForUpdateCommand}" IsVisible="{x:Static s:App.IsCheckForUpdateCommandVisible}"/>
|
<NativeMenuItem Header="{DynamicResource Text.SelfUpdate}" Command="{x:Static s:App.CheckForUpdateCommand}" IsVisible="{x:Static s:App.IsCheckForUpdateCommandVisible}"/>
|
||||||
<NativeMenuItemSeparator/>
|
<NativeMenuItemSeparator/>
|
||||||
<NativeMenuItem Header="{DynamicResource Text.Preference}" Command="{x:Static s:App.OpenPreferenceCommand}" Gesture="⌘+,"/>
|
<NativeMenuItem Header="{DynamicResource Text.Preferences}" Command="{x:Static s:App.OpenPreferencesCommand}" Gesture="⌘+,"/>
|
||||||
<NativeMenuItem Header="{DynamicResource Text.OpenAppDataDir}" Command="{x:Static s:App.OpenAppDataDirCommand}"/>
|
<NativeMenuItem Header="{DynamicResource Text.OpenAppDataDir}" Command="{x:Static s:App.OpenAppDataDirCommand}"/>
|
||||||
<NativeMenuItemSeparator/>
|
<NativeMenuItemSeparator/>
|
||||||
<NativeMenuItem Header="{DynamicResource Text.Quit}" Command="{x:Static s:App.QuitCommand}" Gesture="⌘+Q"/>
|
<NativeMenuItem Header="{DynamicResource Text.Quit}" Command="{x:Static s:App.QuitCommand}" Gesture="⌘+Q"/>
|
||||||
|
|
202
src/App.axaml.cs
202
src/App.axaml.cs
|
@ -22,6 +22,7 @@ namespace SourceGit
|
||||||
{
|
{
|
||||||
public partial class App : Application
|
public partial class App : Application
|
||||||
{
|
{
|
||||||
|
#region App Entry Point
|
||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
@ -40,9 +41,9 @@ namespace SourceGit
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (TryLaunchedAsRebaseTodoEditor(args, out int exitTodo))
|
if (TryLaunchAsRebaseTodoEditor(args, out int exitTodo))
|
||||||
Environment.Exit(exitTodo);
|
Environment.Exit(exitTodo);
|
||||||
else if (TryLaunchedAsRebaseMessageEditor(args, out int exitMessage))
|
else if (TryLaunchAsRebaseMessageEditor(args, out int exitMessage))
|
||||||
Environment.Exit(exitMessage);
|
Environment.Exit(exitMessage);
|
||||||
else
|
else
|
||||||
BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
|
BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
|
||||||
|
@ -74,35 +75,9 @@ namespace SourceGit
|
||||||
Native.OS.SetupApp(builder);
|
Native.OS.SetupApp(builder);
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public override void Initialize()
|
#region Utility Functions
|
||||||
{
|
|
||||||
AvaloniaXamlLoader.Load(this);
|
|
||||||
|
|
||||||
var pref = ViewModels.Preference.Instance;
|
|
||||||
pref.PropertyChanged += (_, _) => pref.Save();
|
|
||||||
|
|
||||||
SetLocale(pref.Locale);
|
|
||||||
SetTheme(pref.Theme, pref.ThemeOverrides);
|
|
||||||
SetFonts(pref.DefaultFontFamily, pref.MonospaceFontFamily, pref.OnlyUseMonoFontInEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void OnFrameworkInitializationCompleted()
|
|
||||||
{
|
|
||||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
|
||||||
{
|
|
||||||
BindingPlugins.DataValidators.RemoveAt(0);
|
|
||||||
|
|
||||||
if (TryLaunchedAsCoreEditor(desktop))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (TryLaunchedAsAskpass(desktop))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TryLaunchedAsNormal(desktop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void OpenDialog(Window window)
|
public static void OpenDialog(Window window)
|
||||||
{
|
{
|
||||||
if (Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime { MainWindow: { } owner })
|
if (Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime { MainWindow: { } owner })
|
||||||
|
@ -304,21 +279,6 @@ namespace SourceGit
|
||||||
return Current is App app ? app._launcher : null;
|
return Current is App app ? app._launcher : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ViewModels.Repository FindOpenedRepository(string repoPath)
|
|
||||||
{
|
|
||||||
if (Current is App app && app._launcher != null)
|
|
||||||
{
|
|
||||||
foreach (var page in app._launcher.Pages)
|
|
||||||
{
|
|
||||||
var id = page.Node.Id.Replace("\\", "/");
|
|
||||||
if (id == repoPath && page.Data is ViewModels.Repository repo)
|
|
||||||
return repo;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Quit(int exitCode)
|
public static void Quit(int exitCode)
|
||||||
{
|
{
|
||||||
if (Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
if (Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
|
@ -331,18 +291,38 @@ namespace SourceGit
|
||||||
Environment.Exit(exitCode);
|
Environment.Exit(exitCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
private static void CopyTextBlock(TextBlock textBlock)
|
#region Overrides
|
||||||
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
if (textBlock == null)
|
AvaloniaXamlLoader.Load(this);
|
||||||
return;
|
|
||||||
|
|
||||||
if (textBlock.Inlines is { Count: > 0 } inlines)
|
var pref = ViewModels.Preferences.Instance;
|
||||||
CopyText(inlines.Text);
|
pref.PropertyChanged += (_, _) => pref.Save();
|
||||||
else if (!string.IsNullOrEmpty(textBlock.Text))
|
|
||||||
CopyText(textBlock.Text);
|
SetLocale(pref.Locale);
|
||||||
|
SetTheme(pref.Theme, pref.ThemeOverrides);
|
||||||
|
SetFonts(pref.DefaultFontFamily, pref.MonospaceFontFamily, pref.OnlyUseMonoFontInEditor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnFrameworkInitializationCompleted()
|
||||||
|
{
|
||||||
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
|
{
|
||||||
|
BindingPlugins.DataValidators.RemoveAt(0);
|
||||||
|
|
||||||
|
if (TryLaunchAsCoreEditor(desktop))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (TryLaunchAsAskpass(desktop))
|
||||||
|
return;
|
||||||
|
|
||||||
|
TryLaunchAsNormal(desktop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
private static void LogException(Exception ex)
|
private static void LogException(Exception ex)
|
||||||
{
|
{
|
||||||
if (ex == null)
|
if (ex == null)
|
||||||
|
@ -369,56 +349,7 @@ namespace SourceGit
|
||||||
File.WriteAllText(file, builder.ToString());
|
File.WriteAllText(file, builder.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Check4Update(bool manually = false)
|
private static bool TryLaunchAsRebaseTodoEditor(string[] args, out int exitCode)
|
||||||
{
|
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Fetch lastest release information.
|
|
||||||
var client = new HttpClient() { Timeout = TimeSpan.FromSeconds(5) };
|
|
||||||
var data = await client.GetStringAsync("https://sourcegit-scm.github.io/data/version.json");
|
|
||||||
|
|
||||||
// Parse json into Models.Version.
|
|
||||||
var ver = JsonSerializer.Deserialize(data, JsonCodeGen.Default.Version);
|
|
||||||
if (ver == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Check if already up-to-date.
|
|
||||||
if (!ver.IsNewVersion)
|
|
||||||
{
|
|
||||||
if (manually)
|
|
||||||
ShowSelfUpdateResult(new Models.AlreadyUpToDate());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Should not check ignored tag if this is called manually.
|
|
||||||
if (!manually)
|
|
||||||
{
|
|
||||||
var pref = ViewModels.Preference.Instance;
|
|
||||||
if (ver.TagName == pref.IgnoreUpdateTag)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ShowSelfUpdateResult(ver);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
if (manually)
|
|
||||||
ShowSelfUpdateResult(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void ShowSelfUpdateResult(object data)
|
|
||||||
{
|
|
||||||
Dispatcher.UIThread.Post(() =>
|
|
||||||
{
|
|
||||||
OpenDialog(new Views.SelfUpdate() { DataContext = new ViewModels.SelfUpdate() { Data = data } });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool TryLaunchedAsRebaseTodoEditor(string[] args, out int exitCode)
|
|
||||||
{
|
{
|
||||||
exitCode = -1;
|
exitCode = -1;
|
||||||
|
|
||||||
|
@ -471,7 +402,7 @@ namespace SourceGit
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool TryLaunchedAsRebaseMessageEditor(string[] args, out int exitCode)
|
private static bool TryLaunchAsRebaseMessageEditor(string[] args, out int exitCode)
|
||||||
{
|
{
|
||||||
exitCode = -1;
|
exitCode = -1;
|
||||||
|
|
||||||
|
@ -505,7 +436,7 @@ namespace SourceGit
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryLaunchedAsCoreEditor(IClassicDesktopStyleApplicationLifetime desktop)
|
private bool TryLaunchAsCoreEditor(IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
{
|
{
|
||||||
var args = desktop.Args;
|
var args = desktop.Args;
|
||||||
if (args == null || args.Length <= 1 || !args[0].Equals("--core-editor", StringComparison.Ordinal))
|
if (args == null || args.Length <= 1 || !args[0].Equals("--core-editor", StringComparison.Ordinal))
|
||||||
|
@ -520,7 +451,7 @@ namespace SourceGit
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryLaunchedAsAskpass(IClassicDesktopStyleApplicationLifetime desktop)
|
private bool TryLaunchAsAskpass(IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
{
|
{
|
||||||
var launchAsAskpass = Environment.GetEnvironmentVariable("SOURCEGIT_LAUNCH_AS_ASKPASS");
|
var launchAsAskpass = Environment.GetEnvironmentVariable("SOURCEGIT_LAUNCH_AS_ASKPASS");
|
||||||
if (launchAsAskpass is not "TRUE")
|
if (launchAsAskpass is not "TRUE")
|
||||||
|
@ -536,7 +467,7 @@ namespace SourceGit
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TryLaunchedAsNormal(IClassicDesktopStyleApplicationLifetime desktop)
|
private void TryLaunchAsNormal(IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
{
|
{
|
||||||
Native.OS.SetupEnternalTools();
|
Native.OS.SetupEnternalTools();
|
||||||
Models.AvatarManager.Instance.Start();
|
Models.AvatarManager.Instance.Start();
|
||||||
|
@ -548,11 +479,64 @@ namespace SourceGit
|
||||||
_launcher = new ViewModels.Launcher(startupRepo);
|
_launcher = new ViewModels.Launcher(startupRepo);
|
||||||
desktop.MainWindow = new Views.Launcher() { DataContext = _launcher };
|
desktop.MainWindow = new Views.Launcher() { DataContext = _launcher };
|
||||||
|
|
||||||
#if !DISABLE_UPDATE_DETECTION
|
#if !DISABLE_UPDATE_DETECTION
|
||||||
var pref = ViewModels.Preference.Instance;
|
var pref = ViewModels.Preferences.Instance;
|
||||||
if (pref.ShouldCheck4UpdateOnStartup())
|
if (pref.ShouldCheck4UpdateOnStartup())
|
||||||
Check4Update();
|
Check4Update();
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Check4Update(bool manually = false)
|
||||||
|
{
|
||||||
|
Task.Run(async () =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Fetch latest release information.
|
||||||
|
var client = new HttpClient() { Timeout = TimeSpan.FromSeconds(5) };
|
||||||
|
var data = await client.GetStringAsync("https://sourcegit-scm.github.io/data/version.json");
|
||||||
|
|
||||||
|
// Parse JSON into Models.Version.
|
||||||
|
var ver = JsonSerializer.Deserialize(data, JsonCodeGen.Default.Version);
|
||||||
|
if (ver == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Check if already up-to-date.
|
||||||
|
if (!ver.IsNewVersion)
|
||||||
|
{
|
||||||
|
if (manually)
|
||||||
|
ShowSelfUpdateResult(new Models.AlreadyUpToDate());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Should not check ignored tag if this is called manually.
|
||||||
|
if (!manually)
|
||||||
|
{
|
||||||
|
var pref = ViewModels.Preferences.Instance;
|
||||||
|
if (ver.TagName == pref.IgnoreUpdateTag)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowSelfUpdateResult(ver);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (manually)
|
||||||
|
ShowSelfUpdateResult(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowSelfUpdateResult(object data)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.Post(() =>
|
||||||
|
{
|
||||||
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime { MainWindow: { } owner })
|
||||||
|
{
|
||||||
|
var dialog = new Views.SelfUpdate() { DataContext = new ViewModels.SelfUpdate() { Data = data } };
|
||||||
|
dialog.ShowDialog(owner);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private ViewModels.Launcher _launcher = null;
|
private ViewModels.Launcher _launcher = null;
|
||||||
|
|
|
@ -27,5 +27,12 @@ namespace SourceGit.Commands
|
||||||
}
|
}
|
||||||
Args = builder.ToString();
|
Args = builder.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Add(string repo, string pathspecFromFile)
|
||||||
|
{
|
||||||
|
WorkingDirectory = repo;
|
||||||
|
Context = repo;
|
||||||
|
Args = $"add --pathspec-from-file=\"{pathspecFromFile}\"";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
24
src/Commands/IsBareRepository.cs
Normal file
24
src/Commands/IsBareRepository.cs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace SourceGit.Commands
|
||||||
|
{
|
||||||
|
public class IsBareRepository : Command
|
||||||
|
{
|
||||||
|
public IsBareRepository(string path)
|
||||||
|
{
|
||||||
|
WorkingDirectory = path;
|
||||||
|
Args = "rev-parse --is-bare-repository";
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Result()
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(Path.Combine(WorkingDirectory, "refs")) ||
|
||||||
|
!Directory.Exists(Path.Combine(WorkingDirectory, "objects")) ||
|
||||||
|
!File.Exists(Path.Combine(WorkingDirectory, "HEAD")))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var rs = ReadToEnd();
|
||||||
|
return rs.IsSuccess && rs.StdOut.Trim() == "true";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,7 @@ namespace SourceGit.Commands
|
||||||
|
|
||||||
Context = repo;
|
Context = repo;
|
||||||
WorkingDirectory = repo;
|
WorkingDirectory = repo;
|
||||||
Args = $"tag -l --sort=-creatordate --format=\"{_boundary}%(refname)%00%(objectname)%00%(*objectname)%00%(contents:subject)%0a%0a%(contents:body)\"";
|
Args = $"tag -l --format=\"{_boundary}%(refname)%00%(objectname)%00%(*objectname)%00%(creatordate:unix)%00%(contents:subject)%0a%0a%(contents:body)\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Models.Tag> Result()
|
public List<Models.Tag> Result()
|
||||||
|
@ -25,14 +25,15 @@ namespace SourceGit.Commands
|
||||||
foreach (var record in records)
|
foreach (var record in records)
|
||||||
{
|
{
|
||||||
var subs = record.Split('\0', StringSplitOptions.None);
|
var subs = record.Split('\0', StringSplitOptions.None);
|
||||||
if (subs.Length != 4)
|
if (subs.Length != 5)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var message = subs[3].Trim();
|
var message = subs[4].Trim();
|
||||||
tags.Add(new Models.Tag()
|
tags.Add(new Models.Tag()
|
||||||
{
|
{
|
||||||
Name = subs[0].Substring(10),
|
Name = subs[0].Substring(10),
|
||||||
SHA = string.IsNullOrEmpty(subs[2]) ? subs[1] : subs[2],
|
SHA = string.IsNullOrEmpty(subs[2]) ? subs[1] : subs[2],
|
||||||
|
CreatorDate = ulong.Parse(subs[3]),
|
||||||
Message = string.IsNullOrEmpty(message) ? null : message,
|
Message = string.IsNullOrEmpty(message) ? null : message,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,47 +17,48 @@ namespace SourceGit.Commands
|
||||||
return Exec();
|
return Exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Push(List<Models.Change> changes, string message, bool onlyStaged, bool keepIndex)
|
public bool Push(string message, List<Models.Change> changes, bool keepIndex)
|
||||||
{
|
{
|
||||||
var builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
builder.Append("stash push ");
|
builder.Append("stash push ");
|
||||||
if (onlyStaged)
|
|
||||||
builder.Append("--staged ");
|
|
||||||
if (keepIndex)
|
if (keepIndex)
|
||||||
builder.Append("--keep-index ");
|
builder.Append("--keep-index ");
|
||||||
builder.Append("-m \"");
|
builder.Append("-m \"");
|
||||||
builder.Append(message);
|
builder.Append(message);
|
||||||
builder.Append("\" -- ");
|
builder.Append("\" -- ");
|
||||||
|
|
||||||
if (onlyStaged)
|
foreach (var c in changes)
|
||||||
{
|
builder.Append($"\"{c.Path}\" ");
|
||||||
foreach (var c in changes)
|
|
||||||
builder.Append($"\"{c.Path}\" ");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var needAdd = new List<Models.Change>();
|
|
||||||
foreach (var c in changes)
|
|
||||||
{
|
|
||||||
builder.Append($"\"{c.Path}\" ");
|
|
||||||
|
|
||||||
if (c.WorkTree == Models.ChangeState.Added || c.WorkTree == Models.ChangeState.Untracked)
|
Args = builder.ToString();
|
||||||
{
|
return Exec();
|
||||||
needAdd.Add(c);
|
}
|
||||||
if (needAdd.Count > 10)
|
|
||||||
{
|
|
||||||
new Add(WorkingDirectory, needAdd).Exec();
|
|
||||||
needAdd.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (needAdd.Count > 0)
|
|
||||||
{
|
|
||||||
new Add(WorkingDirectory, needAdd).Exec();
|
|
||||||
needAdd.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public bool Push(string message, string pathspecFromFile, bool keepIndex)
|
||||||
|
{
|
||||||
|
var builder = new StringBuilder();
|
||||||
|
builder.Append("stash push --pathspec-from-file=\"");
|
||||||
|
builder.Append(pathspecFromFile);
|
||||||
|
builder.Append("\" ");
|
||||||
|
if (keepIndex)
|
||||||
|
builder.Append("--keep-index ");
|
||||||
|
builder.Append("-m \"");
|
||||||
|
builder.Append(message);
|
||||||
|
builder.Append("\"");
|
||||||
|
|
||||||
|
Args = builder.ToString();
|
||||||
|
return Exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool PushOnlyStaged(string message, bool keepIndex)
|
||||||
|
{
|
||||||
|
var builder = new StringBuilder();
|
||||||
|
builder.Append("stash push --staged ");
|
||||||
|
if (keepIndex)
|
||||||
|
builder.Append("--keep-index ");
|
||||||
|
builder.Append("-m \"");
|
||||||
|
builder.Append(message);
|
||||||
|
builder.Append("\"");
|
||||||
Args = builder.ToString();
|
Args = builder.ToString();
|
||||||
return Exec();
|
return Exec();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
namespace SourceGit.Commands
|
|
||||||
{
|
|
||||||
public class Version : Command
|
|
||||||
{
|
|
||||||
public Version()
|
|
||||||
{
|
|
||||||
Args = "--version";
|
|
||||||
RaiseError = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Query()
|
|
||||||
{
|
|
||||||
var rs = ReadToEnd();
|
|
||||||
if (!rs.IsSuccess || string.IsNullOrWhiteSpace(rs.StdOut))
|
|
||||||
return string.Empty;
|
|
||||||
return rs.StdOut.Trim().Substring("git version ".Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,10 +23,10 @@ namespace SourceGit.Converters
|
||||||
new FuncValueConverter<int, bool>(v => v != 1);
|
new FuncValueConverter<int, bool>(v => v != 1);
|
||||||
|
|
||||||
public static readonly FuncValueConverter<int, bool> IsSubjectLengthBad =
|
public static readonly FuncValueConverter<int, bool> IsSubjectLengthBad =
|
||||||
new FuncValueConverter<int, bool>(v => v > ViewModels.Preference.Instance.SubjectGuideLength);
|
new FuncValueConverter<int, bool>(v => v > ViewModels.Preferences.Instance.SubjectGuideLength);
|
||||||
|
|
||||||
public static readonly FuncValueConverter<int, bool> IsSubjectLengthGood =
|
public static readonly FuncValueConverter<int, bool> IsSubjectLengthGood =
|
||||||
new FuncValueConverter<int, bool>(v => v <= ViewModels.Preference.Instance.SubjectGuideLength);
|
new FuncValueConverter<int, bool>(v => v <= ViewModels.Preferences.Instance.SubjectGuideLength);
|
||||||
|
|
||||||
public static readonly FuncValueConverter<int, Thickness> ToTreeMargin =
|
public static readonly FuncValueConverter<int, Thickness> ToTreeMargin =
|
||||||
new FuncValueConverter<int, Thickness>(v => new Thickness(v * 16, 0, 0, 0));
|
new FuncValueConverter<int, Thickness>(v => new Thickness(v * 16, 0, 0, 0));
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
|
|
||||||
using Avalonia.Data.Converters;
|
using Avalonia.Data.Converters;
|
||||||
using Avalonia.Styling;
|
using Avalonia.Styling;
|
||||||
|
|
||||||
namespace SourceGit.Converters
|
namespace SourceGit.Converters
|
||||||
{
|
{
|
||||||
public static partial class StringConverters
|
public static class StringConverters
|
||||||
{
|
{
|
||||||
public class ToLocaleConverter : IValueConverter
|
public class ToLocaleConverter : IValueConverter
|
||||||
{
|
{
|
||||||
|
@ -68,22 +67,6 @@ namespace SourceGit.Converters
|
||||||
public static readonly FuncValueConverter<string, string> ToShortSHA =
|
public static readonly FuncValueConverter<string, string> ToShortSHA =
|
||||||
new FuncValueConverter<string, string>(v => v == null ? string.Empty : (v.Length > 10 ? v.Substring(0, 10) : v));
|
new FuncValueConverter<string, string>(v => v == null ? string.Empty : (v.Length > 10 ? v.Substring(0, 10) : v));
|
||||||
|
|
||||||
public static readonly FuncValueConverter<string, bool> UnderRecommendGitVersion =
|
|
||||||
new(v =>
|
|
||||||
{
|
|
||||||
var match = REG_GIT_VERSION().Match(v ?? "");
|
|
||||||
if (match.Success)
|
|
||||||
{
|
|
||||||
var major = int.Parse(match.Groups[1].Value);
|
|
||||||
var minor = int.Parse(match.Groups[2].Value);
|
|
||||||
var build = int.Parse(match.Groups[3].Value);
|
|
||||||
|
|
||||||
return new Version(major, minor, build) < MINIMAL_GIT_VERSION;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
public static readonly FuncValueConverter<string, string> TrimRefsPrefix =
|
public static readonly FuncValueConverter<string, string> TrimRefsPrefix =
|
||||||
new FuncValueConverter<string, string>(v =>
|
new FuncValueConverter<string, string>(v =>
|
||||||
{
|
{
|
||||||
|
@ -95,10 +78,5 @@ namespace SourceGit.Converters
|
||||||
return v.Substring(13);
|
return v.Substring(13);
|
||||||
return v;
|
return v;
|
||||||
});
|
});
|
||||||
|
|
||||||
[GeneratedRegex(@"^[\s\w]*(\d+)\.(\d+)[\.\-](\d+).*$")]
|
|
||||||
private static partial Regex REG_GIT_VERSION();
|
|
||||||
|
|
||||||
private static readonly Version MINIMAL_GIT_VERSION = new Version(2, 23, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,10 +25,11 @@ namespace SourceGit.Models
|
||||||
s_penCount = colors.Count;
|
s_penCount = colors.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Path(int color)
|
public class Path(int color, bool isMerged)
|
||||||
{
|
{
|
||||||
public List<Point> Points { get; } = [];
|
public List<Point> Points { get; } = [];
|
||||||
public int Color { get; } = color;
|
public int Color { get; } = color;
|
||||||
|
public bool IsMerged { get; } = isMerged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Link
|
public class Link
|
||||||
|
@ -37,6 +38,7 @@ namespace SourceGit.Models
|
||||||
public Point Control;
|
public Point Control;
|
||||||
public Point End;
|
public Point End;
|
||||||
public int Color;
|
public int Color;
|
||||||
|
public bool IsMerged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum DotType
|
public enum DotType
|
||||||
|
@ -51,6 +53,7 @@ namespace SourceGit.Models
|
||||||
public DotType Type;
|
public DotType Type;
|
||||||
public Point Center;
|
public Point Center;
|
||||||
public int Color;
|
public int Color;
|
||||||
|
public bool IsMerged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Path> Paths { get; } = [];
|
public List<Path> Paths { get; } = [];
|
||||||
|
@ -68,7 +71,7 @@ namespace SourceGit.Models
|
||||||
var unsolved = new List<PathHelper>();
|
var unsolved = new List<PathHelper>();
|
||||||
var ended = new List<PathHelper>();
|
var ended = new List<PathHelper>();
|
||||||
var offsetY = -halfHeight;
|
var offsetY = -halfHeight;
|
||||||
var colorIdx = 0;
|
var colorPicker = new ColorPicker();
|
||||||
|
|
||||||
foreach (var commit in commits)
|
foreach (var commit in commits)
|
||||||
{
|
{
|
||||||
|
@ -108,7 +111,6 @@ namespace SourceGit.Models
|
||||||
}
|
}
|
||||||
|
|
||||||
isMerged = isMerged || l.IsMerged;
|
isMerged = isMerged || l.IsMerged;
|
||||||
major.IsMerged = isMerged;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -119,28 +121,35 @@ namespace SourceGit.Models
|
||||||
|
|
||||||
// Remove ended curves from unsolved
|
// Remove ended curves from unsolved
|
||||||
foreach (var l in ended)
|
foreach (var l in ended)
|
||||||
|
{
|
||||||
|
colorPicker.Recycle(l.Path.Color);
|
||||||
unsolved.Remove(l);
|
unsolved.Remove(l);
|
||||||
|
}
|
||||||
ended.Clear();
|
ended.Clear();
|
||||||
|
|
||||||
// Create new curve for branch head
|
// If no path found, create new curve for branch head
|
||||||
|
// Otherwise, create new curve for new merged commit
|
||||||
if (major == null)
|
if (major == null)
|
||||||
{
|
{
|
||||||
offsetX += unitWidth;
|
offsetX += unitWidth;
|
||||||
|
|
||||||
if (commit.Parents.Count > 0)
|
if (commit.Parents.Count > 0)
|
||||||
{
|
{
|
||||||
major = new PathHelper(commit.Parents[0], isMerged, colorIdx, new Point(offsetX, offsetY));
|
major = new PathHelper(commit.Parents[0], isMerged, colorPicker.Next(), new Point(offsetX, offsetY));
|
||||||
unsolved.Add(major);
|
unsolved.Add(major);
|
||||||
temp.Paths.Add(major.Path);
|
temp.Paths.Add(major.Path);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
colorIdx = (colorIdx + 1) % s_penCount;
|
else if (isMerged && !major.IsMerged && commit.Parents.Count > 0)
|
||||||
|
{
|
||||||
|
major.ReplaceMerged();
|
||||||
|
temp.Paths.Add(major.Path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate link position of this commit.
|
// Calculate link position of this commit.
|
||||||
var position = new Point(major?.LastX ?? offsetX, offsetY);
|
var position = new Point(major?.LastX ?? offsetX, offsetY);
|
||||||
var dotColor = major?.Path.Color ?? 0;
|
var dotColor = major?.Path.Color ?? 0;
|
||||||
var anchor = new Dot() { Center = position, Color = dotColor };
|
var anchor = new Dot() { Center = position, Color = dotColor, IsMerged = isMerged };
|
||||||
if (commit.IsCurrentHead)
|
if (commit.IsCurrentHead)
|
||||||
anchor.Type = DotType.Head;
|
anchor.Type = DotType.Head;
|
||||||
else if (commit.Parents.Count > 1)
|
else if (commit.Parents.Count > 1)
|
||||||
|
@ -158,16 +167,20 @@ namespace SourceGit.Models
|
||||||
var parent = unsolved.Find(x => x.Next.Equals(parentHash, StringComparison.Ordinal));
|
var parent = unsolved.Find(x => x.Next.Equals(parentHash, StringComparison.Ordinal));
|
||||||
if (parent != null)
|
if (parent != null)
|
||||||
{
|
{
|
||||||
// Try to change the merge state of linked graph
|
if (isMerged && !parent.IsMerged)
|
||||||
if (isMerged)
|
{
|
||||||
parent.IsMerged = true;
|
parent.Goto(parent.LastX, offsetY + halfHeight, halfHeight);
|
||||||
|
parent.ReplaceMerged();
|
||||||
|
temp.Paths.Add(parent.Path);
|
||||||
|
}
|
||||||
|
|
||||||
temp.Links.Add(new Link
|
temp.Links.Add(new Link
|
||||||
{
|
{
|
||||||
Start = position,
|
Start = position,
|
||||||
End = new Point(parent.LastX, offsetY + halfHeight),
|
End = new Point(parent.LastX, offsetY + halfHeight),
|
||||||
Control = new Point(parent.LastX, position.Y),
|
Control = new Point(parent.LastX, position.Y),
|
||||||
Color = parent.Path.Color
|
Color = parent.Path.Color,
|
||||||
|
IsMerged = isMerged,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -175,10 +188,9 @@ namespace SourceGit.Models
|
||||||
offsetX += unitWidth;
|
offsetX += unitWidth;
|
||||||
|
|
||||||
// Create new curve for parent commit that not includes before
|
// Create new curve for parent commit that not includes before
|
||||||
var l = new PathHelper(parentHash, isMerged, colorIdx, position, new Point(offsetX, position.Y + halfHeight));
|
var l = new PathHelper(parentHash, isMerged, colorPicker.Next(), position, new Point(offsetX, position.Y + halfHeight));
|
||||||
unsolved.Add(l);
|
unsolved.Add(l);
|
||||||
temp.Paths.Add(l.Path);
|
temp.Paths.Add(l.Path);
|
||||||
colorIdx = (colorIdx + 1) % s_penCount;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -205,32 +217,53 @@ namespace SourceGit.Models
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ColorPicker
|
||||||
|
{
|
||||||
|
public int Next()
|
||||||
|
{
|
||||||
|
if (_colorsQueue.Count == 0)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < s_penCount; i++)
|
||||||
|
_colorsQueue.Enqueue(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return _colorsQueue.Dequeue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Recycle(int idx)
|
||||||
|
{
|
||||||
|
if (!_colorsQueue.Contains(idx))
|
||||||
|
_colorsQueue.Enqueue(idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Queue<int> _colorsQueue = new Queue<int>();
|
||||||
|
}
|
||||||
|
|
||||||
private class PathHelper
|
private class PathHelper
|
||||||
{
|
{
|
||||||
public Path Path { get; }
|
public Path Path { get; private set; }
|
||||||
public string Next { get; set; }
|
public string Next { get; set; }
|
||||||
public bool IsMerged { get; set; }
|
|
||||||
public double LastX { get; private set; }
|
public double LastX { get; private set; }
|
||||||
|
|
||||||
|
public bool IsMerged => Path.IsMerged;
|
||||||
|
|
||||||
public PathHelper(string next, bool isMerged, int color, Point start)
|
public PathHelper(string next, bool isMerged, int color, Point start)
|
||||||
{
|
{
|
||||||
Next = next;
|
Next = next;
|
||||||
IsMerged = isMerged;
|
|
||||||
LastX = start.X;
|
LastX = start.X;
|
||||||
_lastY = start.Y;
|
_lastY = start.Y;
|
||||||
|
|
||||||
Path = new Path(color);
|
Path = new Path(color, isMerged);
|
||||||
Path.Points.Add(start);
|
Path.Points.Add(start);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PathHelper(string next, bool isMerged, int color, Point start, Point to)
|
public PathHelper(string next, bool isMerged, int color, Point start, Point to)
|
||||||
{
|
{
|
||||||
Next = next;
|
Next = next;
|
||||||
IsMerged = isMerged;
|
|
||||||
LastX = to.X;
|
LastX = to.X;
|
||||||
_lastY = to.Y;
|
_lastY = to.Y;
|
||||||
|
|
||||||
Path = new Path(color);
|
Path = new Path(color, isMerged);
|
||||||
Path.Points.Add(start);
|
Path.Points.Add(start);
|
||||||
Path.Points.Add(to);
|
Path.Points.Add(to);
|
||||||
}
|
}
|
||||||
|
@ -310,6 +343,19 @@ namespace SourceGit.Models
|
||||||
_lastY = y;
|
_lastY = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// End the current path and create a new from the end.
|
||||||
|
/// </summary>
|
||||||
|
public void ReplaceMerged()
|
||||||
|
{
|
||||||
|
var color = Path.Color;
|
||||||
|
Add(LastX, _lastY);
|
||||||
|
|
||||||
|
Path = new Path(color, true);
|
||||||
|
Path.Points.Add(new Point(LastX, _lastY));
|
||||||
|
_endY = 0;
|
||||||
|
}
|
||||||
|
|
||||||
private void Add(double x, double y)
|
private void Add(double x, double y)
|
||||||
{
|
{
|
||||||
if (_endY < y)
|
if (_endY < y)
|
||||||
|
@ -327,7 +373,6 @@ namespace SourceGit.Models
|
||||||
private static readonly List<Color> s_defaultPenColors = [
|
private static readonly List<Color> s_defaultPenColors = [
|
||||||
Colors.Orange,
|
Colors.Orange,
|
||||||
Colors.ForestGreen,
|
Colors.ForestGreen,
|
||||||
Colors.Gray,
|
|
||||||
Colors.Turquoise,
|
Colors.Turquoise,
|
||||||
Colors.Olive,
|
Colors.Olive,
|
||||||
Colors.Magenta,
|
Colors.Magenta,
|
||||||
|
|
25
src/Models/GitVersions.cs
Normal file
25
src/Models/GitVersions.cs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
namespace SourceGit.Models
|
||||||
|
{
|
||||||
|
public static class GitVersions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The minimal version of Git that required by this app.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly System.Version MINIMAL = new System.Version(2, 23, 0);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The minimal version of Git that supports the `add` command with the `--pathspec-from-file` option.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly System.Version ADD_WITH_PATHSPECFILE = new System.Version(2, 25, 0);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The minimal version of Git that supports the `stash` command with the `--pathspec-from-file` option.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly System.Version STASH_WITH_PATHSPECFILE = new System.Version(2, 26, 0);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The minimal version of Git that supports the `stash` command with the `--staged` option.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly System.Version STASH_ONLY_STAGED = new System.Version(2, 35, 0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,6 +32,18 @@ namespace SourceGit.Models
|
||||||
set;
|
set;
|
||||||
} = false;
|
} = false;
|
||||||
|
|
||||||
|
public bool OnlyHighlighCurrentBranchInHistories
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
|
public TagSortMode TagSortMode
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = TagSortMode.CreatorDate;
|
||||||
|
|
||||||
public bool IncludeUntrackedInLocalChanges
|
public bool IncludeUntrackedInLocalChanges
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
|
@ -444,65 +456,13 @@ namespace SourceGit.Models
|
||||||
CommitMessages.Insert(0, message);
|
CommitMessages.Insert(0, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IssueTrackerRule AddNewIssueTracker()
|
public IssueTrackerRule AddIssueTracker(string name, string regex, string url)
|
||||||
{
|
{
|
||||||
var rule = new IssueTrackerRule()
|
var rule = new IssueTrackerRule()
|
||||||
{
|
{
|
||||||
Name = "New Issue Tracker",
|
Name = name,
|
||||||
RegexString = "#(\\d+)",
|
RegexString = regex,
|
||||||
URLTemplate = "https://xxx/$1",
|
URLTemplate = url,
|
||||||
};
|
|
||||||
|
|
||||||
IssueTrackerRules.Add(rule);
|
|
||||||
return rule;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IssueTrackerRule AddGithubIssueTracker(string repoURL)
|
|
||||||
{
|
|
||||||
var rule = new IssueTrackerRule()
|
|
||||||
{
|
|
||||||
Name = "Github ISSUE",
|
|
||||||
RegexString = "#(\\d+)",
|
|
||||||
URLTemplate = string.IsNullOrEmpty(repoURL) ? "https://github.com/username/repository/issues/$1" : $"{repoURL}/issues/$1",
|
|
||||||
};
|
|
||||||
|
|
||||||
IssueTrackerRules.Add(rule);
|
|
||||||
return rule;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IssueTrackerRule AddJiraIssueTracker()
|
|
||||||
{
|
|
||||||
var rule = new IssueTrackerRule()
|
|
||||||
{
|
|
||||||
Name = "Jira Tracker",
|
|
||||||
RegexString = "PROJ-(\\d+)",
|
|
||||||
URLTemplate = "https://jira.yourcompany.com/browse/PROJ-$1",
|
|
||||||
};
|
|
||||||
|
|
||||||
IssueTrackerRules.Add(rule);
|
|
||||||
return rule;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IssueTrackerRule AddGitLabIssueTracker(string repoURL)
|
|
||||||
{
|
|
||||||
var rule = new IssueTrackerRule()
|
|
||||||
{
|
|
||||||
Name = "GitLab ISSUE",
|
|
||||||
RegexString = "#(\\d+)",
|
|
||||||
URLTemplate = string.IsNullOrEmpty(repoURL) ? "https://gitlab.com/username/repository/-/issues/$1" : $"{repoURL}/-/issues/$1",
|
|
||||||
};
|
|
||||||
|
|
||||||
IssueTrackerRules.Add(rule);
|
|
||||||
return rule;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IssueTrackerRule AddGitLabMergeRequestTracker(string repoURL)
|
|
||||||
{
|
|
||||||
var rule = new IssueTrackerRule()
|
|
||||||
{
|
|
||||||
Name = "GitLab MR",
|
|
||||||
RegexString = "!(\\d+)",
|
|
||||||
URLTemplate = string.IsNullOrEmpty(repoURL) ? "https://gitlab.com/username/repository/-/merge_requests/$1" : $"{repoURL}/-/merge_requests/$1",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IssueTrackerRules.Add(rule);
|
IssueTrackerRules.Add(rule);
|
||||||
|
|
|
@ -2,10 +2,18 @@
|
||||||
|
|
||||||
namespace SourceGit.Models
|
namespace SourceGit.Models
|
||||||
{
|
{
|
||||||
|
public enum TagSortMode
|
||||||
|
{
|
||||||
|
CreatorDate = 0,
|
||||||
|
NameInAscending,
|
||||||
|
NameInDescending,
|
||||||
|
}
|
||||||
|
|
||||||
public class Tag : ObservableObject
|
public class Tag : ObservableObject
|
||||||
{
|
{
|
||||||
public string Name { get; set; } = string.Empty;
|
public string Name { get; set; } = string.Empty;
|
||||||
public string SHA { get; set; } = string.Empty;
|
public string SHA { get; set; } = string.Empty;
|
||||||
|
public ulong CreatorDate { get; set; } = 0;
|
||||||
public string Message { get; set; } = string.Empty;
|
public string Message { get; set; } = string.Empty;
|
||||||
|
|
||||||
public FilterMode FilterMode
|
public FilterMode FilterMode
|
||||||
|
|
|
@ -174,7 +174,7 @@ namespace SourceGit.Models
|
||||||
{
|
{
|
||||||
_updateBranch = DateTime.Now.AddSeconds(.5).ToFileTime();
|
_updateBranch = DateTime.Now.AddSeconds(.5).ToFileTime();
|
||||||
|
|
||||||
lock (_submodules)
|
lock (_lockSubmodule)
|
||||||
{
|
{
|
||||||
if (_submodules.Count > 0)
|
if (_submodules.Count > 0)
|
||||||
_updateSubmodules = DateTime.Now.AddSeconds(1).ToFileTime();
|
_updateSubmodules = DateTime.Now.AddSeconds(1).ToFileTime();
|
||||||
|
@ -195,7 +195,7 @@ namespace SourceGit.Models
|
||||||
if (name == ".git" || name.StartsWith(".git/", StringComparison.Ordinal))
|
if (name == ".git" || name.StartsWith(".git/", StringComparison.Ordinal))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
lock (_submodules)
|
lock (_lockSubmodule)
|
||||||
{
|
{
|
||||||
foreach (var submodule in _submodules)
|
foreach (var submodule in _submodules)
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,10 +26,11 @@ namespace SourceGit.Native
|
||||||
public string FindGitExecutable()
|
public string FindGitExecutable()
|
||||||
{
|
{
|
||||||
var gitPathVariants = new List<string>() {
|
var gitPathVariants = new List<string>() {
|
||||||
"/usr/bin/git", "/usr/local/bin/git", "/opt/homebrew/bin/git", "/opt/homebrew/opt/git/bin/git"
|
"/usr/bin/git", "/usr/local/bin/git", "/opt/homebrew/bin/git", "/opt/homebrew/opt/git/bin/git"
|
||||||
};
|
};
|
||||||
foreach (var path in gitPathVariants)
|
foreach (var path in gitPathVariants)
|
||||||
if (File.Exists(path)) return path;
|
if (File.Exists(path))
|
||||||
|
return path;
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
107
src/Native/OS.cs
107
src/Native/OS.cs
|
@ -2,12 +2,14 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
|
|
||||||
namespace SourceGit.Native
|
namespace SourceGit.Native
|
||||||
{
|
{
|
||||||
public static class OS
|
public static partial class OS
|
||||||
{
|
{
|
||||||
public interface IBackend
|
public interface IBackend
|
||||||
{
|
{
|
||||||
|
@ -23,11 +25,51 @@ namespace SourceGit.Native
|
||||||
void OpenWithDefaultEditor(string file);
|
void OpenWithDefaultEditor(string file);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string DataDir { get; private set; } = string.Empty;
|
public static string DataDir {
|
||||||
public static string GitExecutable { get; set; } = string.Empty;
|
get;
|
||||||
public static string ShellOrTerminal { get; set; } = string.Empty;
|
private set;
|
||||||
public static List<Models.ExternalTool> ExternalTools { get; set; } = [];
|
} = string.Empty;
|
||||||
public static string CustomPathEnv { get; set; } = string.Empty;
|
|
||||||
|
public static string CustomPathEnv
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = string.Empty;
|
||||||
|
|
||||||
|
public static string GitExecutable
|
||||||
|
{
|
||||||
|
get => _gitExecutable;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_gitExecutable != value)
|
||||||
|
{
|
||||||
|
_gitExecutable = value;
|
||||||
|
UpdateGitVersion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GitVersionString
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
} = string.Empty;
|
||||||
|
|
||||||
|
public static Version GitVersion
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
} = new Version(0, 0, 0);
|
||||||
|
|
||||||
|
public static string ShellOrTerminal {
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = string.Empty;
|
||||||
|
|
||||||
|
public static List<Models.ExternalTool> ExternalTools {
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = [];
|
||||||
|
|
||||||
static OS()
|
static OS()
|
||||||
{
|
{
|
||||||
|
@ -123,6 +165,59 @@ namespace SourceGit.Native
|
||||||
_backend.OpenWithDefaultEditor(file);
|
_backend.OpenWithDefaultEditor(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void UpdateGitVersion()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(_gitExecutable) || !File.Exists(_gitExecutable))
|
||||||
|
{
|
||||||
|
GitVersionString = string.Empty;
|
||||||
|
GitVersion = new Version(0, 0, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var start = new ProcessStartInfo();
|
||||||
|
start.FileName = _gitExecutable;
|
||||||
|
start.Arguments = "--version";
|
||||||
|
start.UseShellExecute = false;
|
||||||
|
start.CreateNoWindow = true;
|
||||||
|
start.RedirectStandardOutput = true;
|
||||||
|
start.RedirectStandardError = true;
|
||||||
|
start.StandardOutputEncoding = Encoding.UTF8;
|
||||||
|
start.StandardErrorEncoding = Encoding.UTF8;
|
||||||
|
|
||||||
|
var proc = new Process() { StartInfo = start };
|
||||||
|
try
|
||||||
|
{
|
||||||
|
proc.Start();
|
||||||
|
|
||||||
|
var rs = proc.StandardOutput.ReadToEnd();
|
||||||
|
proc.WaitForExit();
|
||||||
|
if (proc.ExitCode == 0 && !string.IsNullOrWhiteSpace(rs))
|
||||||
|
{
|
||||||
|
GitVersionString = rs.Trim();
|
||||||
|
|
||||||
|
var match = REG_GIT_VERSION().Match(GitVersionString);
|
||||||
|
if (match.Success)
|
||||||
|
{
|
||||||
|
var major = int.Parse(match.Groups[1].Value);
|
||||||
|
var minor = int.Parse(match.Groups[2].Value);
|
||||||
|
var build = int.Parse(match.Groups[3].Value);
|
||||||
|
GitVersion = new Version(major, minor, build);
|
||||||
|
GitVersionString = GitVersionString.Substring(11).Trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Ignore errors
|
||||||
|
}
|
||||||
|
|
||||||
|
proc.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
[GeneratedRegex(@"^git version[\s\w]*(\d+)\.(\d+)[\.\-](\d+).*$")]
|
||||||
|
private static partial Regex REG_GIT_VERSION();
|
||||||
|
|
||||||
private static IBackend _backend = null;
|
private static IBackend _backend = null;
|
||||||
|
private static string _gitExecutable = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,9 +26,21 @@ namespace SourceGit.Native
|
||||||
internal string szCSDVersion;
|
internal string szCSDVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport("ntdll")]
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
internal struct MARGINS
|
||||||
|
{
|
||||||
|
public int cxLeftWidth;
|
||||||
|
public int cxRightWidth;
|
||||||
|
public int cyTopHeight;
|
||||||
|
public int cyBottomHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("ntdll.dll")]
|
||||||
private static extern int RtlGetVersion(ref RTL_OSVERSIONINFOEX lpVersionInformation);
|
private static extern int RtlGetVersion(ref RTL_OSVERSIONINFOEX lpVersionInformation);
|
||||||
|
|
||||||
|
[DllImport("dwmapi.dll")]
|
||||||
|
private static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);
|
||||||
|
|
||||||
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, SetLastError = false)]
|
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, SetLastError = false)]
|
||||||
private static extern bool PathFindOnPath([In, Out] StringBuilder pszFile, [In] string[] ppszOtherDirs);
|
private static extern bool PathFindOnPath([In, Out] StringBuilder pszFile, [In] string[] ppszOtherDirs);
|
||||||
|
|
||||||
|
@ -202,10 +214,12 @@ namespace SourceGit.Native
|
||||||
|
|
||||||
private void FixWindowFrameOnWin10(Window w)
|
private void FixWindowFrameOnWin10(Window w)
|
||||||
{
|
{
|
||||||
if (w.WindowState == WindowState.Maximized || w.WindowState == WindowState.FullScreen)
|
var platformHandle = w.TryGetPlatformHandle();
|
||||||
w.SystemDecorations = SystemDecorations.Full;
|
if (platformHandle == null)
|
||||||
else if (w.WindowState == WindowState.Normal)
|
return;
|
||||||
w.SystemDecorations = SystemDecorations.BorderOnly;
|
|
||||||
|
var margins = new MARGINS { cxLeftWidth = 1, cxRightWidth = 1, cyTopHeight = 1, cyBottomHeight = 1 };
|
||||||
|
DwmExtendFrameIntoClientArea(platformHandle.Handle, ref margins);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region EXTERNAL_EDITOR_FINDER
|
#region EXTERNAL_EDITOR_FINDER
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
<StreamGeometry x:Key="Icons.Bookmark">M832 64H192c-18 0-32 14-32 32v832c0 18 14 32 32 32h640c18 0 32-14 32-32V96c0-18-14-32-32-32zM736 596 624 502 506 596V131h230v318z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Bookmark">M832 64H192c-18 0-32 14-32 32v832c0 18 14 32 32 32h640c18 0 32-14 32-32V96c0-18-14-32-32-32zM736 596 624 502 506 596V131h230v318z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Branch">M757 226a143 143 0 00-55 276 96 96 0 01-88 59h-191a187 187 0 00-96 27V312a143 143 0 10-96 0v399a143 143 0 10103 2 96 96 0 0188-59h191a191 191 0 00187-151 143 143 0 00-43-279zM280 130a48 48 0 110 96 48 48 0 010-96zm0 764a48 48 0 110-96 48 48 0 010 96zM757 417a48 48 0 110-96 48 48 0 010 96z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Branch">M757 226a143 143 0 00-55 276 96 96 0 01-88 59h-191a187 187 0 00-96 27V312a143 143 0 10-96 0v399a143 143 0 10103 2 96 96 0 0188-59h191a191 191 0 00187-151 143 143 0 00-43-279zM280 130a48 48 0 110 96 48 48 0 010-96zm0 764a48 48 0 110-96 48 48 0 010 96zM757 417a48 48 0 110-96 48 48 0 010 96z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Branch.Add">M896 128h-64V64c0-35-29-64-64-64s-64 29-64 64v64h-64c-35 0-64 29-64 64s29 64 64 64h64v64c0 35 29 64 64 64s64-29 64-64V256h64c35 0 64-29 64-64s-29-64-64-64zm-204 307C673 481 628 512 576 512H448c-47 0-90 13-128 35V372C394 346 448 275 448 192c0-106-86-192-192-192S64 86 64 192c0 83 54 154 128 180v280c-74 26-128 97-128 180c0 106 86 192 192 192s192-86 192-192c0-67-34-125-84-159c22-20 52-33 84-33h128c122 0 223-85 249-199c-19 4-37 7-57 7c-26 0-51-5-76-13zM256 128c35 0 64 29 64 64s-29 64-64 64s-64-29-64-64s29-64 64-64zm0 768c-35 0-64-29-64-64s29-64 64-64s64 29 64 64s-29 64-64 64z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Branch.Add">M896 128h-64V64c0-35-29-64-64-64s-64 29-64 64v64h-64c-35 0-64 29-64 64s29 64 64 64h64v64c0 35 29 64 64 64s64-29 64-64V256h64c35 0 64-29 64-64s-29-64-64-64zm-204 307C673 481 628 512 576 512H448c-47 0-90 13-128 35V372C394 346 448 275 448 192c0-106-86-192-192-192S64 86 64 192c0 83 54 154 128 180v280c-74 26-128 97-128 180c0 106 86 192 192 192s192-86 192-192c0-67-34-125-84-159c22-20 52-33 84-33h128c122 0 223-85 249-199c-19 4-37 7-57 7c-26 0-51-5-76-13zM256 128c35 0 64 29 64 64s-29 64-64 64s-64-29-64-64s29-64 64-64zm0 768c-35 0-64-29-64-64s29-64 64-64s64 29 64 64s-29 64-64 64z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Calender">M378 116l265 0 0 47-265 0 0-47ZM888 116 748 116l0 47 124 0c18 0 33 15 33 33l0 93L115 290l0-93c0-18 15-33 33-33l124 0 0-47L132 116c-35 0-64 29-64 64l0 714c0 35 29 64 64 64l757 0c35 0 64-29 64-64l-0-714C952 145 924 116 888 116zM905 337l0 540c0 18-15 33-33 33L148 910c-18 0-33-15-33-33L115 337 905 337zM301 65l47 0 0 170-47 0 0-170ZM673 65l47 0 0 170-47 0 0-170ZM358 548l0 231 53 0L411 459l-35 0-3 4c-18 26-41 49-70 68l-4 3 0 54 13-8C331 569 346 559 358 548zM618 727c-10 6-24 8-42 5-16-3-28-18-35-46l-2-9-48 13 2 8c6 30 18 52 36 65 17 13 36 20 55 21 3 0 7 0 10 0 15 0 28-2 40-7 14-6 27-13 37-23 10-10 18-22 23-37 5-14 8-28 8-42 1-14-1-27-4-39l-0-0c-3-12-8-24-15-36-7-13-19-23-35-30-15-7-31-11-47-11-11-0-23 1-36 5 4-15 8-32 11-52l114 0 0-49L536 464l-1 7c-25 116-32 145-33 150l-3 10 46 5 3-4c8-11 18-18 31-21 13-3 25-3 35-0 10 3 18 9 24 18 7 9 10 20 11 34 1 14-2 26-6 37C636 711 629 720 618 727z</StreamGeometry>
|
|
||||||
<StreamGeometry x:Key="Icons.Check">M512 597m-1 0a1 1 0 103 0a1 1 0 10-3 0ZM810 393 732 315 448 600 293 444 214 522l156 156 78 78 362-362z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Check">M512 597m-1 0a1 1 0 103 0a1 1 0 10-3 0ZM810 393 732 315 448 600 293 444 214 522l156 156 78 78 362-362z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Changes">M747 467c29 0 56 4 82 12v-363c0-47-38-84-84-84H125c-47 0-84 38-84 84v707c0 47 38 84 84 84h375a287 287 0 01-43-152c0-160 129-289 289-289zm-531-250h438c19 0 34 15 34 34s-15 34-34 34H216c-19 0-34-15-34-34s15-34 34-34zm0 179h263c19 0 34 15 34 34s-15 34-34 34H216c-19 0-34-15-34-34s15-34 34-34zm131 247h-131c-19 0-34-15-34-34s15-34 34-34h131c19 0 34 15 34 34s-15 34-34 34zM747 521c-130 0-236 106-236 236S617 992 747 992s236-106 236-236S877 521 747 521zm11 386v-65h-130c-12 0-22-10-22-22s10-22 22-22h260l-130 108zm108-192H606l130-108v65h130c12 0 22 10 22 22s-10 22-22 22z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Changes">M747 467c29 0 56 4 82 12v-363c0-47-38-84-84-84H125c-47 0-84 38-84 84v707c0 47 38 84 84 84h375a287 287 0 01-43-152c0-160 129-289 289-289zm-531-250h438c19 0 34 15 34 34s-15 34-34 34H216c-19 0-34-15-34-34s15-34 34-34zm0 179h263c19 0 34 15 34 34s-15 34-34 34H216c-19 0-34-15-34-34s15-34 34-34zm131 247h-131c-19 0-34-15-34-34s15-34 34-34h131c19 0 34 15 34 34s-15 34-34 34zM747 521c-130 0-236 106-236 236S617 992 747 992s236-106 236-236S877 521 747 521zm11 386v-65h-130c-12 0-22-10-22-22s10-22 22-22h260l-130 108zm108-192H606l130-108v65h130c12 0 22 10 22 22s-10 22-22 22z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.CherryPick">M529 511c115 0 212 79 239 185h224a62 62 0 017 123l-7 0-224 0a247 247 0 01-479 0H65a62 62 0 01-7-123l7-0h224a247 247 0 01239-185zm0 124a124 124 0 100 247 124 124 0 000-247zm0-618c32 0 58 24 61 55l0 7V206c89 11 165 45 225 103a74 74 0 0122 45l0 9v87a62 62 0 01-123 7l-0-7v-65l-6-4c-43-33-97-51-163-53l-17-0c-74 0-133 18-180 54l-6 4v65a62 62 0 01-55 61l-7 0a62 62 0 01-61-55l-0-7V362c0-20 8-39 23-53 60-58 135-92 224-103V79c0-34 28-62 62-62z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.CherryPick">M529 511c115 0 212 79 239 185h224a62 62 0 017 123l-7 0-224 0a247 247 0 01-479 0H65a62 62 0 01-7-123l7-0h224a247 247 0 01239-185zm0 124a124 124 0 100 247 124 124 0 000-247zm0-618c32 0 58 24 61 55l0 7V206c89 11 165 45 225 103a74 74 0 0122 45l0 9v87a62 62 0 01-123 7l-0-7v-65l-6-4c-43-33-97-51-163-53l-17-0c-74 0-133 18-180 54l-6 4v65a62 62 0 01-55 61l-7 0a62 62 0 01-61-55l-0-7V362c0-20 8-39 23-53 60-58 135-92 224-103V79c0-34 28-62 62-62z</StreamGeometry>
|
||||||
|
@ -63,9 +62,9 @@
|
||||||
<StreamGeometry x:Key="Icons.Init">M412 66C326 132 271 233 271 347c0 17 1 34 4 50-41-48-98-79-162-83a444 444 0 00-46 196c0 207 142 382 337 439h2c19 0 34 15 34 33 0 11-6 21-14 26l1 14C183 973 0 763 0 511 0 272 166 70 393 7A35 35 0 01414 0c19 0 34 15 34 33a33 33 0 01-36 33zm200 893c86-66 141-168 141-282 0-17-1-34-4-50 41 48 98 79 162 83a444 444 0 0046-196c0-207-142-382-337-439h-2a33 33 0 01-34-33c0-11 6-21 14-26L596 0C841 51 1024 261 1024 513c0 239-166 441-393 504A35 35 0 01610 1024a33 33 0 01-34-33 33 33 0 0136-33zM512 704a192 192 0 110-384 192 192 0 010 384z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Init">M412 66C326 132 271 233 271 347c0 17 1 34 4 50-41-48-98-79-162-83a444 444 0 00-46 196c0 207 142 382 337 439h2c19 0 34 15 34 33 0 11-6 21-14 26l1 14C183 973 0 763 0 511 0 272 166 70 393 7A35 35 0 01414 0c19 0 34 15 34 33a33 33 0 01-36 33zm200 893c86-66 141-168 141-282 0-17-1-34-4-50 41 48 98 79 162 83a444 444 0 0046-196c0-207-142-382-337-439h-2a33 33 0 01-34-33c0-11 6-21 14-26L596 0C841 51 1024 261 1024 513c0 239-166 441-393 504A35 35 0 01610 1024a33 33 0 01-34-33 33 33 0 0136-33zM512 704a192 192 0 110-384 192 192 0 010 384z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.InteractiveRebase">M512 64A447 447 0 0064 512c0 248 200 448 448 448s448-200 448-448S760 64 512 64zM218 295h31c54 0 105 19 145 55 13 12 13 31 3 43a35 35 0 01-22 10 36 36 0 01-21-7 155 155 0 00-103-39h-31a32 32 0 01-31-31c0-18 13-31 30-31zm31 433h-31a32 32 0 01-31-31c0-16 13-31 31-31h31A154 154 0 00403 512 217 217 0 01620 295h75l-93-67a33 33 0 01-7-43 33 33 0 0143-7l205 148-205 148a29 29 0 01-18 6 32 32 0 01-31-31c0-10 4-19 13-25l93-67H620a154 154 0 00-154 154c0 122-97 220-217 220zm390 118a29 29 0 01-18 6 32 32 0 01-31-31c0-10 4-19 13-25l93-67h-75c-52 0-103-19-143-54-12-12-13-31-1-43a30 30 0 0142-3 151 151 0 00102 39h75L602 599a33 33 0 01-7-43 33 33 0 0143-7l205 148-203 151z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.InteractiveRebase">M512 64A447 447 0 0064 512c0 248 200 448 448 448s448-200 448-448S760 64 512 64zM218 295h31c54 0 105 19 145 55 13 12 13 31 3 43a35 35 0 01-22 10 36 36 0 01-21-7 155 155 0 00-103-39h-31a32 32 0 01-31-31c0-18 13-31 30-31zm31 433h-31a32 32 0 01-31-31c0-16 13-31 31-31h31A154 154 0 00403 512 217 217 0 01620 295h75l-93-67a33 33 0 01-7-43 33 33 0 0143-7l205 148-205 148a29 29 0 01-18 6 32 32 0 01-31-31c0-10 4-19 13-25l93-67H620a154 154 0 00-154 154c0 122-97 220-217 220zm390 118a29 29 0 01-18 6 32 32 0 01-31-31c0-10 4-19 13-25l93-67h-75c-52 0-103-19-143-54-12-12-13-31-1-43a30 30 0 0142-3 151 151 0 00102 39h75L602 599a33 33 0 01-7-43 33 33 0 0143-7l205 148-203 151z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Issue">M922 39H102A65 65 0 0039 106v609a65 65 0 0063 68h94v168a34 34 0 0019 31 30 30 0 0012 3 30 30 0 0022-10l182-192H922a65 65 0 0063-68V106A65 65 0 00922 39zM288 378h479a34 34 0 010 68H288a34 34 0 010-68zm0-135h479a34 34 0 010 68H288a34 34 0 010-68zm0 270h310a34 34 0 010 68H288a34 34 0 010-68z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Issue">M922 39H102A65 65 0 0039 106v609a65 65 0 0063 68h94v168a34 34 0 0019 31 30 30 0 0012 3 30 30 0 0022-10l182-192H922a65 65 0 0063-68V106A65 65 0 00922 39zM288 378h479a34 34 0 010 68H288a34 34 0 010-68zm0-135h479a34 34 0 010 68H288a34 34 0 010-68zm0 270h310a34 34 0 010 68H288a34 34 0 010-68z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.LayoutHorizontal">M875 117H149C109 117 75 151 75 192v640c0 41 34 75 75 75h725c41 0 75-34 75-75V192c0-41-34-75-75-75zM139 832V192c0-6 4-11 11-11h331v661H149c-6 0-11-4-11-11zm747 0c0 6-4 11-11 11H544v-661H875c6 0 11 4 11 11v640z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Layout">M875 117H149C109 117 75 151 75 192v640c0 41 34 75 75 75h725c41 0 75-34 75-75V192c0-41-34-75-75-75zM139 832V192c0-6 4-11 11-11h331v661H149c-6 0-11-4-11-11zm747 0c0 6-4 11-11 11H544v-661H875c6 0 11 4 11 11v640z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.LayoutVertical">M875 117H149C109 117 75 151 75 192v640c0 41 34 75 75 75h725c41 0 75-34 75-75V192c0-41-34-75-75-75zm-725 64h725c6 0 11 4 11 11v288h-747V192c0-6 4-11 11-11zm725 661H149c-6 0-11-4-11-11V544h747V832c0 6-4 11-11 11z</StreamGeometry>
|
|
||||||
<StreamGeometry x:Key="Icons.LFS">M40 9 15 23 15 31 9 28 9 20 34 5 24 0 0 14 0 34 25 48 25 28 49 14zM26 29 26 48 49 34 49 15z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.LFS">M40 9 15 23 15 31 9 28 9 20 34 5 24 0 0 14 0 34 25 48 25 28 49 14zM26 29 26 48 49 34 49 15z</StreamGeometry>
|
||||||
|
<StreamGeometry x:Key="Icons.LightOn">M892 251c-5-11-18-18-30-18H162c-12 0-23 7-30 18-5 11-5 26 2 35l179 265v320c0 56 44 102 99 102h200c55 0 99-46 99-102v-320l179-266c9-11 9-24 4-34zm-345 540c0 18-14 35-34 35-18 0-34-14-34-35v-157c0-18 14-34 34-34 18 0 34 14 34 34v157zM512 205c18 0 34-14 34-35V87c0-20-16-35-34-35s-34 14-34 35v84c1 20 16 34 34 34zM272 179c5 18 23 30 40 24 17-6 28-24 23-42l-25-51c-5-18-23-30-40-24s-28 24-23 42L272 179zM777 127c5-18-6-36-23-42-17-6-35 5-40 24l-25 51c-5 18 6 37 23 42 17 6 35-5 40-24l25-52z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Lines.All">M416 192m32 0 448 0q32 0 32 32l0 0q0 32-32 32l-448 0q-32 0-32-32l0 0q0-32 32-32ZM416 448m32 0 448 0q32 0 32 32l0 0q0 32-32 32l-448 0q-32 0-32-32l0 0q0-32 32-32ZM416 704m32 0 448 0q32 0 32 32l0 0q0 32-32 32l-448 0q-32 0-32-32l0 0q0-32 32-32ZM96 320l128-192 128 192h-256zM96 640l128 192 128-192h-256zM190 320h64v320H190z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Lines.All">M416 192m32 0 448 0q32 0 32 32l0 0q0 32-32 32l-448 0q-32 0-32-32l0 0q0-32 32-32ZM416 448m32 0 448 0q32 0 32 32l0 0q0 32-32 32l-448 0q-32 0-32-32l0 0q0-32 32-32ZM416 704m32 0 448 0q32 0 32 32l0 0q0 32-32 32l-448 0q-32 0-32-32l0 0q0-32 32-32ZM96 320l128-192 128 192h-256zM96 640l128 192 128-192h-256zM190 320h64v320H190z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Lines.Incr">M408 232C408 210 426 192 448 192h416a40 40 0 110 80H448a40 40 0 01-40-40zM408 512c0-22 18-40 40-40h416a40 40 0 110 80H448A40 40 0 01408 512zM448 752A40 40 0 00448 832h416a40 40 0 100-80H448zM32 480l132 0 0-128 64 0 0 128 132 0 0 64-132 0 0 128-64 0 0-128-132 0Z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Lines.Incr">M408 232C408 210 426 192 448 192h416a40 40 0 110 80H448a40 40 0 01-40-40zM408 512c0-22 18-40 40-40h416a40 40 0 110 80H448A40 40 0 01408 512zM448 752A40 40 0 00448 832h416a40 40 0 100-80H448zM32 480l132 0 0-128 64 0 0 128 132 0 0 64-132 0 0 128-64 0 0-128-132 0Z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Lines.Decr">M408 232C408 210 426 192 448 192h416a40 40 0 110 80H448a40 40 0 01-40-40zM408 512c0-22 18-40 40-40h416a40 40 0 110 80H448A40 40 0 01408 512zM448 752A40 40 0 00448 832h416a40 40 0 100-80H448zM32 480l328 0 0 64-328 0Z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Lines.Decr">M408 232C408 210 426 192 448 192h416a40 40 0 110 80H448a40 40 0 01-40-40zM408 512c0-22 18-40 40-40h416a40 40 0 110 80H448A40 40 0 01408 512zM448 752A40 40 0 00448 832h416a40 40 0 100-80H448zM32 480l328 0 0 64-328 0Z</StreamGeometry>
|
||||||
|
@ -77,6 +76,7 @@
|
||||||
<StreamGeometry x:Key="Icons.Menu">M192 192m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0ZM192 512m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0ZM192 832m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0ZM864 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32h512c17.7 0 32-14.3 32-32s-14.3-32-32-32zM864 480H352c-17.7 0-32 14.3-32 32s14.3 32 32 32h512c17.7 0 32-14.3 32-32s-14.3-32-32-32zM864 800H352c-17.7 0-32 14.3-32 32s14.3 32 32 32h512c17.7 0 32-14.3 32-32s-14.3-32-32-32z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Menu">M192 192m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0ZM192 512m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0ZM192 832m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0ZM864 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32h512c17.7 0 32-14.3 32-32s-14.3-32-32-32zM864 480H352c-17.7 0-32 14.3-32 32s14.3 32 32 32h512c17.7 0 32-14.3 32-32s-14.3-32-32-32zM864 800H352c-17.7 0-32 14.3-32 32s14.3 32 32 32h512c17.7 0 32-14.3 32-32s-14.3-32-32-32z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Merge">M824 645V307c0-56-46-102-102-102h-102V102l-154 154 154 154V307h102v338c-46 20-82 67-82 123 0 72 61 133 133 133 72 0 133-61 133-133 0-56-36-102-82-123zm-51 195c-41 0-72-31-72-72s31-72 72-72c41 0 72 31 72 72s-31 72-72 72zM384 256c0-72-61-133-133-133-72 0-133 61-133 133 0 56 36 102 82 123v266C154 666 118 712 118 768c0 72 61 133 133 133 72 0 133-61 133-133 0-56-36-102-82-123V379C348 358 384 312 384 256zM323 768c0 41-31 72-72 72-41 0-72-31-72-72s31-72 72-72c41 0 72 31 72 72zM251 328c-41 0-72-31-72-72s31-72 72-72c41 0 72 31 72 72s-31 72-72 72z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Merge">M824 645V307c0-56-46-102-102-102h-102V102l-154 154 154 154V307h102v338c-46 20-82 67-82 123 0 72 61 133 133 133 72 0 133-61 133-133 0-56-36-102-82-123zm-51 195c-41 0-72-31-72-72s31-72 72-72c41 0 72 31 72 72s-31 72-72 72zM384 256c0-72-61-133-133-133-72 0-133 61-133 133 0 56 36 102 82 123v266C154 666 118 712 118 768c0 72 61 133 133 133 72 0 133-61 133-133 0-56-36-102-82-123V379C348 358 384 312 384 256zM323 768c0 41-31 72-72 72-41 0-72-31-72-72s31-72 72-72c41 0 72 31 72 72zM251 328c-41 0-72-31-72-72s31-72 72-72c41 0 72 31 72 72s-31 72-72 72z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Modified">M896 64H128C96 64 64 96 64 128v768c0 32 32 64 64 64h768c32 0 64-32 64-64V128c0-32-32-64-64-64z m-64 736c0 16-17 32-32 32H224c-18 0-32-12-32-32V224c0-16 16-32 32-32h576c15 0 32 16 32 32v576zM512 384c-71 0-128 57-128 128s57 128 128 128 128-57 128-128-57-128-128-128z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Modified">M896 64H128C96 64 64 96 64 128v768c0 32 32 64 64 64h768c32 0 64-32 64-64V128c0-32-32-64-64-64z m-64 736c0 16-17 32-32 32H224c-18 0-32-12-32-32V224c0-16 16-32 32-32h576c15 0 32 16 32 32v576zM512 384c-71 0-128 57-128 128s57 128 128 128 128-57 128-128-57-128-128-128z</StreamGeometry>
|
||||||
|
<StreamGeometry x:Key="Icons.More">M0 512M1024 512M512 0M512 1024M813 448c-46 0-83 37-83 83 0 46 37 83 83 83 46 0 83-37 83-83 0-46-37-83-83-83zM211 448C165 448 128 485 128 531c0 46 37 83 83 83 46 0 83-37 83-83 0-46-37-83-83-83zM512 448c-46 0-83 37-83 83 0 46 37 83 83 83 46 0 83-37 83-83C595 485 558 448 512 448z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Move">M299 811 299 725 384 725 384 811 299 811M469 811 469 725 555 725 555 811 469 811M640 811 640 725 725 725 725 811 640 811M299 640 299 555 384 555 384 640 299 640M469 640 469 555 555 555 555 640 469 640M640 640 640 555 725 555 725 640 640 640M299 469 299 384 384 384 384 469 299 469M469 469 469 384 555 384 555 469 469 469M640 469 640 384 725 384 725 469 640 469M299 299 299 213 384 213 384 299 299 299M469 299 469 213 555 213 555 299 469 299M640 299 640 213 725 213 725 299 640 299Z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Move">M299 811 299 725 384 725 384 811 299 811M469 811 469 725 555 725 555 811 469 811M640 811 640 725 725 725 725 811 640 811M299 640 299 555 384 555 384 640 299 640M469 640 469 555 555 555 555 640 469 640M640 640 640 555 725 555 725 640 640 640M299 469 299 384 384 384 384 469 299 469M469 469 469 384 555 384 555 469 469 469M640 469 640 384 725 384 725 469 640 469M299 299 299 213 384 213 384 299 299 299M469 299 469 213 555 213 555 299 469 299M640 299 640 213 725 213 725 299 640 299Z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.MoveToAnotherGroup">M64 363l0 204 265 0L329 460c0-11 6-18 14-20C349 437 355 437 362 441c93 60 226 149 226 149 33 22 34 60 0 82 0 0-133 89-226 149-14 9-32-3-32-18l-1-110L64 693l0 117c0 41 34 75 75 75l746 0c41 0 75-34 75-74L960 364c0-0 0-1 0-1L64 363zM64 214l0 75 650 0-33-80c-16-38-62-69-103-69l-440 0C97 139 64 173 64 214z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.MoveToAnotherGroup">M64 363l0 204 265 0L329 460c0-11 6-18 14-20C349 437 355 437 362 441c93 60 226 149 226 149 33 22 34 60 0 82 0 0-133 89-226 149-14 9-32-3-32-18l-1-110L64 693l0 117c0 41 34 75 75 75l746 0c41 0 75-34 75-74L960 364c0-0 0-1 0-1L64 363zM64 214l0 75 650 0-33-80c-16-38-62-69-103-69l-440 0C97 139 64 173 64 214z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.OpenWith">M683 409v204L1024 308 683 0v191c-413 0-427 526-427 526c117-229 203-307 427-307zm85 492H102V327h153s38-63 114-122H51c-28 0-51 27-51 61v697c0 34 23 61 51 61h768c28 0 51-27 51-61V614l-102 100v187z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.OpenWith">M683 409v204L1024 308 683 0v191c-413 0-427 526-427 526c117-229 203-307 427-307zm85 492H102V327h153s38-63 114-122H51c-28 0-51 27-51 61v697c0 34 23 61 51 61h768c28 0 51-27 51-61V614l-102 100v187z</StreamGeometry>
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
<StreamGeometry x:Key="Icons.Pull">M432 0h160c27 0 48 21 48 48v336h175c36 0 53 43 28 68L539 757c-15 15-40 15-55 0L180 452c-25-25-7-68 28-68H384V48c0-27 21-48 48-48zm592 752v224c0 27-21 48-48 48H48c-27 0-48-21-48-48V752c0-27 21-48 48-48h293l98 98c40 40 105 40 145 0l98-98H976c27 0 48 21 48 48zm-248 176c0-22-18-40-40-40s-40 18-40 40s18 40 40 40s40-18 40-40zm128 0c0-22-18-40-40-40s-40 18-40 40s18 40 40 40s40-18 40-40z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Pull">M432 0h160c27 0 48 21 48 48v336h175c36 0 53 43 28 68L539 757c-15 15-40 15-55 0L180 452c-25-25-7-68 28-68H384V48c0-27 21-48 48-48zm592 752v224c0 27-21 48-48 48H48c-27 0-48-21-48-48V752c0-27 21-48 48-48h293l98 98c40 40 105 40 145 0l98-98H976c27 0 48 21 48 48zm-248 176c0-22-18-40-40-40s-40 18-40 40s18 40 40 40s40-18 40-40zm128 0c0-22-18-40-40-40s-40 18-40 40s18 40 40 40s40-18 40-40z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Push">M592 768h-160c-27 0-48-21-48-48V384h-175c-36 0-53-43-28-68L485 11c15-15 40-15 55 0l304 304c25 25 7 68-28 68H640v336c0 27-21 48-48 48zm432-16v224c0 27-21 48-48 48H48c-27 0-48-21-48-48V752c0-27 21-48 48-48h272v16c0 62 50 112 112 112h160c62 0 112-50 112-112v-16h272c27 0 48 21 48 48zm-248 176c0-22-18-40-40-40s-40 18-40 40s18 40 40 40s40-18 40-40zm128 0c0-22-18-40-40-40s-40 18-40 40s18 40 40 40s40-18 40-40z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Push">M592 768h-160c-27 0-48-21-48-48V384h-175c-36 0-53-43-28-68L485 11c15-15 40-15 55 0l304 304c25 25 7 68-28 68H640v336c0 27-21 48-48 48zm432-16v224c0 27-21 48-48 48H48c-27 0-48-21-48-48V752c0-27 21-48 48-48h272v16c0 62 50 112 112 112h160c62 0 112-50 112-112v-16h272c27 0 48 21 48 48zm-248 176c0-22-18-40-40-40s-40 18-40 40s18 40 40 40s40-18 40-40zm128 0c0-22-18-40-40-40s-40 18-40 40s18 40 40 40s40-18 40-40z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Rebase">M277 85a149 149 0 00-43 292v230a32 32 0 0064 0V555h267A160 160 0 00725 395v-12a149 149 0 10-64-5v17a96 96 0 01-96 96H299V383A149 149 0 00277 85zM228 720a32 32 0 00-37-52 150 150 0 00-53 68 32 32 0 1060 23 85 85 0 0130-39zm136-52a32 32 0 00-37 52 86 86 0 0130 39 32 32 0 1060-23 149 149 0 00-53-68zM204 833a32 32 0 10-55 32 149 149 0 0063 58 32 32 0 0028-57 85 85 0 01-36-33zm202 32a32 32 0 00-55-32 85 85 0 01-36 33 32 32 0 0028 57 149 149 0 0063-58z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Rebase">M277 85a149 149 0 00-43 292v230a32 32 0 0064 0V555h267A160 160 0 00725 395v-12a149 149 0 10-64-5v17a96 96 0 01-96 96H299V383A149 149 0 00277 85zM228 720a32 32 0 00-37-52 150 150 0 00-53 68 32 32 0 1060 23 85 85 0 0130-39zm136-52a32 32 0 00-37 52 86 86 0 0130 39 32 32 0 1060-23 149 149 0 00-53-68zM204 833a32 32 0 10-55 32 149 149 0 0063 58 32 32 0 0028-57 85 85 0 01-36-33zm202 32a32 32 0 00-55-32 85 85 0 01-36 33 32 32 0 0028 57 149 149 0 0063-58z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Reference">M854 234a171 171 0 00-171 171v51c13-5 28-7 43-7h35a136 136 0 01136 136v93a198 198 0 01-198 198 101 101 0 01-101-101V405a256 256 0 01256-256h21a21 21 0 0121 21v43a21 21 0 01-21 21h-21zM213 456c13-5 28-7 43-7h35a136 136 0 01136 136v93a198 198 0 01-198 198 101 101 0 01-101-101V405a256 256 0 01256-256h21a21 21 0 0121 21v43a21 21 0 01-21 21h-21a171 171 0 00-171 171v51z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Reference">M467 556c0-0 0-1 0-1C467 555 467 556 467 556zM467 556c0-0 0-0 0-0C467 556 467 556 467 556zM467 556c-0 0-0 0-0 0C467 557 467 557 467 556zM468 549C468 532 468 541 468 549L468 549zM468 549c0 1-0 1-0 2C468 551 468 550 468 549zM468 552c-0 1-0 2-0 3C467 554 468 553 468 552zM736 549C736 532 736 541 736 549L736 549zM289 378l0 179 89 0c-1 80-89 89-89 89l45 45c0 0 129-15 134-134L467 378 289 378zM959 244l0 536c0 99-80 179-179 179L244 959c-99 0-179-80-179-179L65 244c0-99 80-179 179-179l536 0C879 65 959 145 959 244zM869 289c0-74-60-134-134-134L289 155c-74 0-134 60-134 134l0 447c0 74 60 134 134 134l447 0c74 0 134-60 134-134L869 289zM557 557l89 0c-1 80-89 89-89 89l45 45c0 0 129-15 134-134L735 378 557 378 557 557z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Relation">m224 154a166 166 0 00-166 166v192a166 166 0 00166 166h64v-76h-64a90 90 0 01-90-90v-192a90 90 0 0190-90h320a90 90 0 0190 90v192a90 90 0 01-90 90h-128v77h128a166 166 0 00166-167v-192a166 166 0 00-166-166h-320zm166 390a90 90 0 0190-90h128v-76h-128a166 166 0 00-166 166v192a166 166 0 00166 166h320a166 166 0 00166-166v-192a166 166 0 00-166-166h-64v77h64a90 90 0 0190 90v192a90 90 0 01-90 90h-320a90 90 0 01-90-90v-192z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Relation">m224 154a166 166 0 00-166 166v192a166 166 0 00166 166h64v-76h-64a90 90 0 01-90-90v-192a90 90 0 0190-90h320a90 90 0 0190 90v192a90 90 0 01-90 90h-128v77h128a166 166 0 00166-167v-192a166 166 0 00-166-166h-320zm166 390a90 90 0 0190-90h128v-76h-128a166 166 0 00-166 166v192a166 166 0 00166 166h320a166 166 0 00166-166v-192a166 166 0 00-166-166h-64v77h64a90 90 0 0190 90v192a90 90 0 01-90 90h-320a90 90 0 01-90-90v-192z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Remote">M512 128M706 302a289 289 0 00-173 44 27 27 0 1029 46 234 234 0 01125-36c23 0 45 3 66 9 93 28 161 114 161 215C914 704 813 805 687 805H337C211 805 110 704 110 580c0-96 61-178 147-210C282 263 379 183 495 183a245 245 0 01210 119z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Remote">M512 128M706 302a289 289 0 00-173 44 27 27 0 1029 46 234 234 0 01125-36c23 0 45 3 66 9 93 28 161 114 161 215C914 704 813 805 687 805H337C211 805 110 704 110 580c0-96 61-178 147-210C282 263 379 183 495 183a245 245 0 01210 119z</StreamGeometry>
|
||||||
<StreamGeometry x:Key="Icons.Remote.Add">M364 512h67v108h108v67h-108v108h-67v-108h-108v-67h108v-108zm298-64A107 107 0 01768 555C768 614 720 660 660 660h-108v-54h-108v-108h-94v108h-94c4-21 22-47 44-51l-1-12a75 75 0 0171-75a128 128 0 01239-7a106 106 0 0153-14z</StreamGeometry>
|
<StreamGeometry x:Key="Icons.Remote.Add">M364 512h67v108h108v67h-108v108h-67v-108h-108v-67h108v-108zm298-64A107 107 0 01768 555C768 614 720 660 660 660h-108v-54h-108v-108h-94v108h-94c4-21 22-47 44-51l-1-12a75 75 0 0171-75a128 128 0 01239-7a106 106 0 0153-14z</StreamGeometry>
|
||||||
|
|
|
@ -67,8 +67,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebase ${0}$ auf ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebase ${0}$ auf ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Benenne ${0}$ um...</x:String>
|
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Benenne ${0}$ um...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Setze verfolgten Branch</x:String>
|
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Setze verfolgten Branch...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.UnsetUpstream" xml:space="preserve">Upstream Verfolgung aufheben</x:String>
|
|
||||||
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Branch Vergleich</x:String>
|
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Branch Vergleich</x:String>
|
||||||
<x:String x:Key="Text.Bytes" xml:space="preserve">Bytes</x:String>
|
<x:String x:Key="Text.Bytes" xml:space="preserve">Bytes</x:String>
|
||||||
<x:String x:Key="Text.Cancel" xml:space="preserve">ABBRECHEN</x:String>
|
<x:String x:Key="Text.Cancel" xml:space="preserve">ABBRECHEN</x:String>
|
||||||
|
@ -351,7 +350,6 @@
|
||||||
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Verfolge alle '{0}' Dateien</x:String>
|
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Verfolge alle '{0}' Dateien</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Verfolge alle *{0} Dateien</x:String>
|
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Verfolge alle *{0} Dateien</x:String>
|
||||||
<x:String x:Key="Text.Histories" xml:space="preserve">Verlauf</x:String>
|
<x:String x:Key="Text.Histories" xml:space="preserve">Verlauf</x:String>
|
||||||
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">Wechsle zwischen horizontalem und vertikalem Layout</x:String>
|
|
||||||
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTOR</x:String>
|
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTOR</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">AUTOR ZEITPUNKT</x:String>
|
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">AUTOR ZEITPUNKT</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRAPH & COMMIT-NACHRICHT</x:String>
|
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRAPH & COMMIT-NACHRICHT</x:String>
|
||||||
|
@ -369,7 +367,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Zum vorherigen Tab wechseln</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Zum vorherigen Tab wechseln</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Zum nächsten Tab wechseln</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Zum nächsten Tab wechseln</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Neuen Tab erstellen</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Neuen Tab erstellen</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">Einstellungen öffnen</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreferences" xml:space="preserve">Einstellungen öffnen</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITORY</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITORY</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Gestagte Änderungen committen</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Gestagte Änderungen committen</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Gestagte Änderungen committen und pushen</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Gestagte Änderungen committen und pushen</x:String>
|
||||||
|
@ -443,58 +441,58 @@
|
||||||
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">Vor {0} Monaten</x:String>
|
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">Vor {0} Monaten</x:String>
|
||||||
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">Leztes Jahr</x:String>
|
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">Leztes Jahr</x:String>
|
||||||
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">Vor {0} Jahren</x:String>
|
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">Vor {0} Jahren</x:String>
|
||||||
<x:String x:Key="Text.Preference" xml:space="preserve">Einstellungen</x:String>
|
<x:String x:Key="Text.Preferences" xml:space="preserve">Einstellungen</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI" xml:space="preserve">OPEN AI</x:String>
|
<x:String x:Key="Text.Preferences.AI" xml:space="preserve">OPEN AI</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.AnalyzeDiffPrompt" xml:space="preserve">Analysierung des Diff Befehl</x:String>
|
<x:String x:Key="Text.Preferences.AI.AnalyzeDiffPrompt" xml:space="preserve">Analysierung des Diff Befehl</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.ApiKey" xml:space="preserve">API Schlüssel</x:String>
|
<x:String x:Key="Text.Preferences.AI.ApiKey" xml:space="preserve">API Schlüssel</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.GenerateSubjectPrompt" xml:space="preserve">Generiere Nachricht Befehl</x:String>
|
<x:String x:Key="Text.Preferences.AI.GenerateSubjectPrompt" xml:space="preserve">Generiere Nachricht Befehl</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Name" xml:space="preserve">Name</x:String>
|
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">Name</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">Server</x:String>
|
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">Server</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Model" xml:space="preserve">Modell</x:String>
|
<x:String x:Key="Text.Preferences.AI.Model" xml:space="preserve">Modell</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">DARSTELLUNG</x:String>
|
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">DARSTELLUNG</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">Standardschriftart</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">Standardschriftart</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize" xml:space="preserve">Schriftgröße</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize" xml:space="preserve">Schriftgröße</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Default" xml:space="preserve">Standard</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Default" xml:space="preserve">Standard</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Editor" xml:space="preserve">Texteditor</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Editor" xml:space="preserve">Texteditor</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">Monospace-Schriftart</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.MonospaceFont" xml:space="preserve">Monospace-Schriftart</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Verwende die Monospace-Schriftart nur im Texteditor</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Verwende die Monospace-Schriftart nur im Texteditor</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">Design</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.Theme" xml:space="preserve">Design</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.ThemeOverrides" xml:space="preserve">Design-Anpassungen</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.ThemeOverrides" xml:space="preserve">Design-Anpassungen</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseFixedTabWidth" xml:space="preserve">Fixe Tab-Breite in Titelleiste</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">Fixe Tab-Breite in Titelleiste</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseNativeWindowFrame" xml:space="preserve">Verwende nativen Fensterrahmen</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">Verwende nativen Fensterrahmen</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge" xml:space="preserve">DIFF/MERGE TOOL</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">DIFF/MERGE TOOL</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">Installationspfad</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">Installationspfad</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">Installationspfad zum Diff/Merge Tool</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">Installationspfad zum Diff/Merge Tool</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">Tool</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">Tool</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">ALLGEMEIN</x:String>
|
<x:String x:Key="Text.Preferences.General" xml:space="preserve">ALLGEMEIN</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Beim Starten nach Updates suchen</x:String>
|
<x:String x:Key="Text.Preferences.General.Check4UpdatesOnStartup" xml:space="preserve">Beim Starten nach Updates suchen</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Sprache</x:String>
|
<x:String x:Key="Text.Preferences.General.Locale" xml:space="preserve">Sprache</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">Commit-Historie</x:String>
|
<x:String x:Key="Text.Preferences.General.MaxHistoryCommits" xml:space="preserve">Commit-Historie</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Zeige Autor Zeitpunkt anstatt Commit Zeitpunkt</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowAuthorTime" xml:space="preserve">Zeige Autor Zeitpunkt anstatt Commit Zeitpunkt</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowChildren" xml:space="preserve">Zeige Nachfolger in den Commit Details</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowChildren" xml:space="preserve">Zeige Nachfolger in den Commit Details</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Längenvorgabe für Commit-Nachrichten</x:String>
|
<x:String x:Key="Text.Preferences.General.SubjectGuideLength" xml:space="preserve">Längenvorgabe für Commit-Nachrichten</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preferences.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Aktiviere Auto-CRLF</x:String>
|
<x:String x:Key="Text.Preferences.Git.CRLF" xml:space="preserve">Aktiviere Auto-CRLF</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Klon Standardordner</x:String>
|
<x:String x:Key="Text.Preferences.Git.DefaultCloneDir" xml:space="preserve">Klon Standardordner</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">Benutzer Email</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email" xml:space="preserve">Benutzer Email</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">Globale Git Benutzer Email</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email.Placeholder" xml:space="preserve">Globale Git Benutzer Email</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">Installationspfad</x:String>
|
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">Installationspfad</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User" xml:space="preserve">Benutzername</x:String>
|
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">Benutzername</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User.Placeholder" xml:space="preserve">Globaler Git Benutzername</x:String>
|
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">Globaler Git Benutzername</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Version" xml:space="preserve">Git Version</x:String>
|
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Git Version</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Invalid" xml:space="preserve">Diese App setzt Git (>= 2.23.0) voraus</x:String>
|
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">Diese App setzt Git (>= 2.23.0) voraus</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG" xml:space="preserve">GPG SIGNIERUNG</x:String>
|
<x:String x:Key="Text.Preferences.GPG" xml:space="preserve">GPG SIGNIERUNG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.CommitEnabled" xml:space="preserve">Commit-Signierung</x:String>
|
<x:String x:Key="Text.Preferences.GPG.CommitEnabled" xml:space="preserve">Commit-Signierung</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.TagEnabled" xml:space="preserve">Tag-Signierung</x:String>
|
<x:String x:Key="Text.Preferences.GPG.TagEnabled" xml:space="preserve">Tag-Signierung</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Format" xml:space="preserve">GPG Format</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Format" xml:space="preserve">GPG Format</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path" xml:space="preserve">GPG Installationspfad</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path" xml:space="preserve">GPG Installationspfad</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path.Placeholder" xml:space="preserve">Installationspfad zum GPG Programm</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path.Placeholder" xml:space="preserve">Installationspfad zum GPG Programm</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey" xml:space="preserve">Benutzer Signierungsschlüssel</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey" xml:space="preserve">Benutzer Signierungsschlüssel</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey.Placeholder" xml:space="preserve">GPG Benutzer Signierungsschlüssel</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey.Placeholder" xml:space="preserve">GPG Benutzer Signierungsschlüssel</x:String>
|
||||||
<x:String x:Key="Text.Preference.Integration" xml:space="preserve">EINBINDUNGEN</x:String>
|
<x:String x:Key="Text.Preferences.Integration" xml:space="preserve">EINBINDUNGEN</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
<x:String x:Key="Text.Preferences.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Path" xml:space="preserve">Pfad</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Path" xml:space="preserve">Pfad</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Remote löschen</x:String>
|
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Remote löschen</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Ziel:</x:String>
|
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Ziel:</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Worktrees löschen</x:String>
|
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Worktrees löschen</x:String>
|
||||||
|
@ -565,7 +563,6 @@
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">Aufheben</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">Aufheben</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">Im Graph ausblenden</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">Im Graph ausblenden</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">Im Graph filtern</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">Im Graph filtern</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">Sortierungsmodus wechseln</x:String>
|
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Commit Zeitpunkt (--date-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Commit Zeitpunkt (--date-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Topologie (--topo-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Topologie (--topo-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">LOKALE BRANCHES</x:String>
|
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">LOKALE BRANCHES</x:String>
|
||||||
|
|
|
@ -64,8 +64,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebase ${0}$ on ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebase ${0}$ on ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Rename ${0}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Rename ${0}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Set Tracking Branch</x:String>
|
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Set Tracking Branch...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.UnsetUpstream" xml:space="preserve">Unset Upstream</x:String>
|
|
||||||
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Branch Compare</x:String>
|
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Branch Compare</x:String>
|
||||||
<x:String x:Key="Text.Bytes" xml:space="preserve">Bytes</x:String>
|
<x:String x:Key="Text.Bytes" xml:space="preserve">Bytes</x:String>
|
||||||
<x:String x:Key="Text.Cancel" xml:space="preserve">CANCEL</x:String>
|
<x:String x:Key="Text.Cancel" xml:space="preserve">CANCEL</x:String>
|
||||||
|
@ -162,10 +161,12 @@
|
||||||
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Enable --prune on fetch</x:String>
|
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Enable --prune on fetch</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">Enable --signoff for commit</x:String>
|
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">Enable --signoff for commit</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">ISSUE TRACKER</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">ISSUE TRACKER</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteeIssue" xml:space="preserve">Add Sample Gitee Issue Rule</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteePullRequest" xml:space="preserve">Add Sample Gitee Pull Request Rule</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Add Sample Github Rule</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Add Sample Github Rule</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Add Sample Jira Rule</x:String>
|
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">Add Sample GitLab Issue Rule</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">Add Sample GitLab Issue Rule</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabMergeRequest" xml:space="preserve">Add Sample GitLab Merge Request Rule</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabMergeRequest" xml:space="preserve">Add Sample GitLab Merge Request Rule</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Add Sample Jira Rule</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.NewRule" xml:space="preserve">New Rule</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.NewRule" xml:space="preserve">New Rule</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.Regex" xml:space="preserve">Issue Regex Expression:</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.Regex" xml:space="preserve">Issue Regex Expression:</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.RuleName" xml:space="preserve">Rule Name:</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.RuleName" xml:space="preserve">Rule Name:</x:String>
|
||||||
|
@ -261,7 +262,7 @@
|
||||||
<x:String x:Key="Text.Discard.All" xml:space="preserve">All local changes in working copy.</x:String>
|
<x:String x:Key="Text.Discard.All" xml:space="preserve">All local changes in working copy.</x:String>
|
||||||
<x:String x:Key="Text.Discard.Changes" xml:space="preserve">Changes:</x:String>
|
<x:String x:Key="Text.Discard.Changes" xml:space="preserve">Changes:</x:String>
|
||||||
<x:String x:Key="Text.Discard.IncludeIgnored" xml:space="preserve">Include ignored files</x:String>
|
<x:String x:Key="Text.Discard.IncludeIgnored" xml:space="preserve">Include ignored files</x:String>
|
||||||
<x:String x:Key="Text.Discard.Total" xml:space="preserve">Total {0} changes will be discard</x:String>
|
<x:String x:Key="Text.Discard.Total" xml:space="preserve">{0} changes will be discarded</x:String>
|
||||||
<x:String x:Key="Text.Discard.Warning" xml:space="preserve">You can't undo this action!!!</x:String>
|
<x:String x:Key="Text.Discard.Warning" xml:space="preserve">You can't undo this action!!!</x:String>
|
||||||
<x:String x:Key="Text.EditRepositoryNode.Bookmark" xml:space="preserve">Bookmark:</x:String>
|
<x:String x:Key="Text.EditRepositoryNode.Bookmark" xml:space="preserve">Bookmark:</x:String>
|
||||||
<x:String x:Key="Text.EditRepositoryNode.Name" xml:space="preserve">New Name:</x:String>
|
<x:String x:Key="Text.EditRepositoryNode.Name" xml:space="preserve">New Name:</x:String>
|
||||||
|
@ -348,7 +349,6 @@
|
||||||
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Track files named '{0}'</x:String>
|
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Track files named '{0}'</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Track all *{0} files</x:String>
|
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Track all *{0} files</x:String>
|
||||||
<x:String x:Key="Text.Histories" xml:space="preserve">HISTORY</x:String>
|
<x:String x:Key="Text.Histories" xml:space="preserve">HISTORY</x:String>
|
||||||
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">Switch Horizontal/Vertical Layout</x:String>
|
|
||||||
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTHOR</x:String>
|
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTHOR</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">AUTHOR TIME</x:String>
|
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">AUTHOR TIME</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRAPH & SUBJECT</x:String>
|
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRAPH & SUBJECT</x:String>
|
||||||
|
@ -366,7 +366,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Go to previous page</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Go to previous page</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Go to next page</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Go to next page</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Create new page</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Create new page</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">Open preference dialog</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreferences" xml:space="preserve">Open Preferences dialog</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITORY</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITORY</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Commit staged changes</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Commit staged changes</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Commit and push staged changes</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Commit and push staged changes</x:String>
|
||||||
|
@ -419,7 +419,7 @@
|
||||||
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">Move Repository Node</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">Move Repository Node</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Select parent node for:</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Select parent node for:</x:String>
|
||||||
<x:String x:Key="Text.Name" xml:space="preserve">Name:</x:String>
|
<x:String x:Key="Text.Name" xml:space="preserve">Name:</x:String>
|
||||||
<x:String x:Key="Text.NotConfigured" xml:space="preserve">Git has NOT been configured. Please to go [Preference] and configure it first.</x:String>
|
<x:String x:Key="Text.NotConfigured" xml:space="preserve">Git has NOT been configured. Please to go [Preferences] and configure it first.</x:String>
|
||||||
<x:String x:Key="Text.OpenAppDataDir" xml:space="preserve">Open Data Storage Directory</x:String>
|
<x:String x:Key="Text.OpenAppDataDir" xml:space="preserve">Open Data Storage Directory</x:String>
|
||||||
<x:String x:Key="Text.OpenWith" xml:space="preserve">Open with...</x:String>
|
<x:String x:Key="Text.OpenWith" xml:space="preserve">Open with...</x:String>
|
||||||
<x:String x:Key="Text.Optional" xml:space="preserve">Optional.</x:String>
|
<x:String x:Key="Text.Optional" xml:space="preserve">Optional.</x:String>
|
||||||
|
@ -440,65 +440,66 @@
|
||||||
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} months ago</x:String>
|
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} months ago</x:String>
|
||||||
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">Last year</x:String>
|
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">Last year</x:String>
|
||||||
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} years ago</x:String>
|
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} years ago</x:String>
|
||||||
<x:String x:Key="Text.Preference" xml:space="preserve">Preference</x:String>
|
<x:String x:Key="Text.Preferences" xml:space="preserve">Preferences</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI" xml:space="preserve">AI</x:String>
|
<x:String x:Key="Text.Preferences.AI" xml:space="preserve">AI</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.AnalyzeDiffPrompt" xml:space="preserve">Analyze Diff Prompt</x:String>
|
<x:String x:Key="Text.Preferences.AI.AnalyzeDiffPrompt" xml:space="preserve">Analyze Diff Prompt</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.ApiKey" xml:space="preserve">API Key</x:String>
|
<x:String x:Key="Text.Preferences.AI.ApiKey" xml:space="preserve">API Key</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.GenerateSubjectPrompt" xml:space="preserve">Generate Subject Prompt</x:String>
|
<x:String x:Key="Text.Preferences.AI.GenerateSubjectPrompt" xml:space="preserve">Generate Subject Prompt</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Model" xml:space="preserve">Model</x:String>
|
<x:String x:Key="Text.Preferences.AI.Model" xml:space="preserve">Model</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Name" xml:space="preserve">Name</x:String>
|
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">Name</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">Server</x:String>
|
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">Server</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">APPEARANCE</x:String>
|
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">APPEARANCE</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">Default Font</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">Default Font</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize" xml:space="preserve">Font Size</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize" xml:space="preserve">Font Size</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Default" xml:space="preserve">Default</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Default" xml:space="preserve">Default</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Editor" xml:space="preserve">Editor</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Editor" xml:space="preserve">Editor</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">Monospace Font</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.MonospaceFont" xml:space="preserve">Monospace Font</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Only use monospace font in text editor</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Only use monospace font in text editor</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">Theme</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.Theme" xml:space="preserve">Theme</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.ThemeOverrides" xml:space="preserve">Theme Overrides</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.ThemeOverrides" xml:space="preserve">Theme Overrides</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseFixedTabWidth" xml:space="preserve">Use fixed tab width in titlebar</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">Use fixed tab width in titlebar</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseNativeWindowFrame" xml:space="preserve">Use native window frame</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">Use native window frame</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge" xml:space="preserve">DIFF/MERGE TOOL</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">DIFF/MERGE TOOL</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">Install Path</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">Install Path</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">Input path for diff/merge tool</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">Input path for diff/merge tool</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">Tool</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">Tool</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">GENERAL</x:String>
|
<x:String x:Key="Text.Preferences.General" xml:space="preserve">GENERAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Check for updates on startup</x:String>
|
<x:String x:Key="Text.Preferences.General.Check4UpdatesOnStartup" xml:space="preserve">Check for updates on startup</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DateFormat" xml:space="preserve">Date Format</x:String>
|
<x:String x:Key="Text.Preferences.General.DateFormat" xml:space="preserve">Date Format</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Language</x:String>
|
<x:String x:Key="Text.Preferences.General.Locale" xml:space="preserve">Language</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">History Commits</x:String>
|
<x:String x:Key="Text.Preferences.General.MaxHistoryCommits" xml:space="preserve">History Commits</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Show author time instead of commit time in graph</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowAuthorTime" xml:space="preserve">Show author time instead of commit time in graph</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowChildren" xml:space="preserve">Show children in the commit details</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowChildren" xml:space="preserve">Show children in the commit details</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Subject Guide Length</x:String>
|
<x:String x:Key="Text.Preferences.General.SubjectGuideLength" xml:space="preserve">Subject Guide Length</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preferences.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Enable Auto CRLF</x:String>
|
<x:String x:Key="Text.Preferences.Git.CRLF" xml:space="preserve">Enable Auto CRLF</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Default Clone Dir</x:String>
|
<x:String x:Key="Text.Preferences.Git.DefaultCloneDir" xml:space="preserve">Default Clone Dir</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">User Email</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email" xml:space="preserve">User Email</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">Global git user email</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email.Placeholder" xml:space="preserve">Global git user email</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">Install Path</x:String>
|
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">Install Path</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User" xml:space="preserve">User Name</x:String>
|
<x:String x:Key="Text.Preferences.Git.SSLVerify" xml:space="preserve">Enable HTTP SSL Verify</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User.Placeholder" xml:space="preserve">Global git user name</x:String>
|
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">User Name</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Version" xml:space="preserve">Git version</x:String>
|
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">Global git user name</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Invalid" xml:space="preserve">Git (>= 2.23.0) is required by this app</x:String>
|
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Git version</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG" xml:space="preserve">GPG SIGNING</x:String>
|
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">Git (>= 2.23.0) is required by this app</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.CommitEnabled" xml:space="preserve">Commit GPG signing</x:String>
|
<x:String x:Key="Text.Preferences.GPG" xml:space="preserve">GPG SIGNING</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.TagEnabled" xml:space="preserve">Tag GPG signing</x:String>
|
<x:String x:Key="Text.Preferences.GPG.CommitEnabled" xml:space="preserve">Commit GPG signing</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Format" xml:space="preserve">GPG Format</x:String>
|
<x:String x:Key="Text.Preferences.GPG.TagEnabled" xml:space="preserve">Tag GPG signing</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path" xml:space="preserve">Program Install Path</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Format" xml:space="preserve">GPG Format</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path.Placeholder" xml:space="preserve">Input path for installed gpg program</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path" xml:space="preserve">Program Install Path</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey" xml:space="preserve">User Signing Key</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path.Placeholder" xml:space="preserve">Input path for installed gpg program</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey.Placeholder" xml:space="preserve">User's gpg signing key</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey" xml:space="preserve">User Signing Key</x:String>
|
||||||
<x:String x:Key="Text.Preference.Integration" xml:space="preserve">INTEGRATION</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey.Placeholder" xml:space="preserve">User's gpg signing key</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
<x:String x:Key="Text.Preferences.Integration" xml:space="preserve">INTEGRATION</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
<x:String x:Key="Text.Preferences.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Path" xml:space="preserve">Path</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
||||||
|
<x:String x:Key="Text.Preferences.Shell.Path" xml:space="preserve">Path</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Prune Remote</x:String>
|
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Prune Remote</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Target:</x:String>
|
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Target:</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Prune Worktrees</x:String>
|
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Prune Worktrees</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Prune worktree information in `$GIT_DIR/worktrees`</x:String>
|
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Prune worktree information in `$GIT_DIR/worktrees`</x:String>
|
||||||
<x:String x:Key="Text.Pull" xml:space="preserve">Pull</x:String>
|
<x:String x:Key="Text.Pull" xml:space="preserve">Pull</x:String>
|
||||||
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Branch:</x:String>
|
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Remote Branch:</x:String>
|
||||||
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Fetch all branches</x:String>
|
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Fetch all branches</x:String>
|
||||||
<x:String x:Key="Text.Pull.Into" xml:space="preserve">Into:</x:String>
|
<x:String x:Key="Text.Pull.Into" xml:space="preserve">Into:</x:String>
|
||||||
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Local Changes:</x:String>
|
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Local Changes:</x:String>
|
||||||
|
@ -563,13 +564,17 @@
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">Unset</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">Unset</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">Hide in commit graph</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">Hide in commit graph</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">Filter in commit graph</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">Filter in commit graph</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">Switch Order Mode</x:String>
|
<x:String x:Key="Text.Repository.HistoriesLayout" xml:space="preserve">LAYOUT</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Horizontal" xml:space="preserve">Horizontal</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Vertical" xml:space="preserve">Vertical</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">COMMITS ORDER</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Commit Date (--date-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Commit Date (--date-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Topologically (--topo-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Topologically (--topo-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">LOCAL BRANCHES</x:String>
|
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">LOCAL BRANCHES</x:String>
|
||||||
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">Navigate to HEAD</x:String>
|
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">Navigate to HEAD</x:String>
|
||||||
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">Enable '--first-parent' Option</x:String>
|
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">Enable '--first-parent' Option</x:String>
|
||||||
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">Create Branch</x:String>
|
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">Create Branch</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.OnlyHighlightCurrentBranchInHistories" xml:space="preserve">Only highlight current branch in graph</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">Open in {0}</x:String>
|
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">Open in {0}</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">Open in External Tools</x:String>
|
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">Open in External Tools</x:String>
|
||||||
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">Refresh</x:String>
|
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">Refresh</x:String>
|
||||||
|
@ -589,7 +594,12 @@
|
||||||
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">UPDATE SUBMODULE</x:String>
|
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">UPDATE SUBMODULE</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">TAGS</x:String>
|
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">TAGS</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">NEW TAG</x:String>
|
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">NEW TAG</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByCreatorDate" xml:space="preserve">By Creator Date</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameAsc" xml:space="preserve">By Name (Ascending)</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameDes" xml:space="preserve">By Name (Descending)</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.Sort" xml:space="preserve">Sort</x:String>
|
||||||
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Open in Terminal</x:String>
|
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Open in Terminal</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.UseRelativeTimeInHistories" xml:space="preserve">Use relative time in histories</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">WORKTREES</x:String>
|
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">WORKTREES</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">ADD WORKTREE</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">ADD WORKTREE</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">PRUNE</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">PRUNE</x:String>
|
||||||
|
@ -617,6 +627,10 @@
|
||||||
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">Skip This Version</x:String>
|
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">Skip This Version</x:String>
|
||||||
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">Software Update</x:String>
|
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">Software Update</x:String>
|
||||||
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">There are currently no updates available.</x:String>
|
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">There are currently no updates available.</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream" xml:space="preserve">Set Tracking Branch</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Local" xml:space="preserve">Branch:</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Unset" xml:space="preserve">Unset upstream</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Upstream" xml:space="preserve">Upstream:</x:String>
|
||||||
<x:String x:Key="Text.SHALinkCM.CopySHA" xml:space="preserve">Copy SHA</x:String>
|
<x:String x:Key="Text.SHALinkCM.CopySHA" xml:space="preserve">Copy SHA</x:String>
|
||||||
<x:String x:Key="Text.SHALinkCM.NavigateTo" xml:space="preserve">Go to</x:String>
|
<x:String x:Key="Text.SHALinkCM.NavigateTo" xml:space="preserve">Go to</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>
|
||||||
|
|
|
@ -67,8 +67,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebase ${0}$ en ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebase ${0}$ en ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Renombrar ${0}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Renombrar ${0}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Establecer Rama de Seguimiento</x:String>
|
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Establecer Rama de Seguimiento...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.UnsetUpstream" xml:space="preserve">Desestablecer Upstream</x:String>
|
|
||||||
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Comparar Ramas</x:String>
|
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Comparar Ramas</x:String>
|
||||||
<x:String x:Key="Text.Bytes" xml:space="preserve">Bytes</x:String>
|
<x:String x:Key="Text.Bytes" xml:space="preserve">Bytes</x:String>
|
||||||
<x:String x:Key="Text.Cancel" xml:space="preserve">CANCELAR</x:String>
|
<x:String x:Key="Text.Cancel" xml:space="preserve">CANCELAR</x:String>
|
||||||
|
@ -165,6 +164,8 @@
|
||||||
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Habilitar --prune para fetch</x:String>
|
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Habilitar --prune para fetch</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">Habilitar --signoff para commit</x:String>
|
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">Habilitar --signoff para commit</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">SEGUIMIENTO DE INCIDENCIAS</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">SEGUIMIENTO DE INCIDENCIAS</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteeIssue" xml:space="preserve">Añadir Regla de Ejemplo para Incidencias de Gitee</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteePullRequest" xml:space="preserve">Añadir Regla de Ejemplo para Pull Requests de Gitee</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Añadir Regla de Ejemplo para Github</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Añadir Regla de Ejemplo para Github</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Añadir Regla de Ejemplo para Jira</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Añadir Regla de Ejemplo para Jira</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">Añadir Regla de Ejemplo para Incidencias de GitLab</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">Añadir Regla de Ejemplo para Incidencias de GitLab</x:String>
|
||||||
|
@ -351,7 +352,6 @@
|
||||||
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Seguir archivos llamados '{0}'</x:String>
|
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Seguir archivos llamados '{0}'</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Seguir todos los archivos *{0}</x:String>
|
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Seguir todos los archivos *{0}</x:String>
|
||||||
<x:String x:Key="Text.Histories" xml:space="preserve">Historias</x:String>
|
<x:String x:Key="Text.Histories" xml:space="preserve">Historias</x:String>
|
||||||
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">Cambiar a Disposición Horizontal/Vertical</x:String>
|
|
||||||
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTOR</x:String>
|
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTOR</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">HORA DEL AUTOR</x:String>
|
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">HORA DEL AUTOR</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRÁFICO & ASUNTO</x:String>
|
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRÁFICO & ASUNTO</x:String>
|
||||||
|
@ -369,7 +369,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Ir a la página anterior</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Ir a la página anterior</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Ir a la siguiente página</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Ir a la siguiente página</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Crear nueva página</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Crear nueva página</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">Abrir diálogo de preferencias</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreferences" xml:space="preserve">Abrir diálogo de preferencias</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITORIO</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITORIO</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Commit cambios staged</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Commit cambios staged</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Commit y push cambios staged</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Commit y push cambios staged</x:String>
|
||||||
|
@ -443,65 +443,67 @@
|
||||||
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">Hace {0} meses</x:String>
|
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">Hace {0} meses</x:String>
|
||||||
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">Último año</x:String>
|
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">Último año</x:String>
|
||||||
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">Hace {0} años</x:String>
|
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">Hace {0} años</x:String>
|
||||||
<x:String x:Key="Text.Preference" xml:space="preserve">Preferencias</x:String>
|
<x:String x:Key="Text.Preferences" xml:space="preserve">Preferencias</x:String>
|
||||||
<x:String x:Key="Text.Preference.Advanced" xml:space="preserve">Opciones Avanzadas</x:String>
|
<x:String x:Key="Text.Preferences.Advanced" xml:space="preserve">Opciones Avanzadas</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI" xml:space="preserve">OPEN AI</x:String>
|
<x:String x:Key="Text.Preferences.AI" xml:space="preserve">OPEN AI</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.AnalyzeDiffPrompt" xml:space="preserve">Analizar Diff Prompt</x:String>
|
<x:String x:Key="Text.Preferences.AI.AnalyzeDiffPrompt" xml:space="preserve">Analizar Diff Prompt</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.ApiKey" xml:space="preserve">Clave API</x:String>
|
<x:String x:Key="Text.Preferences.AI.ApiKey" xml:space="preserve">Clave API</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.GenerateSubjectPrompt" xml:space="preserve">Generar Subject Prompt</x:String>
|
<x:String x:Key="Text.Preferences.AI.GenerateSubjectPrompt" xml:space="preserve">Generar Subject Prompt</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Model" xml:space="preserve">Modelo</x:String>
|
<x:String x:Key="Text.Preferences.AI.Model" xml:space="preserve">Modelo</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Name" xml:space="preserve">Nombre</x:String>
|
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">Nombre</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">Servidor</x:String>
|
<x:String x:Key="Text.Preferences.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.Preferences.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.Preferences.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.Preferences.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.Preferences.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.Preferences.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.Preferences.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.Preferences.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.Preferences.Appearance.Theme" xml:space="preserve">Tema</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.ThemeOverrides" xml:space="preserve">Sobreescritura de temas</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.ThemeOverrides" xml:space="preserve">Sobreescritura de temas</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseFixedTabWidth" xml:space="preserve">Usar ancho de pestaña fijo en la barra de título</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">Usar ancho de pestaña fijo en la barra de título</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseNativeWindowFrame" xml:space="preserve">Usar marco de ventana nativo</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">Usar marco de ventana nativo</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge" xml:space="preserve">HERRAMIENTA DIFF/MERGE</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">HERRAMIENTA DIFF/MERGE</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">Ruta de instalación</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">Ruta de instalación</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">Introducir ruta para la herramienta diff/merge</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">Introducir ruta para la herramienta diff/merge</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">Herramienta</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">Herramienta</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">GENERAL</x:String>
|
<x:String x:Key="Text.Preferences.General" xml:space="preserve">GENERAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Buscar actualizaciones al iniciar</x:String>
|
<x:String x:Key="Text.Preferences.General.Check4UpdatesOnStartup" xml:space="preserve">Buscar actualizaciones al iniciar</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Idioma</x:String>
|
<x:String x:Key="Text.Preferences.General.DateFormat" xml:space="preserve">Formato de Fecha</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">Commits en el historial</x:String>
|
<x:String x:Key="Text.Preferences.General.Locale" xml:space="preserve">Idioma</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.Preferences.General.MaxHistoryCommits" xml:space="preserve">Commits en el historial</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.Preferences.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.SubjectGuideLength" xml:space="preserve">Longitud de la guía del asunto</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowChildren" xml:space="preserve">Mostrar hijos en los detalles de commit</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preferences.General.SubjectGuideLength" xml:space="preserve">Longitud de la guía del asunto</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Habilitar Auto CRLF</x:String>
|
<x:String x:Key="Text.Preferences.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Directorio de clonado por defecto</x:String>
|
<x:String x:Key="Text.Preferences.Git.CRLF" xml:space="preserve">Habilitar Auto CRLF</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">Email de usuario</x:String>
|
<x:String x:Key="Text.Preferences.Git.DefaultCloneDir" xml:space="preserve">Directorio de clonado por defecto</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">Email global del usuario git</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email" xml:space="preserve">Email de usuario</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">Ruta de instalación</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email.Placeholder" xml:space="preserve">Email global del usuario git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User" xml:space="preserve">Nombre de usuario</x:String>
|
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">Ruta de instalación</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User.Placeholder" xml:space="preserve">Nombre global del usuario git</x:String>
|
<x:String x:Key="Text.Preferences.Git.SSLVerify" xml:space="preserve">Habilitar verificación HTTP SSL</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Version" xml:space="preserve">Versión de Git</x:String>
|
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">Nombre de usuario</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Invalid" xml:space="preserve">Se requiere Git (>= 2.23.0) para esta aplicación</x:String>
|
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">Nombre global del usuario git</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG" xml:space="preserve">FIRMA GPG</x:String>
|
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Versión de Git</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.CommitEnabled" xml:space="preserve">Firma GPG en commit</x:String>
|
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">Se requiere Git (>= 2.23.0) para esta aplicación</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.TagEnabled" xml:space="preserve">Firma GPG en etiqueta</x:String>
|
<x:String x:Key="Text.Preferences.GPG" xml:space="preserve">FIRMA GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Format" xml:space="preserve">Formato GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG.CommitEnabled" xml:space="preserve">Firma GPG en commit</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path" xml:space="preserve">Ruta de instalación del programa</x:String>
|
<x:String x:Key="Text.Preferences.GPG.TagEnabled" xml:space="preserve">Firma GPG en etiqueta</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path.Placeholder" xml:space="preserve">Introducir ruta para el programa gpg instalado</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Format" xml:space="preserve">Formato GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey" xml:space="preserve">Clave de firma del usuario</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path" xml:space="preserve">Ruta de instalación del programa</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey.Placeholder" xml:space="preserve">Clave de firma gpg del usuario</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path.Placeholder" xml:space="preserve">Introducir ruta para el programa gpg instalado</x:String>
|
||||||
<x:String x:Key="Text.Preference.Integration" xml:space="preserve">INTEGRACIÓN</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey" xml:space="preserve">Clave de firma del usuario</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey.Placeholder" xml:space="preserve">Clave de firma gpg del usuario</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
<x:String x:Key="Text.Preferences.Integration" xml:space="preserve">INTEGRACIÓN</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Path" xml:space="preserve">Ruta</x:String>
|
<x:String x:Key="Text.Preferences.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
||||||
|
<x:String x:Key="Text.Preferences.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
||||||
|
<x:String x:Key="Text.Preferences.Shell.Path" xml:space="preserve">Ruta</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Podar Remoto</x:String>
|
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Podar Remoto</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Destino:</x:String>
|
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Destino:</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Podar Worktrees</x:String>
|
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Podar Worktrees</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Podar información de worktree en `$GIT_DIR/worktrees`</x:String>
|
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Podar información de worktree en `$GIT_DIR/worktrees`</x:String>
|
||||||
<x:String x:Key="Text.Pull" xml:space="preserve">Pull</x:String>
|
<x:String x:Key="Text.Pull" xml:space="preserve">Pull</x:String>
|
||||||
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Rama:</x:String>
|
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Rama Remota:</x:String>
|
||||||
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Fetch todas las ramas</x:String>
|
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Fetch todas las ramas</x:String>
|
||||||
<x:String x:Key="Text.Pull.Into" xml:space="preserve">En:</x:String>
|
<x:String x:Key="Text.Pull.Into" xml:space="preserve">En:</x:String>
|
||||||
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Cambios Locales:</x:String>
|
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Cambios Locales:</x:String>
|
||||||
|
@ -566,13 +568,17 @@
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">Desestablecer</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.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.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.HistoriesLayout" xml:space="preserve">DISPOSICIÓN</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Horizontal" xml:space="preserve">Horizontal</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Vertical" xml:space="preserve">Vertical</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">ORDEN DE COMMITS</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.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.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>
|
||||||
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">Crear Rama</x:String>
|
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">Crear Rama</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.OnlyHighlightCurrentBranchInHistories" xml:space="preserve">Resaltar solo la rama actual en el gráfico</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">Abrir en {0}</x:String>
|
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">Abrir en {0}</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">Abrir en Herramientas Externas</x:String>
|
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">Abrir en Herramientas Externas</x:String>
|
||||||
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">Refrescar</x:String>
|
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">Refrescar</x:String>
|
||||||
|
@ -592,7 +598,12 @@
|
||||||
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">ACTUALIZAR SUBMÓDULO</x:String>
|
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">ACTUALIZAR SUBMÓDULO</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">ETIQUETAS</x:String>
|
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">ETIQUETAS</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">NUEVA ETIQUETA</x:String>
|
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">NUEVA ETIQUETA</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByCreatorDate" xml:space="preserve">Por Fecha de Creación</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameAsc" xml:space="preserve">Por Nombre (Ascendiente)</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameDes" xml:space="preserve">Por Nombre (Descendiente)</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.Sort" xml:space="preserve">Sort</x:String>
|
||||||
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Abrir en Terminal</x:String>
|
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Abrir en Terminal</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.UseRelativeTimeInHistories" xml:space="preserve">Usar tiempo relativo en las historias</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">WORKTREES</x:String>
|
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">WORKTREES</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">AÑADIR WORKTREE</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">AÑADIR WORKTREE</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">PRUNE</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">PRUNE</x:String>
|
||||||
|
@ -620,6 +631,10 @@
|
||||||
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">Omitir Esta Versión</x:String>
|
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">Omitir Esta Versión</x:String>
|
||||||
<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.SetUpstream" xml:space="preserve">Establecer Rama de Seguimiento</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Local" xml:space="preserve">Rama:</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Unset" xml:space="preserve">Desestablecer upstream</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Upstream" xml:space="preserve">Upstream:</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.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>
|
||||||
|
|
|
@ -61,13 +61,13 @@
|
||||||
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">Fetch ${0}$ vers ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">Fetch ${0}$ vers ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Git Flow - Terminer ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Git Flow - Terminer ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">Fusionner ${0}$ dans ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">Fusionner ${0}$ dans ${1}$...</x:String>
|
||||||
|
<x:String x:Key="Text.BranchCM.MergeMultiBranches" xml:space="preserve">Fusionner les {0} branches sélectionnées dans celle en cours</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">Tirer ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">Tirer ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">Tirer ${0}$ dans ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">Tirer ${0}$ dans ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Pousser ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Pousser ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebaser ${0}$ sur ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebaser ${0}$ sur ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Renommer ${0}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Renommer ${0}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Définir la branche de suivi</x:String>
|
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Définir la branche de suivi...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.UnsetUpstream" xml:space="preserve">Ne plus suivre la branche distante</x:String>
|
|
||||||
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Comparer les branches</x:String>
|
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Comparer les branches</x:String>
|
||||||
<x:String x:Key="Text.Bytes" xml:space="preserve">Octets</x:String>
|
<x:String x:Key="Text.Bytes" xml:space="preserve">Octets</x:String>
|
||||||
<x:String x:Key="Text.Cancel" xml:space="preserve">ANNULER</x:String>
|
<x:String x:Key="Text.Cancel" xml:space="preserve">ANNULER</x:String>
|
||||||
|
@ -88,9 +88,11 @@
|
||||||
<x:String x:Key="Text.Checkout.LocalChanges.DoNothing" xml:space="preserve">Ne rien faire</x:String>
|
<x:String x:Key="Text.Checkout.LocalChanges.DoNothing" xml:space="preserve">Ne rien faire</x:String>
|
||||||
<x:String x:Key="Text.Checkout.LocalChanges.StashAndReply" xml:space="preserve">Mettre en stash et réappliquer</x:String>
|
<x:String x:Key="Text.Checkout.LocalChanges.StashAndReply" xml:space="preserve">Mettre en stash et réappliquer</x:String>
|
||||||
<x:String x:Key="Text.CherryPick" xml:space="preserve">Cherry-Pick de ce commit</x:String>
|
<x:String x:Key="Text.CherryPick" xml:space="preserve">Cherry-Pick de ce commit</x:String>
|
||||||
|
<x:String x:Key="Text.CherryPick.AppendSourceToMessage" xml:space="preserve">Ajouter la source au message de commit</x:String>
|
||||||
<x:String x:Key="Text.CherryPick.Commit" xml:space="preserve">Commit :</x:String>
|
<x:String x:Key="Text.CherryPick.Commit" xml:space="preserve">Commit :</x:String>
|
||||||
<x:String x:Key="Text.CherryPick.CommitChanges" xml:space="preserve">Commit tous les changements</x:String>
|
<x:String x:Key="Text.CherryPick.CommitChanges" xml:space="preserve">Commit tous les changements</x:String>
|
||||||
<x:String x:Key="Text.CherryPick.Mainline" xml:space="preserve">Ligne principale :</x:String>
|
<x:String x:Key="Text.CherryPick.Mainline" xml:space="preserve">Ligne principale :</x:String>
|
||||||
|
<x:String x:Key="Text.CherryPick.Mainline.Tips" xml:space="preserve">Habituellement, on ne peut pas cherry-pick un commit car on ne sait pas quel côté devrait être considéré comme principal. Cette option permet de rejouer les changements relatifs au parent spécifié.</x:String>
|
||||||
<x:String x:Key="Text.CherryPick.Title" xml:space="preserve">Cherry Pick</x:String>
|
<x:String x:Key="Text.CherryPick.Title" xml:space="preserve">Cherry Pick</x:String>
|
||||||
<x:String x:Key="Text.ClearStashes" xml:space="preserve">Supprimer les stashes</x:String>
|
<x:String x:Key="Text.ClearStashes" xml:space="preserve">Supprimer les stashes</x:String>
|
||||||
<x:String x:Key="Text.ClearStashes.Message" xml:space="preserve">Vous essayez de supprimer tous les stashes. Êtes-vous sûr de vouloir continuer ?</x:String>
|
<x:String x:Key="Text.ClearStashes.Message" xml:space="preserve">Vous essayez de supprimer tous les stashes. Êtes-vous sûr de vouloir continuer ?</x:String>
|
||||||
|
@ -105,12 +107,15 @@
|
||||||
<x:String x:Key="Text.CodeEditor" xml:space="preserve">Éditeur</x:String>
|
<x:String x:Key="Text.CodeEditor" xml:space="preserve">Éditeur</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">Récupérer ce commit</x:String>
|
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">Récupérer ce commit</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">Cherry-Pick ce commit</x:String>
|
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">Cherry-Pick ce commit</x:String>
|
||||||
|
<x:String x:Key="Text.CommitCM.CherryPickMultiple" xml:space="preserve">Cherry-Pick ...</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CompareWithHead" xml:space="preserve">Comparer avec HEAD</x:String>
|
<x:String x:Key="Text.CommitCM.CompareWithHead" xml:space="preserve">Comparer avec HEAD</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CompareWithWorktree" xml:space="preserve">Comparer avec le worktree</x:String>
|
<x:String x:Key="Text.CommitCM.CompareWithWorktree" xml:space="preserve">Comparer avec le worktree</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CopyInfo" xml:space="preserve">Copier les informations</x:String>
|
<x:String x:Key="Text.CommitCM.CopyInfo" xml:space="preserve">Copier les informations</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">Copier le SHA</x:String>
|
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">Copier le SHA</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">Action personnalisée</x:String>
|
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">Action personnalisée</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">Rebase interactif de ${0}$ ici</x:String>
|
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">Rebase interactif de ${0}$ ici</x:String>
|
||||||
|
<x:String x:Key="Text.CommitCM.Merge" xml:space="preserve">Fusionner dans ${0}$</x:String>
|
||||||
|
<x:String x:Key="Text.CommitCM.MergeMultiple" xml:space="preserve">Fusionner ...</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">Rebaser ${0}$ ici</x:String>
|
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">Rebaser ${0}$ ici</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">Réinitialiser ${0}$ ici</x:String>
|
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">Réinitialiser ${0}$ ici</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">Annuler le commit</x:String>
|
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">Annuler le commit</x:String>
|
||||||
|
@ -122,6 +127,7 @@
|
||||||
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Rechercher les changements...</x:String>
|
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Rechercher les changements...</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">FICHIERS</x:String>
|
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">FICHIERS</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">Fichier LFS</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">Fichier LFS</x:String>
|
||||||
|
<x:String x:Key="Text.CommitDetail.Files.Search" xml:space="preserve">Rechercher des fichiers...</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Sous-module</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Sous-module</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMATIONS</x:String>
|
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMATIONS</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTEUR</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTEUR</x:String>
|
||||||
|
@ -159,6 +165,8 @@
|
||||||
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Activer --prune pour fetch</x:String>
|
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Activer --prune pour fetch</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">Activer --signoff pour commit</x:String>
|
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">Activer --signoff pour commit</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">SUIVI DES PROBLÈMES</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">SUIVI DES PROBLÈMES</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteeIssue" xml:space="preserve">Ajouter une règle d'exemple Gitee</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteePullRequest" xml:space="preserve">Ajouter une règle d'exemple pour Pull Request Gitee</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Ajouter une règle d'exemple Github</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Ajouter une règle d'exemple Github</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Ajouter une règle d'exemple Jira</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Ajouter une règle d'exemple Jira</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">Ajouter une règle d'exemple pour Incidents GitLab</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">Ajouter une règle d'exemple pour Incidents GitLab</x:String>
|
||||||
|
@ -248,6 +256,7 @@
|
||||||
<x:String x:Key="Text.Diff.SyntaxHighlight" xml:space="preserve">Coloration syntaxique</x:String>
|
<x:String x:Key="Text.Diff.SyntaxHighlight" xml:space="preserve">Coloration syntaxique</x:String>
|
||||||
<x:String x:Key="Text.Diff.ToggleWordWrap" xml:space="preserve">Retour à la ligne</x:String>
|
<x:String x:Key="Text.Diff.ToggleWordWrap" xml:space="preserve">Retour à la ligne</x:String>
|
||||||
<x:String x:Key="Text.Diff.UseMerger" xml:space="preserve">Ouvrir dans l'outil de fusion</x:String>
|
<x:String x:Key="Text.Diff.UseMerger" xml:space="preserve">Ouvrir dans l'outil de fusion</x:String>
|
||||||
|
<x:String x:Key="Text.Diff.UseBlockNavigation" xml:space="preserve">Activer la navigation par blocs</x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.All" xml:space="preserve">Voir toutes les lignes</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.All" xml:space="preserve">Voir toutes les lignes</x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.Decr" xml:space="preserve">Réduit le nombre de ligne visibles</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.Decr" xml:space="preserve">Réduit le nombre de ligne visibles</x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.Incr" xml:space="preserve">Augmente le nombre de ligne visibles</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.Incr" xml:space="preserve">Augmente le nombre de ligne visibles</x:String>
|
||||||
|
@ -269,6 +278,7 @@
|
||||||
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">Fast-Forward (sans récupération)</x:String>
|
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">Fast-Forward (sans récupération)</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 toutes les branches distantes</x:String>
|
<x:String x:Key="Text.Fetch.AllRemotes" xml:space="preserve">Fetch toutes les branches distantes</x:String>
|
||||||
|
<x:String x:Key="Text.Fetch.Force" xml:space="preserve">Outrepasser les vérifications de refs</x:String>
|
||||||
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">Fetch sans les tags</x:String>
|
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">Fetch sans les tags</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">Remote :</x:String>
|
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">Remote :</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">Récupérer les changements distants</x:String>
|
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">Récupérer les changements distants</x:String>
|
||||||
|
@ -277,6 +287,7 @@
|
||||||
<x:String x:Key="Text.FileCM.DiscardMulti" xml:space="preserve">Rejeter {0} fichiers...</x:String>
|
<x:String x:Key="Text.FileCM.DiscardMulti" xml:space="preserve">Rejeter {0} fichiers...</x:String>
|
||||||
<x:String x:Key="Text.FileCM.DiscardSelectedLines" xml:space="preserve">Rejeter les changements dans les lignes sélectionnées</x:String>
|
<x:String x:Key="Text.FileCM.DiscardSelectedLines" xml:space="preserve">Rejeter les changements dans les lignes sélectionnées</x:String>
|
||||||
<x:String x:Key="Text.FileCM.OpenWithExternalMerger" xml:space="preserve">Ouvrir l'outil de fusion externe</x:String>
|
<x:String x:Key="Text.FileCM.OpenWithExternalMerger" xml:space="preserve">Ouvrir l'outil de fusion externe</x:String>
|
||||||
|
<x:String x:Key="Text.FileCM.ResolveUsing" xml:space="preserve">Résoudre en utilisant ${0}$</x:String>
|
||||||
<x:String x:Key="Text.FileCM.SaveAsPatch" xml:space="preserve">Enregistrer en tant que patch...</x:String>
|
<x:String x:Key="Text.FileCM.SaveAsPatch" xml:space="preserve">Enregistrer en tant que patch...</x:String>
|
||||||
<x:String x:Key="Text.FileCM.Stage" xml:space="preserve">Indexer</x:String>
|
<x:String x:Key="Text.FileCM.Stage" xml:space="preserve">Indexer</x:String>
|
||||||
<x:String x:Key="Text.FileCM.StageMulti" xml:space="preserve">Indexer {0} fichiers</x:String>
|
<x:String x:Key="Text.FileCM.StageMulti" xml:space="preserve">Indexer {0} fichiers</x:String>
|
||||||
|
@ -330,7 +341,7 @@
|
||||||
<x:String x:Key="Text.GitLFS.Locks.Title" xml:space="preserve">Verrous LFS</x:String>
|
<x:String x:Key="Text.GitLFS.Locks.Title" xml:space="preserve">Verrous LFS</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.Locks.Unlock" xml:space="preserve">Déverouiller</x:String>
|
<x:String x:Key="Text.GitLFS.Locks.Unlock" xml:space="preserve">Déverouiller</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.Locks.UnlockForce" xml:space="preserve">Forcer le déverouillage</x:String>
|
<x:String x:Key="Text.GitLFS.Locks.UnlockForce" xml:space="preserve">Forcer le déverouillage</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.Prune" xml:space="preserve">Prune</x:String>
|
<x:String x:Key="Text.GitLFS.Prune" xml:space="preserve">Elaguer</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.Prune.Tips" xml:space="preserve">Lancer `git lfs prune` pour supprimer les anciens fichier LFS du stockage local</x:String>
|
<x:String x:Key="Text.GitLFS.Prune.Tips" xml:space="preserve">Lancer `git lfs prune` pour supprimer les anciens fichier LFS du stockage local</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.Pull" xml:space="preserve">Pull</x:String>
|
<x:String x:Key="Text.GitLFS.Pull" xml:space="preserve">Pull</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.Pull.Title" xml:space="preserve">Pull les objets LFS</x:String>
|
<x:String x:Key="Text.GitLFS.Pull.Title" xml:space="preserve">Pull les objets LFS</x:String>
|
||||||
|
@ -342,7 +353,6 @@
|
||||||
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Suivre les fichiers appelés '{0}'</x:String>
|
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Suivre les fichiers appelés '{0}'</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Suivre tous les fichiers *{0}</x:String>
|
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Suivre tous les fichiers *{0}</x:String>
|
||||||
<x:String x:Key="Text.Histories" xml:space="preserve">Historique</x:String>
|
<x:String x:Key="Text.Histories" xml:space="preserve">Historique</x:String>
|
||||||
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">Basculer entre dispositions Horizontal/Vertical</x:String>
|
|
||||||
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTEUR</x:String>
|
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTEUR</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">HEURE DE L'AUTEUR</x:String>
|
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">HEURE DE L'AUTEUR</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRAPHE & SUJET</x:String>
|
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRAPHE & SUJET</x:String>
|
||||||
|
@ -355,11 +365,12 @@
|
||||||
<x:String x:Key="Text.Hotkeys" xml:space="preserve">Référence des raccourcis clavier</x:String>
|
<x:String x:Key="Text.Hotkeys" xml:space="preserve">Référence des raccourcis clavier</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global" xml:space="preserve">GLOBAL</x:String>
|
<x:String x:Key="Text.Hotkeys.Global" xml:space="preserve">GLOBAL</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.CancelPopup" xml:space="preserve">Annuler le popup en cours</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.CancelPopup" xml:space="preserve">Annuler le popup en cours</x:String>
|
||||||
|
<x:String x:Key="Text.Hotkeys.Global.Clone" xml:space="preserve">Cloner un nouveau dépôt</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.CloseTab" xml:space="preserve">Fermer la page en cours</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.CloseTab" xml:space="preserve">Fermer la page en cours</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Aller à la page précédente</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Aller à la page précédente</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Aller à la page suivante</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Aller à la page suivante</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Créer une nouvelle page</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Créer une nouvelle page</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">Ouvrir le dialogue des préférences</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreferences" xml:space="preserve">Ouvrir le dialogue des préférences</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">DÉPÔT</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">DÉPÔT</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Commit les changements de l'index</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Commit les changements de l'index</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Commit et pousser les changements de l'index</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Commit et pousser les changements de l'index</x:String>
|
||||||
|
@ -424,62 +435,62 @@
|
||||||
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">il y a {0} mois</x:String>
|
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">il y a {0} mois</x:String>
|
||||||
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">L'an dernier</x:String>
|
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">L'an dernier</x:String>
|
||||||
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">il y a {0} ans</x:String>
|
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">il y a {0} ans</x:String>
|
||||||
<x:String x:Key="Text.Preference" xml:space="preserve">Préférences</x:String>
|
<x:String x:Key="Text.Preferences" xml:space="preserve">Préférences</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI" xml:space="preserve">IA</x:String>
|
<x:String x:Key="Text.Preferences.AI" xml:space="preserve">IA</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.AnalyzeDiffPrompt" xml:space="preserve">Analyser Diff Prompt</x:String>
|
<x:String x:Key="Text.Preferences.AI.AnalyzeDiffPrompt" xml:space="preserve">Analyser Diff Prompt</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.ApiKey" xml:space="preserve">Clé d'API</x:String>
|
<x:String x:Key="Text.Preferences.AI.ApiKey" xml:space="preserve">Clé d'API</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.GenerateSubjectPrompt" xml:space="preserve">Générer le sujet de Prompt</x:String>
|
<x:String x:Key="Text.Preferences.AI.GenerateSubjectPrompt" xml:space="preserve">Générer le sujet de Prompt</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Model" xml:space="preserve">Modèle</x:String>
|
<x:String x:Key="Text.Preferences.AI.Model" xml:space="preserve">Modèle</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Name" xml:space="preserve">Nom</x:String>
|
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">Nom</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">Serveur</x:String>
|
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">Serveur</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">APPARENCE</x:String>
|
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">APPARENCE</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">Police par défaut</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">Police par défaut</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFontSize" xml:space="preserve">Taille de police par défaut</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.DefaultFontSize" xml:space="preserve">Taille de police par défaut</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.EditorFontSize" xml:space="preserve">Taille de police de l'éditeur</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.EditorFontSize" xml:space="preserve">Taille de police de l'éditeur</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">Police monospace</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.MonospaceFont" xml:space="preserve">Police monospace</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">N'utiliser que des polices monospace pour l'éditeur de texte</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">N'utiliser que des polices monospace pour l'éditeur de texte</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">Thème</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.Theme" xml:space="preserve">Thème</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.ThemeOverrides" xml:space="preserve">Dérogations de thème</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.ThemeOverrides" xml:space="preserve">Dérogations de thème</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseFixedTabWidth" xml:space="preserve">Utiliser des onglets de taille fixe dans la barre de titre</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">Utiliser des onglets de taille fixe dans la barre de titre</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseNativeWindowFrame" xml:space="preserve">Utiliser un cadre de fenêtre natif</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">Utiliser un cadre de fenêtre natif</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge" xml:space="preserve">OUTIL DIFF/MERGE</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">OUTIL DIFF/MERGE</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">Chemin d'installation</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">Chemin d'installation</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">Saisir le chemin d'installation de l'outil diff/merge</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">Saisir le chemin d'installation de l'outil diff/merge</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">Outil</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">Outil</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">GÉNÉRAL</x:String>
|
<x:String x:Key="Text.Preferences.General" xml:space="preserve">GÉNÉRAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Vérifier les mises à jour au démarrage</x:String>
|
<x:String x:Key="Text.Preferences.General.Check4UpdatesOnStartup" xml:space="preserve">Vérifier les mises à jour au démarrage</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Language</x:String>
|
<x:String x:Key="Text.Preferences.General.Locale" xml:space="preserve">Language</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">Historique de commits</x:String>
|
<x:String x:Key="Text.Preferences.General.MaxHistoryCommits" xml:space="preserve">Historique de commits</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Afficher l'heure de l'auteur au lieu de l'heure de validation dans le graphique</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowAuthorTime" xml:space="preserve">Afficher l'heure de l'auteur au lieu de l'heure de validation dans le graphique</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Guide de longueur du sujet</x:String>
|
<x:String x:Key="Text.Preferences.General.SubjectGuideLength" xml:space="preserve">Guide de longueur du sujet</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preferences.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Activer auto CRLF</x:String>
|
<x:String x:Key="Text.Preferences.Git.CRLF" xml:space="preserve">Activer auto CRLF</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Répertoire de clônage par défaut</x:String>
|
<x:String x:Key="Text.Preferences.Git.DefaultCloneDir" xml:space="preserve">Répertoire de clônage par défaut</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">E-mail utilsateur</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email" xml:space="preserve">E-mail utilsateur</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">E-mail utilsateur global</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email.Placeholder" xml:space="preserve">E-mail utilsateur global</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">Chemin d'installation</x:String>
|
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">Chemin d'installation</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User" xml:space="preserve">Nom d'utilisateur</x:String>
|
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">Nom d'utilisateur</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User.Placeholder" xml:space="preserve">Nom d'utilisateur global</x:String>
|
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">Nom d'utilisateur global</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Version" xml:space="preserve">Version de Git</x:String>
|
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Version de Git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Invalid" xml:space="preserve">Cette application requière Git (>= 2.23.0)</x:String>
|
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">Cette application requière Git (>= 2.23.0)</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG" xml:space="preserve">SIGNATURE GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG" xml:space="preserve">SIGNATURE GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.CommitEnabled" xml:space="preserve">Signature GPG de commit</x:String>
|
<x:String x:Key="Text.Preferences.GPG.CommitEnabled" xml:space="preserve">Signature GPG de commit</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.TagEnabled" xml:space="preserve">Signature GPG de tag</x:String>
|
<x:String x:Key="Text.Preferences.GPG.TagEnabled" xml:space="preserve">Signature GPG de tag</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Format" xml:space="preserve">Format GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Format" xml:space="preserve">Format GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path" xml:space="preserve">Chemin d'installation du programme</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path" xml:space="preserve">Chemin d'installation du programme</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path.Placeholder" xml:space="preserve">Saisir le chemin d'installation vers le programme GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path.Placeholder" xml:space="preserve">Saisir le chemin d'installation vers le programme GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey" xml:space="preserve">Clé de signature de l'utilisateur</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey" xml:space="preserve">Clé de signature de l'utilisateur</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey.Placeholder" xml:space="preserve">Clé de signature GPG de l'utilisateur</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey.Placeholder" xml:space="preserve">Clé de signature GPG de l'utilisateur</x:String>
|
||||||
<x:String x:Key="Text.Preference.Integration" xml:space="preserve">INTEGRATION</x:String>
|
<x:String x:Key="Text.Preferences.Integration" xml:space="preserve">INTEGRATION</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
<x:String x:Key="Text.Preferences.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Path" xml:space="preserve">Chemin</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Path" xml:space="preserve">Chemin</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Élaguer une branche distant</x:String> <!-- If it is indeed about a branch -->
|
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Élaguer une branche distant</x:String> <!-- If it is indeed about a branch -->
|
||||||
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Cible :</x:String>
|
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Cible :</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Élaguer les Worktrees</x:String>
|
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Élaguer les Worktrees</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve"> Élaguer les information de worktree dans `$GIT_DIR/worktrees`</x:String>
|
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve"> Élaguer les information de worktree dans `$GIT_DIR/worktrees`</x:String>
|
||||||
<x:String x:Key="Text.Pull" xml:space="preserve">Pull</x:String>
|
<x:String x:Key="Text.Pull" xml:space="preserve">Pull</x:String>
|
||||||
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Branche :</x:String>
|
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Branche distante :</x:String>
|
||||||
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Fetch toutes les branches</x:String>
|
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Fetch toutes les branches</x:String>
|
||||||
<x:String x:Key="Text.Pull.Into" xml:space="preserve">Dans :</x:String>
|
<x:String x:Key="Text.Pull.Into" xml:space="preserve">Dans :</x:String>
|
||||||
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Changements locaux :</x:String>
|
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Changements locaux :</x:String>
|
||||||
|
@ -520,7 +531,7 @@
|
||||||
<x:String x:Key="Text.RemoteCM.Edit" xml:space="preserve">Editer...</x:String>
|
<x:String x:Key="Text.RemoteCM.Edit" xml:space="preserve">Editer...</x:String>
|
||||||
<x:String x:Key="Text.RemoteCM.Fetch" xml:space="preserve">Fetch</x:String>
|
<x:String x:Key="Text.RemoteCM.Fetch" xml:space="preserve">Fetch</x:String>
|
||||||
<x:String x:Key="Text.RemoteCM.OpenInBrowser" xml:space="preserve">Ouvrir dans le navigateur</x:String>
|
<x:String x:Key="Text.RemoteCM.OpenInBrowser" xml:space="preserve">Ouvrir dans le navigateur</x:String>
|
||||||
<x:String x:Key="Text.RemoteCM.Prune" xml:space="preserve">Prune</x:String>
|
<x:String x:Key="Text.RemoteCM.Prune" xml:space="preserve">Elaguer</x:String>
|
||||||
<x:String x:Key="Text.RemoveWorktree" xml:space="preserve">Confirmer la suppression du Worktree</x:String>
|
<x:String x:Key="Text.RemoveWorktree" xml:space="preserve">Confirmer la suppression du Worktree</x:String>
|
||||||
<x:String x:Key="Text.RemoveWorktree.Force" xml:space="preserve">Activer l'option `--force`</x:String>
|
<x:String x:Key="Text.RemoveWorktree.Force" xml:space="preserve">Activer l'option `--force`</x:String>
|
||||||
<x:String x:Key="Text.RemoveWorktree.Target" xml:space="preserve">Cible :</x:String>
|
<x:String x:Key="Text.RemoveWorktree.Target" xml:space="preserve">Cible :</x:String>
|
||||||
|
@ -530,7 +541,7 @@
|
||||||
<x:String x:Key="Text.RenameBranch.Target" xml:space="preserve">Branche :</x:String>
|
<x:String x:Key="Text.RenameBranch.Target" xml:space="preserve">Branche :</x:String>
|
||||||
<x:String x:Key="Text.Repository.Abort" xml:space="preserve">ABORT</x:String>
|
<x:String x:Key="Text.Repository.Abort" xml:space="preserve">ABORT</x:String>
|
||||||
<x:String x:Key="Text.Repository.AutoFetching" xml:space="preserve">Fetch automatique des changements depuis les dépôts...</x:String>
|
<x:String x:Key="Text.Repository.AutoFetching" xml:space="preserve">Fetch automatique des changements depuis les dépôts...</x:String>
|
||||||
<x:String x:Key="Text.Repository.Clean" xml:space="preserve">Nettoyage(GC & Prune)</x:String>
|
<x:String x:Key="Text.Repository.Clean" xml:space="preserve">Nettoyage(GC & Elaguage)</x:String>
|
||||||
<x:String x:Key="Text.Repository.CleanTips" xml:space="preserve">Lancer `git gc` pour ce repository.</x:String>
|
<x:String x:Key="Text.Repository.CleanTips" xml:space="preserve">Lancer `git gc` pour ce repository.</x:String>
|
||||||
<x:String x:Key="Text.Repository.ClearAllCommitsFilter" xml:space="preserve">Tout effacer</x:String>
|
<x:String x:Key="Text.Repository.ClearAllCommitsFilter" xml:space="preserve">Tout effacer</x:String>
|
||||||
<x:String x:Key="Text.Repository.Configure" xml:space="preserve">Configurer ce repository</x:String>
|
<x:String x:Key="Text.Repository.Configure" xml:space="preserve">Configurer ce repository</x:String>
|
||||||
|
@ -543,6 +554,7 @@
|
||||||
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">Naviguer vers le HEAD</x:String>
|
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">Naviguer vers le HEAD</x:String>
|
||||||
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">Activer l'option '--first-parent'</x:String>
|
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">Activer l'option '--first-parent'</x:String>
|
||||||
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">Créer une branche</x:String>
|
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">Créer une branche</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.OnlyHighlightCurrentBranchInHistories" xml:space="preserve">Mettre la branche courante en surbrillance dans le graph</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">Ouvrir dans {0}</x:String>
|
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">Ouvrir dans {0}</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">Ouvrir dans un outil externe</x:String>
|
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">Ouvrir dans un outil externe</x:String>
|
||||||
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">Rafraîchir</x:String>
|
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">Rafraîchir</x:String>
|
||||||
|
@ -564,7 +576,7 @@
|
||||||
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Ouvrir dans un terminal</x:String>
|
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Ouvrir dans un terminal</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">WORKTREES</x:String>
|
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">WORKTREES</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">AJOUTER WORKTREE</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">AJOUTER WORKTREE</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">PRUNE</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">ELAGUER</x:String>
|
||||||
<x:String x:Key="Text.RepositoryURL" xml:space="preserve">URL du repository Git</x:String>
|
<x:String x:Key="Text.RepositoryURL" xml:space="preserve">URL du repository Git</x:String>
|
||||||
<x:String x:Key="Text.Reset" xml:space="preserve">Reset branche actuelle à la révision</x:String>
|
<x:String x:Key="Text.Reset" xml:space="preserve">Reset branche actuelle à la révision</x:String>
|
||||||
<x:String x:Key="Text.Reset.Mode" xml:space="preserve">Reset Mode:</x:String>
|
<x:String x:Key="Text.Reset.Mode" xml:space="preserve">Reset Mode:</x:String>
|
||||||
|
|
|
@ -66,8 +66,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Invia ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Invia ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Riallinea ${0}$ su ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Riallinea ${0}$ su ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Rinomina ${0}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Rinomina ${0}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Imposta Branch di Tracciamento</x:String>
|
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Imposta Branch di Tracciamento...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.UnsetUpstream" xml:space="preserve">Rimuovi Tracciamento</x:String>
|
|
||||||
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Confronto Branch</x:String>
|
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Confronto Branch</x:String>
|
||||||
<x:String x:Key="Text.Bytes" xml:space="preserve">Byte</x:String>
|
<x:String x:Key="Text.Bytes" xml:space="preserve">Byte</x:String>
|
||||||
<x:String x:Key="Text.Cancel" xml:space="preserve">ANNULLA</x:String>
|
<x:String x:Key="Text.Cancel" xml:space="preserve">ANNULLA</x:String>
|
||||||
|
@ -344,7 +343,6 @@
|
||||||
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Traccia file con nome '{0}'</x:String>
|
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Traccia file con nome '{0}'</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Traccia tutti i file *{0}</x:String>
|
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Traccia tutti i file *{0}</x:String>
|
||||||
<x:String x:Key="Text.Histories" xml:space="preserve">Storico</x:String>
|
<x:String x:Key="Text.Histories" xml:space="preserve">Storico</x:String>
|
||||||
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">Passa Layout Orizzontale/Verticale</x:String>
|
|
||||||
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTORE</x:String>
|
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTORE</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">ORA AUTORE</x:String>
|
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">ORA AUTORE</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRAFICO & OGGETTO</x:String>
|
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRAFICO & OGGETTO</x:String>
|
||||||
|
@ -362,7 +360,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Vai alla pagina precedente</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Vai alla pagina precedente</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Vai alla pagina successiva</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Vai alla pagina successiva</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Crea una nuova pagina</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Crea una nuova pagina</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">Apri la finestra di preferenze</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreferences" xml:space="preserve">Apri la finestra di preferenze</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITORY</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITORY</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Conferma le modifiche in fase</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Conferma le modifiche in fase</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Conferma e invia le modifiche in fase</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Conferma e invia le modifiche in fase</x:String>
|
||||||
|
@ -427,63 +425,63 @@
|
||||||
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} mesi fa</x:String>
|
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} mesi fa</x:String>
|
||||||
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">L'anno scorso</x:String>
|
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">L'anno scorso</x:String>
|
||||||
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} anni fa</x:String>
|
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} anni fa</x:String>
|
||||||
<x:String x:Key="Text.Preference" xml:space="preserve">Preferenze</x:String>
|
<x:String x:Key="Text.Preferences" xml:space="preserve">Preferenze</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI" xml:space="preserve">AI</x:String>
|
<x:String x:Key="Text.Preferences.AI" xml:space="preserve">AI</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.AnalyzeDiffPrompt" xml:space="preserve">Analizza il Prompt Differenza</x:String>
|
<x:String x:Key="Text.Preferences.AI.AnalyzeDiffPrompt" xml:space="preserve">Analizza il Prompt Differenza</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.ApiKey" xml:space="preserve">Chiave API</x:String>
|
<x:String x:Key="Text.Preferences.AI.ApiKey" xml:space="preserve">Chiave API</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.GenerateSubjectPrompt" xml:space="preserve">Genera Prompt Soggetto</x:String>
|
<x:String x:Key="Text.Preferences.AI.GenerateSubjectPrompt" xml:space="preserve">Genera Prompt Soggetto</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Model" xml:space="preserve">Modello</x:String>
|
<x:String x:Key="Text.Preferences.AI.Model" xml:space="preserve">Modello</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Name" xml:space="preserve">Nome</x:String>
|
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">Nome</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">Server</x:String>
|
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">Server</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">ASPETTO</x:String>
|
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">ASPETTO</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">Font Predefinito</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">Font Predefinito</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize" xml:space="preserve">Font Size</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize" xml:space="preserve">Font Size</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Default" xml:space="preserve">Dimensione Font Predefinita</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Default" xml:space="preserve">Dimensione Font Predefinita</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Editor" xml:space="preserve">Dimensione Font Editor</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Editor" xml:space="preserve">Dimensione Font Editor</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">Font Monospaziato</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.MonospaceFont" xml:space="preserve">Font Monospaziato</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Usa solo font monospaziato nell'editor</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Usa solo font monospaziato nell'editor</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">Tema</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.Theme" xml:space="preserve">Tema</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.ThemeOverrides" xml:space="preserve">Sostituzioni Tema</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.ThemeOverrides" xml:space="preserve">Sostituzioni Tema</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseFixedTabWidth" xml:space="preserve">Usa larghezza fissa per i tab nella barra del titolo</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">Usa larghezza fissa per i tab nella barra del titolo</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseNativeWindowFrame" xml:space="preserve">Usa cornice finestra nativa</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">Usa cornice finestra nativa</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge" xml:space="preserve">STRUMENTO DI DIFFERENZA/UNIONE</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">STRUMENTO DI DIFFERENZA/UNIONE</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">Percorso Installazione</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">Percorso Installazione</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">Inserisci il percorso per lo strumento di differenza/unione</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">Inserisci il percorso per lo strumento di differenza/unione</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">Strumento</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">Strumento</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">GENERALE</x:String>
|
<x:String x:Key="Text.Preferences.General" xml:space="preserve">GENERALE</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Controlla aggiornamenti all'avvio</x:String>
|
<x:String x:Key="Text.Preferences.General.Check4UpdatesOnStartup" xml:space="preserve">Controlla aggiornamenti all'avvio</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Lingua</x:String>
|
<x:String x:Key="Text.Preferences.General.Locale" xml:space="preserve">Lingua</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">Numero massimo di commit nella cronologia</x:String>
|
<x:String x:Key="Text.Preferences.General.MaxHistoryCommits" xml:space="preserve">Numero massimo di commit nella cronologia</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Mostra l'orario dell'autore anziché quello del commit nel grafico</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowAuthorTime" xml:space="preserve">Mostra l'orario dell'autore anziché quello del commit nel grafico</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Lunghezza Guida Soggetto</x:String>
|
<x:String x:Key="Text.Preferences.General.SubjectGuideLength" xml:space="preserve">Lunghezza Guida Soggetto</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preferences.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Abilita Auto CRLF</x:String>
|
<x:String x:Key="Text.Preferences.Git.CRLF" xml:space="preserve">Abilita Auto CRLF</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Cartella predefinita per cloni</x:String>
|
<x:String x:Key="Text.Preferences.Git.DefaultCloneDir" xml:space="preserve">Cartella predefinita per cloni</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">Email Utente</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email" xml:space="preserve">Email Utente</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">Email globale utente Git</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email.Placeholder" xml:space="preserve">Email globale utente Git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">Percorso Installazione</x:String>
|
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">Percorso Installazione</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User" xml:space="preserve">Nome Utente</x:String>
|
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">Nome Utente</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User.Placeholder" xml:space="preserve">Nome globale utente Git</x:String>
|
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">Nome globale utente Git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Version" xml:space="preserve">Versione di Git</x:String>
|
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Versione di Git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Invalid" xml:space="preserve">Git (>= 2.23.0) è richiesto da questa applicazione</x:String>
|
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">Git (>= 2.23.0) è richiesto da questa applicazione</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG" xml:space="preserve">FIRMA GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG" xml:space="preserve">FIRMA GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.CommitEnabled" xml:space="preserve">Firma GPG per commit</x:String>
|
<x:String x:Key="Text.Preferences.GPG.CommitEnabled" xml:space="preserve">Firma GPG per commit</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.TagEnabled" xml:space="preserve">Firma GPG per tag</x:String>
|
<x:String x:Key="Text.Preferences.GPG.TagEnabled" xml:space="preserve">Firma GPG per tag</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Format" xml:space="preserve">Formato GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Format" xml:space="preserve">Formato GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path" xml:space="preserve">Percorso Programma Installato</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path" xml:space="preserve">Percorso Programma Installato</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path.Placeholder" xml:space="preserve">Inserisci il percorso per il programma GPG installato</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path.Placeholder" xml:space="preserve">Inserisci il percorso per il programma GPG installato</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey" xml:space="preserve">Chiave Firma Utente</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey" xml:space="preserve">Chiave Firma Utente</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey.Placeholder" xml:space="preserve">Chiave GPG dell'utente per la firma</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey.Placeholder" xml:space="preserve">Chiave GPG dell'utente per la firma</x:String>
|
||||||
<x:String x:Key="Text.Preference.Integration" xml:space="preserve">INTEGRAZIONE</x:String>
|
<x:String x:Key="Text.Preferences.Integration" xml:space="preserve">INTEGRAZIONE</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell" xml:space="preserve">SHELL/TERMINALE</x:String>
|
<x:String x:Key="Text.Preferences.Shell" xml:space="preserve">SHELL/TERMINALE</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Type" xml:space="preserve">Shell/Terminale</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Type" xml:space="preserve">Shell/Terminale</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Path" xml:space="preserve">Percorso</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Path" xml:space="preserve">Percorso</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Potatura Remota</x:String>
|
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Potatura Remota</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Destinazione:</x:String>
|
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Destinazione:</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Potatura Worktrees</x:String>
|
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Potatura Worktrees</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Potatura delle informazioni di worktree in `$GIT_DIR/worktrees`</x:String>
|
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Potatura delle informazioni di worktree in `$GIT_DIR/worktrees`</x:String>
|
||||||
<x:String x:Key="Text.Pull" xml:space="preserve">Pull</x:String>
|
<x:String x:Key="Text.Pull" xml:space="preserve">Pull</x:String>
|
||||||
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Branch:</x:String>
|
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Branch Remoto:</x:String>
|
||||||
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Recupera tutti i branch</x:String>
|
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Recupera tutti i branch</x:String>
|
||||||
<x:String x:Key="Text.Pull.Into" xml:space="preserve">In:</x:String>
|
<x:String x:Key="Text.Pull.Into" xml:space="preserve">In:</x:String>
|
||||||
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Modifiche Locali:</x:String>
|
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Modifiche Locali:</x:String>
|
||||||
|
|
|
@ -91,8 +91,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Subir ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Subir ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebase ${0}$ em ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Rebase ${0}$ em ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Renomear ${0}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Renomear ${0}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Definir Branch de Rastreamento</x:String>
|
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Definir Branch de Rastreamento...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.UnsetUpstream" xml:space="preserve">Remover Upstream</x:String>
|
|
||||||
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Comparação de Branches</x:String>
|
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Comparação de Branches</x:String>
|
||||||
<x:String x:Key="Text.Bytes" xml:space="preserve">Bytes</x:String>
|
<x:String x:Key="Text.Bytes" xml:space="preserve">Bytes</x:String>
|
||||||
<x:String x:Key="Text.Cancel" xml:space="preserve">CANCELAR</x:String>
|
<x:String x:Key="Text.Cancel" xml:space="preserve">CANCELAR</x:String>
|
||||||
|
@ -368,7 +367,6 @@
|
||||||
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Rastrear arquivos nomeados '{0}'</x:String>
|
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Rastrear arquivos nomeados '{0}'</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Rastrear todos os arquivos *{0}</x:String>
|
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Rastrear todos os arquivos *{0}</x:String>
|
||||||
<x:String x:Key="Text.Histories" xml:space="preserve">Históricos</x:String>
|
<x:String x:Key="Text.Histories" xml:space="preserve">Históricos</x:String>
|
||||||
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">Alternar Layout Horizontal/Vertical</x:String>
|
|
||||||
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTOR</x:String>
|
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTOR</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">DATA DO AUTOR</x:String>
|
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">DATA DO AUTOR</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRÁFICO & ASSUNTO</x:String>
|
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRÁFICO & ASSUNTO</x:String>
|
||||||
|
@ -385,7 +383,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Ir para a página anterior</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Ir para a página anterior</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Ir para a próxima página</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Ir para a próxima página</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Criar nova página</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Criar nova página</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">Abrir diálogo de preferências</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreferences" xml:space="preserve">Abrir diálogo de preferências</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITÓRIO</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">REPOSITÓRIO</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Commitar mudanças preparadas</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Commitar mudanças preparadas</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Commitar e enviar mudanças preparadas</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Commitar e enviar mudanças preparadas</x:String>
|
||||||
|
@ -450,63 +448,63 @@
|
||||||
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} meses atrás</x:String>
|
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} meses atrás</x:String>
|
||||||
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">Ano passado</x:String>
|
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">Ano passado</x:String>
|
||||||
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} anos atrás</x:String>
|
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} anos atrás</x:String>
|
||||||
<x:String x:Key="Text.Preference" xml:space="preserve">Preferências</x:String>
|
<x:String x:Key="Text.Preferences" xml:space="preserve">Preferências</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI" xml:space="preserve">INTELIGÊNCIA ARTIFICIAL</x:String>
|
<x:String x:Key="Text.Preferences.AI" xml:space="preserve">INTELIGÊNCIA ARTIFICIAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.AnalyzeDiffPrompt" xml:space="preserve">Prompt para Analisar Diff</x:String>
|
<x:String x:Key="Text.Preferences.AI.AnalyzeDiffPrompt" xml:space="preserve">Prompt para Analisar Diff</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.ApiKey" xml:space="preserve">Chave da API</x:String>
|
<x:String x:Key="Text.Preferences.AI.ApiKey" xml:space="preserve">Chave da API</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.GenerateSubjectPrompt" xml:space="preserve">Prompt para Gerar Título</x:String>
|
<x:String x:Key="Text.Preferences.AI.GenerateSubjectPrompt" xml:space="preserve">Prompt para Gerar Título</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Model" xml:space="preserve">Modelo</x:String>
|
<x:String x:Key="Text.Preferences.AI.Model" xml:space="preserve">Modelo</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Name" xml:space="preserve">Nome</x:String>
|
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">Nome</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">Servidor</x:String>
|
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">Servidor</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">APARÊNCIA</x:String>
|
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">APARÊNCIA</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">Fonte Padrão</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">Fonte Padrão</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize" xml:space="preserve">Tamanho da Fonte</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize" xml:space="preserve">Tamanho da Fonte</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Default" xml:space="preserve">Padrão</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Default" xml:space="preserve">Padrão</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Editor" xml:space="preserve">Editor</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Editor" xml:space="preserve">Editor</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">Fonte Monoespaçada</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.MonospaceFont" xml:space="preserve">Fonte Monoespaçada</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Usar fonte monoespaçada apenas no editor de texto</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">Usar fonte monoespaçada apenas no editor de texto</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">Tema</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.Theme" xml:space="preserve">Tema</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.ThemeOverrides" xml:space="preserve">Substituições de Tema</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.ThemeOverrides" xml:space="preserve">Substituições de Tema</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseFixedTabWidth" xml:space="preserve">Usar largura fixa de aba na barra de título</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">Usar largura fixa de aba na barra de título</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseNativeWindowFrame" xml:space="preserve">Usar moldura de janela nativa</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">Usar moldura de janela nativa</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge" xml:space="preserve">FERRAMENTA DE DIFF/MERGE</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">FERRAMENTA DE DIFF/MERGE</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">Caminho de Instalação</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">Caminho de Instalação</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">Insira o caminho para a ferramenta de diff/merge</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">Insira o caminho para a ferramenta de diff/merge</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">Ferramenta</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">Ferramenta</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">GERAL</x:String>
|
<x:String x:Key="Text.Preferences.General" xml:space="preserve">GERAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Verificar atualizações na inicialização</x:String>
|
<x:String x:Key="Text.Preferences.General.Check4UpdatesOnStartup" xml:space="preserve">Verificar atualizações na inicialização</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Idioma</x:String>
|
<x:String x:Key="Text.Preferences.General.Locale" xml:space="preserve">Idioma</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">Commits do Histórico</x:String>
|
<x:String x:Key="Text.Preferences.General.MaxHistoryCommits" xml:space="preserve">Commits do Histórico</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Exibir data do autor em vez da data do commit no gráfico</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowAuthorTime" xml:space="preserve">Exibir data do autor em vez da data do commit no gráfico</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Comprimento do Guia de Assunto</x:String>
|
<x:String x:Key="Text.Preferences.General.SubjectGuideLength" xml:space="preserve">Comprimento do Guia de Assunto</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preferences.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.Preferences.Git.CRLF" xml:space="preserve">Habilitar Auto CRLF</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Diretório de Clone Padrão</x:String>
|
<x:String x:Key="Text.Preferences.Git.DefaultCloneDir" xml:space="preserve">Diretório de Clone Padrão</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">Email do Usuário</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email" xml:space="preserve">Email do Usuário</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">Email global do usuário git</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email.Placeholder" xml:space="preserve">Email global do usuário git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">Caminho de Instalação</x:String>
|
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">Caminho de Instalação</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User" xml:space="preserve">Nome do Usuário</x:String>
|
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">Nome do Usuário</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User.Placeholder" xml:space="preserve">Nome global do usuário git</x:String>
|
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">Nome global do usuário git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Version" xml:space="preserve">Versão do Git</x:String>
|
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Versão do Git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Invalid" xml:space="preserve">Git (>= 2.23.0) é necessário para este aplicativo</x:String>
|
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">Git (>= 2.23.0) é necessário para este aplicativo</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG" xml:space="preserve">ASSINATURA GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG" xml:space="preserve">ASSINATURA GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.CommitEnabled" xml:space="preserve">Assinatura GPG de commit</x:String>
|
<x:String x:Key="Text.Preferences.GPG.CommitEnabled" xml:space="preserve">Assinatura GPG de commit</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.TagEnabled" xml:space="preserve">Assinatura GPG de tag</x:String>
|
<x:String x:Key="Text.Preferences.GPG.TagEnabled" xml:space="preserve">Assinatura GPG de tag</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Format" xml:space="preserve">Formato GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Format" xml:space="preserve">Formato GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path" xml:space="preserve">Caminho de Instalação do Programa</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path" xml:space="preserve">Caminho de Instalação do Programa</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path.Placeholder" xml:space="preserve">Insira o caminho para o programa gpg instalado</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path.Placeholder" xml:space="preserve">Insira o caminho para o programa gpg instalado</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey" xml:space="preserve">Chave de Assinatura do Usuário</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey" xml:space="preserve">Chave de Assinatura do Usuário</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey.Placeholder" xml:space="preserve">Chave de assinatura gpg do usuário</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey.Placeholder" xml:space="preserve">Chave de assinatura gpg do usuário</x:String>
|
||||||
<x:String x:Key="Text.Preference.Integration" xml:space="preserve">INTEGRAÇÃO</x:String>
|
<x:String x:Key="Text.Preferences.Integration" xml:space="preserve">INTEGRAÇÃO</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
<x:String x:Key="Text.Preferences.Shell" xml:space="preserve">SHELL/TERMINAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Type" xml:space="preserve">Shell/Terminal</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Path" xml:space="preserve">Caminho</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Path" xml:space="preserve">Caminho</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Prunar Remoto</x:String>
|
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Prunar Remoto</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Alvo:</x:String>
|
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Alvo:</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Podar Worktrees</x:String>
|
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Podar Worktrees</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Podar informações de worktree em `$GIT_DIR/worktrees`</x:String>
|
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Podar informações de worktree em `$GIT_DIR/worktrees`</x:String>
|
||||||
<x:String x:Key="Text.Pull" xml:space="preserve">Puxar</x:String>
|
<x:String x:Key="Text.Pull" xml:space="preserve">Puxar</x:String>
|
||||||
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Branch:</x:String>
|
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Branch Remoto:</x:String>
|
||||||
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Buscar todos os branches</x:String>
|
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Buscar todos os branches</x:String>
|
||||||
<x:String x:Key="Text.Pull.Into" xml:space="preserve">Para:</x:String>
|
<x:String x:Key="Text.Pull.Into" xml:space="preserve">Para:</x:String>
|
||||||
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Alterações Locais:</x:String>
|
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Alterações Locais:</x:String>
|
||||||
|
@ -570,7 +568,6 @@
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">Desfazer</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">Desfazer</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">Esconder no gráfico de commit</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">Esconder no gráfico de commit</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">Incluir no gráfico de commit</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">Incluir no gráfico de commit</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">Alternar Modo de Ordenação</x:String>
|
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Data do Commit (--date-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Data do Commit (--date-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Topologicamente (--topo-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Topologicamente (--topo-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">BRANCHES LOCAIS</x:String>
|
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">BRANCHES LOCAIS</x:String>
|
||||||
|
|
|
@ -67,8 +67,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Выложить ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Выложить ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Переместить ${0}$ на ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">Переместить ${0}$ на ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Переименовать ${0}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">Переименовать ${0}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Отслеживать ветку</x:String>
|
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Отслеживать ветку...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.UnsetUpstream" xml:space="preserve">Отключить основной поток</x:String>
|
|
||||||
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Сравнение веток</x:String>
|
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Сравнение веток</x:String>
|
||||||
<x:String x:Key="Text.Bytes" xml:space="preserve">Байты</x:String>
|
<x:String x:Key="Text.Bytes" xml:space="preserve">Байты</x:String>
|
||||||
<x:String x:Key="Text.Cancel" xml:space="preserve">ОТМЕНА</x:String>
|
<x:String x:Key="Text.Cancel" xml:space="preserve">ОТМЕНА</x:String>
|
||||||
|
@ -79,8 +78,8 @@
|
||||||
<x:String x:Key="Text.ChangeDisplayMode.Grid" xml:space="preserve">Показывать в виде списка файлов и каталогов</x:String>
|
<x:String x:Key="Text.ChangeDisplayMode.Grid" xml:space="preserve">Показывать в виде списка файлов и каталогов</x:String>
|
||||||
<x:String x:Key="Text.ChangeDisplayMode.List" xml:space="preserve">Показывать в виде списка путей</x:String>
|
<x:String x:Key="Text.ChangeDisplayMode.List" xml:space="preserve">Показывать в виде списка путей</x:String>
|
||||||
<x:String x:Key="Text.ChangeDisplayMode.Tree" xml:space="preserve">Показывать в виде дерева файловой системы</x:String>
|
<x:String x:Key="Text.ChangeDisplayMode.Tree" xml:space="preserve">Показывать в виде дерева файловой системы</x:String>
|
||||||
<x:String x:Key="Text.Checkout" xml:space="preserve">Проверить ветку</x:String>
|
<x:String x:Key="Text.Checkout" xml:space="preserve">Переключить ветку</x:String>
|
||||||
<x:String x:Key="Text.Checkout.Commit" xml:space="preserve">Проверить ревизию</x:String>
|
<x:String x:Key="Text.Checkout.Commit" xml:space="preserve">Переключение ревизии</x:String>
|
||||||
<x:String x:Key="Text.Checkout.Commit.Warning" xml:space="preserve">Предупреждение: После переключения ревизии ваша Голова (HEAD) будет отсоединена</x:String>
|
<x:String x:Key="Text.Checkout.Commit.Warning" xml:space="preserve">Предупреждение: После переключения ревизии ваша Голова (HEAD) будет отсоединена</x:String>
|
||||||
<x:String x:Key="Text.Checkout.Commit.Target" xml:space="preserve">Ревизия:</x:String>
|
<x:String x:Key="Text.Checkout.Commit.Target" xml:space="preserve">Ревизия:</x:String>
|
||||||
<x:String x:Key="Text.Checkout.Target" xml:space="preserve">Ветка:</x:String>
|
<x:String x:Key="Text.Checkout.Target" xml:space="preserve">Ветка:</x:String>
|
||||||
|
@ -91,9 +90,9 @@
|
||||||
<x:String x:Key="Text.CherryPick" xml:space="preserve"> Частичный выбор</x:String>
|
<x:String x:Key="Text.CherryPick" xml:space="preserve"> Частичный выбор</x:String>
|
||||||
<x:String x:Key="Text.CherryPick.AppendSourceToMessage" xml:space="preserve">Добавить источник для ревизии сообщения</x:String>
|
<x:String x:Key="Text.CherryPick.AppendSourceToMessage" xml:space="preserve">Добавить источник для ревизии сообщения</x:String>
|
||||||
<x:String x:Key="Text.CherryPick.Commit" xml:space="preserve">Ревизия(и):</x:String>
|
<x:String x:Key="Text.CherryPick.Commit" xml:space="preserve">Ревизия(и):</x:String>
|
||||||
<x:String x:Key="Text.CherryPick.CommitChanges" xml:space="preserve">Фиксировать все изменения.</x:String>
|
<x:String x:Key="Text.CherryPick.CommitChanges" xml:space="preserve">Ревизия всех изменений.</x:String>
|
||||||
<x:String x:Key="Text.CherryPick.Mainline" xml:space="preserve">Основной:</x:String>
|
<x:String x:Key="Text.CherryPick.Mainline" xml:space="preserve">Основной:</x:String>
|
||||||
<x:String x:Key="Text.CherryPick.Mainline.Tips" xml:space="preserve">Обычно вы не можете выделить слияние, потому что не знаете, какую сторону слияния следует считать основной. Эта опция позволяет отобразить изменение относительно указанного родительского элемента.</x:String>
|
<x:String x:Key="Text.CherryPick.Mainline.Tips" xml:space="preserve">Обычно вы не можете выделить слияние, потому что не знаете, какую сторону слияния следует считать основной. Эта опция позволяет отобразить изменения относительно указанного родительского элемента.</x:String>
|
||||||
<x:String x:Key="Text.ClearStashes" xml:space="preserve">Очистить отложенные</x:String>
|
<x:String x:Key="Text.ClearStashes" xml:space="preserve">Очистить отложенные</x:String>
|
||||||
<x:String x:Key="Text.ClearStashes.Message" xml:space="preserve">Вы пытаетесь очистить все отложенные. Вы уверены, что хотите продолжить?</x:String>
|
<x:String x:Key="Text.ClearStashes.Message" xml:space="preserve">Вы пытаетесь очистить все отложенные. Вы уверены, что хотите продолжить?</x:String>
|
||||||
<x:String x:Key="Text.Clone" xml:space="preserve">Клонировать внешний репозиторий</x:String>
|
<x:String x:Key="Text.Clone" xml:space="preserve">Клонировать внешний репозиторий</x:String>
|
||||||
|
@ -165,6 +164,8 @@
|
||||||
<x:String x:Key="Text.Configure.Git.DefaultRemote" xml:space="preserve">Внешний репозиторий по умолчанию</x:String>
|
<x:String x:Key="Text.Configure.Git.DefaultRemote" xml:space="preserve">Внешний репозиторий по умолчанию</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Разрешить '--prune' при скачивании</x:String>
|
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Разрешить '--prune' при скачивании</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">ОТСЛЕЖИВАНИЕ ПРОБЛЕМ</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">ОТСЛЕЖИВАНИЕ ПРОБЛЕМ</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteeIssue" xml:space="preserve">Добавить пример правила для тем в Gitee</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteePullRequest" xml:space="preserve">Добавить пример правила запроса скачивания из Gitee</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Добавить пример правила для Git</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Добавить пример правила для Git</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Добавить пример правила Jira</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Добавить пример правила Jira</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">Добавить пример правила выдачи GitLab</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">Добавить пример правила выдачи GitLab</x:String>
|
||||||
|
@ -204,7 +205,7 @@
|
||||||
<x:String x:Key="Text.CreateBranch.LocalChanges.DoNothing" xml:space="preserve">Ничего не делать</x:String>
|
<x:String x:Key="Text.CreateBranch.LocalChanges.DoNothing" xml:space="preserve">Ничего не делать</x:String>
|
||||||
<x:String x:Key="Text.CreateBranch.LocalChanges.StashAndReply" xml:space="preserve">Отложить и применить повторно</x:String>
|
<x:String x:Key="Text.CreateBranch.LocalChanges.StashAndReply" xml:space="preserve">Отложить и применить повторно</x:String>
|
||||||
<x:String x:Key="Text.CreateBranch.Name" xml:space="preserve">Имя новой ветки:</x:String>
|
<x:String x:Key="Text.CreateBranch.Name" xml:space="preserve">Имя новой ветки:</x:String>
|
||||||
<x:String x:Key="Text.CreateBranch.Name.Placeholder" xml:space="preserve">Ввести имя ветки.</x:String>
|
<x:String x:Key="Text.CreateBranch.Name.Placeholder" xml:space="preserve">Введите имя ветки.</x:String>
|
||||||
<x:String x:Key="Text.CreateBranch.Title" xml:space="preserve">Создать локальную ветку</x:String>
|
<x:String x:Key="Text.CreateBranch.Title" xml:space="preserve">Создать локальную ветку</x:String>
|
||||||
<x:String x:Key="Text.CreateTag" xml:space="preserve">Создать метку...</x:String>
|
<x:String x:Key="Text.CreateTag" xml:space="preserve">Создать метку...</x:String>
|
||||||
<x:String x:Key="Text.CreateTag.BasedOn" xml:space="preserve">Новая метка у:</x:String>
|
<x:String x:Key="Text.CreateTag.BasedOn" xml:space="preserve">Новая метка у:</x:String>
|
||||||
|
@ -259,13 +260,13 @@
|
||||||
<x:String x:Key="Text.Diff.VisualLines.All" xml:space="preserve">Показывать все строки</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.All" xml:space="preserve">Показывать все строки</x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.Decr" xml:space="preserve">Уменьшить количество видимых строк</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.Decr" xml:space="preserve">Уменьшить количество видимых строк</x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.Incr" xml:space="preserve">Увеличить количество видимых строк</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.Incr" xml:space="preserve">Увеличить количество видимых строк</x:String>
|
||||||
<x:String x:Key="Text.Diff.Welcome" xml:space="preserve">ВЫБРАТЬ ФАЙЛ ДЛЯ ПРОСМОТРА ИЗМЕНЕНИЙ</x:String>
|
<x:String x:Key="Text.Diff.Welcome" xml:space="preserve">ВЫБЕРИТЕ ФАЙЛ ДЛЯ ПРОСМОТРА ИЗМЕНЕНИЙ</x:String>
|
||||||
<x:String x:Key="Text.DiffWithMerger" xml:space="preserve">Открыть в инструменте слияния</x:String>
|
<x:String x:Key="Text.DiffWithMerger" xml:space="preserve">Открыть в инструменте слияния</x:String>
|
||||||
<x:String x:Key="Text.Discard" xml:space="preserve">Отклонить изменения</x:String>
|
<x:String x:Key="Text.Discard" xml:space="preserve">Отклонить изменения</x:String>
|
||||||
<x:String x:Key="Text.Discard.All" xml:space="preserve">Все локальные изменения в рабочей копии.</x:String>
|
<x:String x:Key="Text.Discard.All" xml:space="preserve">Все локальные изменения в рабочей копии.</x:String>
|
||||||
<x:String x:Key="Text.Discard.Changes" xml:space="preserve">Изменения:</x:String>
|
<x:String x:Key="Text.Discard.Changes" xml:space="preserve">Изменения:</x:String>
|
||||||
<x:String x:Key="Text.Discard.IncludeIgnored" xml:space="preserve">Включить игнорируемые файлы</x:String>
|
<x:String x:Key="Text.Discard.IncludeIgnored" xml:space="preserve">Включить игнорируемые файлы</x:String>
|
||||||
<x:String x:Key="Text.Discard.Total" xml:space="preserve">Всего {0} изменений будут отменены</x:String>
|
<x:String x:Key="Text.Discard.Total" xml:space="preserve">{0} изменений будут отменены</x:String>
|
||||||
<x:String x:Key="Text.Discard.Warning" xml:space="preserve">Вы не можете отменить это действие!!!</x:String>
|
<x:String x:Key="Text.Discard.Warning" xml:space="preserve">Вы не можете отменить это действие!!!</x:String>
|
||||||
<x:String x:Key="Text.EditRepositoryNode.Bookmark" xml:space="preserve">Закладка:</x:String>
|
<x:String x:Key="Text.EditRepositoryNode.Bookmark" xml:space="preserve">Закладка:</x:String>
|
||||||
<x:String x:Key="Text.EditRepositoryNode.Name" xml:space="preserve">Новое имя:</x:String>
|
<x:String x:Key="Text.EditRepositoryNode.Name" xml:space="preserve">Новое имя:</x:String>
|
||||||
|
@ -352,7 +353,6 @@
|
||||||
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Отслеживать файлы с именем «{0}»</x:String>
|
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Отслеживать файлы с именем «{0}»</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Отслеживать все *{0} файлов</x:String>
|
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Отслеживать все *{0} файлов</x:String>
|
||||||
<x:String x:Key="Text.Histories" xml:space="preserve">Истории</x:String>
|
<x:String x:Key="Text.Histories" xml:space="preserve">Истории</x:String>
|
||||||
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">Переключение горизонтального/вертикального расположения</x:String>
|
|
||||||
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">АВТОР</x:String>
|
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">АВТОР</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">ВРЕМЯ АВТОРА</x:String>
|
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">ВРЕМЯ АВТОРА</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">ГРАФ И СУБЪЕКТ</x:String>
|
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">ГРАФ И СУБЪЕКТ</x:String>
|
||||||
|
@ -370,7 +370,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Перейти на предыдущую вкладку</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Перейти на предыдущую вкладку</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Перейти на следующую вкладку</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Перейти на следующую вкладку</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Создать новую вкладку</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Создать новую вкладку</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">Открыть диалоговое окно настроек</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreferences" xml:space="preserve">Открыть диалоговое окно настроек</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">РЕПОЗИТОРИЙ</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">РЕПОЗИТОРИЙ</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Зафиксировать подготовленные изменения</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Зафиксировать подготовленные изменения</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Зафиксировать и выложить подготовленные изменения</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">Зафиксировать и выложить подготовленные изменения</x:String>
|
||||||
|
@ -378,7 +378,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CreateBranchOnCommit" xml:space="preserve">Создать новую ветку на основе выбранной ветки</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CreateBranchOnCommit" xml:space="preserve">Создать новую ветку на основе выбранной ветки</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.DiscardSelected" xml:space="preserve">Отклонить выбранные изменения</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.DiscardSelected" xml:space="preserve">Отклонить выбранные изменения</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Fetch" xml:space="preserve">Извлечение, запускается сразу</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Fetch" xml:space="preserve">Извлечение, запускается сразу</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.GoHome" xml:space="preserve">Режим доски (по-умолчанию)</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.GoHome" xml:space="preserve">Режим доски (по умолчанию)</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Refresh" xml:space="preserve">Принудительно перезагрузить репозиторий</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Refresh" xml:space="preserve">Принудительно перезагрузить репозиторий</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Pull" xml:space="preserve">Забрать, запускается сразу</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Pull" xml:space="preserve">Забрать, запускается сразу</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Push" xml:space="preserve">Выложить, запускается сразу</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Push" xml:space="preserve">Выложить, запускается сразу</x:String>
|
||||||
|
@ -442,67 +442,68 @@
|
||||||
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} дней назад</x:String>
|
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} дней назад</x:String>
|
||||||
<x:String x:Key="Text.Period.LastMonth" xml:space="preserve">Последний месяц</x:String>
|
<x:String x:Key="Text.Period.LastMonth" xml:space="preserve">Последний месяц</x:String>
|
||||||
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} месяцев назад</x:String>
|
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} месяцев назад</x:String>
|
||||||
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">В пролому году</x:String>
|
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">В прошлом году</x:String>
|
||||||
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} лет назад</x:String>
|
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} лет назад</x:String>
|
||||||
<x:String x:Key="Text.Preference" xml:space="preserve">Параметры</x:String>
|
<x:String x:Key="Text.Preferences" xml:space="preserve">Параметры</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI" xml:space="preserve">ОТКРЫТЬ ИИ</x:String>
|
<x:String x:Key="Text.Preferences.AI" xml:space="preserve">ОТКРЫТЬ ИИ</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.ApiKey" xml:space="preserve">Ключ API</x:String>
|
<x:String x:Key="Text.Preferences.AI.ApiKey" xml:space="preserve">Ключ API</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.AnalyzeDiffPrompt" xml:space="preserve">Запрос на анализ различий</x:String>
|
<x:String x:Key="Text.Preferences.AI.AnalyzeDiffPrompt" xml:space="preserve">Запрос на анализ различий</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.GenerateSubjectPrompt" xml:space="preserve">Произвести запрос на тему</x:String>
|
<x:String x:Key="Text.Preferences.AI.GenerateSubjectPrompt" xml:space="preserve">Произвести запрос на тему</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Model" xml:space="preserve">Модель</x:String>
|
<x:String x:Key="Text.Preferences.AI.Model" xml:space="preserve">Модель</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Name" xml:space="preserve">Имя:</x:String>
|
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">Имя:</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">Сервер</x:String>
|
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">Сервер</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">ВИД</x:String>
|
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">ВИД</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">Шрифт по умолчанию</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">Шрифт по умолчанию</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize" xml:space="preserve">Размер шрифта</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize" xml:space="preserve">Размер шрифта</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Default" xml:space="preserve">По умолчанию</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Default" xml:space="preserve">По умолчанию</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Editor" xml:space="preserve">Редактор</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Editor" xml:space="preserve">Редактор</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">Моноширный шрифт</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.MonospaceFont" xml:space="preserve">Моноширный шрифт</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">В текстовом редакторе используется только моноширный шрифт</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">В текстовом редакторе используется только моноширный шрифт</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">Тема</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.Theme" xml:space="preserve">Тема</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.ThemeOverrides" xml:space="preserve">Переопределение темы</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.ThemeOverrides" xml:space="preserve">Переопределение темы</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseFixedTabWidth" xml:space="preserve">Использовать фиксированную ширину табуляции в строке заголовка.</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">Использовать фиксированную ширину табуляции в строке заголовка.</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseNativeWindowFrame" xml:space="preserve">Использовать системное окно</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">Использовать системное окно</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge" xml:space="preserve">ИНСТРУМЕНТ РАЗЛИЧИЙ/СЛИЯНИЯ</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">ИНСТРУМЕНТ РАЗЛИЧИЙ/СЛИЯНИЯ</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">Путь установки</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">Путь установки</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">Введите путь для инструмента различия/слияния</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">Введите путь для инструмента различия/слияния</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">Инструмент</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">Инструмент</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">ОСНОВНЫЕ</x:String>
|
<x:String x:Key="Text.Preferences.General" xml:space="preserve">ОСНОВНЫЕ</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Проверить обновления при старте</x:String>
|
<x:String x:Key="Text.Preferences.General.Check4UpdatesOnStartup" xml:space="preserve">Проверить обновления при старте</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DateFormat" xml:space="preserve">Формат даты</x:String>
|
<x:String x:Key="Text.Preferences.General.DateFormat" xml:space="preserve">Формат даты</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Язык</x:String>
|
<x:String x:Key="Text.Preferences.General.Locale" xml:space="preserve">Язык</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">Максимальная длина истории</x:String>
|
<x:String x:Key="Text.Preferences.General.MaxHistoryCommits" xml:space="preserve">Максимальная длина истории</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Показывать время автора вместо времени ревизии на графике</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowAuthorTime" xml:space="preserve">Показывать время автора вместо времени ревизии на графике</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowChildren" xml:space="preserve">Показать наследника в деталях комментария</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowChildren" xml:space="preserve">Показать наследника в деталях комментария</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Длина темы ревизии</x:String>
|
<x:String x:Key="Text.Preferences.General.SubjectGuideLength" xml:space="preserve">Длина темы ревизии</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preferences.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Включить автозавершение CRLF</x:String>
|
<x:String x:Key="Text.Preferences.Git.CRLF" xml:space="preserve">Включить автозавершение CRLF</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Каталог клонирования по умолчанию</x:String>
|
<x:String x:Key="Text.Preferences.Git.DefaultCloneDir" xml:space="preserve">Каталог клонирования по умолчанию</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">Электроная почта пользователя</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email" xml:space="preserve">Электроная почта пользователя</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">Общая электроная почта пользователя git</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email.Placeholder" xml:space="preserve">Общая электроная почта пользователя git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">Путь установки</x:String>
|
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">Путь установки</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User" xml:space="preserve">Имя пользователя</x:String>
|
<x:String x:Key="Text.Preferences.Git.SSLVerify" xml:space="preserve">Разрешить верификацию HTTP SSL</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User.Placeholder" xml:space="preserve">Общее имя пользователя git</x:String>
|
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">Имя пользователя</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Version" xml:space="preserve">Версия Git</x:String>
|
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">Общее имя пользователя git</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Invalid" xml:space="preserve">Для работы программы требуется версия Git (>= 2.23.0)</x:String>
|
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Версия Git</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG" xml:space="preserve">GPG ПОДПИСЬ</x:String>
|
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">Для работы программы требуется версия Git (>= 2.23.0)</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.CommitEnabled" xml:space="preserve">GPG подпись ревизии</x:String>
|
<x:String x:Key="Text.Preferences.GPG" xml:space="preserve">GPG ПОДПИСЬ</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.TagEnabled" xml:space="preserve">GPG подпись метки</x:String>
|
<x:String x:Key="Text.Preferences.GPG.CommitEnabled" xml:space="preserve">GPG подпись ревизии</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Format" xml:space="preserve">Формат GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG.TagEnabled" xml:space="preserve">GPG подпись метки</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path" xml:space="preserve">Путь установки программы</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Format" xml:space="preserve">Формат GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path.Placeholder" xml:space="preserve">Введите путь для установленной программы GPG</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path" xml:space="preserve">Путь установки программы</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey" xml:space="preserve">Ключ подписи пользователя</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path.Placeholder" xml:space="preserve">Введите путь для установленной программы GPG</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey.Placeholder" xml:space="preserve">Ключ GPG подписи пользователя</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey" xml:space="preserve">Ключ подписи пользователя</x:String>
|
||||||
<x:String x:Key="Text.Preference.Integration" xml:space="preserve">ВНЕДРЕНИЕ</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey.Placeholder" xml:space="preserve">Ключ GPG подписи пользователя</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell" xml:space="preserve">ОБОЛОЧКА/ТЕРМИНАЛ</x:String>
|
<x:String x:Key="Text.Preferences.Integration" xml:space="preserve">ВНЕДРЕНИЕ</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Type" xml:space="preserve">Оболочка/Терминал</x:String>
|
<x:String x:Key="Text.Preferences.Shell" xml:space="preserve">ОБОЛОЧКА/ТЕРМИНАЛ</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Path" xml:space="preserve">Путь</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Type" xml:space="preserve">Оболочка/Терминал</x:String>
|
||||||
|
<x:String x:Key="Text.Preferences.Shell.Path" xml:space="preserve">Путь</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Удалить внешний репозиторий</x:String>
|
<x:String x:Key="Text.PruneRemote" xml:space="preserve">Удалить внешний репозиторий</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Цель:</x:String>
|
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">Цель:</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Удалить рабочий каталог</x:String>
|
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">Удалить рабочий каталог</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Информация об обрезке рабочего каталога в «$GIT_DIR/worktrees»</x:String>
|
<x:String x:Key="Text.PruneWorktrees.Tip" xml:space="preserve">Информация об обрезке рабочего каталога в «$GIT_DIR/worktrees»</x:String>
|
||||||
<x:String x:Key="Text.Pull" xml:space="preserve">Забрать</x:String>
|
<x:String x:Key="Text.Pull" xml:space="preserve">Забрать</x:String>
|
||||||
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Ветка:</x:String>
|
<x:String x:Key="Text.Pull.Branch" xml:space="preserve">Ветка внешнего репозитория:</x:String>
|
||||||
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Извлечь все ветки</x:String>
|
<x:String x:Key="Text.Pull.FetchAllBranches" xml:space="preserve">Извлечь все ветки</x:String>
|
||||||
<x:String x:Key="Text.Pull.Into" xml:space="preserve">В:</x:String>
|
<x:String x:Key="Text.Pull.Into" xml:space="preserve">В:</x:String>
|
||||||
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Локальные изменения:</x:String>
|
<x:String x:Key="Text.Pull.LocalChanges" xml:space="preserve">Локальные изменения:</x:String>
|
||||||
|
@ -568,13 +569,17 @@
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">Скрыть в графе ревизии</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">Скрыть в графе ревизии</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">Фильтр в графе ревизии</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">Фильтр в графе ревизии</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Prefix" xml:space="preserve">ОТФИЛЬТРОВАНО:</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Prefix" xml:space="preserve">ОТФИЛЬТРОВАНО:</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">Переключить режим запроса</x:String>
|
<x:String x:Key="Text.Repository.HistoriesLayout" xml:space="preserve">РАСПОЛОЖЕНИЕ</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Horizontal" xml:space="preserve">Горизонтально</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Vertical" xml:space="preserve">Вертикально</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">ЗАПРОС РЕВИЗИЙ</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Дата ревизии (--date-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Дата ревизии (--date-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Топологически (--topo-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Топологически (--topo-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">ЛОКАЛЬНЫЕ ВЕТКИ</x:String>
|
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">ЛОКАЛЬНЫЕ ВЕТКИ</x:String>
|
||||||
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">Навигация по ГОЛОВЕ (HEAD)</x:String>
|
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">Навигация по ГОЛОВЕ (HEAD)</x:String>
|
||||||
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">Включить опцию --first-parent</x:String>
|
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">Включить опцию --first-parent</x:String>
|
||||||
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">Создать ветку</x:String>
|
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">Создать ветку</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.OnlyHighlightCurrentBranchInHistories" xml:space="preserve">Выделять только текущую ветку на графике</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">Открыть в {0}</x:String>
|
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">Открыть в {0}</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">Открыть в расширенном инструменте</x:String>
|
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">Открыть в расширенном инструменте</x:String>
|
||||||
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">Обновить</x:String>
|
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">Обновить</x:String>
|
||||||
|
@ -594,7 +599,12 @@
|
||||||
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">ОБНОВИТЬ ПОДМОДУЛЬ</x:String>
|
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">ОБНОВИТЬ ПОДМОДУЛЬ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">МЕТКИ</x:String>
|
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">МЕТКИ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">НОВАЯ МЕТКА</x:String>
|
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">НОВАЯ МЕТКА</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByCreatorDate" xml:space="preserve">По дате создания</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameAsc" xml:space="preserve">По имени (по возрастанию)</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameDes" xml:space="preserve">По имени (по убыванию)</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.Sort" xml:space="preserve">Сортировать</x:String>
|
||||||
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Открыть в терминале</x:String>
|
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Открыть в терминале</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.UseRelativeTimeInHistories" xml:space="preserve">Использовать относительное время в историях</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">РАБОЧИЕ КАТАЛОГИ</x:String>
|
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">РАБОЧИЕ КАТАЛОГИ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">ДОБАВИТЬ РАБОЧИЙ КАТАЛОГ</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">ДОБАВИТЬ РАБОЧИЙ КАТАЛОГ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">ОБРЕЗАТЬ</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">ОБРЕЗАТЬ</x:String>
|
||||||
|
@ -607,8 +617,8 @@
|
||||||
<x:String x:Key="Text.Revert" xml:space="preserve">Отменить ревизию</x:String>
|
<x:String x:Key="Text.Revert" xml:space="preserve">Отменить ревизию</x:String>
|
||||||
<x:String x:Key="Text.Revert.Commit" xml:space="preserve">Ревизия:</x:String>
|
<x:String x:Key="Text.Revert.Commit" xml:space="preserve">Ревизия:</x:String>
|
||||||
<x:String x:Key="Text.Revert.CommitChanges" xml:space="preserve">Отмена ревизии</x:String>
|
<x:String x:Key="Text.Revert.CommitChanges" xml:space="preserve">Отмена ревизии</x:String>
|
||||||
<x:String x:Key="Text.Reword" xml:space="preserve">Переформулировать сообщение ревизии</x:String>
|
<x:String x:Key="Text.Reword" xml:space="preserve">Изменить комментарий ревизии</x:String>
|
||||||
<x:String x:Key="Text.Reword.Tip" xml:space="preserve">Использовать «Shift+Enter» для ввода новой строки. «Enter» - это горячая клавиша кнопки OK</x:String>
|
<x:String x:Key="Text.Reword.Tip" xml:space="preserve">Используйте «Shift+Enter» для ввода новой строки. «Enter» - это горячая клавиша кнопки «OK»</x:String>
|
||||||
<x:String x:Key="Text.Running" xml:space="preserve">Запуск. Подождите пожалуйста...</x:String>
|
<x:String x:Key="Text.Running" xml:space="preserve">Запуск. Подождите пожалуйста...</x:String>
|
||||||
<x:String x:Key="Text.Save" xml:space="preserve">СОХРАНИТЬ</x:String>
|
<x:String x:Key="Text.Save" xml:space="preserve">СОХРАНИТЬ</x:String>
|
||||||
<x:String x:Key="Text.SaveAs" xml:space="preserve">Сохранить как...</x:String>
|
<x:String x:Key="Text.SaveAs" xml:space="preserve">Сохранить как...</x:String>
|
||||||
|
@ -624,6 +634,10 @@
|
||||||
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">Пропустить эту версию</x:String>
|
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">Пропустить эту версию</x:String>
|
||||||
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">Обновление ПО</x:String>
|
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">Обновление ПО</x:String>
|
||||||
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">В настоящее время обновления недоступны.</x:String>
|
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">В настоящее время обновления недоступны.</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream" xml:space="preserve">Отслеживать ветку</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Local" xml:space="preserve">Ветка:</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Unset" xml:space="preserve">Снять основную ветку</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Upstream" xml:space="preserve">Основная ветка:</x:String>
|
||||||
<x:String x:Key="Text.Squash" xml:space="preserve">Втиснуть ревизии</x:String>
|
<x:String x:Key="Text.Squash" xml:space="preserve">Втиснуть ревизии</x:String>
|
||||||
<x:String x:Key="Text.Squash.Into" xml:space="preserve">В:</x:String>
|
<x:String x:Key="Text.Squash.Into" xml:space="preserve">В:</x:String>
|
||||||
<x:String x:Key="Text.SSHKey" xml:space="preserve">Приватный ключ SSH:</x:String>
|
<x:String x:Key="Text.SSHKey" xml:space="preserve">Приватный ключ SSH:</x:String>
|
||||||
|
@ -725,4 +739,4 @@
|
||||||
<x:String x:Key="Text.Worktree.Lock" xml:space="preserve">Заблокировать</x:String>
|
<x:String x:Key="Text.Worktree.Lock" xml:space="preserve">Заблокировать</x:String>
|
||||||
<x:String x:Key="Text.Worktree.Remove" xml:space="preserve">Удалить</x:String>
|
<x:String x:Key="Text.Worktree.Remove" xml:space="preserve">Удалить</x:String>
|
||||||
<x:String x:Key="Text.Worktree.Unlock" xml:space="preserve">Разблокировать</x:String>
|
<x:String x:Key="Text.Worktree.Unlock" xml:space="preserve">Разблокировать</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
@ -67,8 +67,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">推送(push)${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">推送(push)${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">变基(rebase) ${0}$ 分支至 ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">变基(rebase) ${0}$ 分支至 ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">重命名 ${0}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">重命名 ${0}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">切换上游分支</x:String>
|
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">切换上游分支 ...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.UnsetUpstream" xml:space="preserve">取消追踪</x:String>
|
|
||||||
<x:String x:Key="Text.BranchCompare" xml:space="preserve">分支比较</x:String>
|
<x:String x:Key="Text.BranchCompare" xml:space="preserve">分支比较</x:String>
|
||||||
<x:String x:Key="Text.Bytes" xml:space="preserve">字节</x:String>
|
<x:String x:Key="Text.Bytes" xml:space="preserve">字节</x:String>
|
||||||
<x:String x:Key="Text.Cancel" xml:space="preserve">取 消</x:String>
|
<x:String x:Key="Text.Cancel" xml:space="preserve">取 消</x:String>
|
||||||
|
@ -165,10 +164,12 @@
|
||||||
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">提交信息追加署名 (--signoff)</x:String>
|
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">提交信息追加署名 (--signoff)</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">拉取更新时启用修剪(--prune)</x:String>
|
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">拉取更新时启用修剪(--prune)</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">ISSUE追踪</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">ISSUE追踪</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteeIssue" xml:space="preserve">新增匹配Gitee议题规则</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteePullRequest" xml:space="preserve">新增匹配Gitee合并请求规则</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">新增匹配Github Issue规则</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">新增匹配Github Issue规则</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">新增匹配Jira规则</x:String>
|
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">新增匹配GitLab议题规则</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">新增匹配GitLab议题规则</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabMergeRequest" xml:space="preserve">新增匹配GitLab合并请求规则</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabMergeRequest" xml:space="preserve">新增匹配GitLab合并请求规则</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">新增匹配Jira规则</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.NewRule" xml:space="preserve">新增自定义规则</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.NewRule" xml:space="preserve">新增自定义规则</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.Regex" xml:space="preserve">匹配ISSUE的正则表达式 :</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.Regex" xml:space="preserve">匹配ISSUE的正则表达式 :</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.RuleName" xml:space="preserve">规则名 :</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.RuleName" xml:space="preserve">规则名 :</x:String>
|
||||||
|
@ -351,7 +352,6 @@
|
||||||
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">跟踪名为'{0}'的文件</x:String>
|
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">跟踪名为'{0}'的文件</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">跟踪所有 *{0} 文件</x:String>
|
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">跟踪所有 *{0} 文件</x:String>
|
||||||
<x:String x:Key="Text.Histories" xml:space="preserve">历史记录</x:String>
|
<x:String x:Key="Text.Histories" xml:space="preserve">历史记录</x:String>
|
||||||
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">切换横向/纵向显示</x:String>
|
|
||||||
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">作者</x:String>
|
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">作者</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">修改时间</x:String>
|
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">修改时间</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">路线图与主题</x:String>
|
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">路线图与主题</x:String>
|
||||||
|
@ -369,7 +369,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">切换到上一个页面</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">切换到上一个页面</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">切换到下一个页面</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">切换到下一个页面</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">新建页面</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">新建页面</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">打开偏好设置面板</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreferences" xml:space="preserve">打开偏好设置面板</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">仓库页面快捷键</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">仓库页面快捷键</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">提交暂存区更改</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">提交暂存区更改</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">提交暂存区更改并推送</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">提交暂存区更改并推送</x:String>
|
||||||
|
@ -443,60 +443,61 @@
|
||||||
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0}个月前</x:String>
|
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0}个月前</x:String>
|
||||||
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">一年前</x:String>
|
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">一年前</x:String>
|
||||||
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0}年前</x:String>
|
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0}年前</x:String>
|
||||||
<x:String x:Key="Text.Preference" xml:space="preserve">偏好设置</x:String>
|
<x:String x:Key="Text.Preferences" xml:space="preserve">偏好设置</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI" xml:space="preserve">AI</x:String>
|
<x:String x:Key="Text.Preferences.AI" xml:space="preserve">AI</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.AnalyzeDiffPrompt" xml:space="preserve">Analyze Diff Prompt</x:String>
|
<x:String x:Key="Text.Preferences.AI.AnalyzeDiffPrompt" xml:space="preserve">Analyze Diff Prompt</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.ApiKey" xml:space="preserve">API密钥</x:String>
|
<x:String x:Key="Text.Preferences.AI.ApiKey" xml:space="preserve">API密钥</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.GenerateSubjectPrompt" xml:space="preserve">Generate Subject Prompt</x:String>
|
<x:String x:Key="Text.Preferences.AI.GenerateSubjectPrompt" xml:space="preserve">Generate Subject Prompt</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Model" xml:space="preserve">模型</x:String>
|
<x:String x:Key="Text.Preferences.AI.Model" xml:space="preserve">模型</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Name" xml:space="preserve">配置名称</x:String>
|
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">配置名称</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">服务地址</x:String>
|
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">服务地址</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">外观配置</x:String>
|
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">外观配置</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">缺省字体</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">缺省字体</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize" xml:space="preserve">字体大小</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize" xml:space="preserve">字体大小</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Default" xml:space="preserve">默认</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Default" xml:space="preserve">默认</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Editor" xml:space="preserve">代码编辑器</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Editor" xml:space="preserve">代码编辑器</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.EditorFontSize" xml:space="preserve">代码字体大小</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.EditorFontSize" xml:space="preserve">代码字体大小</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">等宽字体</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.MonospaceFont" xml:space="preserve">等宽字体</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">仅在文本编辑器中使用等宽字体</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">仅在文本编辑器中使用等宽字体</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">主题</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.Theme" xml:space="preserve">主题</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.ThemeOverrides" xml:space="preserve">主题自定义</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.ThemeOverrides" xml:space="preserve">主题自定义</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseFixedTabWidth" xml:space="preserve">主标签使用固定宽度</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">主标签使用固定宽度</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseNativeWindowFrame" xml:space="preserve">使用系统默认窗体样式</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">使用系统默认窗体样式</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge" xml:space="preserve">对比/合并工具</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">对比/合并工具</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">安装路径</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">安装路径</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">填写工具可执行文件所在位置</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">填写工具可执行文件所在位置</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">工具</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">工具</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">通用配置</x:String>
|
<x:String x:Key="Text.Preferences.General" xml:space="preserve">通用配置</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">启动时检测软件更新</x:String>
|
<x:String x:Key="Text.Preferences.General.Check4UpdatesOnStartup" xml:space="preserve">启动时检测软件更新</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DateFormat" xml:space="preserve">日期时间格式</x:String>
|
<x:String x:Key="Text.Preferences.General.DateFormat" xml:space="preserve">日期时间格式</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">显示语言</x:String>
|
<x:String x:Key="Text.Preferences.General.Locale" xml:space="preserve">显示语言</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">最大历史提交数</x:String>
|
<x:String x:Key="Text.Preferences.General.MaxHistoryCommits" xml:space="preserve">最大历史提交数</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">在提交路线图中显示修改时间而非提交时间</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowAuthorTime" xml:space="preserve">在提交路线图中显示修改时间而非提交时间</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowChildren" xml:space="preserve">在提交详情页中显示子提交列表</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowChildren" xml:space="preserve">在提交详情页中显示子提交列表</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">SUBJECT字数检测</x:String>
|
<x:String x:Key="Text.Preferences.General.SubjectGuideLength" xml:space="preserve">SUBJECT字数检测</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT配置</x:String>
|
<x:String x:Key="Text.Preferences.Git" xml:space="preserve">GIT配置</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">自动换行转换</x:String>
|
<x:String x:Key="Text.Preferences.Git.CRLF" xml:space="preserve">自动换行转换</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">默认克隆路径</x:String>
|
<x:String x:Key="Text.Preferences.Git.DefaultCloneDir" xml:space="preserve">默认克隆路径</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">邮箱</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email" xml:space="preserve">邮箱</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">默认GIT用户邮箱</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email.Placeholder" xml:space="preserve">默认GIT用户邮箱</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">安装路径</x:String>
|
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">安装路径</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User" xml:space="preserve">用户名</x:String>
|
<x:String x:Key="Text.Preferences.Git.SSLVerify" xml:space="preserve">启用HTTP SSL验证</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User.Placeholder" xml:space="preserve">默认GIT用户名</x:String>
|
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">用户名</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Version" xml:space="preserve">Git 版本</x:String>
|
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">默认GIT用户名</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Invalid" xml:space="preserve">本软件要求GIT最低版本为2.23.0</x:String>
|
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Git 版本</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG" xml:space="preserve">GPG签名</x:String>
|
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">本软件要求GIT最低版本为2.23.0</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.CommitEnabled" xml:space="preserve">启用提交签名</x:String>
|
<x:String x:Key="Text.Preferences.GPG" xml:space="preserve">GPG签名</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.TagEnabled" xml:space="preserve">启用标签签名</x:String>
|
<x:String x:Key="Text.Preferences.GPG.CommitEnabled" xml:space="preserve">启用提交签名</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Format" xml:space="preserve">签名格式</x:String>
|
<x:String x:Key="Text.Preferences.GPG.TagEnabled" xml:space="preserve">启用标签签名</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path" xml:space="preserve">签名程序位置</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Format" xml:space="preserve">签名格式</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path.Placeholder" xml:space="preserve">签名程序所在路径</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path" xml:space="preserve">签名程序位置</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey" xml:space="preserve">用户签名KEY</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path.Placeholder" xml:space="preserve">签名程序所在路径</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey.Placeholder" xml:space="preserve">输入签名提交所使用的KEY</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey" xml:space="preserve">用户签名KEY</x:String>
|
||||||
<x:String x:Key="Text.Preference.Integration" xml:space="preserve">第三方工具集成</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey.Placeholder" xml:space="preserve">输入签名提交所使用的KEY</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell" xml:space="preserve">终端/SHELL</x:String>
|
<x:String x:Key="Text.Preferences.Integration" xml:space="preserve">第三方工具集成</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Type" xml:space="preserve">终端/SHELL</x:String>
|
<x:String x:Key="Text.Preferences.Shell" xml:space="preserve">终端/SHELL</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Path" xml:space="preserve">安装路径</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Type" xml:space="preserve">终端/SHELL</x:String>
|
||||||
|
<x:String x:Key="Text.Preferences.Shell.Path" xml:space="preserve">安装路径</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote" xml:space="preserve">清理远程已删除分支</x:String>
|
<x:String x:Key="Text.PruneRemote" xml:space="preserve">清理远程已删除分支</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">目标 :</x:String>
|
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">目标 :</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">清理工作树</x:String>
|
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">清理工作树</x:String>
|
||||||
|
@ -567,13 +568,17 @@
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">不指定</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">不指定</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">在提交列表中隐藏</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">在提交列表中隐藏</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">使用其对提交列表过滤</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">使用其对提交列表过滤</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">切换排序模式</x:String>
|
<x:String x:Key="Text.Repository.HistoriesLayout" xml:space="preserve">布局方式</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Horizontal" xml:space="preserve">水平排布</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Vertical" xml:space="preserve">竖直排布</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">提交列表排序规则</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">按提交时间 (--date-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">按提交时间 (--date-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">按拓扑排序 (--topo-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">按拓扑排序 (--topo-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">本地分支</x:String>
|
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">本地分支</x:String>
|
||||||
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">定位HEAD</x:String>
|
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">定位HEAD</x:String>
|
||||||
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">启用 --first-parent 过滤选项</x:String>
|
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">启用 --first-parent 过滤选项</x:String>
|
||||||
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">新建分支</x:String>
|
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">新建分支</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.OnlyHighlightCurrentBranchInHistories" xml:space="preserve">提交路线图中仅高亮显示当前分支</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">在 {0} 中打开</x:String>
|
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">在 {0} 中打开</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">使用外部工具打开</x:String>
|
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">使用外部工具打开</x:String>
|
||||||
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">重新加载</x:String>
|
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">重新加载</x:String>
|
||||||
|
@ -593,7 +598,12 @@
|
||||||
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">更新子模块</x:String>
|
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">更新子模块</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">标签列表</x:String>
|
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">标签列表</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">新建标签</x:String>
|
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">新建标签</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByCreatorDate" xml:space="preserve">按创建时间</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameAsc" xml:space="preserve">按名称(升序)</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameDes" xml:space="preserve">按名称(降序)</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.Sort" xml:space="preserve">排序</x:String>
|
||||||
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">在终端中打开</x:String>
|
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">在终端中打开</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.UseRelativeTimeInHistories" xml:space="preserve">在提交列表中使用相对时间</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">工作树列表</x:String>
|
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">工作树列表</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">新增工作树</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">新增工作树</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">清理</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">清理</x:String>
|
||||||
|
@ -621,6 +631,10 @@
|
||||||
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">忽略此版本</x:String>
|
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">忽略此版本</x:String>
|
||||||
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">软件更新</x:String>
|
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">软件更新</x:String>
|
||||||
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">当前已是最新版本。</x:String>
|
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">当前已是最新版本。</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream" xml:space="preserve">切换上游分支</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Local" xml:space="preserve">本地分支 :</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Unset" xml:space="preserve">取消追踪</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Upstream" xml:space="preserve">上游分支 :</x:String>
|
||||||
<x:String x:Key="Text.SHALinkCM.CopySHA" xml:space="preserve">复制提交指纹</x:String>
|
<x:String x:Key="Text.SHALinkCM.CopySHA" xml:space="preserve">复制提交指纹</x:String>
|
||||||
<x:String x:Key="Text.SHALinkCM.NavigateTo" xml:space="preserve">跳转到提交</x:String>
|
<x:String x:Key="Text.SHALinkCM.NavigateTo" xml:space="preserve">跳转到提交</x:String>
|
||||||
<x:String x:Key="Text.Squash" xml:space="preserve">压缩为单个提交</x:String>
|
<x:String x:Key="Text.Squash" xml:space="preserve">压缩为单个提交</x:String>
|
||||||
|
|
|
@ -67,8 +67,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">推送 (push) ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">推送 (push) ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">重定基底 (rebase) ${0}$ 分支至 ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rebase" xml:space="preserve">重定基底 (rebase) ${0}$ 分支至 ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">重新命名 ${0}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Rename" xml:space="preserve">重新命名 ${0}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">切換上游分支</x:String>
|
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">切換上游分支...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.UnsetUpstream" xml:space="preserve">取消設定上游分支</x:String>
|
|
||||||
<x:String x:Key="Text.BranchCompare" xml:space="preserve">分支比較</x:String>
|
<x:String x:Key="Text.BranchCompare" xml:space="preserve">分支比較</x:String>
|
||||||
<x:String x:Key="Text.Bytes" xml:space="preserve">位元組</x:String>
|
<x:String x:Key="Text.Bytes" xml:space="preserve">位元組</x:String>
|
||||||
<x:String x:Key="Text.Cancel" xml:space="preserve">取 消</x:String>
|
<x:String x:Key="Text.Cancel" xml:space="preserve">取 消</x:String>
|
||||||
|
@ -165,10 +164,12 @@
|
||||||
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">提交訊息追加署名 (--signoff)</x:String>
|
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">提交訊息追加署名 (--signoff)</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">拉取變更時進行清理 (--prune)</x:String>
|
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">拉取變更時進行清理 (--prune)</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">Issue 追蹤</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">Issue 追蹤</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteeIssue" xml:space="preserve">新增符合 Gitee 議題規則</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteePullRequest" xml:space="preserve">新增符合 Gitee 合併請求規則</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">新增符合 GitHub Issue 規則</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">新增符合 GitHub Issue 規則</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">新增符合 Jira 規則</x:String>
|
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">新增符合 GitLab 議題規則</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabIssue" xml:space="preserve">新增符合 GitLab 議題規則</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabMergeRequest" xml:space="preserve">新增符合 GitLab 合併請求規則</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGitLabMergeRequest" xml:space="preserve">新增符合 GitLab 合併請求規則</x:String>
|
||||||
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">新增符合 Jira 規則</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.NewRule" xml:space="preserve">新增自訂規則</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.NewRule" xml:space="preserve">新增自訂規則</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.Regex" xml:space="preserve">符合 Issue 的正規表達式:</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.Regex" xml:space="preserve">符合 Issue 的正規表達式:</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.RuleName" xml:space="preserve">規則名稱:</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.RuleName" xml:space="preserve">規則名稱:</x:String>
|
||||||
|
@ -351,7 +352,6 @@
|
||||||
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">追蹤名稱為「{0}」的檔案</x:String>
|
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">追蹤名稱為「{0}」的檔案</x:String>
|
||||||
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">追蹤所有 *{0} 檔案</x:String>
|
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">追蹤所有 *{0} 檔案</x:String>
|
||||||
<x:String x:Key="Text.Histories" xml:space="preserve">歷史記錄</x:String>
|
<x:String x:Key="Text.Histories" xml:space="preserve">歷史記錄</x:String>
|
||||||
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">切換橫向/縱向顯示</x:String>
|
|
||||||
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">作者</x:String>
|
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">作者</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">修改時間</x:String>
|
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">修改時間</x:String>
|
||||||
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">路線圖與訊息標題</x:String>
|
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">路線圖與訊息標題</x:String>
|
||||||
|
@ -369,7 +369,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">切換到上一個頁面</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">切換到上一個頁面</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">切換到下一個頁面</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">切換到下一個頁面</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">新增頁面</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">新增頁面</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">開啟偏好設定面板</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreferences" xml:space="preserve">開啟偏好設定面板</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">存放庫頁面快速鍵</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">存放庫頁面快速鍵</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">提交暫存區變更</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">提交暫存區變更</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">提交暫存區變更並推送</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.CommitAndPush" xml:space="preserve">提交暫存區變更並推送</x:String>
|
||||||
|
@ -443,59 +443,60 @@
|
||||||
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} 個月前</x:String>
|
<x:String x:Key="Text.Period.MonthsAgo" xml:space="preserve">{0} 個月前</x:String>
|
||||||
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">一年前</x:String>
|
<x:String x:Key="Text.Period.LastYear" xml:space="preserve">一年前</x:String>
|
||||||
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} 年前</x:String>
|
<x:String x:Key="Text.Period.YearsAgo" xml:space="preserve">{0} 年前</x:String>
|
||||||
<x:String x:Key="Text.Preference" xml:space="preserve">偏好設定</x:String>
|
<x:String x:Key="Text.Preferences" xml:space="preserve">偏好設定</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI" xml:space="preserve">AI</x:String>
|
<x:String x:Key="Text.Preferences.AI" xml:space="preserve">AI</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Server" xml:space="preserve">伺服器</x:String>
|
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">伺服器</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.ApiKey" xml:space="preserve">API 金鑰</x:String>
|
<x:String x:Key="Text.Preferences.AI.ApiKey" xml:space="preserve">API 金鑰</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Model" xml:space="preserve">模型</x:String>
|
<x:String x:Key="Text.Preferences.AI.Model" xml:space="preserve">模型</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.Name" xml:space="preserve">名稱</x:String>
|
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">名稱</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.AnalyzeDiffPrompt" xml:space="preserve">分析變更差異提示詞</x:String>
|
<x:String x:Key="Text.Preferences.AI.AnalyzeDiffPrompt" xml:space="preserve">分析變更差異提示詞</x:String>
|
||||||
<x:String x:Key="Text.Preference.AI.GenerateSubjectPrompt" xml:space="preserve">產生提交訊息提示詞</x:String>
|
<x:String x:Key="Text.Preferences.AI.GenerateSubjectPrompt" xml:space="preserve">產生提交訊息提示詞</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance" xml:space="preserve">外觀設定</x:String>
|
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">外觀設定</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.DefaultFont" xml:space="preserve">預設字型</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">預設字型</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize" xml:space="preserve">字型大小</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize" xml:space="preserve">字型大小</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Default" xml:space="preserve">預設</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Default" xml:space="preserve">預設</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.FontSize.Editor" xml:space="preserve">程式碼</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.FontSize.Editor" xml:space="preserve">程式碼</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.MonospaceFont" xml:space="preserve">等寬字型</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.MonospaceFont" xml:space="preserve">等寬字型</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">僅在文字編輯器中使用等寬字型</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.OnlyUseMonoFontInEditor" xml:space="preserve">僅在文字編輯器中使用等寬字型</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.Theme" xml:space="preserve">佈景主題</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.Theme" xml:space="preserve">佈景主題</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.ThemeOverrides" xml:space="preserve">自訂主題</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.ThemeOverrides" xml:space="preserve">自訂主題</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseFixedTabWidth" xml:space="preserve">使用固定寬度的分頁標籤</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">使用固定寬度的分頁標籤</x:String>
|
||||||
<x:String x:Key="Text.Preference.Appearance.UseNativeWindowFrame" xml:space="preserve">使用系統原生預設視窗樣式</x:String>
|
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">使用系統原生預設視窗樣式</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge" xml:space="preserve">對比/合併工具</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">對比/合併工具</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">安裝路徑</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">安裝路徑</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">填寫可執行檔案所在路徑</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">填寫可執行檔案所在路徑</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">工具</x:String>
|
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">工具</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">一般設定</x:String>
|
<x:String x:Key="Text.Preferences.General" xml:space="preserve">一般設定</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">啟動時檢查軟體更新</x:String>
|
<x:String x:Key="Text.Preferences.General.Check4UpdatesOnStartup" xml:space="preserve">啟動時檢查軟體更新</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DateFormat" xml:space="preserve">日期時間格式</x:String>
|
<x:String x:Key="Text.Preferences.General.DateFormat" xml:space="preserve">日期時間格式</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">顯示語言</x:String>
|
<x:String x:Key="Text.Preferences.General.Locale" xml:space="preserve">顯示語言</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">最大歷史提交數</x:String>
|
<x:String x:Key="Text.Preferences.General.MaxHistoryCommits" xml:space="preserve">最大歷史提交數</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">在提交路線圖中顯示修改時間而非提交時間</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowAuthorTime" xml:space="preserve">在提交路線圖中顯示修改時間而非提交時間</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowChildren" xml:space="preserve">在提交詳細資訊中顯示後續提交</x:String>
|
<x:String x:Key="Text.Preferences.General.ShowChildren" xml:space="preserve">在提交詳細資訊中顯示後續提交</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">提交標題字數偵測</x:String>
|
<x:String x:Key="Text.Preferences.General.SubjectGuideLength" xml:space="preserve">提交標題字數偵測</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">Git 設定</x:String>
|
<x:String x:Key="Text.Preferences.Git" xml:space="preserve">Git 設定</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">自動換行轉換</x:String>
|
<x:String x:Key="Text.Preferences.Git.CRLF" xml:space="preserve">自動換行轉換</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">預設複製 (clone) 路徑</x:String>
|
<x:String x:Key="Text.Preferences.Git.DefaultCloneDir" xml:space="preserve">預設複製 (clone) 路徑</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">電子郵件</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email" xml:space="preserve">電子郵件</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">預設 Git 使用者電子郵件</x:String>
|
<x:String x:Key="Text.Preferences.Git.Email.Placeholder" xml:space="preserve">預設 Git 使用者電子郵件</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">安裝路徑</x:String>
|
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">安裝路徑</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User" xml:space="preserve">使用者名稱</x:String>
|
<x:String x:Key="Text.Preferences.Git.SSLVerify" xml:space="preserve">啟用 HTTP SSL 驗證</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.User.Placeholder" xml:space="preserve">預設 Git 使用者名稱</x:String>
|
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">使用者名稱</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Version" xml:space="preserve">Git 版本</x:String>
|
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">預設 Git 使用者名稱</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Invalid" xml:space="preserve">本軟體要求 Git 最低版本為 2.23.0</x:String>
|
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Git 版本</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG" xml:space="preserve">GPG 簽章</x:String>
|
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">本軟體要求 Git 最低版本為 2.23.0</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.CommitEnabled" xml:space="preserve">啟用提交簽章</x:String>
|
<x:String x:Key="Text.Preferences.GPG" xml:space="preserve">GPG 簽章</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.TagEnabled" xml:space="preserve">啟用標籤簽章</x:String>
|
<x:String x:Key="Text.Preferences.GPG.CommitEnabled" xml:space="preserve">啟用提交簽章</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Format" xml:space="preserve">GPG 簽章格式</x:String>
|
<x:String x:Key="Text.Preferences.GPG.TagEnabled" xml:space="preserve">啟用標籤簽章</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path" xml:space="preserve">可執行檔案路徑</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Format" xml:space="preserve">GPG 簽章格式</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.Path.Placeholder" xml:space="preserve">填寫 gpg.exe 所在路徑</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path" xml:space="preserve">可執行檔案路徑</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey" xml:space="preserve">使用者簽章金鑰</x:String>
|
<x:String x:Key="Text.Preferences.GPG.Path.Placeholder" xml:space="preserve">填寫 gpg.exe 所在路徑</x:String>
|
||||||
<x:String x:Key="Text.Preference.GPG.UserKey.Placeholder" xml:space="preserve">填寫簽章提交所使用的金鑰</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey" xml:space="preserve">使用者簽章金鑰</x:String>
|
||||||
<x:String x:Key="Text.Preference.Integration" xml:space="preserve">第三方工具整合</x:String>
|
<x:String x:Key="Text.Preferences.GPG.UserKey.Placeholder" xml:space="preserve">填寫簽章提交所使用的金鑰</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell" xml:space="preserve">終端機/Shell</x:String>
|
<x:String x:Key="Text.Preferences.Integration" xml:space="preserve">第三方工具整合</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Type" xml:space="preserve">終端機/Shell</x:String>
|
<x:String x:Key="Text.Preferences.Shell" xml:space="preserve">終端機/Shell</x:String>
|
||||||
<x:String x:Key="Text.Preference.Shell.Path" xml:space="preserve">安裝路徑</x:String>
|
<x:String x:Key="Text.Preferences.Shell.Type" xml:space="preserve">終端機/Shell</x:String>
|
||||||
|
<x:String x:Key="Text.Preferences.Shell.Path" xml:space="preserve">安裝路徑</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote" xml:space="preserve">清理遠端已刪除分支</x:String>
|
<x:String x:Key="Text.PruneRemote" xml:space="preserve">清理遠端已刪除分支</x:String>
|
||||||
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">目標:</x:String>
|
<x:String x:Key="Text.PruneRemote.Target" xml:space="preserve">目標:</x:String>
|
||||||
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">清理工作區</x:String>
|
<x:String x:Key="Text.PruneWorktrees" xml:space="preserve">清理工作區</x:String>
|
||||||
|
@ -566,13 +567,17 @@
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">取消指定</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Default" xml:space="preserve">取消指定</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">在提交列表中隱藏</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Exclude" xml:space="preserve">在提交列表中隱藏</x:String>
|
||||||
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">以其篩選提交列表</x:String>
|
<x:String x:Key="Text.Repository.FilterCommits.Include" xml:space="preserve">以其篩選提交列表</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">切換排序方式</x:String>
|
<x:String x:Key="Text.Repository.HistoriesLayout" xml:space="preserve">佈局方式</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Horizontal" xml:space="preserve">橫向顯示</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesLayout.Vertical" xml:space="preserve">縱向顯示</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">提交顯示順序</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">依提交時間排序 (--date-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">依提交時間排序 (--date-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">依拓撲排序 (--topo-order)</x:String>
|
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">依拓撲排序 (--topo-order)</x:String>
|
||||||
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">本機分支</x:String>
|
<x:String x:Key="Text.Repository.LocalBranches" xml:space="preserve">本機分支</x:String>
|
||||||
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">回到 HEAD</x:String>
|
<x:String x:Key="Text.Repository.NavigateToCurrentHead" xml:space="preserve">回到 HEAD</x:String>
|
||||||
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">啟用 [--first-parent] 選項</x:String>
|
<x:String x:Key="Text.Repository.FirstParentFilterToggle" xml:space="preserve">啟用 [--first-parent] 選項</x:String>
|
||||||
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">新增分支</x:String>
|
<x:String x:Key="Text.Repository.NewBranch" xml:space="preserve">新增分支</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.OnlyHighlightCurrentBranchInHistories" xml:space="preserve">提交圖表中僅高亮顯示目前分支</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">在 {0} 中開啟</x:String>
|
<x:String x:Key="Text.Repository.OpenIn" xml:space="preserve">在 {0} 中開啟</x:String>
|
||||||
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">使用外部工具開啟</x:String>
|
<x:String x:Key="Text.Repository.OpenWithExternalTools" xml:space="preserve">使用外部工具開啟</x:String>
|
||||||
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">重新載入</x:String>
|
<x:String x:Key="Text.Repository.Refresh" xml:space="preserve">重新載入</x:String>
|
||||||
|
@ -592,7 +597,12 @@
|
||||||
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">更新子模組</x:String>
|
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">更新子模組</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">標籤列表</x:String>
|
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">標籤列表</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">新增標籤</x:String>
|
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">新增標籤</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByCreatorDate" xml:space="preserve">依建立時間</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameAsc" xml:space="preserve">依名稱升序</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.OrderByNameDes" xml:space="preserve">依名稱降序</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Tags.Sort" xml:space="preserve">排序</x:String>
|
||||||
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">在終端機中開啟</x:String>
|
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">在終端機中開啟</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.UseRelativeTimeInHistories" xml:space="preserve">在提交清單中使用相對時間</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">工作區列表</x:String>
|
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">工作區列表</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">新增工作區</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">新增工作區</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">清理</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">清理</x:String>
|
||||||
|
@ -620,6 +630,10 @@
|
||||||
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">忽略此版本</x:String>
|
<x:String x:Key="Text.SelfUpdate.IgnoreThisVersion" xml:space="preserve">忽略此版本</x:String>
|
||||||
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">軟體更新</x:String>
|
<x:String x:Key="Text.SelfUpdate.Title" xml:space="preserve">軟體更新</x:String>
|
||||||
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">目前已是最新版本。</x:String>
|
<x:String x:Key="Text.SelfUpdate.UpToDate" xml:space="preserve">目前已是最新版本。</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream" xml:space="preserve">切換上游分支</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Local" xml:space="preserve">本機分支:</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Unset" xml:space="preserve">取消設定上游分支</x:String>
|
||||||
|
<x:String x:Key="Text.SetUpstream.Upstream" xml:space="preserve">上游分支:</x:String>
|
||||||
<x:String x:Key="Text.SHALinkCM.CopySHA" xml:space="preserve">複製提交編號</x:String>
|
<x:String x:Key="Text.SHALinkCM.CopySHA" xml:space="preserve">複製提交編號</x:String>
|
||||||
<x:String x:Key="Text.SHALinkCM.NavigateTo" xml:space="preserve">前往此提交</x:String>
|
<x:String x:Key="Text.SHALinkCM.NavigateTo" xml:space="preserve">前往此提交</x:String>
|
||||||
<x:String x:Key="Text.Squash" xml:space="preserve">壓縮為單個提交</x:String>
|
<x:String x:Key="Text.Squash" xml:space="preserve">壓縮為單個提交</x:String>
|
||||||
|
|
|
@ -159,7 +159,7 @@
|
||||||
|
|
||||||
<Style Selector="ContentPresenter">
|
<Style Selector="ContentPresenter">
|
||||||
<Setter Property="FontFamily" Value="{DynamicResource Fonts.Default}"/>
|
<Setter Property="FontFamily" Value="{DynamicResource Fonts.Default}"/>
|
||||||
<Setter Property="FontSize" Value="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize}"/>
|
<Setter Property="FontSize" Value="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize}"/>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<Style Selector="ToolTip">
|
<Style Selector="ToolTip">
|
||||||
|
@ -280,10 +280,10 @@
|
||||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
<Setter Property="Foreground" Value="{DynamicResource Brush.FG1}"/>
|
<Setter Property="Foreground" Value="{DynamicResource Brush.FG1}"/>
|
||||||
<Setter Property="FontFamily" Value="{DynamicResource Fonts.Default}"/>
|
<Setter Property="FontFamily" Value="{DynamicResource Fonts.Default}"/>
|
||||||
<Setter Property="FontSize" Value="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize}"/>
|
<Setter Property="FontSize" Value="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize}"/>
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="TextBlock.small">
|
<Style Selector="TextBlock.small">
|
||||||
<Setter Property="FontSize" Value="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"/>
|
<Setter Property="FontSize" Value="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"/>
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="TextBlock.bold">
|
<Style Selector="TextBlock.bold">
|
||||||
<Setter Property="FontWeight" Value="Bold"/>
|
<Setter Property="FontWeight" Value="Bold"/>
|
||||||
|
@ -413,7 +413,7 @@
|
||||||
<Setter Property="BorderBrush" Value="Transparent"/>
|
<Setter Property="BorderBrush" Value="Transparent"/>
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="TextBlock.tab_header">
|
<Style Selector="TextBlock.tab_header">
|
||||||
<Setter Property="FontSize" Value="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Increase}}"/>
|
<Setter Property="FontSize" Value="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Increase}}"/>
|
||||||
<Setter Property="FontWeight" Value="Bold"/>
|
<Setter Property="FontWeight" Value="Bold"/>
|
||||||
<Setter Property="Foreground" Value="{DynamicResource Brush.FG1}"/>
|
<Setter Property="Foreground" Value="{DynamicResource Brush.FG1}"/>
|
||||||
<Setter Property="Opacity" Value=".56"/>
|
<Setter Property="Opacity" Value=".56"/>
|
||||||
|
@ -1139,36 +1139,6 @@
|
||||||
<Setter Property="Data" Value="M 0 4 L 8 4 L 4 8 Z" />
|
<Setter Property="Data" Value="M 0 4 L 8 4 L 4 8 Z" />
|
||||||
</Style>
|
</Style>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<Style Selector="ToggleButton.time_display_mode">
|
|
||||||
<Setter Property="Margin" Value="0" />
|
|
||||||
<Setter Property="Background" Value="Transparent"/>
|
|
||||||
<Setter Property="Template">
|
|
||||||
<ControlTemplate>
|
|
||||||
<Border Background="Transparent"
|
|
||||||
Width="{TemplateBinding Width}"
|
|
||||||
Height="{TemplateBinding Height}"
|
|
||||||
HorizontalAlignment="Left"
|
|
||||||
VerticalAlignment="Center">
|
|
||||||
<Path x:Name="ChevronPath"
|
|
||||||
Data="{StaticResource Icons.Calender}"
|
|
||||||
Fill="{DynamicResource Brush.FG1}"
|
|
||||||
HorizontalAlignment="Center"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Opacity="0.65"/>
|
|
||||||
</Border>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Setter>
|
|
||||||
|
|
||||||
<Style Selector="^:checked /template/ Path#ChevronPath">
|
|
||||||
<Setter Property="Data" Value="{StaticResource Icons.Stopwatch}" />
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style Selector="^:pointerover /template/ Path#ChevronPath">
|
|
||||||
<Setter Property="Fill" Value="{DynamicResource Brush.Accent}" />
|
|
||||||
<Setter Property="Opacity" Value="1"/>
|
|
||||||
</Style>
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style Selector="ToggleButton.folder">
|
<Style Selector="ToggleButton.folder">
|
||||||
<Setter Property="Margin" Value="0" />
|
<Setter Property="Margin" Value="0" />
|
||||||
|
@ -1195,32 +1165,6 @@
|
||||||
<Setter Property="Data" Value="{StaticResource Icons.Folder.Open}" />
|
<Setter Property="Data" Value="{StaticResource Icons.Folder.Open}" />
|
||||||
</Style>
|
</Style>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<Style Selector="ToggleButton.layout_direction">
|
|
||||||
<Setter Property="Margin" Value="0"/>
|
|
||||||
<Setter Property="Padding" Value="0"/>
|
|
||||||
<Setter Property="Background" Value="Transparent"/>
|
|
||||||
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
|
||||||
<Setter Property="VerticalAlignment" Value="Stretch"/>
|
|
||||||
<Setter Property="Template">
|
|
||||||
<ControlTemplate>
|
|
||||||
<Border Background="Transparent">
|
|
||||||
<Path x:Name="PART_IndicatorIcon"
|
|
||||||
Width="14" Height="14"
|
|
||||||
Stretch="Uniform"
|
|
||||||
Data="{StaticResource Icons.LayoutVertical}"
|
|
||||||
Fill="{DynamicResource Brush.FG1}"
|
|
||||||
Opacity=".8"/>
|
|
||||||
</Border>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Setter>
|
|
||||||
</Style>
|
|
||||||
<Style Selector="ToggleButton.layout_direction:checked /template/ Path#PART_IndicatorIcon">
|
|
||||||
<Setter Property="Data" Value="{StaticResource Icons.LayoutHorizontal}"/>
|
|
||||||
</Style>
|
|
||||||
<Style Selector="ToggleButton.layout_direction:pointerover /template/ Path#PART_IndicatorIcon">
|
|
||||||
<Setter Property="Opacity" Value="1"/>
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style Selector="ToggleButton.line_path">
|
<Style Selector="ToggleButton.line_path">
|
||||||
<Setter Property="Margin" Value="0"/>
|
<Setter Property="Margin" Value="0"/>
|
||||||
|
|
|
@ -43,8 +43,18 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void NavigateToCommit(string commitSHA)
|
public void NavigateToCommit(string commitSHA)
|
||||||
{
|
{
|
||||||
var repo = App.FindOpenedRepository(_repo);
|
var launcher = App.GetLauncer();
|
||||||
repo?.NavigateToCommit(commitSHA);
|
if (launcher == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var page in launcher.Pages)
|
||||||
|
{
|
||||||
|
if (page.Data is Repository repo && repo.FullPath.Equals(_repo))
|
||||||
|
{
|
||||||
|
repo.NavigateToCommit(commitSHA);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly string _repo;
|
private readonly string _repo;
|
||||||
|
|
|
@ -86,8 +86,18 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void NavigateTo(string commitSHA)
|
public void NavigateTo(string commitSHA)
|
||||||
{
|
{
|
||||||
var repo = App.FindOpenedRepository(_repo);
|
var launcher = App.GetLauncer();
|
||||||
repo?.NavigateToCommit(commitSHA);
|
if (launcher == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var page in launcher.Pages)
|
||||||
|
{
|
||||||
|
if (page.Data is Repository repo && repo.FullPath.Equals(_repo))
|
||||||
|
{
|
||||||
|
repo.NavigateToCommit(commitSHA);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Swap()
|
public void Swap()
|
||||||
|
@ -119,8 +129,8 @@ namespace SourceGit.ViewModels
|
||||||
diffWithMerger.Icon = App.CreateMenuIcon("Icons.OpenWith");
|
diffWithMerger.Icon = App.CreateMenuIcon("Icons.OpenWith");
|
||||||
diffWithMerger.Click += (_, ev) =>
|
diffWithMerger.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
var toolType = Preference.Instance.ExternalMergeToolType;
|
var toolType = Preferences.Instance.ExternalMergeToolType;
|
||||||
var toolPath = Preference.Instance.ExternalMergeToolPath;
|
var toolPath = Preferences.Instance.ExternalMergeToolPath;
|
||||||
var opt = new Models.DiffOption(_based.Head, _to.Head, change);
|
var opt = new Models.DiffOption(_based.Head, _to.Head, change);
|
||||||
|
|
||||||
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, toolType, toolPath, opt));
|
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, toolType, toolPath, opt));
|
||||||
|
|
|
@ -53,8 +53,9 @@ namespace SourceGit.ViewModels
|
||||||
set => SetProperty(ref _extraArgs, value);
|
set => SetProperty(ref _extraArgs, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Clone()
|
public Clone(string pageId)
|
||||||
{
|
{
|
||||||
|
_pageId = pageId;
|
||||||
View = new Views.Clone() { DataContext = this };
|
View = new Views.Clone() { DataContext = this };
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
|
@ -94,7 +95,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
return Task.Run(() =>
|
return Task.Run(() =>
|
||||||
{
|
{
|
||||||
var cmd = new Commands.Clone(HostPageId, _parentFolder, _remote, _local, _useSSH ? _sshKey : "", _extraArgs, SetProgressDescription);
|
var cmd = new Commands.Clone(_pageId, _parentFolder, _remote, _local, _useSSH ? _sshKey : "", _extraArgs, SetProgressDescription);
|
||||||
if (!cmd.Exec())
|
if (!cmd.Exec())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -115,7 +116,7 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
CallUIThread(() =>
|
CallUIThread(() =>
|
||||||
{
|
{
|
||||||
App.RaiseException(HostPageId, $"Folder '{path}' can NOT be found");
|
App.RaiseException(_pageId, $"Folder '{path}' can NOT be found");
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -128,13 +129,12 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
CallUIThread(() =>
|
CallUIThread(() =>
|
||||||
{
|
{
|
||||||
var normalizedPath = path.Replace("\\", "/");
|
var node = Preferences.Instance.FindOrAddNodeByRepositoryPath(path, null, true);
|
||||||
var node = Preference.Instance.FindOrAddNodeByRepositoryPath(normalizedPath, null, true);
|
|
||||||
var launcher = App.GetLauncer();
|
var launcher = App.GetLauncer();
|
||||||
var page = null as LauncherPage;
|
var page = null as LauncherPage;
|
||||||
foreach (var one in launcher.Pages)
|
foreach (var one in launcher.Pages)
|
||||||
{
|
{
|
||||||
if (one.GetId() == HostPageId)
|
if (one.Node.Id == _pageId)
|
||||||
{
|
{
|
||||||
page = one;
|
page = one;
|
||||||
break;
|
break;
|
||||||
|
@ -149,10 +149,11 @@ namespace SourceGit.ViewModels
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string _pageId = string.Empty;
|
||||||
private string _remote = string.Empty;
|
private string _remote = string.Empty;
|
||||||
private bool _useSSH = false;
|
private bool _useSSH = false;
|
||||||
private string _sshKey = string.Empty;
|
private string _sshKey = string.Empty;
|
||||||
private string _parentFolder = Preference.Instance.GitDefaultCloneDir;
|
private string _parentFolder = Preferences.Instance.GitDefaultCloneDir;
|
||||||
private string _local = string.Empty;
|
private string _local = string.Empty;
|
||||||
private string _extraArgs = string.Empty;
|
private string _extraArgs = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
|
@ -344,8 +344,8 @@ namespace SourceGit.ViewModels
|
||||||
diffWithMerger.Icon = App.CreateMenuIcon("Icons.OpenWith");
|
diffWithMerger.Icon = App.CreateMenuIcon("Icons.OpenWith");
|
||||||
diffWithMerger.Click += (_, ev) =>
|
diffWithMerger.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
var toolType = Preference.Instance.ExternalMergeToolType;
|
var toolType = Preferences.Instance.ExternalMergeToolType;
|
||||||
var toolPath = Preference.Instance.ExternalMergeToolPath;
|
var toolPath = Preferences.Instance.ExternalMergeToolPath;
|
||||||
var opt = new Models.DiffOption(_commit, change);
|
var opt = new Models.DiffOption(_commit, change);
|
||||||
|
|
||||||
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo.FullPath, toolType, toolPath, opt));
|
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo.FullPath, toolType, toolPath, opt));
|
||||||
|
@ -646,11 +646,11 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
_cancelToken = new Commands.Command.CancelToken();
|
_cancelToken = new Commands.Command.CancelToken();
|
||||||
|
|
||||||
if (Preference.Instance.ShowChildren)
|
if (Preferences.Instance.ShowChildren)
|
||||||
{
|
{
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
var max = Preference.Instance.MaxHistoryCommits;
|
var max = Preferences.Instance.MaxHistoryCommits;
|
||||||
var cmdChildren = new Commands.QueryCommitChildren(_repo.FullPath, _commit.SHA, max) { Cancel = _cancelToken };
|
var cmdChildren = new Commands.QueryCommitChildren(_repo.FullPath, _commit.SHA, max) { Cancel = _cancelToken };
|
||||||
var children = cmdChildren.Result();
|
var children = cmdChildren.Result();
|
||||||
if (!cmdChildren.Cancel.Requested)
|
if (!cmdChildren.Cancel.Requested)
|
||||||
|
|
|
@ -31,13 +31,13 @@ namespace SourceGit.ViewModels
|
||||||
public ConfigureWorkspace()
|
public ConfigureWorkspace()
|
||||||
{
|
{
|
||||||
Workspaces = new AvaloniaList<Workspace>();
|
Workspaces = new AvaloniaList<Workspace>();
|
||||||
Workspaces.AddRange(Preference.Instance.Workspaces);
|
Workspaces.AddRange(Preferences.Instance.Workspaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Add()
|
public void Add()
|
||||||
{
|
{
|
||||||
var workspace = new Workspace() { Name = $"Unnamed {DateTime.Now:yyyy-MM-dd HH:mm:ss}" };
|
var workspace = new Workspace() { Name = $"Unnamed {DateTime.Now:yyyy-MM-dd HH:mm:ss}" };
|
||||||
Preference.Instance.Workspaces.Add(workspace);
|
Preferences.Instance.Workspaces.Add(workspace);
|
||||||
Workspaces.Add(workspace);
|
Workspaces.Add(workspace);
|
||||||
Selected = workspace;
|
Selected = workspace;
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ namespace SourceGit.ViewModels
|
||||||
if (_selected == null || _selected.IsActive)
|
if (_selected == null || _selected.IsActive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Preference.Instance.Workspaces.Remove(_selected);
|
Preferences.Instance.Workspaces.Remove(_selected);
|
||||||
Workspaces.Remove(_selected);
|
Workspaces.Remove(_selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -126,13 +126,18 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
CallUIThread(() =>
|
CallUIThread(() =>
|
||||||
{
|
{
|
||||||
if (succ && CheckoutAfterCreated && _repo.HistoriesFilterMode == Models.FilterMode.Included)
|
if (succ && CheckoutAfterCreated)
|
||||||
{
|
{
|
||||||
var fake = new Models.Branch() { IsLocal = true, FullName = $"refs/heads/{_name}" };
|
var fake = new Models.Branch() { IsLocal = true, FullName = $"refs/heads/{_name}" };
|
||||||
if (BasedOn is Models.Branch based && !based.IsLocal)
|
if (BasedOn is Models.Branch based && !based.IsLocal)
|
||||||
fake.Upstream = based.FullName;
|
fake.Upstream = based.FullName;
|
||||||
|
|
||||||
_repo.SetBranchFilterMode(fake, Models.FilterMode.Included, true, false);
|
var folderEndIdx = fake.FullName.LastIndexOf('/');
|
||||||
|
if (folderEndIdx > 10)
|
||||||
|
_repo.Settings.ExpandedBranchNodesInSideBar.Add(fake.FullName.Substring(0, folderEndIdx));
|
||||||
|
|
||||||
|
if (_repo.HistoriesFilterMode == Models.FilterMode.Included)
|
||||||
|
_repo.SetBranchFilterMode(fake, Models.FilterMode.Included, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
_repo.MarkBranchesDirtyManually();
|
_repo.MarkBranchesDirtyManually();
|
||||||
|
|
|
@ -21,7 +21,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public override Task<bool> Sure()
|
public override Task<bool> Sure()
|
||||||
{
|
{
|
||||||
Preference.Instance.AddNode(new RepositoryNode()
|
Preferences.Instance.AddNode(new RepositoryNode()
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid().ToString(),
|
Id = Guid.NewGuid().ToString(),
|
||||||
Name = _name,
|
Name = _name,
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public override Task<bool> Sure()
|
public override Task<bool> Sure()
|
||||||
{
|
{
|
||||||
Preference.Instance.RemoveNode(_node, true);
|
Preferences.Instance.RemoveNode(_node, true);
|
||||||
Welcome.Instance.Refresh();
|
Welcome.Instance.Refresh();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void ToggleFullTextDiff()
|
public void ToggleFullTextDiff()
|
||||||
{
|
{
|
||||||
Preference.Instance.UseFullTextDiff = !Preference.Instance.UseFullTextDiff;
|
Preferences.Instance.UseFullTextDiff = !Preferences.Instance.UseFullTextDiff;
|
||||||
LoadDiffContent();
|
LoadDiffContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,8 +93,8 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void OpenExternalMergeTool()
|
public void OpenExternalMergeTool()
|
||||||
{
|
{
|
||||||
var toolType = Preference.Instance.ExternalMergeToolType;
|
var toolType = Preferences.Instance.ExternalMergeToolType;
|
||||||
var toolPath = Preference.Instance.ExternalMergeToolPath;
|
var toolPath = Preferences.Instance.ExternalMergeToolPath;
|
||||||
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, toolType, toolPath, _option));
|
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, toolType, toolPath, _option));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ namespace SourceGit.ViewModels
|
||||||
// NOTE: Here we override the UnifiedLines value (if UseFullTextDiff is on).
|
// NOTE: Here we override the UnifiedLines value (if UseFullTextDiff is on).
|
||||||
// There is no way to tell a git-diff to use "ALL lines of context",
|
// There is no way to tell a git-diff to use "ALL lines of context",
|
||||||
// so instead we set a very high number for the "lines of context" parameter.
|
// so instead we set a very high number for the "lines of context" parameter.
|
||||||
var numLines = Preference.Instance.UseFullTextDiff ? 999999999 : _unifiedLines;
|
var numLines = Preferences.Instance.UseFullTextDiff ? 999999999 : _unifiedLines;
|
||||||
var latest = new Commands.Diff(_repo, _option, numLines, _ignoreWhitespace).Result();
|
var latest = new Commands.Diff(_repo, _option, numLines, _ignoreWhitespace).Result();
|
||||||
var info = new Info(_option, numLines, _ignoreWhitespace, latest);
|
var info = new Info(_option, numLines, _ignoreWhitespace, latest);
|
||||||
if (_info != null && info.IsSame(_info))
|
if (_info != null && info.IsSame(_info))
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
if (needSort)
|
if (needSort)
|
||||||
{
|
{
|
||||||
Preference.Instance.SortByRenamedNode(_node);
|
Preferences.Instance.SortByRenamedNode(_node);
|
||||||
Welcome.Instance.Refresh();
|
Welcome.Instance.Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -209,12 +209,12 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
{
|
{
|
||||||
if (firstRemoteBranch != null)
|
if (firstRemoteBranch != null)
|
||||||
PopupHost.ShowPopup(new CreateBranch(_repo, firstRemoteBranch));
|
_repo.ShowPopup(new CreateBranch(_repo, firstRemoteBranch));
|
||||||
else
|
else
|
||||||
PopupHost.ShowPopup(new CheckoutCommit(_repo, commit));
|
_repo.ShowPopup(new CheckoutCommit(_repo, commit));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,8 +260,8 @@ namespace SourceGit.ViewModels
|
||||||
cherryPickMultiple.Icon = App.CreateMenuIcon("Icons.CherryPick");
|
cherryPickMultiple.Icon = App.CreateMenuIcon("Icons.CherryPick");
|
||||||
cherryPickMultiple.Click += (_, e) =>
|
cherryPickMultiple.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CherryPick(_repo, selected));
|
_repo.ShowPopup(new CherryPick(_repo, selected));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
multipleMenu.Items.Add(cherryPickMultiple);
|
multipleMenu.Items.Add(cherryPickMultiple);
|
||||||
|
@ -274,8 +274,8 @@ namespace SourceGit.ViewModels
|
||||||
mergeMultiple.Icon = App.CreateMenuIcon("Icons.Merge");
|
mergeMultiple.Icon = App.CreateMenuIcon("Icons.Merge");
|
||||||
mergeMultiple.Click += (_, e) =>
|
mergeMultiple.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new MergeMultiple(_repo, selected));
|
_repo.ShowPopup(new MergeMultiple(_repo, selected));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
multipleMenu.Items.Add(mergeMultiple);
|
multipleMenu.Items.Add(mergeMultiple);
|
||||||
|
@ -401,8 +401,8 @@ namespace SourceGit.ViewModels
|
||||||
reset.Icon = App.CreateMenuIcon("Icons.Reset");
|
reset.Icon = App.CreateMenuIcon("Icons.Reset");
|
||||||
reset.Click += (_, e) =>
|
reset.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Reset(_repo, current, commit));
|
_repo.ShowPopup(new Reset(_repo, current, commit));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(reset);
|
menu.Items.Add(reset);
|
||||||
|
@ -420,8 +420,8 @@ namespace SourceGit.ViewModels
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Squash(_repo, commit, commit.SHA));
|
_repo.ShowPopup(new Squash(_repo, commit, commit.SHA));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -441,8 +441,8 @@ namespace SourceGit.ViewModels
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Reword(_repo, commit));
|
_repo.ShowPopup(new Reword(_repo, commit));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(reword);
|
menu.Items.Add(reword);
|
||||||
|
@ -462,8 +462,8 @@ namespace SourceGit.ViewModels
|
||||||
if (commit.Parents.Count == 1)
|
if (commit.Parents.Count == 1)
|
||||||
{
|
{
|
||||||
var parent = _commits.Find(x => x.SHA == commit.Parents[0]);
|
var parent = _commits.Find(x => x.SHA == commit.Parents[0]);
|
||||||
if (parent != null && PopupHost.CanCreatePopup())
|
if (parent != null && _repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Squash(_repo, parent, commit.SHA));
|
_repo.ShowPopup(new Squash(_repo, parent, commit.SHA));
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -478,8 +478,8 @@ namespace SourceGit.ViewModels
|
||||||
rebase.Icon = App.CreateMenuIcon("Icons.Rebase");
|
rebase.Icon = App.CreateMenuIcon("Icons.Rebase");
|
||||||
rebase.Click += (_, e) =>
|
rebase.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Rebase(_repo, current, commit));
|
_repo.ShowPopup(new Rebase(_repo, current, commit));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(rebase);
|
menu.Items.Add(rebase);
|
||||||
|
@ -491,8 +491,8 @@ namespace SourceGit.ViewModels
|
||||||
merge.Icon = App.CreateMenuIcon("Icons.Merge");
|
merge.Icon = App.CreateMenuIcon("Icons.Merge");
|
||||||
merge.Click += (_, e) =>
|
merge.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Merge(_repo, commit, current.Name));
|
_repo.ShowPopup(new Merge(_repo, commit, current.Name));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -504,11 +504,11 @@ namespace SourceGit.ViewModels
|
||||||
cherryPick.Icon = App.CreateMenuIcon("Icons.CherryPick");
|
cherryPick.Icon = App.CreateMenuIcon("Icons.CherryPick");
|
||||||
cherryPick.Click += (_, e) =>
|
cherryPick.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
{
|
{
|
||||||
if (commit.Parents.Count <= 1)
|
if (commit.Parents.Count <= 1)
|
||||||
{
|
{
|
||||||
PopupHost.ShowPopup(new CherryPick(_repo, [commit]));
|
_repo.ShowPopup(new CherryPick(_repo, [commit]));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -523,7 +523,7 @@ namespace SourceGit.ViewModels
|
||||||
parents.Add(parent);
|
parents.Add(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
PopupHost.ShowPopup(new CherryPick(_repo, commit, parents));
|
_repo.ShowPopup(new CherryPick(_repo, commit, parents));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -538,8 +538,8 @@ namespace SourceGit.ViewModels
|
||||||
revert.Icon = App.CreateMenuIcon("Icons.Undo");
|
revert.Icon = App.CreateMenuIcon("Icons.Undo");
|
||||||
revert.Click += (_, e) =>
|
revert.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Revert(_repo, commit));
|
_repo.ShowPopup(new Revert(_repo, commit));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(revert);
|
menu.Items.Add(revert);
|
||||||
|
@ -552,8 +552,8 @@ namespace SourceGit.ViewModels
|
||||||
checkoutCommit.Icon = App.CreateMenuIcon("Icons.Detached");
|
checkoutCommit.Icon = App.CreateMenuIcon("Icons.Detached");
|
||||||
checkoutCommit.Click += (_, e) =>
|
checkoutCommit.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CheckoutCommit(_repo, commit));
|
_repo.ShowPopup(new CheckoutCommit(_repo, commit));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(checkoutCommit);
|
menu.Items.Add(checkoutCommit);
|
||||||
|
@ -630,8 +630,8 @@ namespace SourceGit.ViewModels
|
||||||
createBranch.Header = App.Text("CreateBranch");
|
createBranch.Header = App.Text("CreateBranch");
|
||||||
createBranch.Click += (_, e) =>
|
createBranch.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CreateBranch(_repo, commit));
|
_repo.ShowPopup(new CreateBranch(_repo, commit));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(createBranch);
|
menu.Items.Add(createBranch);
|
||||||
|
@ -641,8 +641,8 @@ namespace SourceGit.ViewModels
|
||||||
createTag.Header = App.Text("CreateTag");
|
createTag.Header = App.Text("CreateTag");
|
||||||
createTag.Click += (_, e) =>
|
createTag.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CreateTag(_repo, commit));
|
_repo.ShowPopup(new CreateTag(_repo, commit));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(createTag);
|
menu.Items.Add(createTag);
|
||||||
|
@ -683,8 +683,8 @@ namespace SourceGit.ViewModels
|
||||||
archive.Header = App.Text("Archive");
|
archive.Header = App.Text("Archive");
|
||||||
archive.Click += (_, e) =>
|
archive.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Archive(_repo, commit));
|
_repo.ShowPopup(new Archive(_repo, commit));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(archive);
|
menu.Items.Add(archive);
|
||||||
|
@ -710,8 +710,8 @@ namespace SourceGit.ViewModels
|
||||||
item.Header = dup.Name;
|
item.Header = dup.Name;
|
||||||
item.Click += (_, e) =>
|
item.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new ExecuteCustomAction(_repo, dup, commit));
|
_repo.ShowAndStartPopup(new ExecuteCustomAction(_repo, dup, commit));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -871,8 +871,8 @@ namespace SourceGit.ViewModels
|
||||||
if (b == null)
|
if (b == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new Merge(_repo, b, current.Name));
|
_repo.ShowAndStartPopup(new Merge(_repo, b, current.Name));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -883,8 +883,8 @@ namespace SourceGit.ViewModels
|
||||||
pull.Icon = App.CreateMenuIcon("Icons.Pull");
|
pull.Icon = App.CreateMenuIcon("Icons.Pull");
|
||||||
pull.Click += (_, e) =>
|
pull.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Pull(_repo, null));
|
_repo.ShowPopup(new Pull(_repo, null));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(pull);
|
submenu.Items.Add(pull);
|
||||||
|
@ -896,8 +896,8 @@ namespace SourceGit.ViewModels
|
||||||
push.IsEnabled = _repo.Remotes.Count > 0;
|
push.IsEnabled = _repo.Remotes.Count > 0;
|
||||||
push.Click += (_, e) =>
|
push.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Push(_repo, current));
|
_repo.ShowPopup(new Push(_repo, current));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(push);
|
submenu.Items.Add(push);
|
||||||
|
@ -907,8 +907,8 @@ namespace SourceGit.ViewModels
|
||||||
rename.Icon = App.CreateMenuIcon("Icons.Rename");
|
rename.Icon = App.CreateMenuIcon("Icons.Rename");
|
||||||
rename.Click += (_, e) =>
|
rename.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new RenameBranch(_repo, current));
|
_repo.ShowPopup(new RenameBranch(_repo, current));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(rename);
|
submenu.Items.Add(rename);
|
||||||
|
@ -922,8 +922,8 @@ namespace SourceGit.ViewModels
|
||||||
finish.Icon = App.CreateMenuIcon("Icons.GitFlow");
|
finish.Icon = App.CreateMenuIcon("Icons.GitFlow");
|
||||||
finish.Click += (_, e) =>
|
finish.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new GitFlowFinish(_repo, current, detect.Type, detect.Prefix));
|
_repo.ShowPopup(new GitFlowFinish(_repo, current, detect.Type, detect.Prefix));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(finish);
|
submenu.Items.Add(finish);
|
||||||
|
@ -967,8 +967,8 @@ namespace SourceGit.ViewModels
|
||||||
merge.IsEnabled = !merged;
|
merge.IsEnabled = !merged;
|
||||||
merge.Click += (_, e) =>
|
merge.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Merge(_repo, branch, current.Name));
|
_repo.ShowPopup(new Merge(_repo, branch, current.Name));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(merge);
|
submenu.Items.Add(merge);
|
||||||
|
@ -978,8 +978,8 @@ namespace SourceGit.ViewModels
|
||||||
rename.Icon = App.CreateMenuIcon("Icons.Rename");
|
rename.Icon = App.CreateMenuIcon("Icons.Rename");
|
||||||
rename.Click += (_, e) =>
|
rename.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new RenameBranch(_repo, branch));
|
_repo.ShowPopup(new RenameBranch(_repo, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(rename);
|
submenu.Items.Add(rename);
|
||||||
|
@ -989,8 +989,8 @@ namespace SourceGit.ViewModels
|
||||||
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||||
delete.Click += (_, e) =>
|
delete.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DeleteBranch(_repo, branch));
|
_repo.ShowPopup(new DeleteBranch(_repo, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(delete);
|
submenu.Items.Add(delete);
|
||||||
|
@ -1004,8 +1004,8 @@ namespace SourceGit.ViewModels
|
||||||
finish.Icon = App.CreateMenuIcon("Icons.GitFlow");
|
finish.Icon = App.CreateMenuIcon("Icons.GitFlow");
|
||||||
finish.Click += (_, e) =>
|
finish.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new GitFlowFinish(_repo, branch, detect.Type, detect.Prefix));
|
_repo.ShowPopup(new GitFlowFinish(_repo, branch, detect.Type, detect.Prefix));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(finish);
|
submenu.Items.Add(finish);
|
||||||
|
@ -1051,8 +1051,8 @@ namespace SourceGit.ViewModels
|
||||||
merge.IsEnabled = !merged;
|
merge.IsEnabled = !merged;
|
||||||
merge.Click += (_, e) =>
|
merge.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Merge(_repo, branch, current.Name));
|
_repo.ShowPopup(new Merge(_repo, branch, current.Name));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1063,8 +1063,8 @@ namespace SourceGit.ViewModels
|
||||||
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||||
delete.Click += (_, e) =>
|
delete.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DeleteBranch(_repo, branch));
|
_repo.ShowPopup(new DeleteBranch(_repo, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(delete);
|
submenu.Items.Add(delete);
|
||||||
|
@ -1098,8 +1098,8 @@ namespace SourceGit.ViewModels
|
||||||
push.IsEnabled = _repo.Remotes.Count > 0;
|
push.IsEnabled = _repo.Remotes.Count > 0;
|
||||||
push.Click += (_, e) =>
|
push.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new PushTag(_repo, tag));
|
_repo.ShowPopup(new PushTag(_repo, tag));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(push);
|
submenu.Items.Add(push);
|
||||||
|
@ -1110,8 +1110,8 @@ namespace SourceGit.ViewModels
|
||||||
merge.IsEnabled = !merged;
|
merge.IsEnabled = !merged;
|
||||||
merge.Click += (_, e) =>
|
merge.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Merge(_repo, tag, current.Name));
|
_repo.ShowPopup(new Merge(_repo, tag, current.Name));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(merge);
|
submenu.Items.Add(merge);
|
||||||
|
@ -1121,8 +1121,8 @@ namespace SourceGit.ViewModels
|
||||||
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||||
delete.Click += (_, e) =>
|
delete.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DeleteTag(_repo, tag));
|
_repo.ShowPopup(new DeleteTag(_repo, tag));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
submenu.Items.Add(delete);
|
submenu.Items.Add(delete);
|
||||||
|
|
|
@ -71,7 +71,7 @@ namespace SourceGit.ViewModels
|
||||||
get => GetFriendlyNameOfCommit(Head);
|
get => GetFriendlyNameOfCommit(Head);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CherryPickInProgress(Repository repo) : base(repo.FullPath, "cherry-pick")
|
public CherryPickInProgress(Repository repo) : base(repo.FullPath, "cherry-pick")
|
||||||
{
|
{
|
||||||
var headSHA = File.ReadAllText(Path.Combine(repo.GitDir, "CHERRY_PICK_HEAD")).Trim();
|
var headSHA = File.ReadAllText(Path.Combine(repo.GitDir, "CHERRY_PICK_HEAD")).Trim();
|
||||||
Head = new Commands.QuerySingleCommit(repo.FullPath, headSHA).Result() ?? new Models.Commit() { SHA = headSHA };
|
Head = new Commands.QuerySingleCommit(repo.FullPath, headSHA).Result() ?? new Models.Commit() { SHA = headSHA };
|
||||||
|
|
|
@ -16,8 +16,9 @@ namespace SourceGit.ViewModels
|
||||||
private set;
|
private set;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Init(string path, RepositoryNode parent, string reason)
|
public Init(string pageId, string path, RepositoryNode parent, string reason)
|
||||||
{
|
{
|
||||||
|
_pageId = pageId;
|
||||||
_targetPath = path;
|
_targetPath = path;
|
||||||
_parentNode = parent;
|
_parentNode = parent;
|
||||||
|
|
||||||
|
@ -31,14 +32,13 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
return Task.Run(() =>
|
return Task.Run(() =>
|
||||||
{
|
{
|
||||||
var succ = new Commands.Init(HostPageId, _targetPath).Exec();
|
var succ = new Commands.Init(_pageId, _targetPath).Exec();
|
||||||
if (!succ)
|
if (!succ)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
CallUIThread(() =>
|
CallUIThread(() =>
|
||||||
{
|
{
|
||||||
var normalizedPath = _targetPath.Replace("\\", "/");
|
Preferences.Instance.FindOrAddNodeByRepositoryPath(_targetPath, _parentNode, true);
|
||||||
Preference.Instance.FindOrAddNodeByRepositoryPath(normalizedPath, _parentNode, true);
|
|
||||||
Welcome.Instance.Refresh();
|
Welcome.Instance.Refresh();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ namespace SourceGit.ViewModels
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string _pageId = null;
|
||||||
private string _targetPath = null;
|
private string _targetPath = null;
|
||||||
private RepositoryNode _parentNode = null;
|
private RepositoryNode _parentNode = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,6 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
if (SetProperty(ref _activePage, value))
|
if (SetProperty(ref _activePage, value))
|
||||||
{
|
{
|
||||||
PopupHost.Active = value;
|
|
||||||
UpdateTitle();
|
UpdateTitle();
|
||||||
|
|
||||||
if (!_ignoreIndexChange && value is { Data: Repository repo })
|
if (!_ignoreIndexChange && value is { Data: Repository repo })
|
||||||
|
@ -52,7 +51,7 @@ namespace SourceGit.ViewModels
|
||||||
Pages = new AvaloniaList<LauncherPage>();
|
Pages = new AvaloniaList<LauncherPage>();
|
||||||
AddNewTab();
|
AddNewTab();
|
||||||
|
|
||||||
var pref = Preference.Instance;
|
var pref = Preferences.Instance;
|
||||||
if (string.IsNullOrEmpty(startupRepo))
|
if (string.IsNullOrEmpty(startupRepo))
|
||||||
{
|
{
|
||||||
ActiveWorkspace = pref.GetActiveWorkspace();
|
ActiveWorkspace = pref.GetActiveWorkspace();
|
||||||
|
@ -104,8 +103,7 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var normalized = test.StdOut.Trim().Replace("\\", "/");
|
var node = pref.FindOrAddNodeByRepositoryPath(test.StdOut.Trim(), null, false);
|
||||||
var node = pref.FindOrAddNodeByRepositoryPath(normalized, null, false);
|
|
||||||
Welcome.Instance.Refresh();
|
Welcome.Instance.Refresh();
|
||||||
OpenRepositoryInTab(node, null);
|
OpenRepositoryInTab(node, null);
|
||||||
}
|
}
|
||||||
|
@ -119,7 +117,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void Quit(double width, double height)
|
public void Quit(double width, double height)
|
||||||
{
|
{
|
||||||
var pref = Preference.Instance;
|
var pref = Preferences.Instance;
|
||||||
pref.Layout.LauncherWidth = width;
|
pref.Layout.LauncherWidth = width;
|
||||||
pref.Layout.LauncherHeight = height;
|
pref.Layout.LauncherHeight = height;
|
||||||
pref.Save();
|
pref.Save();
|
||||||
|
@ -295,7 +293,6 @@ namespace SourceGit.ViewModels
|
||||||
FullPath = node.Id,
|
FullPath = node.Id,
|
||||||
GitDir = gitDir,
|
GitDir = gitDir,
|
||||||
};
|
};
|
||||||
|
|
||||||
repo.Open();
|
repo.Open();
|
||||||
|
|
||||||
if (page == null)
|
if (page == null)
|
||||||
|
@ -358,7 +355,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public ContextMenu CreateContextForWorkspace()
|
public ContextMenu CreateContextForWorkspace()
|
||||||
{
|
{
|
||||||
var pref = Preference.Instance;
|
var pref = Preferences.Instance;
|
||||||
var menu = new ContextMenu();
|
var menu = new ContextMenu();
|
||||||
|
|
||||||
for (var i = 0; i < pref.Workspaces.Count; i++)
|
for (var i = 0; i < pref.Workspaces.Count; i++)
|
||||||
|
@ -475,7 +472,7 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
foreach (var one in Pages)
|
foreach (var one in Pages)
|
||||||
{
|
{
|
||||||
if (one.IsInProgress())
|
if (!one.CanCreatePopup() || one.Data is Repository { IsAutoFetching: true })
|
||||||
{
|
{
|
||||||
App.RaiseException(null, "You have unfinished task(s) in opened pages. Please wait!!!");
|
App.RaiseException(null, "You have unfinished task(s) in opened pages. Please wait!!!");
|
||||||
return;
|
return;
|
||||||
|
@ -484,7 +481,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
_ignoreIndexChange = true;
|
_ignoreIndexChange = true;
|
||||||
|
|
||||||
var pref = Preference.Instance;
|
var pref = Preferences.Instance;
|
||||||
foreach (var w in pref.Workspaces)
|
foreach (var w in pref.Workspaces)
|
||||||
w.IsActive = false;
|
w.IsActive = false;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
using Avalonia.Collections;
|
using Avalonia.Collections;
|
||||||
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
|
||||||
namespace SourceGit.ViewModels
|
namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
public class LauncherPage : PopupHost
|
public class LauncherPage : ObservableObject
|
||||||
{
|
{
|
||||||
public RepositoryNode Node
|
public RepositoryNode Node
|
||||||
{
|
{
|
||||||
|
@ -18,6 +18,12 @@ namespace SourceGit.ViewModels
|
||||||
set => SetProperty(ref _data, value);
|
set => SetProperty(ref _data, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Popup Popup
|
||||||
|
{
|
||||||
|
get => _popup;
|
||||||
|
set => SetProperty(ref _popup, value);
|
||||||
|
}
|
||||||
|
|
||||||
public AvaloniaList<Models.Notification> Notifications
|
public AvaloniaList<Models.Notification> Notifications
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
|
@ -39,26 +45,58 @@ namespace SourceGit.ViewModels
|
||||||
_data = repo;
|
_data = repo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string GetId()
|
|
||||||
{
|
|
||||||
return _node.Id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsInProgress()
|
|
||||||
{
|
|
||||||
if (_data is Repository { IsAutoFetching: true })
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return base.IsInProgress();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CopyPath()
|
public void CopyPath()
|
||||||
{
|
{
|
||||||
if (_node.IsRepository)
|
if (_node.IsRepository)
|
||||||
App.CopyText(_node.Id);
|
App.CopyText(_node.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanCreatePopup()
|
||||||
|
{
|
||||||
|
return _popup == null || !_popup.InProgress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartPopup(Popup popup)
|
||||||
|
{
|
||||||
|
Popup = popup;
|
||||||
|
ProcessPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void ProcessPopup()
|
||||||
|
{
|
||||||
|
if (_popup != null)
|
||||||
|
{
|
||||||
|
if (!_popup.Check())
|
||||||
|
return;
|
||||||
|
|
||||||
|
_popup.InProgress = true;
|
||||||
|
var task = _popup.Sure();
|
||||||
|
if (task != null)
|
||||||
|
{
|
||||||
|
var finished = await task;
|
||||||
|
_popup.InProgress = false;
|
||||||
|
if (finished)
|
||||||
|
Popup = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_popup.InProgress = false;
|
||||||
|
Popup = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CancelPopup()
|
||||||
|
{
|
||||||
|
if (_popup == null)
|
||||||
|
return;
|
||||||
|
if (_popup.InProgress)
|
||||||
|
return;
|
||||||
|
Popup = null;
|
||||||
|
}
|
||||||
|
|
||||||
private RepositoryNode _node = null;
|
private RepositoryNode _node = null;
|
||||||
private object _data = null;
|
private object _data = null;
|
||||||
|
private Popup _popup = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ namespace SourceGit.ViewModels
|
||||||
Depth = 0,
|
Depth = 0,
|
||||||
Id = Guid.NewGuid().ToString()
|
Id = Guid.NewGuid().ToString()
|
||||||
});
|
});
|
||||||
MakeRows(Preference.Instance.RepositoryNodes, 1);
|
MakeRows(Preferences.Instance.RepositoryNodes, 1);
|
||||||
|
|
||||||
View = new Views.MoveRepositoryNode() { DataContext = this };
|
View = new Views.MoveRepositoryNode() { DataContext = this };
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,8 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
if (_selected != null)
|
if (_selected != null)
|
||||||
{
|
{
|
||||||
var node = Preference.Instance.FindNode(_selected.Id);
|
var node = Preferences.Instance.FindNode(_selected.Id);
|
||||||
Preference.Instance.MoveNode(Target, node, true);
|
Preferences.Instance.MoveNode(Target, node, true);
|
||||||
Welcome.Instance.Refresh();
|
Welcome.Instance.Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,6 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
public class Popup : ObservableValidator
|
public class Popup : ObservableValidator
|
||||||
{
|
{
|
||||||
public string HostPageId
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public object View
|
public object View
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
|
||||||
|
|
||||||
namespace SourceGit.ViewModels
|
|
||||||
{
|
|
||||||
public class PopupHost : ObservableObject
|
|
||||||
{
|
|
||||||
public static PopupHost Active
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
} = null;
|
|
||||||
|
|
||||||
public Popup Popup
|
|
||||||
{
|
|
||||||
get => _popup;
|
|
||||||
set => SetProperty(ref _popup, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool CanCreatePopup()
|
|
||||||
{
|
|
||||||
return Active?.IsInProgress() != true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void ShowPopup(Popup popup)
|
|
||||||
{
|
|
||||||
popup.HostPageId = Active.GetId();
|
|
||||||
Active.Popup = popup;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void ShowAndStartPopup(Popup popup)
|
|
||||||
{
|
|
||||||
var dumpPage = Active;
|
|
||||||
popup.HostPageId = dumpPage.GetId();
|
|
||||||
dumpPage.Popup = popup;
|
|
||||||
dumpPage.ProcessPopup();
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual string GetId()
|
|
||||||
{
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool IsInProgress()
|
|
||||||
{
|
|
||||||
return _popup is { InProgress: true };
|
|
||||||
}
|
|
||||||
|
|
||||||
public async void ProcessPopup()
|
|
||||||
{
|
|
||||||
if (_popup != null)
|
|
||||||
{
|
|
||||||
if (!_popup.Check())
|
|
||||||
return;
|
|
||||||
|
|
||||||
_popup.InProgress = true;
|
|
||||||
var task = _popup.Sure();
|
|
||||||
if (task != null)
|
|
||||||
{
|
|
||||||
var finished = await task;
|
|
||||||
_popup.InProgress = false;
|
|
||||||
if (finished)
|
|
||||||
Popup = null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_popup.InProgress = false;
|
|
||||||
Popup = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CancelPopup()
|
|
||||||
{
|
|
||||||
if (_popup == null)
|
|
||||||
return;
|
|
||||||
if (_popup.InProgress)
|
|
||||||
return;
|
|
||||||
Popup = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Popup _popup = null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -9,10 +9,10 @@ using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
|
||||||
namespace SourceGit.ViewModels
|
namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
public class Preference : ObservableObject
|
public class Preferences : ObservableObject
|
||||||
{
|
{
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public static Preference Instance
|
public static Preferences Instance
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
@ -405,13 +405,17 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public RepositoryNode FindOrAddNodeByRepositoryPath(string repo, RepositoryNode parent, bool shouldMoveNode)
|
public RepositoryNode FindOrAddNodeByRepositoryPath(string repo, RepositoryNode parent, bool shouldMoveNode)
|
||||||
{
|
{
|
||||||
var node = FindNodeRecursive(repo, RepositoryNodes);
|
var normalized = repo.Replace('\\', '/');
|
||||||
|
if (normalized.EndsWith("/"))
|
||||||
|
normalized = normalized.TrimEnd('/');
|
||||||
|
|
||||||
|
var node = FindNodeRecursive(normalized, RepositoryNodes);
|
||||||
if (node == null)
|
if (node == null)
|
||||||
{
|
{
|
||||||
node = new RepositoryNode()
|
node = new RepositoryNode()
|
||||||
{
|
{
|
||||||
Id = repo,
|
Id = normalized,
|
||||||
Name = Path.GetFileName(repo),
|
Name = Path.GetFileName(normalized),
|
||||||
Bookmark = 0,
|
Bookmark = 0,
|
||||||
IsRepository = true,
|
IsRepository = true,
|
||||||
};
|
};
|
||||||
|
@ -475,23 +479,23 @@ namespace SourceGit.ViewModels
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var file = Path.Combine(Native.OS.DataDir, "preference.json");
|
var file = Path.Combine(Native.OS.DataDir, "preference.json");
|
||||||
var data = JsonSerializer.Serialize(this, JsonCodeGen.Default.Preference);
|
var data = JsonSerializer.Serialize(this, JsonCodeGen.Default.Preferences);
|
||||||
File.WriteAllText(file, data);
|
File.WriteAllText(file, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Preference Load()
|
private static Preferences Load()
|
||||||
{
|
{
|
||||||
var path = Path.Combine(Native.OS.DataDir, "preference.json");
|
var path = Path.Combine(Native.OS.DataDir, "preference.json");
|
||||||
if (!File.Exists(path))
|
if (!File.Exists(path))
|
||||||
return new Preference();
|
return new Preferences();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return JsonSerializer.Deserialize(File.ReadAllText(path), JsonCodeGen.Default.Preference);
|
return JsonSerializer.Deserialize(File.ReadAllText(path), JsonCodeGen.Default.Preferences);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
return new Preference();
|
return new Preferences();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -633,7 +637,7 @@ namespace SourceGit.ViewModels
|
||||||
return builder.ToString();
|
return builder.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Preference _instance = null;
|
private static Preferences _instance = null;
|
||||||
private static bool _isLoading = false;
|
private static bool _isLoading = false;
|
||||||
|
|
||||||
private string _locale = "en_US";
|
private string _locale = "en_US";
|
|
@ -128,6 +128,33 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool OnlyHighlightCurrentBranchInHistories
|
||||||
|
{
|
||||||
|
get => _settings.OnlyHighlighCurrentBranchInHistories;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != _settings.OnlyHighlighCurrentBranchInHistories)
|
||||||
|
{
|
||||||
|
_settings.OnlyHighlighCurrentBranchInHistories = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Models.TagSortMode TagSortMode
|
||||||
|
{
|
||||||
|
get => _settings.TagSortMode;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != _settings.TagSortMode)
|
||||||
|
{
|
||||||
|
_settings.TagSortMode = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
VisibleTags = BuildVisibleTags();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string Filter
|
public string Filter
|
||||||
{
|
{
|
||||||
get => _filter;
|
get => _filter;
|
||||||
|
@ -510,6 +537,27 @@ namespace SourceGit.ViewModels
|
||||||
SearchCommitFilterSuggestion.Clear();
|
SearchCommitFilterSuggestion.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanCreatePopup()
|
||||||
|
{
|
||||||
|
var page = GetOwnerPage();
|
||||||
|
if (page == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return !_isAutoFetching && page.CanCreatePopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ShowPopup(Popup popup)
|
||||||
|
{
|
||||||
|
var page = GetOwnerPage();
|
||||||
|
if (page != null)
|
||||||
|
page.Popup = popup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ShowAndStartPopup(Popup popup)
|
||||||
|
{
|
||||||
|
GetOwnerPage()?.StartPopup(popup);
|
||||||
|
}
|
||||||
|
|
||||||
public void RefreshAll()
|
public void RefreshAll()
|
||||||
{
|
{
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
|
@ -571,7 +619,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void Fetch(bool autoStart)
|
public void Fetch(bool autoStart)
|
||||||
{
|
{
|
||||||
if (!PopupHost.CanCreatePopup())
|
if (!CanCreatePopup())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_remotes.Count == 0)
|
if (_remotes.Count == 0)
|
||||||
|
@ -581,14 +629,14 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
|
|
||||||
if (autoStart)
|
if (autoStart)
|
||||||
PopupHost.ShowAndStartPopup(new Fetch(this));
|
ShowAndStartPopup(new Fetch(this));
|
||||||
else
|
else
|
||||||
PopupHost.ShowPopup(new Fetch(this));
|
ShowPopup(new Fetch(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Pull(bool autoStart)
|
public void Pull(bool autoStart)
|
||||||
{
|
{
|
||||||
if (!PopupHost.CanCreatePopup())
|
if (!CanCreatePopup())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_remotes.Count == 0)
|
if (_remotes.Count == 0)
|
||||||
|
@ -599,14 +647,14 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
var pull = new Pull(this, null);
|
var pull = new Pull(this, null);
|
||||||
if (autoStart && pull.SelectedBranch != null)
|
if (autoStart && pull.SelectedBranch != null)
|
||||||
PopupHost.ShowAndStartPopup(pull);
|
ShowAndStartPopup(pull);
|
||||||
else
|
else
|
||||||
PopupHost.ShowPopup(pull);
|
ShowPopup(pull);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Push(bool autoStart)
|
public void Push(bool autoStart)
|
||||||
{
|
{
|
||||||
if (!PopupHost.CanCreatePopup())
|
if (!CanCreatePopup())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_remotes.Count == 0)
|
if (_remotes.Count == 0)
|
||||||
|
@ -622,23 +670,23 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
|
|
||||||
if (autoStart)
|
if (autoStart)
|
||||||
PopupHost.ShowAndStartPopup(new Push(this, null));
|
ShowAndStartPopup(new Push(this, null));
|
||||||
else
|
else
|
||||||
PopupHost.ShowPopup(new Push(this, null));
|
ShowPopup(new Push(this, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ApplyPatch()
|
public void ApplyPatch()
|
||||||
{
|
{
|
||||||
if (!PopupHost.CanCreatePopup())
|
if (!CanCreatePopup())
|
||||||
return;
|
return;
|
||||||
PopupHost.ShowPopup(new Apply(this));
|
ShowPopup(new Apply(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Cleanup()
|
public void Cleanup()
|
||||||
{
|
{
|
||||||
if (!PopupHost.CanCreatePopup())
|
if (!CanCreatePopup())
|
||||||
return;
|
return;
|
||||||
PopupHost.ShowAndStartPopup(new Cleanup(this));
|
ShowAndStartPopup(new Cleanup(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearFilter()
|
public void ClearFilter()
|
||||||
|
@ -854,7 +902,9 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
Dispatcher.UIThread.Invoke(() =>
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
{
|
{
|
||||||
Remotes = remotes;
|
lock (_lockRemotes)
|
||||||
|
Remotes = remotes;
|
||||||
|
|
||||||
Branches = branches;
|
Branches = branches;
|
||||||
CurrentBranch = branches.Find(x => x.IsCurrent);
|
CurrentBranch = branches.Find(x => x.IsCurrent);
|
||||||
LocalBranchTrees = builder.Locals;
|
LocalBranchTrees = builder.Locals;
|
||||||
|
@ -899,7 +949,7 @@ namespace SourceGit.ViewModels
|
||||||
Dispatcher.UIThread.Invoke(() => _histories.IsLoading = true);
|
Dispatcher.UIThread.Invoke(() => _histories.IsLoading = true);
|
||||||
|
|
||||||
var builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
builder.Append($"-{Preference.Instance.MaxHistoryCommits} ");
|
builder.Append($"-{Preferences.Instance.MaxHistoryCommits} ");
|
||||||
|
|
||||||
if (_settings.EnableTopoOrderInHistories)
|
if (_settings.EnableTopoOrderInHistories)
|
||||||
builder.Append("--topo-order ");
|
builder.Append("--topo-order ");
|
||||||
|
@ -978,8 +1028,8 @@ namespace SourceGit.ViewModels
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CreateBranch(this, _currentBranch));
|
ShowPopup(new CreateBranch(this, _currentBranch));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CheckoutBranch(Models.Branch branch)
|
public void CheckoutBranch(Models.Branch branch)
|
||||||
|
@ -994,15 +1044,15 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PopupHost.CanCreatePopup())
|
if (!CanCreatePopup())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (branch.IsLocal)
|
if (branch.IsLocal)
|
||||||
{
|
{
|
||||||
if (_localChangesCount > 0)
|
if (_localChangesCount > 0)
|
||||||
PopupHost.ShowPopup(new Checkout(this, branch.Name));
|
ShowPopup(new Checkout(this, branch.Name));
|
||||||
else
|
else
|
||||||
PopupHost.ShowAndStartPopup(new Checkout(this, branch.Name));
|
ShowAndStartPopup(new Checkout(this, branch.Name));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1017,20 +1067,20 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PopupHost.ShowPopup(new CreateBranch(this, branch));
|
ShowPopup(new CreateBranch(this, branch));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteMultipleBranches(List<Models.Branch> branches, bool isLocal)
|
public void DeleteMultipleBranches(List<Models.Branch> branches, bool isLocal)
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DeleteMultipleBranches(this, branches, isLocal));
|
ShowPopup(new DeleteMultipleBranches(this, branches, isLocal));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MergeMultipleBranches(List<Models.Branch> branches)
|
public void MergeMultipleBranches(List<Models.Branch> branches)
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new MergeMultiple(this, branches));
|
ShowPopup(new MergeMultiple(this, branches));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateNewTag()
|
public void CreateNewTag()
|
||||||
|
@ -1041,26 +1091,26 @@ namespace SourceGit.ViewModels
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CreateTag(this, _currentBranch));
|
ShowPopup(new CreateTag(this, _currentBranch));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddRemote()
|
public void AddRemote()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new AddRemote(this));
|
ShowPopup(new AddRemote(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddSubmodule()
|
public void AddSubmodule()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new AddSubmodule(this));
|
ShowPopup(new AddSubmodule(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateSubmodules()
|
public void UpdateSubmodules()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new UpdateSubmodules(this));
|
ShowPopup(new UpdateSubmodules(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenSubmodule(string submodule)
|
public void OpenSubmodule(string submodule)
|
||||||
|
@ -1068,7 +1118,7 @@ namespace SourceGit.ViewModels
|
||||||
var root = Path.GetFullPath(Path.Combine(_fullpath, submodule));
|
var root = Path.GetFullPath(Path.Combine(_fullpath, submodule));
|
||||||
var normalizedPath = root.Replace("\\", "/");
|
var normalizedPath = root.Replace("\\", "/");
|
||||||
|
|
||||||
var node = Preference.Instance.FindNode(normalizedPath);
|
var node = Preferences.Instance.FindNode(normalizedPath);
|
||||||
if (node == null)
|
if (node == null)
|
||||||
{
|
{
|
||||||
node = new RepositoryNode()
|
node = new RepositoryNode()
|
||||||
|
@ -1085,19 +1135,19 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void AddWorktree()
|
public void AddWorktree()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new AddWorktree(this));
|
ShowPopup(new AddWorktree(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PruneWorktrees()
|
public void PruneWorktrees()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new PruneWorktrees(this));
|
ShowAndStartPopup(new PruneWorktrees(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenWorktree(Models.Worktree worktree)
|
public void OpenWorktree(Models.Worktree worktree)
|
||||||
{
|
{
|
||||||
var node = Preference.Instance.FindNode(worktree.FullPath);
|
var node = Preferences.Instance.FindNode(worktree.FullPath);
|
||||||
if (node == null)
|
if (node == null)
|
||||||
{
|
{
|
||||||
node = new RepositoryNode()
|
node = new RepositoryNode()
|
||||||
|
@ -1125,8 +1175,8 @@ namespace SourceGit.ViewModels
|
||||||
startFeature.Icon = App.CreateMenuIcon("Icons.GitFlow.Feature");
|
startFeature.Icon = App.CreateMenuIcon("Icons.GitFlow.Feature");
|
||||||
startFeature.Click += (_, e) =>
|
startFeature.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new GitFlowStart(this, "feature"));
|
ShowPopup(new GitFlowStart(this, "feature"));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1135,8 +1185,8 @@ namespace SourceGit.ViewModels
|
||||||
startRelease.Icon = App.CreateMenuIcon("Icons.GitFlow.Release");
|
startRelease.Icon = App.CreateMenuIcon("Icons.GitFlow.Release");
|
||||||
startRelease.Click += (_, e) =>
|
startRelease.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new GitFlowStart(this, "release"));
|
ShowPopup(new GitFlowStart(this, "release"));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1145,8 +1195,8 @@ namespace SourceGit.ViewModels
|
||||||
startHotfix.Icon = App.CreateMenuIcon("Icons.GitFlow.Hotfix");
|
startHotfix.Icon = App.CreateMenuIcon("Icons.GitFlow.Hotfix");
|
||||||
startHotfix.Click += (_, e) =>
|
startHotfix.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new GitFlowStart(this, "hotfix"));
|
ShowPopup(new GitFlowStart(this, "hotfix"));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1161,8 +1211,8 @@ namespace SourceGit.ViewModels
|
||||||
init.Icon = App.CreateMenuIcon("Icons.Init");
|
init.Icon = App.CreateMenuIcon("Icons.Init");
|
||||||
init.Click += (_, e) =>
|
init.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new InitGitFlow(this));
|
ShowPopup(new InitGitFlow(this));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(init);
|
menu.Items.Add(init);
|
||||||
|
@ -1183,8 +1233,8 @@ namespace SourceGit.ViewModels
|
||||||
addPattern.Icon = App.CreateMenuIcon("Icons.File.Add");
|
addPattern.Icon = App.CreateMenuIcon("Icons.File.Add");
|
||||||
addPattern.Click += (_, e) =>
|
addPattern.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new LFSTrackCustomPattern(this));
|
ShowPopup(new LFSTrackCustomPattern(this));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -1197,12 +1247,12 @@ namespace SourceGit.ViewModels
|
||||||
fetch.IsEnabled = _remotes.Count > 0;
|
fetch.IsEnabled = _remotes.Count > 0;
|
||||||
fetch.Click += (_, e) =>
|
fetch.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
{
|
{
|
||||||
if (_remotes.Count == 1)
|
if (_remotes.Count == 1)
|
||||||
PopupHost.ShowAndStartPopup(new LFSFetch(this));
|
ShowAndStartPopup(new LFSFetch(this));
|
||||||
else
|
else
|
||||||
PopupHost.ShowPopup(new LFSFetch(this));
|
ShowPopup(new LFSFetch(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -1215,12 +1265,12 @@ namespace SourceGit.ViewModels
|
||||||
pull.IsEnabled = _remotes.Count > 0;
|
pull.IsEnabled = _remotes.Count > 0;
|
||||||
pull.Click += (_, e) =>
|
pull.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
{
|
{
|
||||||
if (_remotes.Count == 1)
|
if (_remotes.Count == 1)
|
||||||
PopupHost.ShowAndStartPopup(new LFSPull(this));
|
ShowAndStartPopup(new LFSPull(this));
|
||||||
else
|
else
|
||||||
PopupHost.ShowPopup(new LFSPull(this));
|
ShowPopup(new LFSPull(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -1233,12 +1283,12 @@ namespace SourceGit.ViewModels
|
||||||
push.IsEnabled = _remotes.Count > 0;
|
push.IsEnabled = _remotes.Count > 0;
|
||||||
push.Click += (_, e) =>
|
push.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
{
|
{
|
||||||
if (_remotes.Count == 1)
|
if (_remotes.Count == 1)
|
||||||
PopupHost.ShowAndStartPopup(new LFSPush(this));
|
ShowAndStartPopup(new LFSPush(this));
|
||||||
else
|
else
|
||||||
PopupHost.ShowPopup(new LFSPush(this));
|
ShowPopup(new LFSPush(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -1250,8 +1300,8 @@ namespace SourceGit.ViewModels
|
||||||
prune.Icon = App.CreateMenuIcon("Icons.Clean");
|
prune.Icon = App.CreateMenuIcon("Icons.Clean");
|
||||||
prune.Click += (_, e) =>
|
prune.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new LFSPrune(this));
|
ShowAndStartPopup(new LFSPrune(this));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -1332,8 +1382,8 @@ namespace SourceGit.ViewModels
|
||||||
item.Header = dup.Name;
|
item.Header = dup.Name;
|
||||||
item.Click += (_, e) =>
|
item.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new ExecuteCustomAction(this, dup, null));
|
ShowAndStartPopup(new ExecuteCustomAction(this, dup, null));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -1359,8 +1409,8 @@ namespace SourceGit.ViewModels
|
||||||
push.IsEnabled = _remotes.Count > 0;
|
push.IsEnabled = _remotes.Count > 0;
|
||||||
push.Click += (_, e) =>
|
push.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Push(this, branch));
|
ShowPopup(new Push(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1371,8 +1421,8 @@ namespace SourceGit.ViewModels
|
||||||
discard.Icon = App.CreateMenuIcon("Icons.Undo");
|
discard.Icon = App.CreateMenuIcon("Icons.Undo");
|
||||||
discard.Click += (_, e) =>
|
discard.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Discard(this));
|
ShowPopup(new Discard(this));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1392,8 +1442,8 @@ namespace SourceGit.ViewModels
|
||||||
if (b == null)
|
if (b == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new Merge(this, b, branch.Name));
|
ShowAndStartPopup(new Merge(this, b, branch.Name));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -1403,8 +1453,8 @@ namespace SourceGit.ViewModels
|
||||||
pull.Icon = App.CreateMenuIcon("Icons.Pull");
|
pull.Icon = App.CreateMenuIcon("Icons.Pull");
|
||||||
pull.Click += (_, e) =>
|
pull.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Pull(this, null));
|
ShowPopup(new Pull(this, null));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1444,8 +1494,8 @@ namespace SourceGit.ViewModels
|
||||||
fastForward.IsEnabled = branch.TrackStatus.Ahead.Count == 0;
|
fastForward.IsEnabled = branch.TrackStatus.Ahead.Count == 0;
|
||||||
fastForward.Click += (_, e) =>
|
fastForward.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new FastForwardWithoutCheckout(this, branch, upstream));
|
ShowAndStartPopup(new FastForwardWithoutCheckout(this, branch, upstream));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1455,8 +1505,8 @@ namespace SourceGit.ViewModels
|
||||||
fetchInto.IsEnabled = branch.TrackStatus.Ahead.Count == 0;
|
fetchInto.IsEnabled = branch.TrackStatus.Ahead.Count == 0;
|
||||||
fetchInto.Click += (_, e) =>
|
fetchInto.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new FetchInto(this, branch, upstream));
|
ShowAndStartPopup(new FetchInto(this, branch, upstream));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1472,8 +1522,8 @@ namespace SourceGit.ViewModels
|
||||||
merge.Icon = App.CreateMenuIcon("Icons.Merge");
|
merge.Icon = App.CreateMenuIcon("Icons.Merge");
|
||||||
merge.Click += (_, e) =>
|
merge.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Merge(this, branch, _currentBranch.Name));
|
ShowPopup(new Merge(this, branch, _currentBranch.Name));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1482,8 +1532,8 @@ namespace SourceGit.ViewModels
|
||||||
rebase.Icon = App.CreateMenuIcon("Icons.Rebase");
|
rebase.Icon = App.CreateMenuIcon("Icons.Rebase");
|
||||||
rebase.Click += (_, e) =>
|
rebase.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Rebase(this, _currentBranch, branch));
|
ShowPopup(new Rebase(this, _currentBranch, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1528,8 +1578,8 @@ namespace SourceGit.ViewModels
|
||||||
finish.Icon = App.CreateMenuIcon("Icons.GitFlow");
|
finish.Icon = App.CreateMenuIcon("Icons.GitFlow");
|
||||||
finish.Click += (_, e) =>
|
finish.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new GitFlowFinish(this, branch, detect.Type, detect.Prefix));
|
ShowPopup(new GitFlowFinish(this, branch, detect.Type, detect.Prefix));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||||
|
@ -1541,8 +1591,8 @@ namespace SourceGit.ViewModels
|
||||||
rename.Icon = App.CreateMenuIcon("Icons.Rename");
|
rename.Icon = App.CreateMenuIcon("Icons.Rename");
|
||||||
rename.Click += (_, e) =>
|
rename.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new RenameBranch(this, branch));
|
ShowPopup(new RenameBranch(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1552,8 +1602,8 @@ namespace SourceGit.ViewModels
|
||||||
delete.IsEnabled = !branch.IsCurrent;
|
delete.IsEnabled = !branch.IsCurrent;
|
||||||
delete.Click += (_, e) =>
|
delete.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DeleteBranch(this, branch));
|
ShowPopup(new DeleteBranch(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1562,8 +1612,8 @@ namespace SourceGit.ViewModels
|
||||||
createBranch.Header = App.Text("CreateBranch");
|
createBranch.Header = App.Text("CreateBranch");
|
||||||
createBranch.Click += (_, e) =>
|
createBranch.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CreateBranch(this, branch));
|
ShowPopup(new CreateBranch(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1572,8 +1622,8 @@ namespace SourceGit.ViewModels
|
||||||
createTag.Header = App.Text("CreateTag");
|
createTag.Header = App.Text("CreateTag");
|
||||||
createTag.Click += (_, e) =>
|
createTag.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CreateTag(this, branch));
|
ShowPopup(new CreateTag(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1597,38 +1647,12 @@ namespace SourceGit.ViewModels
|
||||||
var tracking = new MenuItem();
|
var tracking = new MenuItem();
|
||||||
tracking.Header = App.Text("BranchCM.Tracking");
|
tracking.Header = App.Text("BranchCM.Tracking");
|
||||||
tracking.Icon = App.CreateMenuIcon("Icons.Track");
|
tracking.Icon = App.CreateMenuIcon("Icons.Track");
|
||||||
|
tracking.Click += (_, e) =>
|
||||||
foreach (var b in remoteBranches)
|
|
||||||
{
|
{
|
||||||
var upstream = b.FullName.Replace("refs/remotes/", "");
|
if (CanCreatePopup())
|
||||||
var target = new MenuItem();
|
ShowPopup(new SetUpstream(this, branch, remoteBranches));
|
||||||
target.Header = upstream;
|
|
||||||
if (branch.Upstream == b.FullName)
|
|
||||||
target.Icon = App.CreateMenuIcon("Icons.Check");
|
|
||||||
|
|
||||||
target.Click += (_, e) =>
|
|
||||||
{
|
|
||||||
if (Commands.Branch.SetUpstream(_fullpath, branch.Name, upstream))
|
|
||||||
Task.Run(RefreshBranches);
|
|
||||||
|
|
||||||
e.Handled = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
tracking.Items.Add(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
var unsetUpstream = new MenuItem();
|
|
||||||
unsetUpstream.Header = App.Text("BranchCM.UnsetUpstream");
|
|
||||||
unsetUpstream.Click += (_, e) =>
|
|
||||||
{
|
|
||||||
if (Commands.Branch.SetUpstream(_fullpath, branch.Name, string.Empty))
|
|
||||||
Task.Run(RefreshBranches);
|
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
tracking.Items.Add(new MenuItem() { Header = "-" });
|
|
||||||
tracking.Items.Add(unsetUpstream);
|
|
||||||
|
|
||||||
menu.Items.Add(tracking);
|
menu.Items.Add(tracking);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1637,8 +1661,8 @@ namespace SourceGit.ViewModels
|
||||||
archive.Header = App.Text("Archive");
|
archive.Header = App.Text("Archive");
|
||||||
archive.Click += (_, e) =>
|
archive.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Archive(this, branch));
|
ShowPopup(new Archive(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(archive);
|
menu.Items.Add(archive);
|
||||||
|
@ -1681,8 +1705,8 @@ namespace SourceGit.ViewModels
|
||||||
fetch.Icon = App.CreateMenuIcon("Icons.Fetch");
|
fetch.Icon = App.CreateMenuIcon("Icons.Fetch");
|
||||||
fetch.Click += (_, e) =>
|
fetch.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new Fetch(this, remote));
|
ShowAndStartPopup(new Fetch(this, remote));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1691,8 +1715,8 @@ namespace SourceGit.ViewModels
|
||||||
prune.Icon = App.CreateMenuIcon("Icons.Clean");
|
prune.Icon = App.CreateMenuIcon("Icons.Clean");
|
||||||
prune.Click += (_, e) =>
|
prune.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowAndStartPopup(new PruneRemote(this, remote));
|
ShowAndStartPopup(new PruneRemote(this, remote));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1701,8 +1725,8 @@ namespace SourceGit.ViewModels
|
||||||
edit.Icon = App.CreateMenuIcon("Icons.Edit");
|
edit.Icon = App.CreateMenuIcon("Icons.Edit");
|
||||||
edit.Click += (_, e) =>
|
edit.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new EditRemote(this, remote));
|
ShowPopup(new EditRemote(this, remote));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1711,8 +1735,8 @@ namespace SourceGit.ViewModels
|
||||||
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||||
delete.Click += (_, e) =>
|
delete.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DeleteRemote(this, remote));
|
ShowPopup(new DeleteRemote(this, remote));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1758,8 +1782,8 @@ namespace SourceGit.ViewModels
|
||||||
pull.Icon = App.CreateMenuIcon("Icons.Pull");
|
pull.Icon = App.CreateMenuIcon("Icons.Pull");
|
||||||
pull.Click += (_, e) =>
|
pull.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Pull(this, branch));
|
ShowPopup(new Pull(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1768,8 +1792,8 @@ namespace SourceGit.ViewModels
|
||||||
merge.Icon = App.CreateMenuIcon("Icons.Merge");
|
merge.Icon = App.CreateMenuIcon("Icons.Merge");
|
||||||
merge.Click += (_, e) =>
|
merge.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Merge(this, branch, _currentBranch.Name));
|
ShowPopup(new Merge(this, branch, _currentBranch.Name));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1778,8 +1802,8 @@ namespace SourceGit.ViewModels
|
||||||
rebase.Icon = App.CreateMenuIcon("Icons.Rebase");
|
rebase.Icon = App.CreateMenuIcon("Icons.Rebase");
|
||||||
rebase.Click += (_, e) =>
|
rebase.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Rebase(this, _currentBranch, branch));
|
ShowPopup(new Rebase(this, _currentBranch, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1825,8 +1849,8 @@ namespace SourceGit.ViewModels
|
||||||
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||||
delete.Click += (_, e) =>
|
delete.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DeleteBranch(this, branch));
|
ShowPopup(new DeleteBranch(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1835,8 +1859,8 @@ namespace SourceGit.ViewModels
|
||||||
createBranch.Header = App.Text("CreateBranch");
|
createBranch.Header = App.Text("CreateBranch");
|
||||||
createBranch.Click += (_, e) =>
|
createBranch.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CreateBranch(this, branch));
|
ShowPopup(new CreateBranch(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1845,8 +1869,8 @@ namespace SourceGit.ViewModels
|
||||||
createTag.Header = App.Text("CreateTag");
|
createTag.Header = App.Text("CreateTag");
|
||||||
createTag.Click += (_, e) =>
|
createTag.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CreateTag(this, branch));
|
ShowPopup(new CreateTag(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1855,8 +1879,8 @@ namespace SourceGit.ViewModels
|
||||||
archive.Header = App.Text("Archive");
|
archive.Header = App.Text("Archive");
|
||||||
archive.Click += (_, e) =>
|
archive.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Archive(this, branch));
|
ShowPopup(new Archive(this, branch));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1887,8 +1911,8 @@ namespace SourceGit.ViewModels
|
||||||
createBranch.Header = App.Text("CreateBranch");
|
createBranch.Header = App.Text("CreateBranch");
|
||||||
createBranch.Click += (_, ev) =>
|
createBranch.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new CreateBranch(this, tag));
|
ShowPopup(new CreateBranch(this, tag));
|
||||||
ev.Handled = true;
|
ev.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1898,8 +1922,8 @@ namespace SourceGit.ViewModels
|
||||||
pushTag.IsEnabled = _remotes.Count > 0;
|
pushTag.IsEnabled = _remotes.Count > 0;
|
||||||
pushTag.Click += (_, ev) =>
|
pushTag.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new PushTag(this, tag));
|
ShowPopup(new PushTag(this, tag));
|
||||||
ev.Handled = true;
|
ev.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1908,8 +1932,8 @@ namespace SourceGit.ViewModels
|
||||||
deleteTag.Icon = App.CreateMenuIcon("Icons.Clear");
|
deleteTag.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||||
deleteTag.Click += (_, ev) =>
|
deleteTag.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DeleteTag(this, tag));
|
ShowPopup(new DeleteTag(this, tag));
|
||||||
ev.Handled = true;
|
ev.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1918,8 +1942,8 @@ namespace SourceGit.ViewModels
|
||||||
archive.Header = App.Text("Archive");
|
archive.Header = App.Text("Archive");
|
||||||
archive.Click += (_, ev) =>
|
archive.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new Archive(this, tag));
|
ShowPopup(new Archive(this, tag));
|
||||||
ev.Handled = true;
|
ev.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1980,8 +2004,8 @@ namespace SourceGit.ViewModels
|
||||||
rm.Icon = App.CreateMenuIcon("Icons.Clear");
|
rm.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||||
rm.Click += (_, ev) =>
|
rm.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DeleteSubmodule(this, submodule));
|
ShowPopup(new DeleteSubmodule(this, submodule));
|
||||||
ev.Handled = true;
|
ev.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2034,8 +2058,8 @@ namespace SourceGit.ViewModels
|
||||||
remove.Icon = App.CreateMenuIcon("Icons.Clear");
|
remove.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||||
remove.Click += (_, ev) =>
|
remove.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new RemoveWorktree(this, worktree));
|
ShowPopup(new RemoveWorktree(this, worktree));
|
||||||
ev.Handled = true;
|
ev.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(remove);
|
menu.Items.Add(remove);
|
||||||
|
@ -2087,6 +2111,21 @@ namespace SourceGit.ViewModels
|
||||||
return compare;
|
return compare;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LauncherPage GetOwnerPage()
|
||||||
|
{
|
||||||
|
var launcher = App.GetLauncer();
|
||||||
|
if (launcher == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
foreach (var page in launcher.Pages)
|
||||||
|
{
|
||||||
|
if (page.Node.Id.Equals(_fullpath))
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private BranchTreeNode.Builder BuildBranchTree(List<Models.Branch> branches, List<Models.Remote> remotes)
|
private BranchTreeNode.Builder BuildBranchTree(List<Models.Branch> branches, List<Models.Remote> remotes)
|
||||||
{
|
{
|
||||||
var builder = new BranchTreeNode.Builder();
|
var builder = new BranchTreeNode.Builder();
|
||||||
|
@ -2118,6 +2157,19 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
private List<Models.Tag> BuildVisibleTags()
|
private List<Models.Tag> BuildVisibleTags()
|
||||||
{
|
{
|
||||||
|
switch (_settings.TagSortMode)
|
||||||
|
{
|
||||||
|
case Models.TagSortMode.CreatorDate:
|
||||||
|
_tags.Sort((l, r) => r.CreatorDate.CompareTo(l.CreatorDate));
|
||||||
|
break;
|
||||||
|
case Models.TagSortMode.NameInAscending:
|
||||||
|
_tags.Sort((l, r) => Models.NumericSort.Compare(l.Name, r.Name));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
_tags.Sort((l, r) => Models.NumericSort.Compare(r.Name, l.Name));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
var visible = new List<Models.Tag>();
|
var visible = new List<Models.Tag>();
|
||||||
if (string.IsNullOrEmpty(_filter))
|
if (string.IsNullOrEmpty(_filter))
|
||||||
{
|
{
|
||||||
|
@ -2284,8 +2336,16 @@ namespace SourceGit.ViewModels
|
||||||
if (desire > now)
|
if (desire > now)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var remotes = new List<string>();
|
||||||
|
lock (_lockRemotes)
|
||||||
|
{
|
||||||
|
foreach (var remote in _remotes)
|
||||||
|
remotes.Add(remote.Name);
|
||||||
|
}
|
||||||
|
|
||||||
Dispatcher.UIThread.Invoke(() => IsAutoFetching = true);
|
Dispatcher.UIThread.Invoke(() => IsAutoFetching = true);
|
||||||
new Commands.Fetch(_fullpath, "--all", false, _settings.EnablePruneOnFetch, false, null) { RaiseError = false }.Exec();
|
foreach (var remote in remotes)
|
||||||
|
new Commands.Fetch(_fullpath, remote, false, _settings.EnablePruneOnFetch, false, null) { RaiseError = false }.Exec();
|
||||||
_lastFetchTime = DateTime.Now;
|
_lastFetchTime = DateTime.Now;
|
||||||
Dispatcher.UIThread.Invoke(() => IsAutoFetching = false);
|
Dispatcher.UIThread.Invoke(() => IsAutoFetching = false);
|
||||||
}
|
}
|
||||||
|
@ -2317,6 +2377,7 @@ namespace SourceGit.ViewModels
|
||||||
private List<string> _revisionFiles = new List<string>();
|
private List<string> _revisionFiles = new List<string>();
|
||||||
|
|
||||||
private string _filter = string.Empty;
|
private string _filter = string.Empty;
|
||||||
|
private object _lockRemotes = new object();
|
||||||
private List<Models.Remote> _remotes = new List<Models.Remote>();
|
private List<Models.Remote> _remotes = new List<Models.Remote>();
|
||||||
private List<Models.Branch> _branches = new List<Models.Branch>();
|
private List<Models.Branch> _branches = new List<Models.Branch>();
|
||||||
private Models.Branch _currentBranch = null;
|
private Models.Branch _currentBranch = null;
|
||||||
|
|
|
@ -146,7 +146,7 @@ namespace SourceGit.ViewModels
|
||||||
Remotes.Add(remote.Name);
|
Remotes.Add(remote.Name);
|
||||||
|
|
||||||
AvailableOpenAIServices = new List<string>() { "---" };
|
AvailableOpenAIServices = new List<string>() { "---" };
|
||||||
foreach (var service in Preference.Instance.OpenAIServices)
|
foreach (var service in Preferences.Instance.OpenAIServices)
|
||||||
AvailableOpenAIServices.Add(service.Name);
|
AvailableOpenAIServices.Add(service.Name);
|
||||||
|
|
||||||
if (AvailableOpenAIServices.IndexOf(PreferedOpenAIService) == -1)
|
if (AvailableOpenAIServices.IndexOf(PreferedOpenAIService) == -1)
|
||||||
|
@ -188,57 +188,89 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void AddSampleGithubIssueTracker()
|
public void AddSampleGithubIssueTracker()
|
||||||
{
|
{
|
||||||
|
var link = "https://github.com/username/repository/issues/$1";
|
||||||
foreach (var remote in _repo.Remotes)
|
foreach (var remote in _repo.Remotes)
|
||||||
{
|
{
|
||||||
if (remote.URL.Contains("github.com", System.StringComparison.Ordinal))
|
if (remote.URL.Contains("github.com", System.StringComparison.Ordinal) &&
|
||||||
|
remote.TryGetVisitURL(out string url))
|
||||||
{
|
{
|
||||||
if (remote.TryGetVisitURL(out string url))
|
link = $"{url}/issues/$1";
|
||||||
{
|
break;
|
||||||
SelectedIssueTrackerRule = _repo.Settings.AddGithubIssueTracker(url);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectedIssueTrackerRule = _repo.Settings.AddGithubIssueTracker(null);
|
SelectedIssueTrackerRule = _repo.Settings.AddIssueTracker("Github ISSUE", "#(\\d+)", link);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddSampleJiraIssueTracker()
|
public void AddSampleJiraIssueTracker()
|
||||||
{
|
{
|
||||||
SelectedIssueTrackerRule = _repo.Settings.AddJiraIssueTracker();
|
SelectedIssueTrackerRule = _repo.Settings.AddIssueTracker("Jira Tracker", "PROJ-(\\d+)", "https://jira.yourcompany.com/browse/PROJ-$1");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddSampleGitLabIssueTracker()
|
public void AddSampleGitLabIssueTracker()
|
||||||
{
|
{
|
||||||
|
var link = "https://gitlab.com/username/repository/-/issues/$1";
|
||||||
foreach (var remote in _repo.Remotes)
|
foreach (var remote in _repo.Remotes)
|
||||||
{
|
{
|
||||||
if (remote.TryGetVisitURL(out string url))
|
if (remote.TryGetVisitURL(out string url))
|
||||||
{
|
{
|
||||||
SelectedIssueTrackerRule = _repo.Settings.AddGitLabIssueTracker(url);
|
link = $"{url}/-/issues/$1";
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectedIssueTrackerRule = _repo.Settings.AddGitLabIssueTracker(null);
|
SelectedIssueTrackerRule = _repo.Settings.AddIssueTracker("GitLab ISSUE", "#(\\d+)", link);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddSampleGitLabMergeRequestTracker()
|
public void AddSampleGitLabMergeRequestTracker()
|
||||||
{
|
{
|
||||||
|
var link = "https://gitlab.com/username/repository/-/merge_requests/$1";
|
||||||
foreach (var remote in _repo.Remotes)
|
foreach (var remote in _repo.Remotes)
|
||||||
{
|
{
|
||||||
if (remote.TryGetVisitURL(out string url))
|
if (remote.TryGetVisitURL(out string url))
|
||||||
{
|
{
|
||||||
SelectedIssueTrackerRule = _repo.Settings.AddGitLabMergeRequestTracker(url);
|
link = $"{url}/-/merge_requests/$1";
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectedIssueTrackerRule = _repo.Settings.AddGitLabMergeRequestTracker(null);
|
SelectedIssueTrackerRule = _repo.Settings.AddIssueTracker("GitLab MR", "!(\\d+)", link);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddSampleGiteeIssueTracker()
|
||||||
|
{
|
||||||
|
var link = "https://gitee.com/username/repository/issues/$1";
|
||||||
|
foreach (var remote in _repo.Remotes)
|
||||||
|
{
|
||||||
|
if (remote.URL.Contains("gitee.com", System.StringComparison.Ordinal) &&
|
||||||
|
remote.TryGetVisitURL(out string url))
|
||||||
|
{
|
||||||
|
link = $"{url}/issues/$1";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectedIssueTrackerRule = _repo.Settings.AddIssueTracker("Gitee ISSUE", "#([0-9A-Z]{6,10})", link);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddSampleGiteePullRequestTracker()
|
||||||
|
{
|
||||||
|
var link = "https://gitee.com/username/repository/pulls/$1";
|
||||||
|
foreach (var remote in _repo.Remotes)
|
||||||
|
{
|
||||||
|
if (remote.URL.Contains("gitee.com", System.StringComparison.Ordinal) &&
|
||||||
|
remote.TryGetVisitURL(out string url))
|
||||||
|
{
|
||||||
|
link = $"{url}/pulls/$1";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectedIssueTrackerRule = _repo.Settings.AddIssueTracker("Gitee Pull Request", "!(\\d+)", link);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NewIssueTracker()
|
public void NewIssueTracker()
|
||||||
{
|
{
|
||||||
SelectedIssueTrackerRule = _repo.Settings.AddNewIssueTracker();
|
SelectedIssueTrackerRule = _repo.Settings.AddIssueTracker("New Issue Tracker", "#(\\d+)", "https://xxx/$1");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveSelectedIssueTracker()
|
public void RemoveSelectedIssueTracker()
|
||||||
|
|
|
@ -70,14 +70,16 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void Edit()
|
public void Edit()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
var activePage = App.GetLauncer().ActivePage;
|
||||||
PopupHost.ShowPopup(new EditRepositoryNode(this));
|
if (activePage != null && activePage.CanCreatePopup())
|
||||||
|
activePage.Popup = new EditRepositoryNode(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddSubFolder()
|
public void AddSubFolder()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
var activePage = App.GetLauncer().ActivePage;
|
||||||
PopupHost.ShowPopup(new CreateGroup(this));
|
if (activePage != null && activePage.CanCreatePopup())
|
||||||
|
activePage.Popup = new CreateGroup(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenInFileManager()
|
public void OpenInFileManager()
|
||||||
|
@ -96,8 +98,9 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void Delete()
|
public void Delete()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
var activePage = App.GetLauncer().ActivePage;
|
||||||
PopupHost.ShowPopup(new DeleteRepositoryNode(this));
|
if (activePage != null && activePage.CanCreatePopup())
|
||||||
|
activePage.Popup = new DeleteRepositoryNode(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string _id = string.Empty;
|
private string _id = string.Empty;
|
||||||
|
|
|
@ -100,8 +100,18 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void NavigateTo(string commitSHA)
|
public void NavigateTo(string commitSHA)
|
||||||
{
|
{
|
||||||
var repo = App.FindOpenedRepository(_repo);
|
var launcher = App.GetLauncer();
|
||||||
repo?.NavigateToCommit(commitSHA);
|
if (launcher == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var page in launcher.Pages)
|
||||||
|
{
|
||||||
|
if (page.Data is Repository repo && repo.FullPath.Equals(_repo))
|
||||||
|
{
|
||||||
|
repo.NavigateToCommit(commitSHA);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Swap()
|
public void Swap()
|
||||||
|
@ -140,8 +150,8 @@ namespace SourceGit.ViewModels
|
||||||
diffWithMerger.Click += (_, ev) =>
|
diffWithMerger.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
var opt = new Models.DiffOption(GetSHA(_startPoint), GetSHA(_endPoint), change);
|
var opt = new Models.DiffOption(GetSHA(_startPoint), GetSHA(_endPoint), change);
|
||||||
var toolType = Preference.Instance.ExternalMergeToolType;
|
var toolType = Preferences.Instance.ExternalMergeToolType;
|
||||||
var toolPath = Preference.Instance.ExternalMergeToolPath;
|
var toolPath = Preferences.Instance.ExternalMergeToolPath;
|
||||||
|
|
||||||
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, toolType, toolPath, opt));
|
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, toolType, toolPath, opt));
|
||||||
ev.Handled = true;
|
ev.Handled = true;
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public ScanRepositories(string rootDir)
|
public ScanRepositories(string rootDir)
|
||||||
{
|
{
|
||||||
GetManagedRepositories(Preference.Instance.RepositoryNodes, _managed);
|
GetManagedRepositories(Preferences.Instance.RepositoryNodes, _managed);
|
||||||
|
|
||||||
RootDir = rootDir;
|
RootDir = rootDir;
|
||||||
View = new Views.ScanRepositories() { DataContext = this };
|
View = new Views.ScanRepositories() { DataContext = this };
|
||||||
|
@ -50,17 +50,17 @@ namespace SourceGit.ViewModels
|
||||||
var parent = new DirectoryInfo(f).Parent!.FullName.Replace("\\", "/");
|
var parent = new DirectoryInfo(f).Parent!.FullName.Replace("\\", "/");
|
||||||
if (parent.Equals(normalizedRoot, StringComparison.Ordinal))
|
if (parent.Equals(normalizedRoot, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
Preference.Instance.FindOrAddNodeByRepositoryPath(f, null, false);
|
Preferences.Instance.FindOrAddNodeByRepositoryPath(f, null, false);
|
||||||
}
|
}
|
||||||
else if (parent.StartsWith(normalizedRoot, StringComparison.Ordinal))
|
else if (parent.StartsWith(normalizedRoot, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
var relative = parent.Substring(normalizedRoot.Length).TrimStart('/');
|
var relative = parent.Substring(normalizedRoot.Length).TrimStart('/');
|
||||||
var group = FindOrCreateGroupRecursive(Preference.Instance.RepositoryNodes, relative);
|
var group = FindOrCreateGroupRecursive(Preferences.Instance.RepositoryNodes, relative);
|
||||||
Preference.Instance.FindOrAddNodeByRepositoryPath(f, group, false);
|
Preferences.Instance.FindOrAddNodeByRepositoryPath(f, group, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Preference.Instance.AutoRemoveInvalidNode();
|
Preferences.Instance.AutoRemoveInvalidNode();
|
||||||
Welcome.Instance.Refresh();
|
Welcome.Instance.Refresh();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
76
src/ViewModels/SetUpstream.cs
Normal file
76
src/ViewModels/SetUpstream.cs
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SourceGit.ViewModels
|
||||||
|
{
|
||||||
|
public class SetUpstream : Popup
|
||||||
|
{
|
||||||
|
public Models.Branch Local
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Models.Branch> RemoteBranches
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Models.Branch SelectedRemoteBranch
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Unset
|
||||||
|
{
|
||||||
|
get => _unset;
|
||||||
|
set => SetProperty(ref _unset, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SetUpstream(Repository repo, Models.Branch local, List<Models.Branch> remoteBranches)
|
||||||
|
{
|
||||||
|
_repo = repo;
|
||||||
|
Local = local;
|
||||||
|
RemoteBranches = remoteBranches;
|
||||||
|
Unset = false;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(local.Upstream))
|
||||||
|
{
|
||||||
|
var upstream = remoteBranches.Find(x => x.FullName == local.Upstream);
|
||||||
|
if (upstream != null)
|
||||||
|
SelectedRemoteBranch = upstream;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SelectedRemoteBranch == null)
|
||||||
|
{
|
||||||
|
var upstream = remoteBranches.Find(x => x.Name == local.Name);
|
||||||
|
if (upstream != null)
|
||||||
|
SelectedRemoteBranch = upstream;
|
||||||
|
}
|
||||||
|
|
||||||
|
View = new Views.SetUpstream() { DataContext = this };
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> Sure()
|
||||||
|
{
|
||||||
|
SetProgressDescription("Setting upstream...");
|
||||||
|
|
||||||
|
var upstream = (_unset || SelectedRemoteBranch == null) ? string.Empty : SelectedRemoteBranch.FullName;
|
||||||
|
if (upstream == Local.Upstream)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return Task.Run(() =>
|
||||||
|
{
|
||||||
|
var succ = Commands.Branch.SetUpstream(_repo.FullPath, Local.Name, upstream.Replace("refs/remotes/", ""));
|
||||||
|
if (succ)
|
||||||
|
_repo.RefreshBranches();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private Repository _repo;
|
||||||
|
private bool _unset = false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace SourceGit.ViewModels
|
namespace SourceGit.ViewModels
|
||||||
|
@ -45,37 +47,122 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public override Task<bool> Sure()
|
public override Task<bool> Sure()
|
||||||
{
|
{
|
||||||
var jobs = _changes;
|
|
||||||
if (!HasSelectedFiles && !IncludeUntracked)
|
|
||||||
{
|
|
||||||
jobs = new List<Models.Change>();
|
|
||||||
foreach (var job in _changes)
|
|
||||||
{
|
|
||||||
if (job.WorkTree != Models.ChangeState.Untracked && job.WorkTree != Models.ChangeState.Added)
|
|
||||||
{
|
|
||||||
jobs.Add(job);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (jobs.Count == 0)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
_repo.SetWatcherEnabled(false);
|
_repo.SetWatcherEnabled(false);
|
||||||
ProgressDescription = $"Stash changes ...";
|
ProgressDescription = $"Stash changes ...";
|
||||||
|
|
||||||
return Task.Run(() =>
|
return Task.Run(() =>
|
||||||
{
|
{
|
||||||
var succ = new Commands.Stash(_repo.FullPath).Push(jobs, Message, !HasSelectedFiles && OnlyStaged, KeepIndex);
|
var succ = false;
|
||||||
|
|
||||||
|
if (!HasSelectedFiles)
|
||||||
|
{
|
||||||
|
if (OnlyStaged)
|
||||||
|
{
|
||||||
|
if (Native.OS.GitVersion >= Models.GitVersions.STASH_ONLY_STAGED)
|
||||||
|
{
|
||||||
|
succ = new Commands.Stash(_repo.FullPath).PushOnlyStaged(Message, KeepIndex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var staged = new List<Models.Change>();
|
||||||
|
foreach (var c in _changes)
|
||||||
|
{
|
||||||
|
if (c.Index != Models.ChangeState.None && c.Index != Models.ChangeState.Untracked)
|
||||||
|
staged.Add(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
succ = StashWithChanges(staged);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (IncludeUntracked)
|
||||||
|
AddUntracked(_changes);
|
||||||
|
succ = StashWithChanges(_changes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddUntracked(_changes);
|
||||||
|
succ = StashWithChanges(_changes);
|
||||||
|
}
|
||||||
|
|
||||||
CallUIThread(() =>
|
CallUIThread(() =>
|
||||||
{
|
{
|
||||||
_repo.MarkWorkingCopyDirtyManually();
|
_repo.MarkWorkingCopyDirtyManually();
|
||||||
_repo.SetWatcherEnabled(true);
|
_repo.SetWatcherEnabled(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
return succ;
|
return succ;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void AddUntracked(List<Models.Change> changes)
|
||||||
|
{
|
||||||
|
var toBeAdded = new List<Models.Change>();
|
||||||
|
foreach (var c in changes)
|
||||||
|
{
|
||||||
|
if (c.WorkTree == Models.ChangeState.Added || c.WorkTree == Models.ChangeState.Untracked)
|
||||||
|
toBeAdded.Add(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toBeAdded.Count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Native.OS.GitVersion >= Models.GitVersions.ADD_WITH_PATHSPECFILE)
|
||||||
|
{
|
||||||
|
var paths = new List<string>();
|
||||||
|
foreach (var c in toBeAdded)
|
||||||
|
paths.Add(c.Path);
|
||||||
|
|
||||||
|
var tmpFile = Path.GetTempFileName();
|
||||||
|
File.WriteAllLines(tmpFile, paths);
|
||||||
|
new Commands.Add(_repo.FullPath, tmpFile).Exec();
|
||||||
|
File.Delete(tmpFile);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < toBeAdded.Count; i += 10)
|
||||||
|
{
|
||||||
|
var count = Math.Min(10, toBeAdded.Count - i);
|
||||||
|
var step = toBeAdded.GetRange(i, count);
|
||||||
|
new Commands.Add(_repo.FullPath, step).Exec();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool StashWithChanges(List<Models.Change> changes)
|
||||||
|
{
|
||||||
|
if (changes.Count == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
var succ = false;
|
||||||
|
if (Native.OS.GitVersion >= Models.GitVersions.STASH_WITH_PATHSPECFILE)
|
||||||
|
{
|
||||||
|
var paths = new List<string>();
|
||||||
|
foreach (var c in changes)
|
||||||
|
paths.Add(c.Path);
|
||||||
|
|
||||||
|
var tmpFile = Path.GetTempFileName();
|
||||||
|
File.WriteAllLines(tmpFile, paths);
|
||||||
|
succ = new Commands.Stash(_repo.FullPath).Push(Message, tmpFile, KeepIndex);
|
||||||
|
File.Delete(tmpFile);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < changes.Count; i += 10)
|
||||||
|
{
|
||||||
|
var count = Math.Min(10, changes.Count - i);
|
||||||
|
var step = changes.GetRange(i, count);
|
||||||
|
succ = new Commands.Stash(_repo.FullPath).Push(Message, step, KeepIndex);
|
||||||
|
if (!succ)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return succ;
|
||||||
|
}
|
||||||
|
|
||||||
private readonly Repository _repo = null;
|
private readonly Repository _repo = null;
|
||||||
private readonly List<Models.Change> _changes = null;
|
private readonly List<Models.Change> _changes = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,8 +138,8 @@ namespace SourceGit.ViewModels
|
||||||
drop.Header = App.Text("StashCM.Drop");
|
drop.Header = App.Text("StashCM.Drop");
|
||||||
drop.Click += (_, ev) =>
|
drop.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new DropStash(_repo.FullPath, stash));
|
_repo.ShowPopup(new DropStash(_repo.FullPath, stash));
|
||||||
|
|
||||||
ev.Handled = true;
|
ev.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -161,8 +161,8 @@ namespace SourceGit.ViewModels
|
||||||
diffWithMerger.Icon = App.CreateMenuIcon("Icons.OpenWith");
|
diffWithMerger.Icon = App.CreateMenuIcon("Icons.OpenWith");
|
||||||
diffWithMerger.Click += (_, ev) =>
|
diffWithMerger.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
var toolType = Preference.Instance.ExternalMergeToolType;
|
var toolType = Preferences.Instance.ExternalMergeToolType;
|
||||||
var toolPath = Preference.Instance.ExternalMergeToolPath;
|
var toolPath = Preferences.Instance.ExternalMergeToolPath;
|
||||||
var opt = new Models.DiffOption($"{_selectedStash.SHA}^", _selectedStash.SHA, change);
|
var opt = new Models.DiffOption($"{_selectedStash.SHA}^", _selectedStash.SHA, change);
|
||||||
|
|
||||||
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo.FullPath, toolType, toolPath, opt));
|
Task.Run(() => Commands.MergeTool.OpenForDiff(_repo.FullPath, toolType, toolPath, opt));
|
||||||
|
@ -221,8 +221,8 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new ClearStashes(_repo));
|
_repo.ShowPopup(new ClearStashes(_repo));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearSearchFilter()
|
public void ClearSearchFilter()
|
||||||
|
|
|
@ -33,12 +33,12 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public uint SampleColor
|
public uint SampleColor
|
||||||
{
|
{
|
||||||
get => Preference.Instance.StatisticsSampleColor;
|
get => Preferences.Instance.StatisticsSampleColor;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (value != Preference.Instance.StatisticsSampleColor)
|
if (value != Preferences.Instance.StatisticsSampleColor)
|
||||||
{
|
{
|
||||||
Preference.Instance.StatisticsSampleColor = value;
|
Preferences.Instance.StatisticsSampleColor = value;
|
||||||
OnPropertyChanged(nameof(SampleBrush));
|
OnPropertyChanged(nameof(SampleBrush));
|
||||||
_selectedReport?.ChangeColor(value);
|
_selectedReport?.ChangeColor(value);
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
var result = new Commands.Statistics(repo, Preference.Instance.MaxHistoryCommits).Result();
|
var result = new Commands.Statistics(repo, Preferences.Instance.MaxHistoryCommits).Result();
|
||||||
Dispatcher.UIThread.Invoke(() =>
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
{
|
{
|
||||||
_data = result;
|
_data = result;
|
||||||
|
|
|
@ -38,17 +38,17 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(_searchFilter))
|
if (string.IsNullOrWhiteSpace(_searchFilter))
|
||||||
{
|
{
|
||||||
foreach (var node in Preference.Instance.RepositoryNodes)
|
foreach (var node in Preferences.Instance.RepositoryNodes)
|
||||||
ResetVisibility(node);
|
ResetVisibility(node);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach (var node in Preference.Instance.RepositoryNodes)
|
foreach (var node in Preferences.Instance.RepositoryNodes)
|
||||||
SetVisibilityBySearch(node);
|
SetVisibilityBySearch(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
var rows = new List<RepositoryNode>();
|
var rows = new List<RepositoryNode>();
|
||||||
MakeTreeRows(rows, Preference.Instance.RepositoryNodes);
|
MakeTreeRows(rows, Preferences.Instance.RepositoryNodes);
|
||||||
Rows.Clear();
|
Rows.Clear();
|
||||||
Rows.AddRange(rows);
|
Rows.AddRange(rows);
|
||||||
}
|
}
|
||||||
|
@ -85,45 +85,56 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void InitRepository(string path, RepositoryNode parent, string reason)
|
public void InitRepository(string path, RepositoryNode parent, string reason)
|
||||||
{
|
{
|
||||||
if (!Preference.Instance.IsGitConfigured())
|
if (!Preferences.Instance.IsGitConfigured())
|
||||||
{
|
|
||||||
App.RaiseException(PopupHost.Active.GetId(), App.Text("NotConfigured"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PopupHost.CanCreatePopup())
|
|
||||||
PopupHost.ShowPopup(new Init(path, parent, reason));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Clone()
|
|
||||||
{
|
|
||||||
if (!Preference.Instance.IsGitConfigured())
|
|
||||||
{
|
{
|
||||||
App.RaiseException(string.Empty, App.Text("NotConfigured"));
|
App.RaiseException(string.Empty, App.Text("NotConfigured"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PopupHost.CanCreatePopup())
|
var activePage = App.GetLauncer().ActivePage;
|
||||||
PopupHost.ShowPopup(new Clone());
|
if (activePage != null && activePage.CanCreatePopup())
|
||||||
|
activePage.Popup = new Init(activePage.Node.Id, path, parent, reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clone()
|
||||||
|
{
|
||||||
|
if (!Preferences.Instance.IsGitConfigured())
|
||||||
|
{
|
||||||
|
App.RaiseException(string.Empty, App.Text("NotConfigured"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var activePage = App.GetLauncer().ActivePage;
|
||||||
|
if (activePage != null && activePage.CanCreatePopup())
|
||||||
|
activePage.Popup = new Clone(activePage.Node.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenTerminal()
|
public void OpenTerminal()
|
||||||
{
|
{
|
||||||
if (!Preference.Instance.IsGitConfigured())
|
if (!Preferences.Instance.IsGitConfigured())
|
||||||
App.RaiseException(PopupHost.Active.GetId(), App.Text("NotConfigured"));
|
App.RaiseException(string.Empty, App.Text("NotConfigured"));
|
||||||
else
|
else
|
||||||
Native.OS.OpenTerminal(null);
|
Native.OS.OpenTerminal(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ScanDefaultCloneDir()
|
public void ScanDefaultCloneDir()
|
||||||
{
|
{
|
||||||
var defaultCloneDir = Preference.Instance.GitDefaultCloneDir;
|
var defaultCloneDir = Preferences.Instance.GitDefaultCloneDir;
|
||||||
if (string.IsNullOrEmpty(defaultCloneDir))
|
if (string.IsNullOrEmpty(defaultCloneDir))
|
||||||
App.RaiseException(PopupHost.Active.GetId(), "The default clone dir hasn't been configured!");
|
{
|
||||||
else if (!Directory.Exists(defaultCloneDir))
|
App.RaiseException(string.Empty, "The default clone directory hasn't been configured!");
|
||||||
App.RaiseException(PopupHost.Active.GetId(), $"The default clone dir '{defaultCloneDir}' does not exist!");
|
return;
|
||||||
else if (PopupHost.CanCreatePopup())
|
}
|
||||||
PopupHost.ShowAndStartPopup(new ScanRepositories(defaultCloneDir));
|
|
||||||
|
if (!Directory.Exists(defaultCloneDir))
|
||||||
|
{
|
||||||
|
App.RaiseException(string.Empty, $"The default clone directory '{defaultCloneDir}' does not exist!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var activePage = App.GetLauncer().ActivePage;
|
||||||
|
if (activePage != null && activePage.CanCreatePopup())
|
||||||
|
activePage.StartPopup(new ScanRepositories(defaultCloneDir));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearSearchFilter()
|
public void ClearSearchFilter()
|
||||||
|
@ -133,13 +144,14 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void AddRootNode()
|
public void AddRootNode()
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
var activePage = App.GetLauncer().ActivePage;
|
||||||
PopupHost.ShowPopup(new CreateGroup(null));
|
if (activePage != null && activePage.CanCreatePopup())
|
||||||
|
activePage.Popup = new CreateGroup(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MoveNode(RepositoryNode from, RepositoryNode to)
|
public void MoveNode(RepositoryNode from, RepositoryNode to)
|
||||||
{
|
{
|
||||||
Preference.Instance.MoveNode(from, to, true);
|
Preferences.Instance.MoveNode(from, to, true);
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,8 +236,9 @@ namespace SourceGit.ViewModels
|
||||||
move.Icon = App.CreateMenuIcon("Icons.MoveToAnotherGroup");
|
move.Icon = App.CreateMenuIcon("Icons.MoveToAnotherGroup");
|
||||||
move.Click += (_, e) =>
|
move.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
var activePage = App.GetLauncer().ActivePage;
|
||||||
PopupHost.ShowPopup(new MoveRepositoryNode(node));
|
if (activePage != null && activePage.CanCreatePopup())
|
||||||
|
activePage.Popup = new MoveRepositoryNode(node);
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
|
|
@ -314,13 +314,13 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void StashAll(bool autoStart)
|
public void StashAll(bool autoStart)
|
||||||
{
|
{
|
||||||
if (!PopupHost.CanCreatePopup())
|
if (!_repo.CanCreatePopup())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (autoStart)
|
if (autoStart)
|
||||||
PopupHost.ShowAndStartPopup(new StashChanges(_repo, _cached, false));
|
_repo.ShowAndStartPopup(new StashChanges(_repo, _cached, false));
|
||||||
else
|
else
|
||||||
PopupHost.ShowPopup(new StashChanges(_repo, _cached, false));
|
_repo.ShowPopup(new StashChanges(_repo, _cached, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StageSelected(Models.Change next)
|
public void StageSelected(Models.Change next)
|
||||||
|
@ -347,6 +347,17 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
await Task.Run(() => new Commands.Add(_repo.FullPath, _repo.IncludeUntracked).Exec());
|
await Task.Run(() => new Commands.Add(_repo.FullPath, _repo.IncludeUntracked).Exec());
|
||||||
}
|
}
|
||||||
|
else if (Native.OS.GitVersion >= Models.GitVersions.ADD_WITH_PATHSPECFILE)
|
||||||
|
{
|
||||||
|
var paths = new List<string>();
|
||||||
|
foreach (var c in changes)
|
||||||
|
paths.Add(c.Path);
|
||||||
|
|
||||||
|
var tmpFile = Path.GetTempFileName();
|
||||||
|
File.WriteAllLines(tmpFile, paths);
|
||||||
|
await Task.Run(() => new Commands.Add(_repo.FullPath, tmpFile).Exec());
|
||||||
|
File.Delete(tmpFile);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < changes.Count; i += 10)
|
for (int i = 0; i < changes.Count; i += 10)
|
||||||
|
@ -405,12 +416,12 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void Discard(List<Models.Change> changes)
|
public void Discard(List<Models.Change> changes)
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
{
|
{
|
||||||
if (changes.Count == _unstaged.Count && _staged.Count == 0)
|
if (changes.Count == _unstaged.Count && _staged.Count == 0)
|
||||||
PopupHost.ShowPopup(new Discard(_repo));
|
_repo.ShowPopup(new Discard(_repo));
|
||||||
else
|
else
|
||||||
PopupHost.ShowPopup(new Discard(_repo, changes));
|
_repo.ShowPopup(new Discard(_repo, changes));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -454,8 +465,8 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public async void UseExternalMergeTool(Models.Change change)
|
public async void UseExternalMergeTool(Models.Change change)
|
||||||
{
|
{
|
||||||
var toolType = Preference.Instance.ExternalMergeToolType;
|
var toolType = Preferences.Instance.ExternalMergeToolType;
|
||||||
var toolPath = Preference.Instance.ExternalMergeToolPath;
|
var toolPath = Preferences.Instance.ExternalMergeToolPath;
|
||||||
|
|
||||||
_repo.SetWatcherEnabled(false);
|
_repo.SetWatcherEnabled(false);
|
||||||
await Task.Run(() => Commands.MergeTool.OpenForMerge(_repo.FullPath, toolType, toolPath, change.Path));
|
await Task.Run(() => Commands.MergeTool.OpenForMerge(_repo.FullPath, toolType, toolPath, change.Path));
|
||||||
|
@ -619,7 +630,7 @@ namespace SourceGit.ViewModels
|
||||||
useTheirs.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", cherryPick.HeadName);
|
useTheirs.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", cherryPick.HeadName);
|
||||||
useMine.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", _repo.CurrentBranch.Name);
|
useMine.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", _repo.CurrentBranch.Name);
|
||||||
}
|
}
|
||||||
else if(_inProgressContext is RebaseInProgress rebase)
|
else if (_inProgressContext is RebaseInProgress rebase)
|
||||||
{
|
{
|
||||||
useTheirs.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", rebase.HeadName);
|
useTheirs.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", rebase.HeadName);
|
||||||
useMine.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", rebase.BaseName);
|
useMine.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", rebase.BaseName);
|
||||||
|
@ -666,8 +677,8 @@ namespace SourceGit.ViewModels
|
||||||
stash.Icon = App.CreateMenuIcon("Icons.Stashes.Add");
|
stash.Icon = App.CreateMenuIcon("Icons.Stashes.Add");
|
||||||
stash.Click += (_, e) =>
|
stash.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new StashChanges(_repo, _selectedUnstaged, true));
|
_repo.ShowPopup(new StashChanges(_repo, _selectedUnstaged, true));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -971,7 +982,7 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
else if (_inProgressContext is RevertInProgress revert)
|
else if (_inProgressContext is RevertInProgress revert)
|
||||||
{
|
{
|
||||||
useTheirs.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", revert.Head.SHA.Substring(0,10) + " (revert)");
|
useTheirs.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", revert.Head.SHA.Substring(0, 10) + " (revert)");
|
||||||
useMine.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", _repo.CurrentBranch.Name);
|
useMine.Header = new Views.NameHighlightedTextBlock("FileCM.ResolveUsing", _repo.CurrentBranch.Name);
|
||||||
}
|
}
|
||||||
else if (_inProgressContext is MergeInProgress merge)
|
else if (_inProgressContext is MergeInProgress merge)
|
||||||
|
@ -1008,8 +1019,8 @@ namespace SourceGit.ViewModels
|
||||||
stash.Icon = App.CreateMenuIcon("Icons.Stashes.Add");
|
stash.Icon = App.CreateMenuIcon("Icons.Stashes.Add");
|
||||||
stash.Click += (_, e) =>
|
stash.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new StashChanges(_repo, _selectedUnstaged, true));
|
_repo.ShowPopup(new StashChanges(_repo, _selectedUnstaged, true));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -1131,8 +1142,8 @@ namespace SourceGit.ViewModels
|
||||||
stash.Icon = App.CreateMenuIcon("Icons.Stashes.Add");
|
stash.Icon = App.CreateMenuIcon("Icons.Stashes.Add");
|
||||||
stash.Click += (_, e) =>
|
stash.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new StashChanges(_repo, _selectedStaged, true));
|
_repo.ShowPopup(new StashChanges(_repo, _selectedStaged, true));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -1306,8 +1317,8 @@ namespace SourceGit.ViewModels
|
||||||
stash.Icon = App.CreateMenuIcon("Icons.Stashes.Add");
|
stash.Icon = App.CreateMenuIcon("Icons.Stashes.Add");
|
||||||
stash.Click += (_, e) =>
|
stash.Click += (_, e) =>
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (_repo.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new StashChanges(_repo, _selectedStaged, true));
|
_repo.ShowPopup(new StashChanges(_repo, _selectedStaged, true));
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
};
|
};
|
||||||
|
@ -1514,7 +1525,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
private void DoCommit(bool autoStage, bool autoPush, bool allowEmpty)
|
private void DoCommit(bool autoStage, bool autoPush, bool allowEmpty)
|
||||||
{
|
{
|
||||||
if (!PopupHost.CanCreatePopup())
|
if (!_repo.CanCreatePopup())
|
||||||
{
|
{
|
||||||
App.RaiseException(_repo.FullPath, "Repository has unfinished job! Please wait!");
|
App.RaiseException(_repo.FullPath, "Repository has unfinished job! Please wait!");
|
||||||
return;
|
return;
|
||||||
|
@ -1560,7 +1571,7 @@ namespace SourceGit.ViewModels
|
||||||
UseAmend = false;
|
UseAmend = false;
|
||||||
|
|
||||||
if (autoPush)
|
if (autoPush)
|
||||||
PopupHost.ShowAndStartPopup(new Push(_repo, null));
|
_repo.ShowAndStartPopup(new Push(_repo, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
_repo.MarkBranchesDirtyManually();
|
_repo.MarkBranchesDirtyManually();
|
||||||
|
@ -1590,7 +1601,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
private IList<Models.OpenAIService> GetPreferedOpenAIServices()
|
private IList<Models.OpenAIService> GetPreferedOpenAIServices()
|
||||||
{
|
{
|
||||||
var services = Preference.Instance.OpenAIServices;
|
var services = Preferences.Instance.OpenAIServices;
|
||||||
if (services == null || services.Count == 0)
|
if (services == null || services.Count == 0)
|
||||||
return [];
|
return [];
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
<TextBlock Grid.Row="2"
|
<TextBlock Grid.Row="2"
|
||||||
x:Name="ProgressMessage"
|
x:Name="ProgressMessage"
|
||||||
Margin="16"
|
Margin="16"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
Text="Generating commit message... Please wait!"
|
Text="Generating commit message... Please wait!"
|
||||||
TextTrimming="CharacterEllipsis"/>
|
TextTrimming="CharacterEllipsis"/>
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
Foreground="{DynamicResource Brush.FG1}"
|
Foreground="{DynamicResource Brush.FG1}"
|
||||||
FontFamily="{DynamicResource Fonts.Monospace}"
|
FontFamily="{DynamicResource Fonts.Monospace}"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=EditorFontSize}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorFontSize}"
|
||||||
BlameData="{Binding Data}"/>
|
BlameData="{Binding Data}"/>
|
||||||
|
|
||||||
<!-- Not supported mask (for binary files) -->
|
<!-- Not supported mask (for binary files) -->
|
||||||
|
|
|
@ -126,12 +126,12 @@
|
||||||
<v:ChangeViewModeSwitcher Grid.Column="1"
|
<v:ChangeViewModeSwitcher Grid.Column="1"
|
||||||
Width="14" Height="14"
|
Width="14" Height="14"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
ViewMode="{Binding Source={x:Static vm:Preference.Instance}, Path=CommitChangeViewMode, Mode=TwoWay}"/>
|
ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode, Mode=TwoWay}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<!-- Changes -->
|
<!-- Changes -->
|
||||||
<Border Grid.Row="1" Margin="0,4,0,0" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1" Background="{DynamicResource Brush.Contents}">
|
<Border Grid.Row="1" Margin="0,4,0,0" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1" Background="{DynamicResource Brush.Contents}">
|
||||||
<v:ChangeCollectionView ViewMode="{Binding Source={x:Static vm:Preference.Instance}, Path=CommitChangeViewMode}"
|
<v:ChangeCollectionView ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode}"
|
||||||
Changes="{Binding VisibleChanges}"
|
Changes="{Binding VisibleChanges}"
|
||||||
SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
|
SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
|
||||||
ContextRequested="OnChangeContextRequested"/>
|
ContextRequested="OnChangeContextRequested"/>
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
|
|
||||||
<!-- Filter Mode Switcher -->
|
<!-- Filter Mode Switcher -->
|
||||||
<v:FilterModeSwitchButton Grid.Column="3"
|
<v:FilterModeSwitchButton Grid.Column="3"
|
||||||
Margin="0,0,8,0"
|
Margin="0,0,12,0"
|
||||||
Mode="{Binding FilterMode}"/>
|
Mode="{Binding FilterMode}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
public bool UseSystemWindowFrame
|
public bool UseSystemWindowFrame
|
||||||
{
|
{
|
||||||
get => OperatingSystem.IsLinux() && ViewModels.Preference.Instance.UseSystemWindowFrame;
|
get => OperatingSystem.IsLinux() && ViewModels.Preferences.Instance.UseSystemWindowFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Type StyleKeyOverride => typeof(Window);
|
protected override Type StyleKeyOverride => typeof(Window);
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<SelectableTextBlock Text="{Binding AuthorTimeStr}"
|
<SelectableTextBlock Text="{Binding AuthorTimeStr}"
|
||||||
Margin="2,0,0,0"
|
Margin="2,0,0,0"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
||||||
Foreground="{DynamicResource Brush.FG2}"/>
|
Foreground="{DynamicResource Brush.FG2}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<SelectableTextBlock Text="{Binding CommitterTimeStr}"
|
<SelectableTextBlock Text="{Binding CommitterTimeStr}"
|
||||||
Margin="2,0,0,0"
|
Margin="2,0,0,0"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
||||||
Foreground="{DynamicResource Brush.FG2}"/>
|
Foreground="{DynamicResource Brush.FG2}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
|
@ -136,7 +136,8 @@ namespace SourceGit.Views
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
var c = detail.GetParent(sha);
|
var c = detail.GetParent(sha);
|
||||||
if (c == null) return;
|
if (c == null)
|
||||||
|
return;
|
||||||
|
|
||||||
Dispatcher.UIThread.Invoke(() =>
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
x:DataType="vm:CommitDetail">
|
x:DataType="vm:CommitDetail">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="{Binding Source={x:Static vm:Preference.Instance}, Path=Layout.CommitDetailChangesLeftWidth, Mode=TwoWay}" MinWidth="200"/>
|
<ColumnDefinition Width="{Binding Source={x:Static vm:Preferences.Instance}, Path=Layout.CommitDetailChangesLeftWidth, Mode=TwoWay}" MinWidth="200"/>
|
||||||
<ColumnDefinition Width="4"/>
|
<ColumnDefinition Width="4"/>
|
||||||
<ColumnDefinition Width="*" MinWidth="100"/>
|
<ColumnDefinition Width="*" MinWidth="100"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
@ -40,13 +40,13 @@
|
||||||
<v:ChangeViewModeSwitcher Grid.Column="1"
|
<v:ChangeViewModeSwitcher Grid.Column="1"
|
||||||
Width="18" Height="18"
|
Width="18" Height="18"
|
||||||
Margin="4,0,0,0"
|
Margin="4,0,0,0"
|
||||||
ViewMode="{Binding Source={x:Static vm:Preference.Instance}, Path=CommitChangeViewMode, Mode=TwoWay}"/>
|
ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode, Mode=TwoWay}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<!-- Changes -->
|
<!-- Changes -->
|
||||||
<Border Grid.Row="1" Margin="0,4,0,0" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1" Background="{DynamicResource Brush.Contents}">
|
<Border Grid.Row="1" Margin="0,4,0,0" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1" Background="{DynamicResource Brush.Contents}">
|
||||||
<v:ChangeCollectionView SelectionMode="Single"
|
<v:ChangeCollectionView SelectionMode="Single"
|
||||||
ViewMode="{Binding Source={x:Static vm:Preference.Instance}, Path=CommitChangeViewMode}"
|
ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode}"
|
||||||
Changes="{Binding VisibleChanges}"
|
Changes="{Binding VisibleChanges}"
|
||||||
SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
|
SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
|
||||||
ContextRequested="OnChangeContextRequested"/>
|
ContextRequested="OnChangeContextRequested"/>
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
<TextBlock Classes="primary" Margin="2,0,0,0" FontSize="11" Text="{Binding #ThisControl.Subject.Length}" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthGood}}"/>
|
<TextBlock Classes="primary" Margin="2,0,0,0" FontSize="11" Text="{Binding #ThisControl.Subject.Length}" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthGood}}"/>
|
||||||
<TextBlock Classes="primary" Margin="2,0,0,0" FontSize="11" Foreground="DarkGoldenrod" Text="{Binding #ThisControl.Subject.Length}" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthBad}}"/>
|
<TextBlock Classes="primary" Margin="2,0,0,0" FontSize="11" Foreground="DarkGoldenrod" Text="{Binding #ThisControl.Subject.Length}" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthBad}}"/>
|
||||||
<TextBlock Classes="primary" FontSize="11" Text="/"/>
|
<TextBlock Classes="primary" FontSize="11" Text="/"/>
|
||||||
<TextBlock Classes="primary" FontSize="11" Text="{Binding Source={x:Static vm:Preference.Instance}, Path=SubjectGuideLength}"/>
|
<TextBlock Classes="primary" FontSize="11" Text="{Binding Source={x:Static vm:Preferences.Instance}, Path=SubjectGuideLength}"/>
|
||||||
<Path Width="10" Height="10" Margin="4,0,0,0" Data="{StaticResource Icons.Error}" Fill="DarkGoldenrod" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthBad}}"/>
|
<Path Width="10" Height="10" Margin="4,0,0,0" Data="{StaticResource Icons.Error}" Fill="DarkGoldenrod" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthBad}}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
|
@ -88,9 +88,8 @@ namespace SourceGit.Views
|
||||||
FontFamilyProperty,
|
FontFamilyProperty,
|
||||||
FontSizeProperty,
|
FontSizeProperty,
|
||||||
ForegroundProperty,
|
ForegroundProperty,
|
||||||
TagBackgroundProperty);
|
UseGraphColorProperty,
|
||||||
|
TagBackgroundProperty,
|
||||||
AffectsRender<CommitRefsPresenter>(
|
|
||||||
BackgroundProperty);
|
BackgroundProperty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +171,7 @@ namespace SourceGit.Views
|
||||||
var typefaceBold = new Typeface(FontFamily, FontStyle.Normal, FontWeight.Bold);
|
var typefaceBold = new Typeface(FontFamily, FontStyle.Normal, FontWeight.Bold);
|
||||||
var fg = Foreground;
|
var fg = Foreground;
|
||||||
var normalBG = UseGraphColor ? commit.Brush : Brushes.Gray;
|
var normalBG = UseGraphColor ? commit.Brush : Brushes.Gray;
|
||||||
var tagBG = TagBackground;
|
var tagBG = UseGraphColor ? TagBackground : Brushes.Gray;
|
||||||
var labelSize = FontSize;
|
var labelSize = FontSize;
|
||||||
var requiredWidth = 0.0;
|
var requiredWidth = 0.0;
|
||||||
var requiredHeight = 16.0;
|
var requiredHeight = 16.0;
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace SourceGit.Views
|
||||||
|
|
||||||
protected override void OnClosing(WindowClosingEventArgs e)
|
protected override void OnClosing(WindowClosingEventArgs e)
|
||||||
{
|
{
|
||||||
ViewModels.Preference.Instance.Save();
|
ViewModels.Preferences.Instance.Save();
|
||||||
base.OnClosing(e);
|
base.OnClosing(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,9 +130,13 @@
|
||||||
<Button Grid.Row="2"
|
<Button Grid.Row="2"
|
||||||
Classes="flat primary"
|
Classes="flat primary"
|
||||||
Height="32" Width="80"
|
Height="32" Width="80"
|
||||||
Margin="0,8,0,16"
|
Margin="0,0,0,8"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
Content="{DynamicResource Text.Sure}"
|
Content="{DynamicResource Text.Sure}"
|
||||||
Click="OnApplyClicked"/>
|
Click="OnApplyClicked"
|
||||||
|
HotKey="{OnPlatform Ctrl+Enter, macOS=⌘+Enter}"
|
||||||
|
ToolTip.Tip="{OnPlatform Ctrl+Enter, macOS=⌘+Enter}"
|
||||||
|
ToolTip.Placement="Top"
|
||||||
|
ToolTip.VerticalOffset="0"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</v:ChromelessWindow>
|
</v:ChromelessWindow>
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
<Border.IsVisible>
|
<Border.IsVisible>
|
||||||
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
||||||
<Binding Path="IsTextDiff"/>
|
<Binding Path="IsTextDiff"/>
|
||||||
<Binding Source="{x:Static vm:Preference.Instance}" Path="UseBlockNavigationInDiffView" Mode="OneWay"/>
|
<Binding Source="{x:Static vm:Preferences.Instance}" Path="UseBlockNavigationInDiffView" Mode="OneWay"/>
|
||||||
</MultiBinding>
|
</MultiBinding>
|
||||||
</Border.IsVisible>
|
</Border.IsVisible>
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
|
|
||||||
<ToggleButton Classes="line_path"
|
<ToggleButton Classes="line_path"
|
||||||
Width="28"
|
Width="28"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseBlockNavigationInDiffView, Mode=TwoWay}"
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseBlockNavigationInDiffView, Mode=TwoWay}"
|
||||||
IsVisible="{Binding IsTextDiff}"
|
IsVisible="{Binding IsTextDiff}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Diff.UseBlockNavigation}">
|
ToolTip.Tip="{DynamicResource Text.Diff.UseBlockNavigation}">
|
||||||
<Path Width="13" Height="13" Data="{StaticResource Icons.CodeBlock}" Margin="0,3,0,0"/>
|
<Path Width="13" Height="13" Data="{StaticResource Icons.CodeBlock}" Margin="0,3,0,0"/>
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
IsVisible="{Binding IsTextDiff}"
|
IsVisible="{Binding IsTextDiff}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Diff.VisualLines.Incr}">
|
ToolTip.Tip="{DynamicResource Text.Diff.VisualLines.Incr}">
|
||||||
<Button.IsEnabled>
|
<Button.IsEnabled>
|
||||||
<Binding Source="{x:Static vm:Preference.Instance}" Path="UseFullTextDiff" Mode="OneWay" Converter="{x:Static BoolConverters.Not}"/>
|
<Binding Source="{x:Static vm:Preferences.Instance}" Path="UseFullTextDiff" Mode="OneWay" Converter="{x:Static BoolConverters.Not}"/>
|
||||||
</Button.IsEnabled>
|
</Button.IsEnabled>
|
||||||
<Path Width="12" Height="12" Stretch="Uniform" Margin="0,6,0,0" Data="{StaticResource Icons.Lines.Incr}"/>
|
<Path Width="12" Height="12" Stretch="Uniform" Margin="0,6,0,0" Data="{StaticResource Icons.Lines.Incr}"/>
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -88,7 +88,7 @@
|
||||||
<Button.IsEnabled>
|
<Button.IsEnabled>
|
||||||
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
||||||
<Binding Path="UnifiedLines" Mode="OneWay" Converter="{x:Static c:IntConverters.IsGreaterThanFour}"/>
|
<Binding Path="UnifiedLines" Mode="OneWay" Converter="{x:Static c:IntConverters.IsGreaterThanFour}"/>
|
||||||
<Binding Source="{x:Static vm:Preference.Instance}" Path="UseFullTextDiff" Mode="OneWay" Converter="{x:Static BoolConverters.Not}"/>
|
<Binding Source="{x:Static vm:Preferences.Instance}" Path="UseFullTextDiff" Mode="OneWay" Converter="{x:Static BoolConverters.Not}"/>
|
||||||
</MultiBinding>
|
</MultiBinding>
|
||||||
</Button.IsEnabled>
|
</Button.IsEnabled>
|
||||||
<Path Width="12" Height="12" Stretch="Uniform" Margin="0,6,0,0" Data="{StaticResource Icons.Lines.Decr}"/>
|
<Path Width="12" Height="12" Stretch="Uniform" Margin="0,6,0,0" Data="{StaticResource Icons.Lines.Decr}"/>
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
<ToggleButton Classes="line_path"
|
<ToggleButton Classes="line_path"
|
||||||
Width="28"
|
Width="28"
|
||||||
Command="{Binding ToggleFullTextDiff}"
|
Command="{Binding ToggleFullTextDiff}"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseFullTextDiff, Mode=OneWay}"
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseFullTextDiff, Mode=OneWay}"
|
||||||
IsVisible="{Binding IsTextDiff}"
|
IsVisible="{Binding IsTextDiff}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Diff.VisualLines.All}">
|
ToolTip.Tip="{DynamicResource Text.Diff.VisualLines.All}">
|
||||||
<Path Width="13" Height="13" Data="{StaticResource Icons.Lines.All}" Margin="0,3,0,0"/>
|
<Path Width="13" Height="13" Data="{StaticResource Icons.Lines.All}" Margin="0,3,0,0"/>
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
<ToggleButton Classes="line_path"
|
<ToggleButton Classes="line_path"
|
||||||
Width="28"
|
Width="28"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseSyntaxHighlighting, Mode=TwoWay}"
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseSyntaxHighlighting, Mode=TwoWay}"
|
||||||
IsVisible="{Binding IsTextDiff}"
|
IsVisible="{Binding IsTextDiff}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Diff.SyntaxHighlight}">
|
ToolTip.Tip="{DynamicResource Text.Diff.SyntaxHighlight}">
|
||||||
<Path Width="13" Height="13" Data="{StaticResource Icons.SyntaxHighlight}" Margin="0,3,0,0"/>
|
<Path Width="13" Height="13" Data="{StaticResource Icons.SyntaxHighlight}" Margin="0,3,0,0"/>
|
||||||
|
@ -114,12 +114,12 @@
|
||||||
|
|
||||||
<ToggleButton Classes="line_path"
|
<ToggleButton Classes="line_path"
|
||||||
Width="28"
|
Width="28"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=EnableDiffViewWordWrap, Mode=TwoWay}"
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=EnableDiffViewWordWrap, Mode=TwoWay}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Diff.ToggleWordWrap}">
|
ToolTip.Tip="{DynamicResource Text.Diff.ToggleWordWrap}">
|
||||||
<ToggleButton.IsVisible>
|
<ToggleButton.IsVisible>
|
||||||
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
||||||
<Binding Path="IsTextDiff"/>
|
<Binding Path="IsTextDiff"/>
|
||||||
<Binding Source="{x:Static vm:Preference.Instance}" Path="UseSideBySideDiff" Mode="OneWay" Converter="{x:Static BoolConverters.Not}"/>
|
<Binding Source="{x:Static vm:Preferences.Instance}" Path="UseSideBySideDiff" Mode="OneWay" Converter="{x:Static BoolConverters.Not}"/>
|
||||||
</MultiBinding>
|
</MultiBinding>
|
||||||
</ToggleButton.IsVisible>
|
</ToggleButton.IsVisible>
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@
|
||||||
|
|
||||||
<ToggleButton Classes="line_path"
|
<ToggleButton Classes="line_path"
|
||||||
Width="28"
|
Width="28"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowHiddenSymbolsInDiffView, Mode=TwoWay}"
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=ShowHiddenSymbolsInDiffView, Mode=TwoWay}"
|
||||||
IsVisible="{Binding IsTextDiff}"
|
IsVisible="{Binding IsTextDiff}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Diff.ShowHiddenSymbols}">
|
ToolTip.Tip="{DynamicResource Text.Diff.ShowHiddenSymbols}">
|
||||||
<Path Width="11" Height="11" Stretch="Uniform" Data="{StaticResource Icons.HiddenSymbol}" Margin="0,1,0,0"/>
|
<Path Width="11" Height="11" Stretch="Uniform" Data="{StaticResource Icons.HiddenSymbol}" Margin="0,1,0,0"/>
|
||||||
|
@ -143,10 +143,10 @@
|
||||||
|
|
||||||
<ToggleButton Classes="line_path"
|
<ToggleButton Classes="line_path"
|
||||||
Width="28" Height="18"
|
Width="28" Height="18"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseSideBySideDiff, Mode=TwoWay}"
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseSideBySideDiff, Mode=TwoWay}"
|
||||||
IsVisible="{Binding IsTextDiff}"
|
IsVisible="{Binding IsTextDiff}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Diff.SideBySide}">
|
ToolTip.Tip="{DynamicResource Text.Diff.SideBySide}">
|
||||||
<Path Width="12" Height="12" Data="{StaticResource Icons.LayoutHorizontal}" Margin="0,2,0,0"/>
|
<Path Width="12" Height="12" Data="{StaticResource Icons.Layout}" Margin="0,2,0,0"/>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
|
|
||||||
<Button Classes="icon_button" Width="28" Command="{Binding OpenExternalMergeTool}" ToolTip.Tip="{DynamicResource Text.Diff.UseMerger}">
|
<Button Classes="icon_button" Width="28" Command="{Binding OpenExternalMergeTool}" ToolTip.Tip="{DynamicResource Text.Diff.UseMerger}">
|
||||||
|
@ -259,8 +259,8 @@
|
||||||
<!-- Text Diff -->
|
<!-- Text Diff -->
|
||||||
<DataTemplate DataType="m:TextDiff">
|
<DataTemplate DataType="m:TextDiff">
|
||||||
<v:TextDiffView
|
<v:TextDiffView
|
||||||
UseSideBySideDiff="{Binding Source={x:Static vm:Preference.Instance}, Path=UseSideBySideDiff, Mode=OneWay}"
|
UseSideBySideDiff="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseSideBySideDiff, Mode=OneWay}"
|
||||||
UseBlockNavigation="{Binding Source={x:Static vm:Preference.Instance}, Path=UseBlockNavigationInDiffView, Mode=OneWay}"
|
UseBlockNavigation="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseBlockNavigationInDiffView, Mode=OneWay}"
|
||||||
BlockNavigationIndicator="{Binding #BlockNavigationIndicator.Text, Mode=OneWayToSource}"/>
|
BlockNavigationIndicator="{Binding #BlockNavigationIndicator.Text, Mode=OneWayToSource}"/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
x:Class="SourceGit.Views.Histories"
|
x:Class="SourceGit.Views.Histories"
|
||||||
x:DataType="vm:Histories"
|
x:DataType="vm:Histories"
|
||||||
x:Name="ThisControl">
|
x:Name="ThisControl">
|
||||||
<v:LayoutableGrid UseHorizontal="{Binding Source={x:Static vm:Preference.Instance}, Path=UseTwoColumnsLayoutInHistories}">
|
<v:LayoutableGrid UseHorizontal="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseTwoColumnsLayoutInHistories}">
|
||||||
<v:LayoutableGrid.RowDefinitions>
|
<v:LayoutableGrid.RowDefinitions>
|
||||||
<RowDefinition Height="{Binding TopArea, Mode=TwoWay}" MinHeight="100"/>
|
<RowDefinition Height="{Binding TopArea, Mode=TwoWay}" MinHeight="100"/>
|
||||||
<RowDefinition Height="3"/>
|
<RowDefinition Height="3"/>
|
||||||
|
@ -48,17 +48,14 @@
|
||||||
<TextBlock Classes="table_header" Text="{DynamicResource Text.Histories.Header.SHA}" HorizontalAlignment="Center"/>
|
<TextBlock Classes="table_header" Text="{DynamicResource Text.Histories.Header.SHA}" HorizontalAlignment="Center"/>
|
||||||
</Border>
|
</Border>
|
||||||
<StackPanel Grid.Column="4" Orientation="Horizontal" HorizontalAlignment="Center">
|
<StackPanel Grid.Column="4" Orientation="Horizontal" HorizontalAlignment="Center">
|
||||||
<ToggleButton Classes="time_display_mode"
|
|
||||||
Width="10" Height="10"
|
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=DisplayTimeAsPeriodInHistories, Mode=TwoWay}"/>
|
|
||||||
<TextBlock Classes="table_header"
|
<TextBlock Classes="table_header"
|
||||||
Margin="6,0,0,0"
|
Margin="6,0,0,0"
|
||||||
Text="{DynamicResource Text.Histories.Header.Time}"
|
Text="{DynamicResource Text.Histories.Header.Time}"
|
||||||
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowAuthorTimeInGraph, Converter={x:Static BoolConverters.Not}, Mode=OneWay}"/>
|
IsVisible="{Binding Source={x:Static vm:Preferences.Instance}, Path=ShowAuthorTimeInGraph, Converter={x:Static BoolConverters.Not}, Mode=OneWay}"/>
|
||||||
<TextBlock Classes="table_header"
|
<TextBlock Classes="table_header"
|
||||||
Margin="6,0,0,0"
|
Margin="6,0,0,0"
|
||||||
Text="{DynamicResource Text.Histories.Header.AuthorTime}"
|
Text="{DynamicResource Text.Histories.Header.AuthorTime}"
|
||||||
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowAuthorTimeInGraph, Mode=OneWay}"/>
|
IsVisible="{Binding Source={x:Static vm:Preferences.Instance}, Path=ShowAuthorTimeInGraph, Mode=OneWay}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
|
@ -143,8 +140,14 @@
|
||||||
Foreground="{DynamicResource Brush.FG1}"
|
Foreground="{DynamicResource Brush.FG1}"
|
||||||
FontFamily="{DynamicResource Fonts.Primary}"
|
FontFamily="{DynamicResource Fonts.Primary}"
|
||||||
FontSize="11"
|
FontSize="11"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center">
|
||||||
UseGraphColor="True"/>
|
<v:CommitRefsPresenter.UseGraphColor>
|
||||||
|
<MultiBinding Converter="{x:Static BoolConverters.Or}">
|
||||||
|
<Binding Path="IsMerged"/>
|
||||||
|
<Binding Path="$parent[v:Histories].OnlyHighlightCurrentBranch" Converter="{x:Static BoolConverters.Not}"/>
|
||||||
|
</MultiBinding>
|
||||||
|
</v:CommitRefsPresenter.UseGraphColor>
|
||||||
|
</v:CommitRefsPresenter>
|
||||||
|
|
||||||
<v:CommitSubjectPresenter Grid.Column="2"
|
<v:CommitSubjectPresenter Grid.Column="2"
|
||||||
Classes="primary"
|
Classes="primary"
|
||||||
|
@ -190,9 +193,9 @@
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
FontWeight="{Binding FontWeight}"
|
FontWeight="{Binding FontWeight}"
|
||||||
Opacity="{Binding Opacity}"
|
Opacity="{Binding Opacity}"
|
||||||
UseAuthorTime="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowAuthorTimeInGraph, Mode=OneWay}"
|
UseAuthorTime="{Binding Source={x:Static vm:Preferences.Instance}, Path=ShowAuthorTimeInGraph, Mode=OneWay}"
|
||||||
ShowAsDateTime="{Binding Source={x:Static vm:Preference.Instance}, Path=!DisplayTimeAsPeriodInHistories}"
|
ShowAsDateTime="{Binding Source={x:Static vm:Preferences.Instance}, Path=!DisplayTimeAsPeriodInHistories}"
|
||||||
DateTimeFormat="{Binding Source={x:Static vm:Preference.Instance}, Path=DateTimeFormat}"/>
|
DateTimeFormat="{Binding Source={x:Static vm:Preferences.Instance}, Path=DateTimeFormat}"/>
|
||||||
</Border>
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
@ -202,6 +205,7 @@
|
||||||
<v:CommitGraph x:Name="CommitGraph"
|
<v:CommitGraph x:Name="CommitGraph"
|
||||||
Graph="{Binding Graph}"
|
Graph="{Binding Graph}"
|
||||||
DotBrush="{DynamicResource Brush.Contents}"
|
DotBrush="{DynamicResource Brush.Contents}"
|
||||||
|
OnlyHighlightCurrentBranch="{Binding $parent[v:Histories].OnlyHighlightCurrentBranch}"
|
||||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||||
IsHitTestVisible="False"
|
IsHitTestVisible="False"
|
||||||
ClipToBounds="True"/>
|
ClipToBounds="True"/>
|
||||||
|
|
|
@ -506,9 +506,18 @@ namespace SourceGit.Views
|
||||||
set => SetValue(DotBrushProperty, value);
|
set => SetValue(DotBrushProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly StyledProperty<bool> OnlyHighlightCurrentBranchProperty =
|
||||||
|
AvaloniaProperty.Register<CommitGraph, bool>(nameof(OnlyHighlightCurrentBranch), true);
|
||||||
|
|
||||||
|
public bool OnlyHighlightCurrentBranch
|
||||||
|
{
|
||||||
|
get => GetValue(OnlyHighlightCurrentBranchProperty);
|
||||||
|
set => SetValue(OnlyHighlightCurrentBranchProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
static CommitGraph()
|
static CommitGraph()
|
||||||
{
|
{
|
||||||
AffectsRender<CommitGraph>(GraphProperty, DotBrushProperty);
|
AffectsRender<CommitGraph>(GraphProperty, DotBrushProperty, OnlyHighlightCurrentBranchProperty);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Render(DrawingContext context)
|
public override void Render(DrawingContext context)
|
||||||
|
@ -545,6 +554,31 @@ namespace SourceGit.Views
|
||||||
|
|
||||||
private void DrawCurves(DrawingContext context, Models.CommitGraph graph, double top, double bottom)
|
private void DrawCurves(DrawingContext context, Models.CommitGraph graph, double top, double bottom)
|
||||||
{
|
{
|
||||||
|
var grayedPen = new Pen(new SolidColorBrush(Colors.Gray, 0.4), Models.CommitGraph.Pens[0].Thickness);
|
||||||
|
var onlyHighlightCurrentBranch = OnlyHighlightCurrentBranch;
|
||||||
|
|
||||||
|
if (onlyHighlightCurrentBranch)
|
||||||
|
{
|
||||||
|
foreach (var link in graph.Links)
|
||||||
|
{
|
||||||
|
if (link.IsMerged)
|
||||||
|
continue;
|
||||||
|
if (link.End.Y < top)
|
||||||
|
continue;
|
||||||
|
if (link.Start.Y > bottom)
|
||||||
|
break;
|
||||||
|
|
||||||
|
var geo = new StreamGeometry();
|
||||||
|
using (var ctx = geo.Open())
|
||||||
|
{
|
||||||
|
ctx.BeginFigure(link.Start, false);
|
||||||
|
ctx.QuadraticBezierTo(link.Control, link.End);
|
||||||
|
}
|
||||||
|
|
||||||
|
context.DrawGeometry(null, grayedPen, geo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var line in graph.Paths)
|
foreach (var line in graph.Paths)
|
||||||
{
|
{
|
||||||
var last = line.Points[0];
|
var last = line.Points[0];
|
||||||
|
@ -610,11 +644,16 @@ namespace SourceGit.Views
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
context.DrawGeometry(null, pen, geo);
|
if (!line.IsMerged && onlyHighlightCurrentBranch)
|
||||||
|
context.DrawGeometry(null, grayedPen, geo);
|
||||||
|
else
|
||||||
|
context.DrawGeometry(null, pen, geo);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var link in graph.Links)
|
foreach (var link in graph.Links)
|
||||||
{
|
{
|
||||||
|
if (onlyHighlightCurrentBranch && !link.IsMerged)
|
||||||
|
continue;
|
||||||
if (link.End.Y < top)
|
if (link.End.Y < top)
|
||||||
continue;
|
continue;
|
||||||
if (link.Start.Y > bottom)
|
if (link.Start.Y > bottom)
|
||||||
|
@ -633,8 +672,10 @@ namespace SourceGit.Views
|
||||||
|
|
||||||
private void DrawAnchors(DrawingContext context, Models.CommitGraph graph, double top, double bottom)
|
private void DrawAnchors(DrawingContext context, Models.CommitGraph graph, double top, double bottom)
|
||||||
{
|
{
|
||||||
IBrush dotFill = DotBrush;
|
var dotFill = DotBrush;
|
||||||
Pen dotFillPen = new Pen(dotFill, 2);
|
var dotFillPen = new Pen(dotFill, 2);
|
||||||
|
var grayedPen = new Pen(Brushes.Gray, Models.CommitGraph.Pens[0].Thickness);
|
||||||
|
var onlyHighlightCurrentBranch = OnlyHighlightCurrentBranch;
|
||||||
|
|
||||||
foreach (var dot in graph.Dots)
|
foreach (var dot in graph.Dots)
|
||||||
{
|
{
|
||||||
|
@ -644,6 +685,9 @@ namespace SourceGit.Views
|
||||||
break;
|
break;
|
||||||
|
|
||||||
var pen = Models.CommitGraph.Pens[dot.Color];
|
var pen = Models.CommitGraph.Pens[dot.Color];
|
||||||
|
if (!dot.IsMerged && onlyHighlightCurrentBranch)
|
||||||
|
pen = grayedPen;
|
||||||
|
|
||||||
switch (dot.Type)
|
switch (dot.Type)
|
||||||
{
|
{
|
||||||
case Models.CommitGraph.DotType.Head:
|
case Models.CommitGraph.DotType.Head:
|
||||||
|
@ -692,6 +736,15 @@ namespace SourceGit.Views
|
||||||
set => SetValue(IssueTrackerRulesProperty, value);
|
set => SetValue(IssueTrackerRulesProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly StyledProperty<bool> OnlyHighlightCurrentBranchProperty =
|
||||||
|
AvaloniaProperty.Register<Histories, bool>(nameof(OnlyHighlightCurrentBranch), true);
|
||||||
|
|
||||||
|
public bool OnlyHighlightCurrentBranch
|
||||||
|
{
|
||||||
|
get => GetValue(OnlyHighlightCurrentBranchProperty);
|
||||||
|
set => SetValue(OnlyHighlightCurrentBranchProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
public static readonly StyledProperty<long> NavigationIdProperty =
|
public static readonly StyledProperty<long> NavigationIdProperty =
|
||||||
AvaloniaProperty.Register<Histories, long>(nameof(NavigationId));
|
AvaloniaProperty.Register<Histories, long>(nameof(NavigationId));
|
||||||
|
|
||||||
|
@ -792,12 +845,17 @@ namespace SourceGit.Views
|
||||||
// CTRL/COMMAND + B -> shows Create Branch pop-up at selected commit.
|
// CTRL/COMMAND + B -> shows Create Branch pop-up at selected commit.
|
||||||
if (e.Key == Key.B)
|
if (e.Key == Key.B)
|
||||||
{
|
{
|
||||||
if (selected.Count == 1 &&
|
var repoView = this.FindAncestorOfType<Repository>();
|
||||||
selected[0] is Models.Commit commit &&
|
if (repoView == null)
|
||||||
DataContext is ViewModels.Histories histories &&
|
return;
|
||||||
ViewModels.PopupHost.CanCreatePopup())
|
|
||||||
|
var repo = repoView.DataContext as ViewModels.Repository;
|
||||||
|
if (repo == null || !repo.CanCreatePopup())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (selected.Count == 1 && selected[0] is Models.Commit commit)
|
||||||
{
|
{
|
||||||
ViewModels.PopupHost.ShowPopup(new ViewModels.CreateBranch(histories.Repo, commit));
|
repo.ShowPopup(new ViewModels.CreateBranch(repo, commit));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,12 +42,12 @@
|
||||||
<TextBlock Text="{DynamicResource Text.Hotkeys.Global}"
|
<TextBlock Text="{DynamicResource Text.Hotkeys.Global}"
|
||||||
Foreground="{DynamicResource Brush.FG2}"
|
Foreground="{DynamicResource Brush.FG2}"
|
||||||
FontWeight="Bold"
|
FontWeight="Bold"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Increase}}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Increase}}"
|
||||||
Margin="0,0,0,8"/>
|
Margin="0,0,0,8"/>
|
||||||
|
|
||||||
<Grid RowDefinitions="20,20,20,20,20,20,20" ColumnDefinitions="150,*">
|
<Grid RowDefinitions="20,20,20,20,20,20,20" ColumnDefinitions="150,*">
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0" Classes="primary bold" Text="{OnPlatform Ctrl+Shift+P, macOS=⌘+\,}"/>
|
<TextBlock Grid.Row="0" Grid.Column="0" Classes="primary bold" Text="{OnPlatform Ctrl+Shift+P, macOS=⌘+\,}"/>
|
||||||
<TextBlock Grid.Row="0" Grid.Column="1" Margin="16,0,0,0" Text="{DynamicResource Text.Hotkeys.Global.OpenPreference}"/>
|
<TextBlock Grid.Row="0" Grid.Column="1" Margin="16,0,0,0" Text="{DynamicResource Text.Hotkeys.Global.OpenPreferences}"/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0" Classes="primary bold" Text="{OnPlatform Ctrl+T, macOS=⌘+T}"/>
|
<TextBlock Grid.Row="1" Grid.Column="0" Classes="primary bold" Text="{OnPlatform Ctrl+T, macOS=⌘+T}"/>
|
||||||
<TextBlock Grid.Row="1" Grid.Column="1" Margin="16,0,0,0" Text="{DynamicResource Text.Hotkeys.Global.NewTab}" />
|
<TextBlock Grid.Row="1" Grid.Column="1" Margin="16,0,0,0" Text="{DynamicResource Text.Hotkeys.Global.NewTab}" />
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
<TextBlock Text="{DynamicResource Text.Hotkeys.Repo}"
|
<TextBlock Text="{DynamicResource Text.Hotkeys.Repo}"
|
||||||
Foreground="{DynamicResource Brush.FG2}"
|
Foreground="{DynamicResource Brush.FG2}"
|
||||||
FontWeight="Bold"
|
FontWeight="Bold"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Increase}}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Increase}}"
|
||||||
Margin="0,8"/>
|
Margin="0,8"/>
|
||||||
|
|
||||||
<Grid RowDefinitions="20,20,20,20,20,20,20,20,20,20,20,20,20,20,20" ColumnDefinitions="150,*">
|
<Grid RowDefinitions="20,20,20,20,20,20,20,20,20,20,20,20,20,20,20" ColumnDefinitions="150,*">
|
||||||
|
@ -124,7 +124,7 @@
|
||||||
<TextBlock Text="{DynamicResource Text.Hotkeys.TextEditor}"
|
<TextBlock Text="{DynamicResource Text.Hotkeys.TextEditor}"
|
||||||
Foreground="{DynamicResource Brush.FG2}"
|
Foreground="{DynamicResource Brush.FG2}"
|
||||||
FontWeight="Bold"
|
FontWeight="Bold"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Increase}}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Increase}}"
|
||||||
Margin="0,8"/>
|
Margin="0,8"/>
|
||||||
|
|
||||||
<Grid RowDefinitions="20,20,20,20" ColumnDefinitions="150,*">
|
<Grid RowDefinitions="20,20,20,20" ColumnDefinitions="150,*">
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
<Button Grid.Column="0" Classes="icon_button" VerticalAlignment="Bottom" Margin="6,0,2,3" IsVisible="{OnPlatform True, macOS=False}">
|
<Button Grid.Column="0" Classes="icon_button" VerticalAlignment="Bottom" Margin="6,0,2,3" IsVisible="{OnPlatform True, macOS=False}">
|
||||||
<Button.Flyout>
|
<Button.Flyout>
|
||||||
<MenuFlyout Placement="BottomEdgeAlignedLeft" VerticalOffset="-8">
|
<MenuFlyout Placement="BottomEdgeAlignedLeft" VerticalOffset="-8">
|
||||||
<MenuItem Header="{DynamicResource Text.Preference}" Command="{x:Static s:App.OpenPreferenceCommand}" InputGesture="Ctrl+Shift+P">
|
<MenuItem Header="{DynamicResource Text.Preferences}" Command="{x:Static s:App.OpenPreferencesCommand}" InputGesture="Ctrl+Shift+P">
|
||||||
<MenuItem.Icon>
|
<MenuItem.Icon>
|
||||||
<Path Width="14" Height="14" Data="{StaticResource Icons.Settings}"/>
|
<Path Width="14" Height="14" Data="{StaticResource Icons.Settings}"/>
|
||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
|
|
|
@ -34,14 +34,14 @@ namespace SourceGit.Views
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (OperatingSystem.IsLinux())
|
if (OperatingSystem.IsLinux())
|
||||||
return !ViewModels.Preference.Instance.UseSystemWindowFrame;
|
return !ViewModels.Preferences.Instance.UseSystemWindowFrame;
|
||||||
return OperatingSystem.IsWindows();
|
return OperatingSystem.IsWindows();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Launcher()
|
public Launcher()
|
||||||
{
|
{
|
||||||
var layout = ViewModels.Preference.Instance.Layout;
|
var layout = ViewModels.Preferences.Instance.Layout;
|
||||||
if (layout.LauncherWindowState != WindowState.Maximized)
|
if (layout.LauncherWindowState != WindowState.Maximized)
|
||||||
{
|
{
|
||||||
Width = layout.LauncherWidth;
|
Width = layout.LauncherWidth;
|
||||||
|
@ -81,7 +81,7 @@ namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
base.OnOpened(e);
|
base.OnOpened(e);
|
||||||
|
|
||||||
var state = ViewModels.Preference.Instance.Layout.LauncherWindowState;
|
var state = ViewModels.Preferences.Instance.Layout.LauncherWindowState;
|
||||||
if (state == WindowState.Maximized || state == WindowState.FullScreen)
|
if (state == WindowState.Maximized || state == WindowState.FullScreen)
|
||||||
WindowState = WindowState.Maximized;
|
WindowState = WindowState.Maximized;
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ namespace SourceGit.Views
|
||||||
if (OperatingSystem.IsMacOS())
|
if (OperatingSystem.IsMacOS())
|
||||||
HasLeftCaptionButton = state != WindowState.FullScreen;
|
HasLeftCaptionButton = state != WindowState.FullScreen;
|
||||||
|
|
||||||
ViewModels.Preference.Instance.Layout.LauncherWindowState = state;
|
ViewModels.Preferences.Instance.Layout.LauncherWindowState = state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ namespace SourceGit.Views
|
||||||
// Ctrl+Shift+P opens preference dialog (macOS use hotkeys in system menu bar)
|
// Ctrl+Shift+P opens preference dialog (macOS use hotkeys in system menu bar)
|
||||||
if (!OperatingSystem.IsMacOS() && e.KeyModifiers == (KeyModifiers.Control | KeyModifiers.Shift) && e.Key == Key.P)
|
if (!OperatingSystem.IsMacOS() && e.KeyModifiers == (KeyModifiers.Control | KeyModifiers.Shift) && e.Key == Key.P)
|
||||||
{
|
{
|
||||||
App.OpenDialog(new Preference());
|
App.OpenDialog(new Preferences());
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -141,7 +141,7 @@ namespace SourceGit.Views
|
||||||
if (vm.ActivePage.Data is not ViewModels.Welcome)
|
if (vm.ActivePage.Data is not ViewModels.Welcome)
|
||||||
vm.AddNewTab();
|
vm.AddNewTab();
|
||||||
|
|
||||||
ViewModels.Welcome.Instance.Clone();
|
ViewModels.Welcome.Instance.Clone();
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
</Grid>
|
</Grid>
|
||||||
</ToolTip.Tip>
|
</ToolTip.Tip>
|
||||||
|
|
||||||
<Grid Width="{Binding Source={x:Static vm:Preference.Instance}, Path=UseFixedTabWidth, Converter={x:Static c:BoolConverters.ToPageTabWidth}}" Height="30" ColumnDefinitions="Auto,*,Auto" VerticalAlignment="Center">
|
<Grid Width="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseFixedTabWidth, Converter={x:Static c:BoolConverters.ToPageTabWidth}}" Height="30" ColumnDefinitions="Auto,*,Auto" VerticalAlignment="Center">
|
||||||
<Path Grid.Column="0"
|
<Path Grid.Column="0"
|
||||||
Width="12" Height="12" Margin="12,0"
|
Width="12" Height="12" Margin="12,0"
|
||||||
Fill="{Binding Node.Bookmark, Converter={x:Static c:IntConverters.ToBookmarkBrush}}"
|
Fill="{Binding Node.Bookmark, Converter={x:Static c:IntConverters.ToBookmarkBrush}}"
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
<TextBlock Grid.Column="1"
|
<TextBlock Grid.Column="1"
|
||||||
Classes="primary"
|
Classes="primary"
|
||||||
HorizontalAlignment="Stretch" VerticalAlignment="Center"
|
HorizontalAlignment="Stretch" VerticalAlignment="Center"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
||||||
TextAlignment="Center"
|
TextAlignment="Center"
|
||||||
Text="{Binding Node.Name}"
|
Text="{Binding Node.Name}"
|
||||||
IsVisible="{Binding Node.IsRepository}"
|
IsVisible="{Binding Node.IsRepository}"
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
<TextBlock Grid.Column="1"
|
<TextBlock Grid.Column="1"
|
||||||
Classes="primary"
|
Classes="primary"
|
||||||
HorizontalAlignment="Stretch" VerticalAlignment="Center"
|
HorizontalAlignment="Stretch" VerticalAlignment="Center"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
||||||
TextAlignment="Center"
|
TextAlignment="Center"
|
||||||
Text="{DynamicResource Text.PageTabBar.Welcome.Title}"
|
Text="{DynamicResource Text.PageTabBar.Welcome.Title}"
|
||||||
IsVisible="{Binding !Node.IsRepository}"
|
IsVisible="{Binding !Node.IsRepository}"
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
<TextBlock x:Name="TxtDesc"
|
<TextBlock x:Name="TxtDesc"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
TextWrapping="Wrap"
|
TextWrapping="Wrap"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=DefaultFontSize, Converter={x:Static c:DoubleConverters.Decrease}}"
|
||||||
FontStyle="Italic"
|
FontStyle="Italic"
|
||||||
Text="{Binding #ThisControl.Description}"/>
|
Text="{Binding #ThisControl.Description}"/>
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,11 @@
|
||||||
xmlns:vm="using:SourceGit.ViewModels"
|
xmlns:vm="using:SourceGit.ViewModels"
|
||||||
xmlns:v="using:SourceGit.Views"
|
xmlns:v="using:SourceGit.Views"
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
x:Class="SourceGit.Views.Preference"
|
x:Class="SourceGit.Views.Preferences"
|
||||||
x:DataType="vm:Preference"
|
x:DataType="vm:Preferences"
|
||||||
x:Name="ThisControl"
|
x:Name="ThisControl"
|
||||||
Icon="/App.ico"
|
Icon="/App.ico"
|
||||||
Title="{DynamicResource Text.Preference}"
|
Title="{DynamicResource Text.Preferences}"
|
||||||
SizeToContent="WidthAndHeight"
|
SizeToContent="WidthAndHeight"
|
||||||
CanResize="False"
|
CanResize="False"
|
||||||
WindowStartupLocation="CenterScreen">
|
WindowStartupLocation="CenterScreen">
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
IsVisible="{OnPlatform True, macOS=False}"/>
|
IsVisible="{OnPlatform True, macOS=False}"/>
|
||||||
|
|
||||||
<TextBlock Classes="bold"
|
<TextBlock Classes="bold"
|
||||||
Text="{DynamicResource Text.Preference}"
|
Text="{DynamicResource Text.Preferences}"
|
||||||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||||||
IsHitTestVisible="False"/>
|
IsHitTestVisible="False"/>
|
||||||
|
|
||||||
|
@ -44,11 +44,11 @@
|
||||||
<TabControl>
|
<TabControl>
|
||||||
<TabItem>
|
<TabItem>
|
||||||
<TabItem.Header>
|
<TabItem.Header>
|
||||||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.General}"/>
|
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preferences.General}"/>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32,32,Auto" ColumnDefinitions="Auto,*">
|
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32,32,Auto" ColumnDefinitions="Auto,*">
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.General.Locale}"
|
Text="{DynamicResource Text.Preferences.General.Locale}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<ComboBox Grid.Row="0" Grid.Column="1"
|
<ComboBox Grid.Row="0" Grid.Column="1"
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
SelectedItem="{Binding Locale, Mode=TwoWay, Converter={x:Static c:StringConverters.ToLocale}}"/>
|
SelectedItem="{Binding Locale, Mode=TwoWay, Converter={x:Static c:StringConverters.ToLocale}}"/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0"
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.General.DateFormat}"
|
Text="{DynamicResource Text.Preferences.General.DateFormat}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<ComboBox Grid.Row="1" Grid.Column="1"
|
<ComboBox Grid.Row="1" Grid.Column="1"
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Grid.Column="0"
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Git.DefaultCloneDir}"
|
Text="{DynamicResource Text.Preferences.Git.DefaultCloneDir}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<TextBox Grid.Row="2" Grid.Column="1"
|
<TextBox Grid.Row="2" Grid.Column="1"
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
</TextBox>
|
</TextBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="3" Grid.Column="0"
|
<TextBlock Grid.Row="3" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.General.SubjectGuideLength}"
|
Text="{DynamicResource Text.Preferences.General.SubjectGuideLength}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<NumericUpDown Grid.Row="3" Grid.Column="1"
|
<NumericUpDown Grid.Row="3" Grid.Column="1"
|
||||||
|
@ -108,7 +108,7 @@
|
||||||
Value="{Binding SubjectGuideLength, Mode=TwoWay}"/>
|
Value="{Binding SubjectGuideLength, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="4" Grid.Column="0"
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.General.MaxHistoryCommits}"
|
Text="{DynamicResource Text.Preferences.General.MaxHistoryCommits}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<Grid Grid.Row="4" Grid.Column="1" ColumnDefinitions="*,64">
|
<Grid Grid.Row="4" Grid.Column="1" ColumnDefinitions="*,64">
|
||||||
|
@ -128,29 +128,29 @@
|
||||||
|
|
||||||
<CheckBox Grid.Row="5" Grid.Column="1"
|
<CheckBox Grid.Row="5" Grid.Column="1"
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Preference.General.ShowAuthorTime}"
|
Content="{DynamicResource Text.Preferences.General.ShowAuthorTime}"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowAuthorTimeInGraph, Mode=TwoWay}"/>
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=ShowAuthorTimeInGraph, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="6" Grid.Column="1"
|
<CheckBox Grid.Row="6" Grid.Column="1"
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Preference.General.ShowChildren}"
|
Content="{DynamicResource Text.Preferences.General.ShowChildren}"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowChildren, Mode=TwoWay}"/>
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=ShowChildren, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="7" Grid.Column="1"
|
<CheckBox Grid.Row="7" Grid.Column="1"
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Preference.General.Check4UpdatesOnStartup}"
|
Content="{DynamicResource Text.Preferences.General.Check4UpdatesOnStartup}"
|
||||||
IsVisible="{x:Static s:App.IsCheckForUpdateCommandVisible}"
|
IsVisible="{x:Static s:App.IsCheckForUpdateCommandVisible}"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=Check4UpdatesOnStartup, Mode=TwoWay}"/>
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=Check4UpdatesOnStartup, Mode=TwoWay}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem>
|
<TabItem>
|
||||||
<TabItem.Header>
|
<TabItem.Header>
|
||||||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.Appearance}"/>
|
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preferences.Appearance}"/>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32,32,Auto" ColumnDefinitions="Auto,*">
|
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32,32,Auto" ColumnDefinitions="Auto,*">
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Appearance.Theme}"
|
Text="{DynamicResource Text.Preferences.Appearance.Theme}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<ComboBox Grid.Row="0" Grid.Column="1"
|
<ComboBox Grid.Row="0" Grid.Column="1"
|
||||||
|
@ -167,7 +167,7 @@
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0"
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Appearance.DefaultFont}"
|
Text="{DynamicResource Text.Preferences.Appearance.DefaultFont}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<TextBox Grid.Row="1" Grid.Column="1"
|
<TextBox Grid.Row="1" Grid.Column="1"
|
||||||
|
@ -176,7 +176,7 @@
|
||||||
Text="{Binding DefaultFontFamily, Mode=TwoWay}"/>
|
Text="{Binding DefaultFontFamily, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Grid.Column="0"
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Appearance.MonospaceFont}"
|
Text="{DynamicResource Text.Preferences.Appearance.MonospaceFont}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<TextBox Grid.Row="2" Grid.Column="1"
|
<TextBox Grid.Row="2" Grid.Column="1"
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
Text="{Binding MonospaceFontFamily, Mode=TwoWay}"/>
|
Text="{Binding MonospaceFontFamily, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="3" Grid.Column="0"
|
<TextBlock Grid.Row="3" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Appearance.FontSize}"
|
Text="{DynamicResource Text.Preferences.Appearance.FontSize}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<Grid Grid.Row="3" Grid.Column="1" ColumnDefinitions="*,8,*">
|
<Grid Grid.Row="3" Grid.Column="1" ColumnDefinitions="*,8,*">
|
||||||
|
@ -198,7 +198,7 @@
|
||||||
Value="{Binding DefaultFontSize, Mode=TwoWay}">
|
Value="{Binding DefaultFontSize, Mode=TwoWay}">
|
||||||
<NumericUpDown.InnerLeftContent>
|
<NumericUpDown.InnerLeftContent>
|
||||||
<Border BorderThickness="0,0,1,0" BorderBrush="{DynamicResource Brush.Border1}">
|
<Border BorderThickness="0,0,1,0" BorderBrush="{DynamicResource Brush.Border1}">
|
||||||
<TextBlock Margin="4,0" Text="{DynamicResource Text.Preference.Appearance.FontSize.Default}"/>
|
<TextBlock Margin="4,0" Text="{DynamicResource Text.Preferences.Appearance.FontSize.Default}"/>
|
||||||
</Border>
|
</Border>
|
||||||
</NumericUpDown.InnerLeftContent>
|
</NumericUpDown.InnerLeftContent>
|
||||||
</NumericUpDown>
|
</NumericUpDown>
|
||||||
|
@ -211,14 +211,14 @@
|
||||||
Value="{Binding EditorFontSize, Mode=TwoWay}">
|
Value="{Binding EditorFontSize, Mode=TwoWay}">
|
||||||
<NumericUpDown.InnerLeftContent>
|
<NumericUpDown.InnerLeftContent>
|
||||||
<Border BorderThickness="0,0,1,0" BorderBrush="{DynamicResource Brush.Border1}">
|
<Border BorderThickness="0,0,1,0" BorderBrush="{DynamicResource Brush.Border1}">
|
||||||
<TextBlock Margin="4,0" Text="{DynamicResource Text.Preference.Appearance.FontSize.Editor}"/>
|
<TextBlock Margin="4,0" Text="{DynamicResource Text.Preferences.Appearance.FontSize.Editor}"/>
|
||||||
</Border>
|
</Border>
|
||||||
</NumericUpDown.InnerLeftContent>
|
</NumericUpDown.InnerLeftContent>
|
||||||
</NumericUpDown>
|
</NumericUpDown>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<TextBlock Grid.Row="4" Grid.Column="0"
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Appearance.ThemeOverrides}"
|
Text="{DynamicResource Text.Preferences.Appearance.ThemeOverrides}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<TextBox Grid.Row="4" Grid.Column="1"
|
<TextBox Grid.Row="4" Grid.Column="1"
|
||||||
|
@ -233,18 +233,18 @@
|
||||||
</TextBox>
|
</TextBox>
|
||||||
|
|
||||||
<CheckBox Grid.Row="5" Grid.Column="1"
|
<CheckBox Grid.Row="5" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Preference.Appearance.OnlyUseMonoFontInEditor}"
|
Content="{DynamicResource Text.Preferences.Appearance.OnlyUseMonoFontInEditor}"
|
||||||
IsChecked="{Binding OnlyUseMonoFontInEditor, Mode=TwoWay}"/>
|
IsChecked="{Binding OnlyUseMonoFontInEditor, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="6" Grid.Column="1"
|
<CheckBox Grid.Row="6" Grid.Column="1"
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Preference.Appearance.UseFixedTabWidth}"
|
Content="{DynamicResource Text.Preferences.Appearance.UseFixedTabWidth}"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseFixedTabWidth, Mode=TwoWay}"/>
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseFixedTabWidth, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="7" Grid.Column="1"
|
<CheckBox Grid.Row="7" Grid.Column="1"
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Preference.Appearance.UseNativeWindowFrame}"
|
Content="{DynamicResource Text.Preferences.Appearance.UseNativeWindowFrame}"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseSystemWindowFrame, Mode=OneTime}"
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseSystemWindowFrame, Mode=OneTime}"
|
||||||
IsVisible="{OnPlatform False, Linux=True}"
|
IsVisible="{OnPlatform False, Linux=True}"
|
||||||
IsCheckedChanged="OnUseNativeWindowFrameChanged"/>
|
IsCheckedChanged="OnUseNativeWindowFrameChanged"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
@ -252,18 +252,19 @@
|
||||||
|
|
||||||
<TabItem>
|
<TabItem>
|
||||||
<TabItem.Header>
|
<TabItem.Header>
|
||||||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.Git}"/>
|
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preferences.Git}"/>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
|
|
||||||
<Grid Margin="8" RowDefinitions="32,32,32,32,32" ColumnDefinitions="Auto,*">
|
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32" ColumnDefinitions="Auto,*">
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Git.Path}"
|
Text="{DynamicResource Text.Preferences.Git.Path}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<TextBox Grid.Row="0" Grid.Column="1"
|
<TextBox Grid.Row="0" Grid.Column="1"
|
||||||
Height="28"
|
Height="28"
|
||||||
CornerRadius="3"
|
CornerRadius="3"
|
||||||
Text="{Binding GitInstallPath, Mode=TwoWay}">
|
Text="{Binding GitInstallPath, Mode=TwoWay}"
|
||||||
|
TextChanged="OnGitInstallPathChanged">
|
||||||
<TextBox.InnerRightContent>
|
<TextBox.InnerRightContent>
|
||||||
<Button Classes="icon_button" Width="30" Height="30" Click="SelectGitExecutable">
|
<Button Classes="icon_button" Width="30" Height="30" Click="SelectGitExecutable">
|
||||||
<Path Data="{StaticResource Icons.Folder.Open}" Fill="{DynamicResource Brush.FG1}"/>
|
<Path Data="{StaticResource Icons.Folder.Open}" Fill="{DynamicResource Brush.FG1}"/>
|
||||||
|
@ -272,7 +273,7 @@
|
||||||
</TextBox>
|
</TextBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0"
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Git.Version}"
|
Text="{DynamicResource Text.Preferences.Git.Version}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal">
|
<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal">
|
||||||
|
@ -281,34 +282,34 @@
|
||||||
IsVisible="{Binding #ThisControl.GitVersion, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
IsVisible="{Binding #ThisControl.GitVersion, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||||||
|
|
||||||
<Border Background="Transparent"
|
<Border Background="Transparent"
|
||||||
ToolTip.Tip="{DynamicResource Text.Preference.Git.Invalid}"
|
ToolTip.Tip="{DynamicResource Text.Preferences.Git.Invalid}"
|
||||||
IsVisible="{Binding #ThisControl.GitVersion, Converter={x:Static c:StringConverters.UnderRecommendGitVersion}}">
|
IsVisible="{Binding #ThisControl.ShowGitVersionWarning}">
|
||||||
<Path Width="14" Height="14" Data="{StaticResource Icons.Error}" Fill="Red"/>
|
<Path Width="14" Height="14" Data="{StaticResource Icons.Error}" Fill="Red"/>
|
||||||
</Border>
|
</Border>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Grid.Column="0"
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Git.User}"
|
Text="{DynamicResource Text.Preferences.Git.User}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<TextBox Grid.Row="2" Grid.Column="1"
|
<TextBox Grid.Row="2" Grid.Column="1"
|
||||||
Height="28"
|
Height="28"
|
||||||
CornerRadius="3"
|
CornerRadius="3"
|
||||||
Text="{Binding #ThisControl.DefaultUser, Mode=TwoWay}"
|
Text="{Binding #ThisControl.DefaultUser, Mode=TwoWay}"
|
||||||
Watermark="{DynamicResource Text.Preference.Git.User.Placeholder}"/>
|
Watermark="{DynamicResource Text.Preferences.Git.User.Placeholder}"/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="3" Grid.Column="0"
|
<TextBlock Grid.Row="3" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Git.Email}"
|
Text="{DynamicResource Text.Preferences.Git.Email}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<TextBox Grid.Row="3" Grid.Column="1"
|
<TextBox Grid.Row="3" Grid.Column="1"
|
||||||
Height="28"
|
Height="28"
|
||||||
CornerRadius="3"
|
CornerRadius="3"
|
||||||
Text="{Binding #ThisControl.DefaultEmail, Mode=TwoWay}"
|
Text="{Binding #ThisControl.DefaultEmail, Mode=TwoWay}"
|
||||||
Watermark="{DynamicResource Text.Preference.Git.Email.Placeholder}"/>
|
Watermark="{DynamicResource Text.Preferences.Git.Email.Placeholder}"/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="4" Grid.Column="0"
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Git.CRLF}"
|
Text="{DynamicResource Text.Preferences.Git.CRLF}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<ComboBox Grid.Row="4" Grid.Column="1"
|
<ComboBox Grid.Row="4" Grid.Column="1"
|
||||||
|
@ -326,17 +327,22 @@
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ComboBox.ItemTemplate>
|
</ComboBox.ItemTemplate>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
|
<CheckBox Grid.Row="5" Grid.Column="1"
|
||||||
|
Height="32"
|
||||||
|
Content="{DynamicResource Text.Preferences.Git.SSLVerify}"
|
||||||
|
IsChecked="{Binding #ThisControl.EnableHTTPSSLVerify, Mode=TwoWay}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem>
|
<TabItem>
|
||||||
<TabItem.Header>
|
<TabItem.Header>
|
||||||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.GPG}"/>
|
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preferences.GPG}"/>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
|
|
||||||
<Grid Margin="8" RowDefinitions="32,Auto,32,32,32" ColumnDefinitions="Auto,*">
|
<Grid Margin="8" RowDefinitions="32,Auto,32,32,32" ColumnDefinitions="Auto,*">
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.GPG.Format}"
|
Text="{DynamicResource Text.Preferences.GPG.Format}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<ComboBox Grid.Row="0" Grid.Column="1"
|
<ComboBox Grid.Row="0" Grid.Column="1"
|
||||||
|
@ -356,7 +362,7 @@
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0"
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.GPG.Path}"
|
Text="{DynamicResource Text.Preferences.GPG.Path}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"
|
Margin="0,0,16,0"
|
||||||
IsVisible="{Binding #ThisControl.GPGFormat.NeedFindProgram}"/>
|
IsVisible="{Binding #ThisControl.GPGFormat.NeedFindProgram}"/>
|
||||||
|
@ -364,7 +370,7 @@
|
||||||
Height="28"
|
Height="28"
|
||||||
CornerRadius="3"
|
CornerRadius="3"
|
||||||
Text="{Binding #ThisControl.GPGExecutableFile, Mode=TwoWay}"
|
Text="{Binding #ThisControl.GPGExecutableFile, Mode=TwoWay}"
|
||||||
Watermark="{DynamicResource Text.Preference.GPG.Path.Placeholder}"
|
Watermark="{DynamicResource Text.Preferences.GPG.Path.Placeholder}"
|
||||||
IsVisible="{Binding #ThisControl.GPGFormat.NeedFindProgram}">
|
IsVisible="{Binding #ThisControl.GPGFormat.NeedFindProgram}">
|
||||||
<TextBox.InnerRightContent>
|
<TextBox.InnerRightContent>
|
||||||
<Button Classes="icon_button" Width="30" Height="30" Click="SelectGPGExecutable">
|
<Button Classes="icon_button" Width="30" Height="30" Click="SelectGPGExecutable">
|
||||||
|
@ -374,34 +380,34 @@
|
||||||
</TextBox>
|
</TextBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Grid.Column="0"
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.GPG.UserKey}"
|
Text="{DynamicResource Text.Preferences.GPG.UserKey}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<TextBox Grid.Row="2" Grid.Column="1"
|
<TextBox Grid.Row="2" Grid.Column="1"
|
||||||
Height="28"
|
Height="28"
|
||||||
CornerRadius="3"
|
CornerRadius="3"
|
||||||
Text="{Binding #ThisControl.GPGUserKey, Mode=TwoWay}"
|
Text="{Binding #ThisControl.GPGUserKey, Mode=TwoWay}"
|
||||||
Watermark="{DynamicResource Text.Preference.GPG.UserKey.Placeholder}"/>
|
Watermark="{DynamicResource Text.Preferences.GPG.UserKey.Placeholder}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="3" Grid.Column="1"
|
<CheckBox Grid.Row="3" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Preference.GPG.CommitEnabled}"
|
Content="{DynamicResource Text.Preferences.GPG.CommitEnabled}"
|
||||||
IsChecked="{Binding #ThisControl.EnableGPGCommitSigning, Mode=TwoWay}"/>
|
IsChecked="{Binding #ThisControl.EnableGPGCommitSigning, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="4" Grid.Column="1"
|
<CheckBox Grid.Row="4" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Preference.GPG.TagEnabled}"
|
Content="{DynamicResource Text.Preferences.GPG.TagEnabled}"
|
||||||
IsChecked="{Binding #ThisControl.EnableGPGTagSigning, Mode=TwoWay}"/>
|
IsChecked="{Binding #ThisControl.EnableGPGTagSigning, Mode=TwoWay}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem>
|
<TabItem>
|
||||||
<TabItem.Header>
|
<TabItem.Header>
|
||||||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.Integration}"/>
|
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preferences.Integration}"/>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
|
|
||||||
<StackPanel Margin="8" MaxWidth="580" Orientation="Vertical" Grid.IsSharedSizeScope="True">
|
<StackPanel Margin="8" MaxWidth="580" Orientation="Vertical" Grid.IsSharedSizeScope="True">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<Path Width="12" Height="12" Data="{StaticResource Icons.Terminal}"/>
|
<Path Width="12" Height="12" Data="{StaticResource Icons.Terminal}"/>
|
||||||
<TextBlock Classes="bold" Margin="4,0,0,0" Text="{DynamicResource Text.Preference.Shell}"/>
|
<TextBlock Classes="bold" Margin="4,0,0,0" Text="{DynamicResource Text.Preferences.Shell}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Rectangle Margin="0,8" Fill="{DynamicResource Brush.Border2}" Height=".6" HorizontalAlignment="Stretch"/>
|
<Rectangle Margin="0,8" Fill="{DynamicResource Brush.Border2}" Height=".6" HorizontalAlignment="Stretch"/>
|
||||||
<Grid Margin="8,0,0,0" RowDefinitions="32,Auto">
|
<Grid Margin="8,0,0,0" RowDefinitions="32,Auto">
|
||||||
|
@ -411,7 +417,7 @@
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Shell.Type}"
|
Text="{DynamicResource Text.Preferences.Shell.Type}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<ComboBox Grid.Row="0" Grid.Column="1"
|
<ComboBox Grid.Row="0" Grid.Column="1"
|
||||||
|
@ -431,7 +437,7 @@
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0"
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Shell.Path}"
|
Text="{DynamicResource Text.Preferences.Shell.Path}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"
|
Margin="0,0,16,0"
|
||||||
IsVisible="{OnPlatform True, macOS=False}"/>
|
IsVisible="{OnPlatform True, macOS=False}"/>
|
||||||
|
@ -450,7 +456,7 @@
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,24,0,0">
|
<StackPanel Orientation="Horizontal" Margin="0,24,0,0">
|
||||||
<Path Width="12" Height="12" Data="{StaticResource Icons.Diff}"/>
|
<Path Width="12" Height="12" Data="{StaticResource Icons.Diff}"/>
|
||||||
<TextBlock Classes="bold" Margin="4,0,0,0" Text="{DynamicResource Text.Preference.DiffMerge}"/>
|
<TextBlock Classes="bold" Margin="4,0,0,0" Text="{DynamicResource Text.Preferences.DiffMerge}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Rectangle Margin="0,8" Fill="{DynamicResource Brush.Border2}" Height=".6" HorizontalAlignment="Stretch"/>
|
<Rectangle Margin="0,8" Fill="{DynamicResource Brush.Border2}" Height=".6" HorizontalAlignment="Stretch"/>
|
||||||
<Grid Margin="8,0,0,8" RowDefinitions="32,Auto">
|
<Grid Margin="8,0,0,8" RowDefinitions="32,Auto">
|
||||||
|
@ -460,7 +466,7 @@
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.DiffMerge.Type}"
|
Text="{DynamicResource Text.Preferences.DiffMerge.Type}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"/>
|
Margin="0,0,16,0"/>
|
||||||
<ComboBox Grid.Row="0" Grid.Column="1"
|
<ComboBox Grid.Row="0" Grid.Column="1"
|
||||||
|
@ -483,7 +489,7 @@
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0"
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.DiffMerge.Path}"
|
Text="{DynamicResource Text.Preferences.DiffMerge.Path}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
Margin="0,0,16,0"
|
Margin="0,0,16,0"
|
||||||
IsVisible="{Binding ExternalMergeToolType, Converter={x:Static c:IntConverters.IsGreaterThanZero}}"/>
|
IsVisible="{Binding ExternalMergeToolType, Converter={x:Static c:IntConverters.IsGreaterThanZero}}"/>
|
||||||
|
@ -491,7 +497,7 @@
|
||||||
Height="28"
|
Height="28"
|
||||||
CornerRadius="3"
|
CornerRadius="3"
|
||||||
Text="{Binding ExternalMergeToolPath, Mode=TwoWay}"
|
Text="{Binding ExternalMergeToolPath, Mode=TwoWay}"
|
||||||
Watermark="{DynamicResource Text.Preference.DiffMerge.Path.Placeholder}"
|
Watermark="{DynamicResource Text.Preferences.DiffMerge.Path.Placeholder}"
|
||||||
IsVisible="{Binding ExternalMergeToolType, Converter={x:Static c:IntConverters.IsGreaterThanZero}}">
|
IsVisible="{Binding ExternalMergeToolType, Converter={x:Static c:IntConverters.IsGreaterThanZero}}">
|
||||||
<TextBox.InnerRightContent>
|
<TextBox.InnerRightContent>
|
||||||
<Button Classes="icon_button" Width="30" Height="30" Click="SelectExternalMergeTool">
|
<Button Classes="icon_button" Width="30" Height="30" Click="SelectExternalMergeTool">
|
||||||
|
@ -505,7 +511,7 @@
|
||||||
|
|
||||||
<TabItem>
|
<TabItem>
|
||||||
<TabItem.Header>
|
<TabItem.Header>
|
||||||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.AI}"/>
|
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preferences.AI}"/>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
|
|
||||||
<Grid ColumnDefinitions="200,*" Margin="0,8,0,16" MinHeight="400">
|
<Grid ColumnDefinitions="200,*" Margin="0,8,0,16" MinHeight="400">
|
||||||
|
@ -576,19 +582,19 @@
|
||||||
<ContentControl.DataTemplates>
|
<ContentControl.DataTemplates>
|
||||||
<DataTemplate DataType="m:OpenAIService">
|
<DataTemplate DataType="m:OpenAIService">
|
||||||
<StackPanel Orientation="Vertical" MaxWidth="680">
|
<StackPanel Orientation="Vertical" MaxWidth="680">
|
||||||
<TextBlock Text="{DynamicResource Text.Preference.AI.Name}"/>
|
<TextBlock Text="{DynamicResource Text.Preferences.AI.Name}"/>
|
||||||
<TextBox Margin="0,4,0,0" CornerRadius="3" Height="28" Text="{Binding Name, Mode=TwoWay}"/>
|
<TextBox Margin="0,4,0,0" CornerRadius="3" Height="28" Text="{Binding Name, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preference.AI.Server}"/>
|
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preferences.AI.Server}"/>
|
||||||
<TextBox Margin="0,4,0,0" CornerRadius="3" Height="28" Text="{Binding Server, Mode=TwoWay}"/>
|
<TextBox Margin="0,4,0,0" CornerRadius="3" Height="28" Text="{Binding Server, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preference.AI.Model}"/>
|
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preferences.AI.Model}"/>
|
||||||
<TextBox Margin="0,4,0,0" CornerRadius="3" Height="28" Text="{Binding Model, Mode=TwoWay}"/>
|
<TextBox Margin="0,4,0,0" CornerRadius="3" Height="28" Text="{Binding Model, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preference.AI.ApiKey}"/>
|
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preferences.AI.ApiKey}"/>
|
||||||
<TextBox Margin="0,4,0,0" CornerRadius="3" Height="28" Text="{Binding ApiKey, Mode=TwoWay}" PasswordChar="*"/>
|
<TextBox Margin="0,4,0,0" CornerRadius="3" Height="28" Text="{Binding ApiKey, Mode=TwoWay}" PasswordChar="*"/>
|
||||||
|
|
||||||
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preference.AI.AnalyzeDiffPrompt}"/>
|
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preferences.AI.AnalyzeDiffPrompt}"/>
|
||||||
<TextBox Height="120"
|
<TextBox Height="120"
|
||||||
Margin="0,4,0,0"
|
Margin="0,4,0,0"
|
||||||
CornerRadius="3"
|
CornerRadius="3"
|
||||||
|
@ -597,7 +603,7 @@
|
||||||
AcceptsReturn="true"
|
AcceptsReturn="true"
|
||||||
TextWrapping="Wrap"/>
|
TextWrapping="Wrap"/>
|
||||||
|
|
||||||
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preference.AI.GenerateSubjectPrompt}"/>
|
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preferences.AI.GenerateSubjectPrompt}"/>
|
||||||
<TextBox Height="120"
|
<TextBox Height="120"
|
||||||
Margin="0,4,0,0"
|
Margin="0,4,0,0"
|
||||||
CornerRadius="3"
|
CornerRadius="3"
|
|
@ -8,7 +8,7 @@ using Avalonia.Platform.Storage;
|
||||||
|
|
||||||
namespace SourceGit.Views
|
namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
public partial class Preference : ChromelessWindow
|
public partial class Preferences : ChromelessWindow
|
||||||
{
|
{
|
||||||
public string DefaultUser
|
public string DefaultUser
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,7 @@ namespace SourceGit.Views
|
||||||
} = null;
|
} = null;
|
||||||
|
|
||||||
public static readonly StyledProperty<string> GitVersionProperty =
|
public static readonly StyledProperty<string> GitVersionProperty =
|
||||||
AvaloniaProperty.Register<Preference, string>(nameof(GitVersion));
|
AvaloniaProperty.Register<Preferences, string>(nameof(GitVersion));
|
||||||
|
|
||||||
public string GitVersion
|
public string GitVersion
|
||||||
{
|
{
|
||||||
|
@ -37,6 +37,15 @@ namespace SourceGit.Views
|
||||||
set => SetValue(GitVersionProperty, value);
|
set => SetValue(GitVersionProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly StyledProperty<bool> ShowGitVersionWarningProperty =
|
||||||
|
AvaloniaProperty.Register<Preferences, bool>(nameof(ShowGitVersionWarning));
|
||||||
|
|
||||||
|
public bool ShowGitVersionWarning
|
||||||
|
{
|
||||||
|
get => GetValue(ShowGitVersionWarningProperty);
|
||||||
|
set => SetValue(ShowGitVersionWarningProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
public bool EnableGPGCommitSigning
|
public bool EnableGPGCommitSigning
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
|
@ -50,7 +59,7 @@ namespace SourceGit.Views
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly StyledProperty<Models.GPGFormat> GPGFormatProperty =
|
public static readonly StyledProperty<Models.GPGFormat> GPGFormatProperty =
|
||||||
AvaloniaProperty.Register<Preference, Models.GPGFormat>(nameof(GPGFormat), Models.GPGFormat.Supported[0]);
|
AvaloniaProperty.Register<Preferences, Models.GPGFormat>(nameof(GPGFormat), Models.GPGFormat.Supported[0]);
|
||||||
|
|
||||||
public Models.GPGFormat GPGFormat
|
public Models.GPGFormat GPGFormat
|
||||||
{
|
{
|
||||||
|
@ -59,7 +68,7 @@ namespace SourceGit.Views
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly StyledProperty<string> GPGExecutableFileProperty =
|
public static readonly StyledProperty<string> GPGExecutableFileProperty =
|
||||||
AvaloniaProperty.Register<Preference, string>(nameof(GPGExecutableFile));
|
AvaloniaProperty.Register<Preferences, string>(nameof(GPGExecutableFile));
|
||||||
|
|
||||||
public string GPGExecutableFile
|
public string GPGExecutableFile
|
||||||
{
|
{
|
||||||
|
@ -73,8 +82,14 @@ namespace SourceGit.Views
|
||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool EnableHTTPSSLVerify
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
public static readonly StyledProperty<Models.OpenAIService> SelectedOpenAIServiceProperty =
|
public static readonly StyledProperty<Models.OpenAIService> SelectedOpenAIServiceProperty =
|
||||||
AvaloniaProperty.Register<Preference, Models.OpenAIService>(nameof(SelectedOpenAIService));
|
AvaloniaProperty.Register<Preferences, Models.OpenAIService>(nameof(SelectedOpenAIService));
|
||||||
|
|
||||||
public Models.OpenAIService SelectedOpenAIService
|
public Models.OpenAIService SelectedOpenAIService
|
||||||
{
|
{
|
||||||
|
@ -82,12 +97,11 @@ namespace SourceGit.Views
|
||||||
set => SetValue(SelectedOpenAIServiceProperty, value);
|
set => SetValue(SelectedOpenAIServiceProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Preference()
|
public Preferences()
|
||||||
{
|
{
|
||||||
var pref = ViewModels.Preference.Instance;
|
var pref = ViewModels.Preferences.Instance;
|
||||||
DataContext = pref;
|
DataContext = pref;
|
||||||
|
|
||||||
var ver = string.Empty;
|
|
||||||
if (pref.IsGitConfigured())
|
if (pref.IsGitConfigured())
|
||||||
{
|
{
|
||||||
var config = new Commands.Config(null).ListAll();
|
var config = new Commands.Config(null).ListAll();
|
||||||
|
@ -112,11 +126,14 @@ namespace SourceGit.Views
|
||||||
else if (config.TryGetValue($"gpg.{GPGFormat.Value}.program", out var gpgProgram))
|
else if (config.TryGetValue($"gpg.{GPGFormat.Value}.program", out var gpgProgram))
|
||||||
GPGExecutableFile = gpgProgram;
|
GPGExecutableFile = gpgProgram;
|
||||||
|
|
||||||
ver = new Commands.Version().Query();
|
if (config.TryGetValue("http.sslverify", out var sslVerify))
|
||||||
|
EnableHTTPSSLVerify = sslVerify == "true";
|
||||||
|
else
|
||||||
|
EnableHTTPSSLVerify = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateGitVersion();
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
GitVersion = ver;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
|
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
|
||||||
|
@ -142,6 +159,7 @@ namespace SourceGit.Views
|
||||||
SetIfChanged(config, "core.autocrlf", CRLFMode != null ? CRLFMode.Value : null, null);
|
SetIfChanged(config, "core.autocrlf", CRLFMode != null ? CRLFMode.Value : null, null);
|
||||||
SetIfChanged(config, "commit.gpgsign", EnableGPGCommitSigning ? "true" : "false", "false");
|
SetIfChanged(config, "commit.gpgsign", EnableGPGCommitSigning ? "true" : "false", "false");
|
||||||
SetIfChanged(config, "tag.gpgsign", EnableGPGTagSigning ? "true" : "false", "false");
|
SetIfChanged(config, "tag.gpgsign", EnableGPGTagSigning ? "true" : "false", "false");
|
||||||
|
SetIfChanged(config, "http.sslverify", EnableHTTPSSLVerify ? "" : "false", "");
|
||||||
SetIfChanged(config, "gpg.format", GPGFormat.Value, "openpgp");
|
SetIfChanged(config, "gpg.format", GPGFormat.Value, "openpgp");
|
||||||
|
|
||||||
if (!GPGFormat.Value.Equals("ssh", StringComparison.Ordinal))
|
if (!GPGFormat.Value.Equals("ssh", StringComparison.Ordinal))
|
||||||
|
@ -176,7 +194,7 @@ namespace SourceGit.Views
|
||||||
var selected = await StorageProvider.OpenFilePickerAsync(options);
|
var selected = await StorageProvider.OpenFilePickerAsync(options);
|
||||||
if (selected.Count == 1)
|
if (selected.Count == 1)
|
||||||
{
|
{
|
||||||
ViewModels.Preference.Instance.ThemeOverrides = selected[0].Path.LocalPath;
|
ViewModels.Preferences.Instance.ThemeOverrides = selected[0].Path.LocalPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -194,8 +212,8 @@ namespace SourceGit.Views
|
||||||
var selected = await StorageProvider.OpenFilePickerAsync(options);
|
var selected = await StorageProvider.OpenFilePickerAsync(options);
|
||||||
if (selected.Count == 1)
|
if (selected.Count == 1)
|
||||||
{
|
{
|
||||||
ViewModels.Preference.Instance.GitInstallPath = selected[0].Path.LocalPath;
|
ViewModels.Preferences.Instance.GitInstallPath = selected[0].Path.LocalPath;
|
||||||
GitVersion = new Commands.Version().Query();
|
UpdateGitVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -209,7 +227,7 @@ namespace SourceGit.Views
|
||||||
var selected = await StorageProvider.OpenFolderPickerAsync(options);
|
var selected = await StorageProvider.OpenFolderPickerAsync(options);
|
||||||
if (selected.Count == 1)
|
if (selected.Count == 1)
|
||||||
{
|
{
|
||||||
ViewModels.Preference.Instance.GitDefaultCloneDir = selected[0].Path.LocalPath;
|
ViewModels.Preferences.Instance.GitDefaultCloneDir = selected[0].Path.LocalPath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -245,7 +263,7 @@ namespace SourceGit.Views
|
||||||
|
|
||||||
private async void SelectShellOrTerminal(object _, RoutedEventArgs e)
|
private async void SelectShellOrTerminal(object _, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
var type = ViewModels.Preference.Instance.ShellOrTerminal;
|
var type = ViewModels.Preferences.Instance.ShellOrTerminal;
|
||||||
if (type == -1)
|
if (type == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -259,7 +277,7 @@ namespace SourceGit.Views
|
||||||
var selected = await StorageProvider.OpenFilePickerAsync(options);
|
var selected = await StorageProvider.OpenFilePickerAsync(options);
|
||||||
if (selected.Count == 1)
|
if (selected.Count == 1)
|
||||||
{
|
{
|
||||||
ViewModels.Preference.Instance.ShellOrTerminalPath = selected[0].Path.LocalPath;
|
ViewModels.Preferences.Instance.ShellOrTerminalPath = selected[0].Path.LocalPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -267,10 +285,10 @@ namespace SourceGit.Views
|
||||||
|
|
||||||
private async void SelectExternalMergeTool(object _, RoutedEventArgs e)
|
private async void SelectExternalMergeTool(object _, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
var type = ViewModels.Preference.Instance.ExternalMergeToolType;
|
var type = ViewModels.Preferences.Instance.ExternalMergeToolType;
|
||||||
if (type < 0 || type >= Models.ExternalMerger.Supported.Count)
|
if (type < 0 || type >= Models.ExternalMerger.Supported.Count)
|
||||||
{
|
{
|
||||||
ViewModels.Preference.Instance.ExternalMergeToolType = 0;
|
ViewModels.Preferences.Instance.ExternalMergeToolType = 0;
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -285,7 +303,7 @@ namespace SourceGit.Views
|
||||||
var selected = await StorageProvider.OpenFilePickerAsync(options);
|
var selected = await StorageProvider.OpenFilePickerAsync(options);
|
||||||
if (selected.Count == 1)
|
if (selected.Count == 1)
|
||||||
{
|
{
|
||||||
ViewModels.Preference.Instance.ExternalMergeToolPath = selected[0].Path.LocalPath;
|
ViewModels.Preferences.Instance.ExternalMergeToolPath = selected[0].Path.LocalPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -307,7 +325,7 @@ namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
if (sender is CheckBox box)
|
if (sender is CheckBox box)
|
||||||
{
|
{
|
||||||
ViewModels.Preference.Instance.UseSystemWindowFrame = box.IsChecked == true;
|
ViewModels.Preferences.Instance.UseSystemWindowFrame = box.IsChecked == true;
|
||||||
|
|
||||||
var dialog = new ConfirmRestart();
|
var dialog = new ConfirmRestart();
|
||||||
App.OpenDialog(dialog);
|
App.OpenDialog(dialog);
|
||||||
|
@ -316,10 +334,15 @@ namespace SourceGit.Views
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnGitInstallPathChanged(object sender, TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
UpdateGitVersion();
|
||||||
|
}
|
||||||
|
|
||||||
private void OnAddOpenAIService(object sender, RoutedEventArgs e)
|
private void OnAddOpenAIService(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
var service = new Models.OpenAIService() { Name = "Unnamed Service" };
|
var service = new Models.OpenAIService() { Name = "Unnamed Service" };
|
||||||
ViewModels.Preference.Instance.OpenAIServices.Add(service);
|
ViewModels.Preferences.Instance.OpenAIServices.Add(service);
|
||||||
SelectedOpenAIService = service;
|
SelectedOpenAIService = service;
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -330,9 +353,15 @@ namespace SourceGit.Views
|
||||||
if (SelectedOpenAIService == null)
|
if (SelectedOpenAIService == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ViewModels.Preference.Instance.OpenAIServices.Remove(SelectedOpenAIService);
|
ViewModels.Preferences.Instance.OpenAIServices.Remove(SelectedOpenAIService);
|
||||||
SelectedOpenAIService = null;
|
SelectedOpenAIService = null;
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateGitVersion()
|
||||||
|
{
|
||||||
|
GitVersion = Native.OS.GitVersionString;
|
||||||
|
ShowGitVersionWarning = !string.IsNullOrEmpty(GitVersion) && Native.OS.GitVersion < Models.GitVersions.MINIMAL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -52,15 +52,22 @@
|
||||||
VerticalAlignment="Center" HorizontalAlignment="Stretch"
|
VerticalAlignment="Center" HorizontalAlignment="Stretch"
|
||||||
ItemsSource="{Binding RemoteBranches}"
|
ItemsSource="{Binding RemoteBranches}"
|
||||||
SelectedItem="{Binding SelectedBranch, Mode=TwoWay}"
|
SelectedItem="{Binding SelectedBranch, Mode=TwoWay}"
|
||||||
|
IsTextSearchEnabled="True"
|
||||||
IsEnabled="{Binding !HasSpecifiedRemoteBranch}">
|
IsEnabled="{Binding !HasSpecifiedRemoteBranch}">
|
||||||
<ComboBox.ItemTemplate>
|
<ComboBox.ItemTemplate>
|
||||||
<DataTemplate x:DataType="{x:Type m:Branch}">
|
<DataTemplate x:DataType="{x:Type m:Branch}">
|
||||||
<StackPanel Orientation="Horizontal" Height="20" VerticalAlignment="Center">
|
<StackPanel Orientation="Horizontal" Height="20" VerticalAlignment="Center">
|
||||||
<Path Margin="0,0,8,0" Width="14" Height="14" Fill="{DynamicResource Brush.FG1}" Data="{StaticResource Icons.Branch}"/>
|
<Path Margin="0,0,8,0" Width="14" Height="14" Fill="{DynamicResource Brush.FG1}" Data="{StaticResource Icons.Branch}"/>
|
||||||
<TextBlock Text="{Binding FriendlyName}"/>
|
<TextBlock Text="{Binding Name}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ComboBox.ItemTemplate>
|
</ComboBox.ItemTemplate>
|
||||||
|
|
||||||
|
<ComboBox.ItemContainerTheme>
|
||||||
|
<ControlTheme TargetType="ComboBoxItem" x:DataType="m:Branch" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
|
||||||
|
<Setter Property="TextSearch.Text" Value="{Binding Name}"/>
|
||||||
|
</ControlTheme>
|
||||||
|
</ComboBox.ItemContainerTheme>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Grid.Column="0"
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
VerticalAlignment="Center" HorizontalAlignment="Stretch"
|
VerticalAlignment="Center" HorizontalAlignment="Stretch"
|
||||||
ItemsSource="{Binding LocalBranches}"
|
ItemsSource="{Binding LocalBranches}"
|
||||||
SelectedItem="{Binding SelectedLocalBranch, Mode=TwoWay}"
|
SelectedItem="{Binding SelectedLocalBranch, Mode=TwoWay}"
|
||||||
|
IsTextSearchEnabled="True"
|
||||||
IsEnabled="{Binding !HasSpecifiedLocalBranch}">
|
IsEnabled="{Binding !HasSpecifiedLocalBranch}">
|
||||||
<ComboBox.ItemTemplate>
|
<ComboBox.ItemTemplate>
|
||||||
<DataTemplate x:DataType="{x:Type m:Branch}">
|
<DataTemplate x:DataType="{x:Type m:Branch}">
|
||||||
|
@ -31,6 +32,12 @@
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ComboBox.ItemTemplate>
|
</ComboBox.ItemTemplate>
|
||||||
|
|
||||||
|
<ComboBox.ItemContainerTheme>
|
||||||
|
<ControlTheme TargetType="ComboBoxItem" x:DataType="m:Branch" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
|
||||||
|
<Setter Property="TextSearch.Text" Value="{Binding Name}"/>
|
||||||
|
</ControlTheme>
|
||||||
|
</ComboBox.ItemContainerTheme>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0"
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
|
@ -60,6 +67,7 @@
|
||||||
Height="28" Padding="8,0"
|
Height="28" Padding="8,0"
|
||||||
VerticalAlignment="Center" HorizontalAlignment="Stretch"
|
VerticalAlignment="Center" HorizontalAlignment="Stretch"
|
||||||
ItemsSource="{Binding RemoteBranches}"
|
ItemsSource="{Binding RemoteBranches}"
|
||||||
|
IsTextSearchEnabled="True"
|
||||||
SelectedItem="{Binding SelectedRemoteBranch, Mode=TwoWay}">
|
SelectedItem="{Binding SelectedRemoteBranch, Mode=TwoWay}">
|
||||||
<ComboBox.ItemTemplate>
|
<ComboBox.ItemTemplate>
|
||||||
<DataTemplate x:DataType="{x:Type m:Branch}">
|
<DataTemplate x:DataType="{x:Type m:Branch}">
|
||||||
|
@ -77,6 +85,12 @@
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ComboBox.ItemTemplate>
|
</ComboBox.ItemTemplate>
|
||||||
|
|
||||||
|
<ComboBox.ItemContainerTheme>
|
||||||
|
<ControlTheme TargetType="ComboBoxItem" x:DataType="m:Branch" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
|
||||||
|
<Setter Property="TextSearch.Text" Value="{Binding Name}"/>
|
||||||
|
</ControlTheme>
|
||||||
|
</ComboBox.ItemContainerTheme>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<CheckBox Grid.Row="3" Grid.Column="1"
|
<CheckBox Grid.Row="3" Grid.Column="1"
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
x:DataType="vm:Repository">
|
x:DataType="vm:Repository">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="{Binding Source={x:Static vm:Preference.Instance}, Path=Layout.RepositorySidebarWidth, Mode=TwoWay}" MinWidth="200" MaxWidth="500"/>
|
<ColumnDefinition Width="{Binding Source={x:Static vm:Preferences.Instance}, Path=Layout.RepositorySidebarWidth, Mode=TwoWay}" MinWidth="200" MaxWidth="500"/>
|
||||||
<ColumnDefinition Width="3"/>
|
<ColumnDefinition Width="3"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
@ -83,36 +83,47 @@
|
||||||
</ListBox.ItemsPanel>
|
</ListBox.ItemsPanel>
|
||||||
|
|
||||||
<ListBoxItem>
|
<ListBoxItem>
|
||||||
<Grid Classes="view_mode" ColumnDefinitions="Auto,*,Auto,Auto,Auto,Auto">
|
<Grid Classes="view_mode" ColumnDefinitions="Auto,*,Auto,Auto,Auto,Auto,Auto">
|
||||||
<Path Grid.Column="0" Classes="icon" Data="{StaticResource Icons.Histories}"/>
|
<Path Grid.Column="0" Classes="icon" Data="{StaticResource Icons.Histories}"/>
|
||||||
<TextBlock Grid.Column="1" Classes="header" Text="{DynamicResource Text.Histories}"/>
|
<TextBlock Grid.Column="1" Classes="header" Text="{DynamicResource Text.Histories}"/>
|
||||||
|
|
||||||
<ToggleButton Grid.Column="2"
|
<ToggleButton Grid.Column="2"
|
||||||
Classes="layout_direction"
|
|
||||||
Width="28" Height="26"
|
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseTwoColumnsLayoutInHistories, Mode=TwoWay}"
|
|
||||||
ToolTip.Tip="{DynamicResource Text.Histories.DisplayMode}"/>
|
|
||||||
<ToggleButton Grid.Column="3"
|
|
||||||
Classes="line_path"
|
Classes="line_path"
|
||||||
Width="28" Height="26"
|
Width="26" Height="26"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
IsChecked="{Binding EnableReflog, Mode=TwoWay}"
|
IsChecked="{Binding EnableReflog, Mode=TwoWay}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Repository.EnableReflog}">
|
ToolTip.Tip="{DynamicResource Text.Repository.EnableReflog}">
|
||||||
<Path Width="12" Height="12" Data="{StaticResource Icons.Reference}"/>
|
<Path Width="12" Height="12" Data="{StaticResource Icons.Reference}"/>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<ToggleButton Grid.Column="4"
|
<ToggleButton Grid.Column="3"
|
||||||
Classes="line_path"
|
Classes="line_path"
|
||||||
Width="28" Height="26"
|
Width="26" Height="26"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
IsChecked="{Binding EnableFirstParentInHistories, Mode=TwoWay}"
|
IsChecked="{Binding EnableFirstParentInHistories, Mode=TwoWay}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Repository.FirstParentFilterToggle}">
|
ToolTip.Tip="{DynamicResource Text.Repository.FirstParentFilterToggle}">
|
||||||
<Path Width="12" Height="12" Data="{StaticResource Icons.FirstParentFilter}"/>
|
<Path Width="12" Height="12" Data="{StaticResource Icons.FirstParentFilter}"/>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<Button Grid.Column="5"
|
<ToggleButton Grid.Column="4"
|
||||||
|
Classes="line_path"
|
||||||
|
Width="26" Height="26"
|
||||||
|
Background="Transparent"
|
||||||
|
IsChecked="{Binding OnlyHighlightCurrentBranchInHistories, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="{DynamicResource Text.Repository.OnlyHighlightCurrentBranchInHistories}">
|
||||||
|
<Path Width="12" Height="12" Data="{StaticResource Icons.LightOn}"/>
|
||||||
|
</ToggleButton>
|
||||||
|
<ToggleButton Grid.Column="5"
|
||||||
|
Classes="line_path"
|
||||||
|
Width="26" Height="26"
|
||||||
|
Background="Transparent"
|
||||||
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=DisplayTimeAsPeriodInHistories, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="{DynamicResource Text.Repository.UseRelativeTimeInHistories}">
|
||||||
|
<Path Width="12" Height="12" Data="{StaticResource Icons.Stopwatch}"/>
|
||||||
|
</ToggleButton>
|
||||||
|
<Button Grid.Column="6"
|
||||||
Classes="icon_button"
|
Classes="icon_button"
|
||||||
Width="28" Height="26"
|
Width="26" Height="26"
|
||||||
Click="OnSwitchHistoriesOrderClicked"
|
Click="OnOpenAdvancedHistoriesOption">
|
||||||
ToolTip.Tip="{DynamicResource Text.Repository.HistoriesOrder}">
|
<Path Width="12" Height="12" Data="{StaticResource Icons.More}"/>
|
||||||
<Path Width="12" Height="12" Margin="0,2,0,0" Data="{StaticResource Icons.Order}"/>
|
|
||||||
</Button>
|
</Button>
|
||||||
</Grid>
|
</Grid>
|
||||||
</ListBoxItem>
|
</ListBoxItem>
|
||||||
|
@ -220,17 +231,25 @@
|
||||||
|
|
||||||
<!-- Tags -->
|
<!-- Tags -->
|
||||||
<ToggleButton Grid.Row="4" Classes="group_expander" IsChecked="{Binding IsTagGroupExpanded, Mode=TwoWay}">
|
<ToggleButton Grid.Row="4" Classes="group_expander" IsChecked="{Binding IsTagGroupExpanded, Mode=TwoWay}">
|
||||||
<Grid ColumnDefinitions="16,Auto,*,Auto,Auto">
|
<Grid ColumnDefinitions="16,Auto,*,Auto,Auto,Auto">
|
||||||
<Path Grid.Column="0" Width="11" Height="11" Margin="2,1,0,0" HorizontalAlignment="Left" Data="{StaticResource Icons.Tags}" Fill="{DynamicResource Brush.FG2}"/>
|
<Path Grid.Column="0" Width="11" Height="11" Margin="2,1,0,0" HorizontalAlignment="Left" Data="{StaticResource Icons.Tags}" Fill="{DynamicResource Brush.FG2}"/>
|
||||||
<TextBlock Grid.Column="1" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Tags}"/>
|
<TextBlock Grid.Column="1" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Tags}"/>
|
||||||
<TextBlock Grid.Column="2" Text="{Binding Tags, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/>
|
<TextBlock Grid.Column="2" Text="{Binding Tags, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/>
|
||||||
<ToggleButton Grid.Column="3"
|
<ToggleButton Grid.Column="3"
|
||||||
Classes="tag_display_mode"
|
Classes="tag_display_mode"
|
||||||
Width="14"
|
Width="14"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowTagsAsTree, Mode=TwoWay}"
|
IsChecked="{Binding Source={x:Static vm:Preferences.Instance}, Path=ShowTagsAsTree, Mode=TwoWay}"
|
||||||
ToolTip.Tip="{DynamicResource Text.Repository.ShowTagsAsTree}"/>
|
ToolTip.Tip="{DynamicResource Text.Repository.ShowTagsAsTree}"/>
|
||||||
<Button Grid.Column="4"
|
<Button Grid.Column="4"
|
||||||
Classes="icon_button"
|
Classes="icon_button"
|
||||||
|
Width="14"
|
||||||
|
Margin="8,0,0,0"
|
||||||
|
Click="OnOpenSortTagMenu"
|
||||||
|
ToolTip.Tip="{DynamicResource Text.Repository.Tags.Sort}">
|
||||||
|
<Path Width="12" Height="12" Margin="0,2,0,0" Data="{StaticResource Icons.Order}"/>
|
||||||
|
</Button>
|
||||||
|
<Button Grid.Column="5"
|
||||||
|
Classes="icon_button"
|
||||||
Width="14"
|
Width="14"
|
||||||
Margin="8,0"
|
Margin="8,0"
|
||||||
Command="{Binding CreateNewTag}"
|
Command="{Binding CreateNewTag}"
|
||||||
|
@ -244,7 +263,7 @@
|
||||||
Height="0"
|
Height="0"
|
||||||
Margin="8,0,4,0"
|
Margin="8,0,4,0"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
ShowTagsAsTree="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowTagsAsTree, Mode=OneWay}"
|
ShowTagsAsTree="{Binding Source={x:Static vm:Preferences.Instance}, Path=ShowTagsAsTree, Mode=OneWay}"
|
||||||
Tags="{Binding VisibleTags}"
|
Tags="{Binding VisibleTags}"
|
||||||
Focusable="False"
|
Focusable="False"
|
||||||
IsVisible="{Binding IsTagGroupExpanded, Mode=OneWay}"
|
IsVisible="{Binding IsTagGroupExpanded, Mode=OneWay}"
|
||||||
|
@ -675,8 +694,9 @@
|
||||||
<ContentControl.DataTemplates>
|
<ContentControl.DataTemplates>
|
||||||
<DataTemplate DataType="vm:Histories">
|
<DataTemplate DataType="vm:Histories">
|
||||||
<v:Histories CurrentBranch="{Binding Repo.CurrentBranch}"
|
<v:Histories CurrentBranch="{Binding Repo.CurrentBranch}"
|
||||||
AuthorNameColumnWidth="{Binding Source={x:Static vm:Preference.Instance}, Path=Layout.HistoriesAuthorColumnWidth, Mode=TwoWay}"
|
AuthorNameColumnWidth="{Binding Source={x:Static vm:Preferences.Instance}, Path=Layout.HistoriesAuthorColumnWidth, Mode=TwoWay}"
|
||||||
IssueTrackerRules="{Binding Repo.Settings.IssueTrackerRules}"
|
IssueTrackerRules="{Binding Repo.Settings.IssueTrackerRules}"
|
||||||
|
OnlyHighlightCurrentBranch="{Binding Repo.OnlyHighlightCurrentBranchInHistories}"
|
||||||
NavigationId="{Binding NavigationId}"/>
|
NavigationId="{Binding NavigationId}"/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
|
|
|
@ -248,6 +248,9 @@ namespace SourceGit.Views
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var leftHeight = LeftSidebarGroups.Bounds.Height - 28.0 * 5 - 4;
|
var leftHeight = LeftSidebarGroups.Bounds.Height - 28.0 * 5 - 4;
|
||||||
|
if (leftHeight <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
var localBranchRows = vm.IsLocalBranchGroupExpanded ? LocalBranchTree.Rows.Count : 0;
|
var localBranchRows = vm.IsLocalBranchGroupExpanded ? LocalBranchTree.Rows.Count : 0;
|
||||||
var remoteBranchRows = vm.IsRemoteGroupExpanded ? RemoteBranchTree.Rows.Count : 0;
|
var remoteBranchRows = vm.IsRemoteGroupExpanded ? RemoteBranchTree.Rows.Count : 0;
|
||||||
var desiredBranches = (localBranchRows + remoteBranchRows) * 24.0;
|
var desiredBranches = (localBranchRows + remoteBranchRows) * 24.0;
|
||||||
|
@ -307,7 +310,7 @@ namespace SourceGit.Views
|
||||||
WorktreeList.Height = height;
|
WorktreeList.Height = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (desiredBranches > leftHeight)
|
if (leftHeight > 0 && desiredBranches > leftHeight)
|
||||||
{
|
{
|
||||||
var local = localBranchRows * 24.0;
|
var local = localBranchRows * 24.0;
|
||||||
var remote = remoteBranchRows * 24.0;
|
var remote = remoteBranchRows * 24.0;
|
||||||
|
@ -396,15 +399,43 @@ namespace SourceGit.Views
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnSwitchHistoriesOrderClicked(object sender, RoutedEventArgs e)
|
private void OnOpenAdvancedHistoriesOption(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is Button button && DataContext is ViewModels.Repository repo)
|
if (sender is Button button && DataContext is ViewModels.Repository repo)
|
||||||
{
|
{
|
||||||
var checkIcon = App.CreateMenuIcon("Icons.Check");
|
var layout = new MenuItem();
|
||||||
|
layout.Header = App.Text("Repository.HistoriesLayout");
|
||||||
|
layout.IsEnabled = false;
|
||||||
|
|
||||||
|
var isHorizontal = ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories;
|
||||||
|
var horizontal = new MenuItem();
|
||||||
|
horizontal.Header = App.Text("Repository.HistoriesLayout.Horizontal");
|
||||||
|
if (isHorizontal)
|
||||||
|
horizontal.Icon = App.CreateMenuIcon("Icons.Check");
|
||||||
|
horizontal.Click += (_, ev) =>
|
||||||
|
{
|
||||||
|
ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories = true;
|
||||||
|
ev.Handled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
var vertical = new MenuItem();
|
||||||
|
vertical.Header = App.Text("Repository.HistoriesLayout.Vertical");
|
||||||
|
if (!isHorizontal)
|
||||||
|
vertical.Icon = App.CreateMenuIcon("Icons.Check");
|
||||||
|
vertical.Click += (_, ev) =>
|
||||||
|
{
|
||||||
|
ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories = false;
|
||||||
|
ev.Handled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
var order = new MenuItem();
|
||||||
|
order.Header = App.Text("Repository.HistoriesOrder");
|
||||||
|
order.IsEnabled = false;
|
||||||
|
|
||||||
var dateOrder = new MenuItem();
|
var dateOrder = new MenuItem();
|
||||||
dateOrder.Header = App.Text("Repository.HistoriesOrder.ByDate");
|
dateOrder.Header = App.Text("Repository.HistoriesOrder.ByDate");
|
||||||
dateOrder.Icon = repo.EnableTopoOrderInHistories ? null : checkIcon;
|
if (!repo.EnableTopoOrderInHistories)
|
||||||
|
dateOrder.Icon = App.CreateMenuIcon("Icons.Check");
|
||||||
dateOrder.Click += (_, ev) =>
|
dateOrder.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
repo.EnableTopoOrderInHistories = false;
|
repo.EnableTopoOrderInHistories = false;
|
||||||
|
@ -413,7 +444,8 @@ namespace SourceGit.Views
|
||||||
|
|
||||||
var topoOrder = new MenuItem();
|
var topoOrder = new MenuItem();
|
||||||
topoOrder.Header = App.Text("Repository.HistoriesOrder.Topo");
|
topoOrder.Header = App.Text("Repository.HistoriesOrder.Topo");
|
||||||
topoOrder.Icon = repo.EnableTopoOrderInHistories ? checkIcon : null;
|
if (repo.EnableTopoOrderInHistories)
|
||||||
|
topoOrder.Icon = App.CreateMenuIcon("Icons.Check");
|
||||||
topoOrder.Click += (_, ev) =>
|
topoOrder.Click += (_, ev) =>
|
||||||
{
|
{
|
||||||
repo.EnableTopoOrderInHistories = true;
|
repo.EnableTopoOrderInHistories = true;
|
||||||
|
@ -421,6 +453,11 @@ namespace SourceGit.Views
|
||||||
};
|
};
|
||||||
|
|
||||||
var menu = new ContextMenu();
|
var menu = new ContextMenu();
|
||||||
|
menu.Items.Add(layout);
|
||||||
|
menu.Items.Add(horizontal);
|
||||||
|
menu.Items.Add(vertical);
|
||||||
|
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||||
|
menu.Items.Add(order);
|
||||||
menu.Items.Add(dateOrder);
|
menu.Items.Add(dateOrder);
|
||||||
menu.Items.Add(topoOrder);
|
menu.Items.Add(topoOrder);
|
||||||
menu.Open(button);
|
menu.Open(button);
|
||||||
|
@ -429,6 +466,50 @@ namespace SourceGit.Views
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnOpenSortTagMenu(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (sender is Button button && DataContext is ViewModels.Repository repo)
|
||||||
|
{
|
||||||
|
var byCreatorDate = new MenuItem();
|
||||||
|
byCreatorDate.Header = App.Text("Repository.Tags.OrderByCreatorDate");
|
||||||
|
if (repo.TagSortMode == Models.TagSortMode.CreatorDate)
|
||||||
|
byCreatorDate.Icon = App.CreateMenuIcon("Icons.Check");
|
||||||
|
byCreatorDate.Click += (_, ev) =>
|
||||||
|
{
|
||||||
|
repo.TagSortMode = Models.TagSortMode.CreatorDate;
|
||||||
|
ev.Handled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
var byNameAsc = new MenuItem();
|
||||||
|
byNameAsc.Header = App.Text("Repository.Tags.OrderByNameAsc");
|
||||||
|
if (repo.TagSortMode == Models.TagSortMode.NameInAscending)
|
||||||
|
byNameAsc.Icon = App.CreateMenuIcon("Icons.Check");
|
||||||
|
byNameAsc.Click += (_, ev) =>
|
||||||
|
{
|
||||||
|
repo.TagSortMode = Models.TagSortMode.NameInAscending;
|
||||||
|
ev.Handled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
var byNameDes = new MenuItem();
|
||||||
|
byNameDes.Header = App.Text("Repository.Tags.OrderByNameDes");
|
||||||
|
if (repo.TagSortMode == Models.TagSortMode.NameInDescending)
|
||||||
|
byNameDes.Icon = App.CreateMenuIcon("Icons.Check");
|
||||||
|
byNameDes.Click += (_, ev) =>
|
||||||
|
{
|
||||||
|
repo.TagSortMode = Models.TagSortMode.NameInDescending;
|
||||||
|
ev.Handled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
var menu = new ContextMenu();
|
||||||
|
menu.Items.Add(byCreatorDate);
|
||||||
|
menu.Items.Add(byNameAsc);
|
||||||
|
menu.Items.Add(byNameDes);
|
||||||
|
menu.Open(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
|
||||||
private void OnSkipInProgress(object sender, RoutedEventArgs e)
|
private void OnSkipInProgress(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (DataContext is ViewModels.Repository repo)
|
if (DataContext is ViewModels.Repository repo)
|
||||||
|
|
|
@ -105,15 +105,15 @@
|
||||||
<TextBlock Grid.Row="4" Grid.Column="0"
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||||
Margin="0,0,8,0"
|
Margin="0,0,8,0"
|
||||||
Text="{DynamicResource Text.Preference.GPG.UserKey}"/>
|
Text="{DynamicResource Text.Preferences.GPG.UserKey}"/>
|
||||||
<TextBox Grid.Row="4" Grid.Column="1"
|
<TextBox Grid.Row="4" Grid.Column="1"
|
||||||
Height="28"
|
Height="28"
|
||||||
CornerRadius="3"
|
CornerRadius="3"
|
||||||
Watermark="{DynamicResource Text.Preference.GPG.UserKey.Placeholder}"
|
Watermark="{DynamicResource Text.Preferences.GPG.UserKey.Placeholder}"
|
||||||
Text="{Binding GPGUserSigningKey, Mode=TwoWay}"/>
|
Text="{Binding GPGUserSigningKey, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="5" Grid.Column="1"
|
<CheckBox Grid.Row="5" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Preference.GPG.CommitEnabled}"
|
Content="{DynamicResource Text.Preferences.GPG.CommitEnabled}"
|
||||||
IsChecked="{Binding GPGCommitSigningEnabled, Mode=TwoWay}"/>
|
IsChecked="{Binding GPGCommitSigningEnabled, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="6" Grid.Column="1"
|
<CheckBox Grid.Row="6" Grid.Column="1"
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
IsChecked="{Binding EnableSignOffForCommit, Mode=TwoWay}"/>
|
IsChecked="{Binding EnableSignOffForCommit, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="7" Grid.Column="1"
|
<CheckBox Grid.Row="7" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Preference.GPG.TagEnabled}"
|
Content="{DynamicResource Text.Preferences.GPG.TagEnabled}"
|
||||||
IsChecked="{Binding GPGTagSigningEnabled, Mode=TwoWay}"/>
|
IsChecked="{Binding GPGTagSigningEnabled, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="8" Grid.Column="1"
|
<CheckBox Grid.Row="8" Grid.Column="1"
|
||||||
|
@ -290,6 +290,8 @@
|
||||||
<MenuItem Header="{DynamicResource Text.Configure.IssueTracker.AddSampleJira}" Command="{Binding AddSampleJiraIssueTracker}"/>
|
<MenuItem Header="{DynamicResource Text.Configure.IssueTracker.AddSampleJira}" Command="{Binding AddSampleJiraIssueTracker}"/>
|
||||||
<MenuItem Header="{DynamicResource Text.Configure.IssueTracker.AddSampleGitLabIssue}" Command="{Binding AddSampleGitLabIssueTracker}"/>
|
<MenuItem Header="{DynamicResource Text.Configure.IssueTracker.AddSampleGitLabIssue}" Command="{Binding AddSampleGitLabIssueTracker}"/>
|
||||||
<MenuItem Header="{DynamicResource Text.Configure.IssueTracker.AddSampleGitLabMergeRequest}" Command="{Binding AddSampleGitLabMergeRequestTracker}"/>
|
<MenuItem Header="{DynamicResource Text.Configure.IssueTracker.AddSampleGitLabMergeRequest}" Command="{Binding AddSampleGitLabMergeRequestTracker}"/>
|
||||||
|
<MenuItem Header="{DynamicResource Text.Configure.IssueTracker.AddSampleGiteeIssue}" Command="{Binding AddSampleGiteeIssueTracker}"/>
|
||||||
|
<MenuItem Header="{DynamicResource Text.Configure.IssueTracker.AddSampleGiteePullRequest}" Command="{Binding AddSampleGiteePullRequestTracker}"/>
|
||||||
</MenuFlyout>
|
</MenuFlyout>
|
||||||
</Button.Flyout>
|
</Button.Flyout>
|
||||||
<Path Width="14" Height="14" Data="{StaticResource Icons.Plus}"/>
|
<Path Width="14" Height="14" Data="{StaticResource Icons.Plus}"/>
|
||||||
|
|
|
@ -91,12 +91,12 @@
|
||||||
<v:ChangeViewModeSwitcher Grid.Column="1"
|
<v:ChangeViewModeSwitcher Grid.Column="1"
|
||||||
Width="14" Height="14"
|
Width="14" Height="14"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
ViewMode="{Binding Source={x:Static vm:Preference.Instance}, Path=CommitChangeViewMode, Mode=TwoWay}"/>
|
ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode, Mode=TwoWay}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<!-- Changes -->
|
<!-- Changes -->
|
||||||
<Border Grid.Row="1" Margin="0,4,0,0" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1" Background="{DynamicResource Brush.Contents}">
|
<Border Grid.Row="1" Margin="0,4,0,0" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1" Background="{DynamicResource Brush.Contents}">
|
||||||
<v:ChangeCollectionView ViewMode="{Binding Source={x:Static vm:Preference.Instance}, Path=CommitChangeViewMode}"
|
<v:ChangeCollectionView ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode}"
|
||||||
Changes="{Binding VisibleChanges}"
|
Changes="{Binding VisibleChanges}"
|
||||||
SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
|
SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
|
||||||
ContextRequested="OnChangeContextRequested"/>
|
ContextRequested="OnChangeContextRequested"/>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
<DataTemplate DataType="m:RevisionTextFile">
|
<DataTemplate DataType="m:RevisionTextFile">
|
||||||
<v:RevisionTextFileView FontFamily="{DynamicResource Fonts.Monospace}"
|
<v:RevisionTextFileView FontFamily="{DynamicResource Fonts.Monospace}"
|
||||||
FontSize="{Binding Source={x:Static vm:Preference.Instance}, Path=EditorFontSize}"
|
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorFontSize}"
|
||||||
Background="{DynamicResource Brush.Contents}"/>
|
Background="{DynamicResource Brush.Contents}"/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
x:DataType="vm:CommitDetail">
|
x:DataType="vm:CommitDetail">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="{Binding Source={x:Static vm:Preference.Instance}, Path=Layout.CommitDetailFilesLeftWidth, Mode=TwoWay}" MinWidth="200"/>
|
<ColumnDefinition Width="{Binding Source={x:Static vm:Preferences.Instance}, Path=Layout.CommitDetailFilesLeftWidth, Mode=TwoWay}" MinWidth="200"/>
|
||||||
<ColumnDefinition Width="4"/>
|
<ColumnDefinition Width="4"/>
|
||||||
<ColumnDefinition Width="*" MinWidth="100"/>
|
<ColumnDefinition Width="*" MinWidth="100"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls.Primitives;
|
using Avalonia.Controls.Primitives;
|
||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
|
using AvaloniaEdit;
|
||||||
using AvaloniaEdit.Document;
|
using AvaloniaEdit.Document;
|
||||||
using AvaloniaEdit.Editing;
|
using AvaloniaEdit.Editing;
|
||||||
using AvaloniaEdit.TextMate;
|
using AvaloniaEdit.TextMate;
|
||||||
using AvaloniaEdit;
|
|
||||||
|
|
||||||
namespace SourceGit.Views
|
namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
|
@ -86,7 +84,7 @@ namespace SourceGit.Views
|
||||||
private void IgnoreThisVersion(object sender, RoutedEventArgs e)
|
private void IgnoreThisVersion(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is Button { DataContext: Models.Version ver })
|
if (sender is Button { DataContext: Models.Version ver })
|
||||||
ViewModels.Preference.Instance.IgnoreUpdateTag = ver.TagName;
|
ViewModels.Preferences.Instance.IgnoreUpdateTag = ver.TagName;
|
||||||
|
|
||||||
Close();
|
Close();
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
|
56
src/Views/SetUpstream.axaml
Normal file
56
src/Views/SetUpstream.axaml
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<UserControl xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
|
xmlns:m="using:SourceGit.Models"
|
||||||
|
xmlns:vm="using:SourceGit.ViewModels"
|
||||||
|
x:Class="SourceGit.Views.SetUpstream"
|
||||||
|
x:DataType="vm:SetUpstream">
|
||||||
|
<StackPanel Orientation="Vertical" Margin="8,0">
|
||||||
|
<TextBlock FontSize="18"
|
||||||
|
Classes="bold"
|
||||||
|
Text="{DynamicResource Text.SetUpstream}"/>
|
||||||
|
<Grid Margin="0,16,0,0" RowDefinitions="32,32,32" ColumnDefinitions="120,*">
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
|
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||||
|
Margin="0,0,8,0"
|
||||||
|
Text="{DynamicResource Text.SetUpstream.Local}"/>
|
||||||
|
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" Height="20" VerticalAlignment="Center">
|
||||||
|
<Path Margin="2,0,8,0" Width="14" Height="14" Fill="{DynamicResource Brush.FG1}" Data="{StaticResource Icons.Branch}"/>
|
||||||
|
<TextBlock Text="{Binding Local.Name}"/>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
|
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||||
|
Margin="0,0,8,0"
|
||||||
|
Text="{DynamicResource Text.SetUpstream.Upstream}"/>
|
||||||
|
<ComboBox Grid.Row="1" Grid.Column="1"
|
||||||
|
Height="28" Padding="8,0"
|
||||||
|
VerticalAlignment="Center" HorizontalAlignment="Stretch"
|
||||||
|
ItemsSource="{Binding RemoteBranches}"
|
||||||
|
SelectedItem="{Binding SelectedRemoteBranch, Mode=TwoWay}"
|
||||||
|
IsTextSearchEnabled="True"
|
||||||
|
IsEnabled="{Binding !Unset, Mode=OneWay}">
|
||||||
|
<ComboBox.ItemTemplate>
|
||||||
|
<DataTemplate x:DataType="{x:Type m:Branch}">
|
||||||
|
<StackPanel Orientation="Horizontal" Height="20" VerticalAlignment="Center">
|
||||||
|
<Path Margin="0,0,8,0" Width="14" Height="14" Fill="{DynamicResource Brush.FG1}" Data="{StaticResource Icons.Branch}"/>
|
||||||
|
<TextBlock Text="{Binding FriendlyName}"/>
|
||||||
|
</StackPanel>
|
||||||
|
</DataTemplate>
|
||||||
|
</ComboBox.ItemTemplate>
|
||||||
|
|
||||||
|
<ComboBox.ItemContainerTheme>
|
||||||
|
<ControlTheme TargetType="ComboBoxItem" x:DataType="m:Branch" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
|
||||||
|
<Setter Property="TextSearch.Text" Value="{Binding Name}"/>
|
||||||
|
</ControlTheme>
|
||||||
|
</ComboBox.ItemContainerTheme>
|
||||||
|
</ComboBox>
|
||||||
|
|
||||||
|
<CheckBox Grid.Row="2" Grid.Column="1"
|
||||||
|
Content="{DynamicResource Text.SetUpstream.Unset}"
|
||||||
|
IsChecked="{Binding Unset, Mode=TwoWay}"/>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
</UserControl>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue