Merge remote-tracking branch 'official-origin/develop' into develop

This commit is contained in:
mpagani 2025-04-14 09:43:59 +02:00
commit 000821aedb
19 changed files with 93 additions and 58 deletions

View file

@ -195,23 +195,7 @@ This document shows the translation status of each locale file in the repository
</details>
### ![ru__RU](https://img.shields.io/badge/ru__RU-98.67%25-yellow)
<details>
<summary>Missing keys in ru_RU.axaml</summary>
- Text.Configure.Git.PreferredMergeMode
- Text.ConfirmEmptyCommit.Continue
- Text.ConfirmEmptyCommit.NoLocalChanges
- Text.ConfirmEmptyCommit.StageAllThenCommit
- Text.ConfirmEmptyCommit.WithLocalChanges
- Text.WorkingCopy.ConfirmCommitWithFilter
- Text.WorkingCopy.Conflicts.OpenExternalMergeTool
- Text.WorkingCopy.Conflicts.OpenExternalMergeToolAllConflicts
- Text.WorkingCopy.Conflicts.UseMine
- Text.WorkingCopy.Conflicts.UseTheirs
</details>
### ![ru__RU](https://img.shields.io/badge/ru__RU-%E2%88%9A-brightgreen)
### ![ta__IN](https://img.shields.io/badge/ta__IN-98.67%25-yellow)

View file

@ -1 +1 @@
2025.12
2025.13

View file

@ -40,7 +40,7 @@ namespace SourceGit.Commands
foreach (var b in branches)
{
if (b.IsLocal && !string.IsNullOrEmpty(b.Upstream))
b.IsUpsteamGone = !remoteBranches.Contains(b.Upstream);
b.IsUpstreamGone = !remoteBranches.Contains(b.Upstream);
}
return branches;
@ -86,7 +86,7 @@ namespace SourceGit.Commands
branch.Head = parts[1];
branch.IsCurrent = parts[2] == "*";
branch.Upstream = parts[3];
branch.IsUpsteamGone = false;
branch.IsUpstreamGone = false;
if (branch.IsLocal && !string.IsNullOrEmpty(parts[4]) && !parts[4].Equals("=", StringComparison.Ordinal))
branch.TrackStatus = new QueryTrackStatus(WorkingDirectory, branch.Name, branch.Upstream).Result();

View file

@ -34,7 +34,7 @@ namespace SourceGit.Models
public string Upstream { get; set; }
public BranchTrackStatus TrackStatus { get; set; }
public string Remote { get; set; }
public bool IsUpsteamGone { get; set; }
public bool IsUpstreamGone { get; set; }
public string FriendlyName => IsLocal ? Name : $"{Remote}/{Name}";
}

View file

@ -157,6 +157,7 @@
<x:String x:Key="Text.Configure.Git.AutoFetch" xml:space="preserve">Автозагрузка изменений</x:String>
<x:String x:Key="Text.Configure.Git.AutoFetchIntervalSuffix" 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.PreferredMergeMode" xml:space="preserve">Предпочтительный режим слияния</x:String>
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">ОТСЛЕЖИВАНИЕ ПРОБЛЕМ</x:String>
<x:String x:Key="Text.Configure.IssueTracker.AddSampleAzure" xml:space="preserve">Добавить пример правила Azure DevOps</x:String>
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGiteeIssue" xml:space="preserve">Добавить пример правила для тем в Gitea</x:String>
@ -181,6 +182,10 @@
<x:String x:Key="Text.ConfigureWorkspace.Color" xml:space="preserve">Цвет</x:String>
<x:String x:Key="Text.ConfigureWorkspace.Name" xml:space="preserve">Имя</x:String>
<x:String x:Key="Text.ConfigureWorkspace.Restore" xml:space="preserve">Восстанавливать вкладки при запуске</x:String>
<x:String x:Key="Text.ConfirmEmptyCommit.Continue" xml:space="preserve">ПРОДОЛЖИТЬ</x:String>
<x:String x:Key="Text.ConfirmEmptyCommit.NoLocalChanges" xml:space="preserve">Обнаружена пустая ревизия! Вы хотите продолжить (--allow-empty)?</x:String>
<x:String x:Key="Text.ConfirmEmptyCommit.StageAllThenCommit" xml:space="preserve">Подготовить все и зафиксировать ревизию</x:String>
<x:String x:Key="Text.ConfirmEmptyCommit.WithLocalChanges" xml:space="preserve">Обнаружена пустая ревизия! Вы хотите продолжить (--allow-empty) или отложить все, затем зафиксировать ревизию?</x:String>
<x:String x:Key="Text.ConventionalCommit" xml:space="preserve">Общепринятый помощник по ревизии</x:String>
<x:String x:Key="Text.ConventionalCommit.BreakingChanges" xml:space="preserve">Кардинальные изменения:</x:String>
<x:String x:Key="Text.ConventionalCommit.ClosedIssue" xml:space="preserve">Закрытая тема:</x:String>
@ -725,8 +730,13 @@
<x:String x:Key="Text.WorkingCopy.CommitTip" xml:space="preserve">Запустить событие щелчка</x:String>
<x:String x:Key="Text.WorkingCopy.CommitToEdit" xml:space="preserve">Зафиксировать (Редактировать)</x:String>
<x:String x:Key="Text.WorkingCopy.CommitWithAutoStage" xml:space="preserve">Подготовить все изменения и зафиксировать</x:String>
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithFilter">Вы подготовили {0} файл(ов), но отображается только {1} файл(ов) ({2} файл(ов) отфильтровано). Вы хотите продолжить?</x:String>
<x:String x:Key="Text.WorkingCopy.Conflicts" xml:space="preserve">ОБНАРУЖЕНЫ КОНФЛИКТЫ</x:String>
<x:String x:Key="Text.WorkingCopy.Conflicts.OpenExternalMergeTool" xml:space="preserve">ОТКРЫТЬ ВНЕШНИЙ ИНСТРУМЕНТ СЛИЯНИЯ</x:String>
<x:String x:Key="Text.WorkingCopy.Conflicts.OpenExternalMergeToolAllConflicts" xml:space="preserve">ОТКРЫТЬ ВСЕ КОНФЛИКТЫ ВО ВНЕШНЕМ ИНСТРУМЕНТЕ СЛИЯНИЯ</x:String>
<x:String x:Key="Text.WorkingCopy.Conflicts.Resolved" xml:space="preserve">КОНФЛИКТЫ ФАЙЛОВ РАЗРЕШЕНЫ</x:String>
<x:String x:Key="Text.WorkingCopy.Conflicts.UseMine" xml:space="preserve">ИСПОЛЬЗОВАТЬ МОИ</x:String>
<x:String x:Key="Text.WorkingCopy.Conflicts.UseTheirs" xml:space="preserve">ИСПОЛЬЗОВАТЬ ИХ</x:String>
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">ВКЛЮЧИТЬ НЕОТСЛЕЖИВАЕМЫЕ ФАЙЛЫ</x:String>
<x:String x:Key="Text.WorkingCopy.NoCommitHistories" xml:space="preserve">НЕТ ПОСЛЕДНИХ ВХОДНЫХ СООБЩЕНИЙ</x:String>
<x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">НЕТ ШАБЛОНОВ РЕВИЗИИ</x:String>

View file

@ -41,11 +41,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.2.6" />
<PackageReference Include="Avalonia.Desktop" Version="11.2.6" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.2.6" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.2.6" />
<PackageReference Include="Avalonia.Diagnostics" Version="11.2.6" Condition="'$(Configuration)' == 'Debug'" />
<PackageReference Include="Avalonia" Version="11.2.7" />
<PackageReference Include="Avalonia.Desktop" Version="11.2.7" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.2.7" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.2.7" />
<PackageReference Include="Avalonia.Diagnostics" Version="11.2.7" Condition="'$(Configuration)' == 'Debug'" />
<PackageReference Include="Avalonia.AvaloniaEdit" Version="11.2.0" />
<PackageReference Include="AvaloniaEdit.TextMate" Version="11.2.0" />
<PackageReference Include="Azure.AI.OpenAI" Version="2.2.0-beta.4" />

View file

@ -44,7 +44,7 @@ namespace SourceGit.ViewModels
public bool ShowUpstreamGoneTip
{
get => Backend is Models.Branch { IsUpsteamGone: true };
get => Backend is Models.Branch { IsUpstreamGone: true };
}
public string Tooltip

View file

@ -32,7 +32,11 @@ namespace SourceGit.ViewModels
return Task.Run(() =>
{
new Commands.UpdateRef(_repo.FullPath, Local.FullName, To.FullName, SetProgressDescription).Exec();
CallUIThread(() => _repo.SetWatcherEnabled(true));
CallUIThread(() =>
{
_repo.NavigateToCommit(To.Head);
_repo.SetWatcherEnabled(true);
});
return true;
});
}

View file

@ -34,14 +34,14 @@ namespace SourceGit.ViewModels
set => _repo.Settings.EnableForceOnFetch = value;
}
public Fetch(Repository repo, Models.Remote preferedRemote = null)
public Fetch(Repository repo, Models.Remote preferredRemote = null)
{
_repo = repo;
_fetchAllRemotes = preferedRemote == null;
_fetchAllRemotes = preferredRemote == null;
if (preferedRemote != null)
if (preferredRemote != null)
{
SelectedRemote = preferedRemote;
SelectedRemote = preferredRemote;
}
else if (!string.IsNullOrEmpty(_repo.Settings.DefaultRemote))
{
@ -83,6 +83,7 @@ namespace SourceGit.ViewModels
CallUIThread(() =>
{
_repo.NavigateToBranchDelayed(_repo.CurrentBranch?.Upstream);
_repo.MarkFetched();
_repo.SetWatcherEnabled(true);
});

View file

@ -32,7 +32,11 @@ namespace SourceGit.ViewModels
return Task.Run(() =>
{
new Commands.Fetch(_repo.FullPath, Local, Upstream, SetProgressDescription).Exec();
CallUIThread(() => _repo.SetWatcherEnabled(true));
CallUIThread(() =>
{
_repo.NavigateToBranchDelayed(Upstream.FullName);
_repo.SetWatcherEnabled(true);
});
return true;
});
}

View file

@ -62,7 +62,11 @@ namespace SourceGit.ViewModels
return Task.Run(() =>
{
new Commands.Merge(_repo.FullPath, _sourceName, Mode.Arg, SetProgressDescription).Exec();
CallUIThread(() => _repo.SetWatcherEnabled(true));
CallUIThread(() =>
{
_repo.NavigateToBranchDelayed(_repo.CurrentBranch?.FullName);
_repo.SetWatcherEnabled(true);
});
return true;
});
}

View file

@ -192,7 +192,11 @@ namespace SourceGit.ViewModels
rs = new Commands.Stash(_repo.FullPath).Pop("stash@{0}");
}
CallUIThread(() => _repo.SetWatcherEnabled(true));
CallUIThread(() =>
{
_repo.NavigateToBranchDelayed(_repo.CurrentBranch?.FullName);
_repo.SetWatcherEnabled(true);
});
return rs;
});
}

View file

@ -773,6 +773,11 @@ namespace SourceGit.ViewModels
NavigateToCommit(_currentBranch.Head);
}
public void NavigateToBranchDelayed(string branch)
{
_navigateToBranchDelayed = branch;
}
public void ClearHistoriesFilter()
{
_settings.HistoriesFilters.Clear();
@ -991,7 +996,16 @@ namespace SourceGit.ViewModels
_histories.IsLoading = false;
_histories.Commits = commits;
_histories.Graph = graph;
if (!string.IsNullOrEmpty(_navigateToBranchDelayed))
{
var branch = _branches.Find(x => x.FullName == _navigateToBranchDelayed);
if (branch != null)
NavigateToCommit(branch.Head);
}
}
_navigateToBranchDelayed = string.Empty;
});
}
@ -2588,5 +2602,7 @@ namespace SourceGit.ViewModels
private bool _isAutoFetching = false;
private Timer _autoFetchTimer = null;
private DateTime _lastFetchTime = DateTime.MinValue;
private string _navigateToBranchDelayed = string.Empty;
}
}

View file

@ -59,7 +59,14 @@
FontFamily="{DynamicResource Fonts.Monospace}"
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorFontSize}"
TabWidth="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorTabWidth}"
BlameData="{Binding Data}"/>
BlameData="{Binding Data}">
<ToolTip.IsOpen>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="$self.IsPointerOver"/>
<Binding Path="$self.(ToolTip.Tip)" Converter="{x:Static ObjectConverters.IsNotNull}"/>
</MultiBinding>
</ToolTip.IsOpen>
</v:BlameTextEditor>
<!-- Not supported mask (for binary files) -->
<StackPanel Orientation="Vertical"

View file

@ -180,7 +180,6 @@ namespace SourceGit.Views
{
var msg = blame.GetCommitMessage(info.CommitSHA);
ToolTip.SetTip(this, msg);
ToolTip.SetIsOpen(this, true);
}
return;
@ -188,7 +187,7 @@ namespace SourceGit.Views
}
Cursor = Cursor.Default;
ToolTip.SetIsOpen(this, false);
ToolTip.SetTip(this, null);
}
}

View file

@ -114,6 +114,13 @@
PointerEntered="OnSHAPointerEntered"
PointerPressed="OnSHAPressed"
ToolTip.ShowDelay="0">
<ToolTip.IsOpen>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="$self.IsPointerOver"/>
<Binding Path="$self.(ToolTip.Tip)" Converter="{x:Static ObjectConverters.IsNotNull}"/>
</MultiBinding>
</ToolTip.IsOpen>
<TextBlock.DataTemplates>
<DataTemplate DataType="m:Commit">
<StackPanel MinWidth="400" Orientation="Vertical">
@ -152,6 +159,13 @@
PointerEntered="OnSHAPointerEntered"
PointerPressed="OnSHAPressed"
ToolTip.ShowDelay="0">
<ToolTip.IsOpen>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="$self.IsPointerOver"/>
<Binding Path="$self.(ToolTip.Tip)" Converter="{x:Static ObjectConverters.IsNotNull}"/>
</MultiBinding>
</ToolTip.IsOpen>
<TextBlock.DataTemplates>
<DataTemplate DataType="m:Commit">
<StackPanel MinWidth="400" Orientation="Vertical">
@ -189,6 +203,13 @@
FullMessage="{Binding #ThisControl.FullMessage}"
HorizontalAlignment="Stretch"
TextWrapping="Wrap">
<ToolTip.IsOpen>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="$self.IsPointerOver"/>
<Binding Path="$self.(ToolTip.Tip)" Converter="{x:Static ObjectConverters.IsNotNull}"/>
</MultiBinding>
</ToolTip.IsOpen>
<v:CommitMessagePresenter.DataTemplates>
<DataTemplate DataType="m:Commit">
<StackPanel MinWidth="400" Orientation="Vertical">

View file

@ -133,12 +133,7 @@ namespace SourceGit.Views
Dispatcher.UIThread.Invoke(() =>
{
if (ctl.IsEffectivelyVisible && ctl.DataContext is string newSHA && newSHA == sha)
{
ToolTip.SetTip(ctl, c);
if (ctl.IsPointerOver)
ToolTip.SetIsOpen(ctl, true);
}
});
});
}

View file

@ -107,14 +107,9 @@ namespace SourceGit.Views
_lastHover = link;
if (!link.IsCommitSHA)
{
ToolTip.SetTip(this, link.Link);
ToolTip.SetIsOpen(this, true);
}
else
{
ProcessHoverCommitLink(link);
}
return;
}
@ -264,12 +259,7 @@ namespace SourceGit.Views
// If we have already queried this SHA, just use it.
if (_inlineCommits.TryGetValue(sha, out var exist))
{
if (exist != null)
{
ToolTip.SetTip(this, exist);
ToolTip.SetIsOpen(this, true);
}
ToolTip.SetTip(this, exist);
return;
}
@ -294,10 +284,7 @@ namespace SourceGit.Views
// Make sure user still hovers the target SHA.
if (_lastHover == link && c != null)
{
ToolTip.SetTip(this, c);
ToolTip.SetIsOpen(this, true);
}
}
});
});

View file

@ -144,7 +144,6 @@ namespace SourceGit.Views
_lastHover = match;
SetCurrentValue(CursorProperty, Cursor.Parse("Hand"));
ToolTip.SetTip(this, match.Link);
ToolTip.SetIsOpen(this, true);
e.Handled = true;
return;
}