mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-06-21 10:25:00 +00:00
feat: specific author when commit
This commit is contained in:
parent
056b90a5ae
commit
aea331a2ce
13 changed files with 152 additions and 17 deletions
|
@ -4,14 +4,21 @@ namespace SourceGit.Commands
|
||||||
{
|
{
|
||||||
public class Commit : Command
|
public class Commit : Command
|
||||||
{
|
{
|
||||||
public Commit(string repo, string message, bool signOff, bool amend, bool resetAuthor)
|
public Commit(string repo, string message, bool signOff, bool amend, bool resetAuthor = false, string userName = null, string userEmail = null)
|
||||||
{
|
{
|
||||||
_tmpFile = Path.GetTempFileName();
|
_tmpFile = Path.GetTempFileName();
|
||||||
File.WriteAllText(_tmpFile, message);
|
File.WriteAllText(_tmpFile, message);
|
||||||
|
|
||||||
WorkingDirectory = repo;
|
WorkingDirectory = repo;
|
||||||
Context = repo;
|
Context = repo;
|
||||||
Args = $"commit --allow-empty --file=\"{_tmpFile}\"";
|
|
||||||
|
if (!string.IsNullOrEmpty(userName))
|
||||||
|
Args += $"-c user.name=\"{userName}\" ";
|
||||||
|
if (!string.IsNullOrEmpty(userEmail))
|
||||||
|
Args += $"-c user.email=\"{userEmail}\" ";
|
||||||
|
|
||||||
|
Args += $"commit --allow-empty --file=\"{_tmpFile}\"";
|
||||||
|
|
||||||
if (signOff)
|
if (signOff)
|
||||||
Args += " --signoff";
|
Args += " --signoff";
|
||||||
if (amend)
|
if (amend)
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace SourceGit.Commands
|
||||||
var rs = ReadToEnd();
|
var rs = ReadToEnd();
|
||||||
if (!rs.IsSuccess)
|
if (!rs.IsSuccess)
|
||||||
return [];
|
return [];
|
||||||
|
|
||||||
var changes = new List<Models.Change>();
|
var changes = new List<Models.Change>();
|
||||||
var lines = rs.StdOut.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries);
|
var lines = rs.StdOut.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries);
|
||||||
foreach (var line in lines)
|
foreach (var line in lines)
|
||||||
|
|
|
@ -64,7 +64,7 @@ namespace SourceGit.Models
|
||||||
|
|
||||||
if (Path[0] == '"')
|
if (Path[0] == '"')
|
||||||
Path = Path.Substring(1, Path.Length - 2);
|
Path = Path.Substring(1, Path.Length - 2);
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(OriginalPath) && OriginalPath[0] == '"')
|
if (!string.IsNullOrEmpty(OriginalPath) && OriginalPath[0] == '"')
|
||||||
OriginalPath = OriginalPath.Substring(1, OriginalPath.Length - 2);
|
OriginalPath = OriginalPath.Substring(1, OriginalPath.Length - 2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,6 +103,10 @@
|
||||||
<x:String x:Key="Text.Clone.RemoteURL" xml:space="preserve">Repository URL:</x:String>
|
<x:String x:Key="Text.Clone.RemoteURL" xml:space="preserve">Repository URL:</x:String>
|
||||||
<x:String x:Key="Text.Close" xml:space="preserve">CLOSE</x:String>
|
<x:String x:Key="Text.Close" xml:space="preserve">CLOSE</x:String>
|
||||||
<x:String x:Key="Text.CodeEditor" xml:space="preserve">Editor</x:String>
|
<x:String x:Key="Text.CodeEditor" xml:space="preserve">Editor</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorName" xml:space="preserve">Author Name:</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorName.Placeholder" xml:space="preserve">Enter author's name</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorEmail" xml:space="preserve">Author Email:</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorEmail.Placeholder" xml:space="preserve">Enter author's email</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">Checkout Commit</x:String>
|
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">Checkout Commit</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">Cherry-Pick Commit</x:String>
|
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">Cherry-Pick Commit</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CherryPickMultiple" xml:space="preserve">Cherry-Pick ...</x:String>
|
<x:String x:Key="Text.CommitCM.CherryPickMultiple" xml:space="preserve">Cherry-Pick ...</x:String>
|
||||||
|
@ -779,6 +783,7 @@
|
||||||
<x:String x:Key="Text.WorkingCopy.Conflicts.UseMine" xml:space="preserve">USE MINE</x:String>
|
<x:String x:Key="Text.WorkingCopy.Conflicts.UseMine" xml:space="preserve">USE MINE</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.Conflicts.UseTheirs" xml:space="preserve">USE THEIRS</x:String>
|
<x:String x:Key="Text.WorkingCopy.Conflicts.UseTheirs" xml:space="preserve">USE THEIRS</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">INCLUDE UNTRACKED FILES</x:String>
|
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">INCLUDE UNTRACKED FILES</x:String>
|
||||||
|
<x:String x:Key="Text.WorkingCopy.ModifyAuthor" xml:space="preserve">Modify Author</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.NoCommitHistories" xml:space="preserve">NO RECENT INPUT MESSAGES</x:String>
|
<x:String x:Key="Text.WorkingCopy.NoCommitHistories" xml:space="preserve">NO RECENT INPUT MESSAGES</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">NO COMMIT TEMPLATES</x:String>
|
<x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">NO COMMIT TEMPLATES</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.ResetAuthor" xml:space="preserve">Reset Author</x:String>
|
<x:String x:Key="Text.WorkingCopy.ResetAuthor" xml:space="preserve">Reset Author</x:String>
|
||||||
|
|
|
@ -107,6 +107,10 @@
|
||||||
<x:String x:Key="Text.Clone.RemoteURL" xml:space="preserve">远程仓库 :</x:String>
|
<x:String x:Key="Text.Clone.RemoteURL" xml:space="preserve">远程仓库 :</x:String>
|
||||||
<x:String x:Key="Text.Close" xml:space="preserve">关闭</x:String>
|
<x:String x:Key="Text.Close" xml:space="preserve">关闭</x:String>
|
||||||
<x:String x:Key="Text.CodeEditor" xml:space="preserve">提交信息编辑器</x:String>
|
<x:String x:Key="Text.CodeEditor" xml:space="preserve">提交信息编辑器</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorName" xml:space="preserve">作者用户名:</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorName.Placeholder" xml:space="preserve">输入作者用户名</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorEmail" xml:space="preserve">作者邮箱:</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorEmail.Placeholder" xml:space="preserve">输入作者邮箱</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">检出此提交</x:String>
|
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">检出此提交</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">挑选(cherry-pick)此提交</x:String>
|
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">挑选(cherry-pick)此提交</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CherryPickMultiple" xml:space="preserve">挑选(cherry-pick)...</x:String>
|
<x:String x:Key="Text.CommitCM.CherryPickMultiple" xml:space="preserve">挑选(cherry-pick)...</x:String>
|
||||||
|
@ -783,6 +787,7 @@
|
||||||
<x:String x:Key="Text.WorkingCopy.Conflicts.UseMine" xml:space="preserve">使用 MINE</x:String>
|
<x:String x:Key="Text.WorkingCopy.Conflicts.UseMine" xml:space="preserve">使用 MINE</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.Conflicts.UseTheirs" xml:space="preserve">使用 THEIRS</x:String>
|
<x:String x:Key="Text.WorkingCopy.Conflicts.UseTheirs" xml:space="preserve">使用 THEIRS</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">显示未跟踪文件</x:String>
|
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">显示未跟踪文件</x:String>
|
||||||
|
<x:String x:Key="Text.WorkingCopy.ModifyAuthor" xml:space="preserve">修改作者</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.NoCommitHistories" 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>
|
<x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">没有可应用的提交信息模板</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.ResetAuthor" xml:space="preserve">重置提交者</x:String>
|
<x:String x:Key="Text.WorkingCopy.ResetAuthor" xml:space="preserve">重置提交者</x:String>
|
||||||
|
|
|
@ -107,6 +107,10 @@
|
||||||
<x:String x:Key="Text.Clone.RemoteURL" xml:space="preserve">遠端存放庫:</x:String>
|
<x:String x:Key="Text.Clone.RemoteURL" xml:space="preserve">遠端存放庫:</x:String>
|
||||||
<x:String x:Key="Text.Close" xml:space="preserve">關閉</x:String>
|
<x:String x:Key="Text.Close" xml:space="preserve">關閉</x:String>
|
||||||
<x:String x:Key="Text.CodeEditor" xml:space="preserve">提交訊息編輯器</x:String>
|
<x:String x:Key="Text.CodeEditor" xml:space="preserve">提交訊息編輯器</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorName" xml:space="preserve">作者名稱:</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorName.Placeholder" xml:space="preserve">輸入作者名稱</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorEmail" xml:space="preserve">作者電子郵件:</x:String>
|
||||||
|
<x:String x:Key="Text.CommitAuthorTextBox.AuthorEmail.Placeholder" xml:space="preserve">輸入作者電子郵件</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">簽出 (checkout) 此提交</x:String>
|
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">簽出 (checkout) 此提交</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">揀選 (cherry-pick) 此提交</x:String>
|
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">揀選 (cherry-pick) 此提交</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CherryPickMultiple" xml:space="preserve">揀選 (cherry-pick)...</x:String>
|
<x:String x:Key="Text.CommitCM.CherryPickMultiple" xml:space="preserve">揀選 (cherry-pick)...</x:String>
|
||||||
|
@ -783,6 +787,7 @@
|
||||||
<x:String x:Key="Text.WorkingCopy.Conflicts.UseMine" xml:space="preserve">使用我方版本 (ours)</x:String>
|
<x:String x:Key="Text.WorkingCopy.Conflicts.UseMine" xml:space="preserve">使用我方版本 (ours)</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.Conflicts.UseTheirs" xml:space="preserve">使用對方版本 (theirs)</x:String>
|
<x:String x:Key="Text.WorkingCopy.Conflicts.UseTheirs" xml:space="preserve">使用對方版本 (theirs)</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">顯示未追蹤檔案</x:String>
|
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">顯示未追蹤檔案</x:String>
|
||||||
|
<x:String x:Key="Text.WorkingCopy.ModifyAuthor" xml:space="preserve">修改作者</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.NoCommitHistories" 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>
|
<x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">沒有可套用的提交訊息範本</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.ResetAuthor" xml:space="preserve">重設作者</x:String>
|
<x:String x:Key="Text.WorkingCopy.ResetAuthor" xml:space="preserve">重設作者</x:String>
|
||||||
|
|
|
@ -639,7 +639,7 @@ namespace SourceGit.ViewModels
|
||||||
Task.Run(RefreshWorktrees);
|
Task.Run(RefreshWorktrees);
|
||||||
Task.Run(RefreshWorkingCopyChanges);
|
Task.Run(RefreshWorkingCopyChanges);
|
||||||
Task.Run(RefreshStashes);
|
Task.Run(RefreshStashes);
|
||||||
|
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
var config = new Commands.Config(_fullpath).ListAll();
|
var config = new Commands.Config(_fullpath).ListAll();
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace SourceGit.ViewModels
|
||||||
return Task.Run(() =>
|
return Task.Run(() =>
|
||||||
{
|
{
|
||||||
// For reword (only changes the commit message), disable `--reset-author`
|
// For reword (only changes the commit message), disable `--reset-author`
|
||||||
var succ = new Commands.Commit(_repo.FullPath, _message, signOff, true, false).Use(log).Run();
|
var succ = new Commands.Commit(_repo.FullPath, _message, signOff, true).Use(log).Run();
|
||||||
log.Complete();
|
log.Complete();
|
||||||
CallUIThread(() => _repo.SetWatcherEnabled(true));
|
CallUIThread(() => _repo.SetWatcherEnabled(true));
|
||||||
return succ;
|
return succ;
|
||||||
|
|
|
@ -53,7 +53,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
succ = new Commands.Reset(_repo.FullPath, Target.SHA, "--soft").Use(log).Exec();
|
succ = new Commands.Reset(_repo.FullPath, Target.SHA, "--soft").Use(log).Exec();
|
||||||
if (succ)
|
if (succ)
|
||||||
succ = new Commands.Commit(_repo.FullPath, _message, signOff, true, true).Use(log).Run();
|
succ = new Commands.Commit(_repo.FullPath, _message, signOff, true).Use(log).Run();
|
||||||
|
|
||||||
if (succ && autoStashed)
|
if (succ && autoStashed)
|
||||||
new Commands.Stash(_repo.FullPath).Use(log).Pop("stash@{0}");
|
new Commands.Stash(_repo.FullPath).Use(log).Pop("stash@{0}");
|
||||||
|
|
|
@ -68,6 +68,18 @@ namespace SourceGit.ViewModels
|
||||||
set => _repo.Settings.EnableSignOffForCommit = value;
|
set => _repo.Settings.EnableSignOffForCommit = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string UserName
|
||||||
|
{
|
||||||
|
get => _userName;
|
||||||
|
set => SetProperty(ref _userName, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string UserEmail
|
||||||
|
{
|
||||||
|
get => _userEmail;
|
||||||
|
set => SetProperty(ref _userEmail, value);
|
||||||
|
}
|
||||||
|
|
||||||
public bool UseAmend
|
public bool UseAmend
|
||||||
{
|
{
|
||||||
get => _useAmend;
|
get => _useAmend;
|
||||||
|
@ -242,6 +254,8 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
_detailContext = null;
|
_detailContext = null;
|
||||||
_commitMessage = string.Empty;
|
_commitMessage = string.Empty;
|
||||||
|
_userName = null;
|
||||||
|
_userEmail = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetData(List<Models.Change> changes)
|
public void SetData(List<Models.Change> changes)
|
||||||
|
@ -1733,7 +1747,7 @@ namespace SourceGit.ViewModels
|
||||||
succ = new Commands.Add(_repo.FullPath, _repo.IncludeUntracked).Use(log).Exec();
|
succ = new Commands.Add(_repo.FullPath, _repo.IncludeUntracked).Use(log).Exec();
|
||||||
|
|
||||||
if (succ)
|
if (succ)
|
||||||
succ = new Commands.Commit(_repo.FullPath, _commitMessage, signOff, _useAmend, _resetAuthor).Use(log).Run();
|
succ = new Commands.Commit(_repo.FullPath, _commitMessage, _repo.Settings.EnableSignOffForCommit, _useAmend, _resetAuthor, _userName, _userEmail).Use(log).Run();
|
||||||
|
|
||||||
log.Complete();
|
log.Complete();
|
||||||
|
|
||||||
|
@ -1743,6 +1757,8 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
CommitMessage = string.Empty;
|
CommitMessage = string.Empty;
|
||||||
UseAmend = false;
|
UseAmend = false;
|
||||||
|
UserName = string.Empty;
|
||||||
|
UserEmail = string.Empty;
|
||||||
|
|
||||||
if (autoPush && _repo.Remotes.Count > 0)
|
if (autoPush && _repo.Remotes.Count > 0)
|
||||||
{
|
{
|
||||||
|
@ -1770,7 +1786,7 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
if (old.Count != cur.Count)
|
if (old.Count != cur.Count)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var oldMap = new Dictionary<string, Models.Change>();
|
var oldMap = new Dictionary<string, Models.Change>();
|
||||||
foreach (var c in old)
|
foreach (var c in old)
|
||||||
oldMap.Add(c.Path, c);
|
oldMap.Add(c.Path, c);
|
||||||
|
@ -1795,6 +1811,8 @@ namespace SourceGit.ViewModels
|
||||||
private bool _useAmend = false;
|
private bool _useAmend = false;
|
||||||
private bool _resetAuthor = false;
|
private bool _resetAuthor = false;
|
||||||
private bool _hasRemotes = false;
|
private bool _hasRemotes = false;
|
||||||
|
private string _userName = string.Empty;
|
||||||
|
private string _userEmail = string.Empty;
|
||||||
private List<Models.Change> _cached = [];
|
private List<Models.Change> _cached = [];
|
||||||
private List<Models.Change> _unstaged = [];
|
private List<Models.Change> _unstaged = [];
|
||||||
private List<Models.Change> _visibleUnstaged = [];
|
private List<Models.Change> _visibleUnstaged = [];
|
||||||
|
|
39
src/Views/CommitAuthorTextBox.axaml
Normal file
39
src/Views/CommitAuthorTextBox.axaml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<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"
|
||||||
|
xmlns:v="using:SourceGit.Views"
|
||||||
|
mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="68"
|
||||||
|
x:Class="SourceGit.Views.CommitAuthorTextBox">
|
||||||
|
<Grid RowDefinitions="32,32" ColumnDefinitions="Auto,*" Margin="16,4,16,8">
|
||||||
|
<!-- Author Name Row -->
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
|
Text="{DynamicResource Text.CommitAuthorTextBox.AuthorName}"
|
||||||
|
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||||
|
Margin="0,0,8,0"/>
|
||||||
|
<TextBox Grid.Row="0" Grid.Column="1"
|
||||||
|
Height="28"
|
||||||
|
CornerRadius="3"
|
||||||
|
Text="{Binding $parent[v:CommitAuthorTextBox].UserName, Mode=TwoWay}"
|
||||||
|
Watermark="{DynamicResource Text.CommitAuthorTextBox.AuthorName.Placeholder}"
|
||||||
|
AcceptsReturn="False"
|
||||||
|
TextWrapping="NoWrap"
|
||||||
|
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||||
|
ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
|
||||||
|
|
||||||
|
<!-- Author Email Row -->
|
||||||
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
|
Text="{DynamicResource Text.CommitAuthorTextBox.AuthorEmail}"
|
||||||
|
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||||
|
Margin="0,0,8,0"/>
|
||||||
|
<TextBox Grid.Row="1" Grid.Column="1"
|
||||||
|
Height="28"
|
||||||
|
CornerRadius="3"
|
||||||
|
Text="{Binding $parent[v:CommitAuthorTextBox].UserEmail, Mode=TwoWay}"
|
||||||
|
Watermark="{DynamicResource Text.CommitAuthorTextBox.AuthorEmail.Placeholder}"
|
||||||
|
AcceptsReturn="False"
|
||||||
|
TextWrapping="NoWrap"
|
||||||
|
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||||
|
ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
40
src/Views/CommitAuthorTextBox.axaml.cs
Normal file
40
src/Views/CommitAuthorTextBox.axaml.cs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Data;
|
||||||
|
|
||||||
|
namespace SourceGit.Views
|
||||||
|
{
|
||||||
|
public partial class CommitAuthorTextBox : UserControl
|
||||||
|
{
|
||||||
|
|
||||||
|
public static readonly StyledProperty<string> UserNameProperty =
|
||||||
|
AvaloniaProperty.Register<CommitAuthorTextBox, string>(
|
||||||
|
nameof(UserName),
|
||||||
|
string.Empty,
|
||||||
|
defaultBindingMode: BindingMode.TwoWay);
|
||||||
|
|
||||||
|
public static readonly StyledProperty<string> UserEmailProperty =
|
||||||
|
AvaloniaProperty.Register<CommitAuthorTextBox, string>(
|
||||||
|
nameof(UserEmail),
|
||||||
|
string.Empty,
|
||||||
|
defaultBindingMode: BindingMode.TwoWay);
|
||||||
|
|
||||||
|
public string UserName
|
||||||
|
{
|
||||||
|
get => GetValue(UserNameProperty);
|
||||||
|
set => SetValue(UserNameProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string UserEmail
|
||||||
|
{
|
||||||
|
get => GetValue(UserEmailProperty);
|
||||||
|
set => SetValue(UserEmailProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommitAuthorTextBox()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -168,7 +168,7 @@
|
||||||
ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=StagedChangeViewMode, Mode=TwoWay}"/>
|
ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=StagedChangeViewMode, Mode=TwoWay}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
<!-- Staged Changes -->
|
<!-- Staged Changes -->
|
||||||
<v:ChangeCollectionView Grid.Row="1"
|
<v:ChangeCollectionView Grid.Row="1"
|
||||||
x:Name="StagedChangesView"
|
x:Name="StagedChangesView"
|
||||||
|
@ -235,7 +235,7 @@
|
||||||
<v:CommitMessageTextBox Grid.Row="2" ShowAdvancedOptions="True" Text="{Binding CommitMessage, Mode=TwoWay}"/>
|
<v:CommitMessageTextBox Grid.Row="2" ShowAdvancedOptions="True" Text="{Binding CommitMessage, Mode=TwoWay}"/>
|
||||||
|
|
||||||
<!-- Commit Options -->
|
<!-- Commit Options -->
|
||||||
<Grid Grid.Row="3" Margin="0,6,0,0" ColumnDefinitions="Auto,Auto,Auto,*,Auto,Auto,Auto">
|
<Grid Grid.Row="3" Margin="0,6,0,0" ColumnDefinitions="Auto,Auto,Auto,Auto,*,Auto,Auto,Auto">
|
||||||
<CheckBox Grid.Column="0"
|
<CheckBox Grid.Column="0"
|
||||||
Height="24"
|
Height="24"
|
||||||
Margin="1,0,0,0"
|
Margin="1,0,0,0"
|
||||||
|
@ -267,12 +267,28 @@
|
||||||
ToolTip.Placement="Top"
|
ToolTip.Placement="Top"
|
||||||
ToolTip.VerticalOffset="0"/>
|
ToolTip.VerticalOffset="0"/>
|
||||||
|
|
||||||
<v:LoadingIcon Grid.Column="3"
|
<Button Grid.Column="3"
|
||||||
|
Classes="icon_button"
|
||||||
|
Width="24" Height="24"
|
||||||
|
Margin="12,0,0,0"
|
||||||
|
ToolTip.Tip="{DynamicResource Text.WorkingCopy.ModifyAuthor}">
|
||||||
|
<Button.Flyout>
|
||||||
|
<Flyout Placement="TopEdgeAlignedLeft">
|
||||||
|
<Panel Width="400" Height="68">
|
||||||
|
<v:CommitAuthorTextBox UserName="{Binding UserName, Mode=TwoWay}"
|
||||||
|
UserEmail="{Binding UserEmail, Mode=TwoWay}"/>
|
||||||
|
</Panel>
|
||||||
|
</Flyout>
|
||||||
|
</Button.Flyout>
|
||||||
|
<Path Width="14" Height="14" Data="{StaticResource Icons.User}"/>
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<v:LoadingIcon Grid.Column="4"
|
||||||
Width="18" Height="18"
|
Width="18" Height="18"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
IsVisible="{Binding IsCommitting}"/>
|
IsVisible="{Binding IsCommitting}"/>
|
||||||
|
|
||||||
<SplitButton Grid.Column="4"
|
<SplitButton Grid.Column="5"
|
||||||
Content="{DynamicResource Text.Repository.Continue}"
|
Content="{DynamicResource Text.Repository.Continue}"
|
||||||
Height="28"
|
Height="28"
|
||||||
Margin="8,0,0,0"
|
Margin="8,0,0,0"
|
||||||
|
@ -294,7 +310,7 @@
|
||||||
</SplitButton.Flyout>
|
</SplitButton.Flyout>
|
||||||
</SplitButton>
|
</SplitButton>
|
||||||
|
|
||||||
<Button Grid.Column="4"
|
<Button Grid.Column="5"
|
||||||
Classes="flat primary"
|
Classes="flat primary"
|
||||||
Content="{DynamicResource Text.WorkingCopy.Commit}"
|
Content="{DynamicResource Text.WorkingCopy.Commit}"
|
||||||
Height="28"
|
Height="28"
|
||||||
|
@ -327,7 +343,7 @@
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<!-- Invisible button just to add another hotkey `Ctrl+Shift+Enter` to commit with auto-stage -->
|
<!-- Invisible button just to add another hotkey `Ctrl+Shift+Enter` to commit with auto-stage -->
|
||||||
<Button Grid.Column="5"
|
<Button Grid.Column="6"
|
||||||
Width="0" Height="0"
|
Width="0" Height="0"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
Command="{Binding CommitWithAutoStage}"
|
Command="{Binding CommitWithAutoStage}"
|
||||||
|
@ -340,7 +356,7 @@
|
||||||
</Button.IsEnabled>
|
</Button.IsEnabled>
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Button Grid.Column="6"
|
<Button Grid.Column="7"
|
||||||
Classes="flat"
|
Classes="flat"
|
||||||
Content="{DynamicResource Text.WorkingCopy.CommitAndPush}"
|
Content="{DynamicResource Text.WorkingCopy.CommitAndPush}"
|
||||||
Height="28"
|
Height="28"
|
||||||
|
@ -357,7 +373,7 @@
|
||||||
<Binding Path="CommitMessage" Converter="{x:Static c:StringConverters.IsNotNullOrWhitespace}"/>
|
<Binding Path="CommitMessage" Converter="{x:Static c:StringConverters.IsNotNullOrWhitespace}"/>
|
||||||
</MultiBinding>
|
</MultiBinding>
|
||||||
</Button.IsEnabled>
|
</Button.IsEnabled>
|
||||||
|
|
||||||
<Button.IsVisible>
|
<Button.IsVisible>
|
||||||
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
||||||
<Binding Path="HasRemotes"/>
|
<Binding Path="HasRemotes"/>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue