From 7965338d7c54492bfa441f36ed4fcd39de67bc4b Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 2 Jul 2024 09:42:49 +0800 Subject: [PATCH 1/5] readme: move custom theme to another repo sourcegit-themes (#227) --- README.md | 46 ++-------------------------------------------- 1 file changed, 2 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 303f9136..3636e12e 100644 --- a/README.md +++ b/README.md @@ -94,51 +94,9 @@ This app supports open repository in external tools listed in the table below. ![Theme Light](./screenshots/theme_light.png) -## How to Customize Theme +* Custom Themes -1. Create a new json file, and provide your favorite colors with follow keys: - -| Key | Description | -| --- | --- | -| Color.Window | Window background color | -| Color.WindowBorder | Window border color. Only used on Linux. | -| Color.TitleBar | Title bar background color | -| Color.ToolBar | Tool bar background color | -| Color.Popup | Popup panel background color | -| Color.Contents | Background color used in inputs, data grids, file content viewer, change lists, text diff viewer, etc. | -| Color.Badge | Badge background color | -| Color.BadgeFG | Badge foreground color | -| Color.Conflict | Conflict panel background color | -| Color.ConflictForeground | Conflict panel foreground color | -| Color.DecoratorIconBG | Background color for commit ref icon | -| Color.DecoratorIcon | Foreground color for commit ref icon | -| Color.DecoratorBranch | Background color for commit branch ref name | -| Color.DecoratorTag | Background color for commit tag ref name | -| Color.DecoratorFG | Foreground color for commit ref name | -| Color.Border0 | Border color used in some controls, like Window, Tab, Toolbar, etc. | -| Color.Border1 | Border color used in inputs, like TextBox, ComboBox, etc. | -| Color.Border2 | Border color used in visual lines, like seperators, Rectange, etc. | -| Color.FlatButton.Background | Flat button background color, like `Cancel`, `Commit & Push` button | -| Color.FlatButton.BackgroundHovered | Flat button background color when hovered, like `Cancel` button | -| Color.FG1 | Primary foreground color for all text elements | -| Color.FG2 | Secondary foreground color for all text elements | -| Color.Diff.EmptyBG | Background color used in empty lines in diff viewer | -| Color.Diff.AddedBG | Background color used in added lines in diff viewer | -| Color.Diff.DeletedBG | Background color used in deleted lines in diff viewer | -| Color.Diff.AddedHighlight | Background color used for changed words in added lines in diff viewer | -| Color.Diff.DeletedHighlight | Background color used for changed words in deleted lines in diff viewer | - -For example: - -```json -{ - "Color.Window": "#FFFF6059" -} -``` - -2. Open `Preference` -> `Appearance`, choose the json file you just created in `Custom Color Schema`. - -> **NOTE**: The `Custom Color Schema` will override the colors with same keys in current active theme. +You can find custom themes from [sourcegit-theme](https://github.com/sourcegit-scm/sourcegit-theme.git) ## Contributing From 4ef0f1180fa62937612b1ead79773048ffb22880 Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 2 Jul 2024 10:23:21 +0800 Subject: [PATCH 2/5] feature: add tooltip for branches (#228) --- src/Converters/BranchConverters.cs | 10 ---------- src/Models/Branch.cs | 2 ++ src/ViewModels/AddWorktree.cs | 2 +- src/ViewModels/BranchTreeNode.cs | 11 +++++++++++ src/ViewModels/CreateBranch.cs | 3 +-- src/ViewModels/DeleteBranch.cs | 5 ++--- src/ViewModels/DeleteMultipleBranches.cs | 2 +- src/ViewModels/GitFlowStart.cs | 3 +-- src/ViewModels/Histories.cs | 4 ++-- src/ViewModels/Repository.cs | 19 ++++++++++--------- src/Views/Archive.axaml | 2 +- src/Views/BranchCompare.axaml | 4 ++-- src/Views/CreateBranch.axaml | 2 +- src/Views/CreateTag.axaml | 2 +- src/Views/DeleteBranch.axaml | 2 +- src/Views/DeleteMultipleBranches.axaml | 3 +-- src/Views/FastForwardWithoutCheckout.axaml | 2 +- src/Views/InteractiveRebase.axaml | 2 +- src/Views/Pull.axaml | 2 +- src/Views/Rebase.axaml | 2 +- src/Views/Repository.axaml | 18 ++++++++++++------ 21 files changed, 54 insertions(+), 48 deletions(-) delete mode 100644 src/Converters/BranchConverters.cs diff --git a/src/Converters/BranchConverters.cs b/src/Converters/BranchConverters.cs deleted file mode 100644 index d20ed89f..00000000 --- a/src/Converters/BranchConverters.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Avalonia.Data.Converters; - -namespace SourceGit.Converters -{ - public static class BranchConverters - { - public static readonly FuncValueConverter ToName = - new FuncValueConverter(v => v.IsLocal ? v.Name : $"{v.Remote}/{v.Name}"); - } -} diff --git a/src/Models/Branch.cs b/src/Models/Branch.cs index a22ee553..07f5374e 100644 --- a/src/Models/Branch.cs +++ b/src/Models/Branch.cs @@ -11,5 +11,7 @@ public string UpstreamTrackStatus { get; set; } public string Remote { get; set; } public bool IsHead { get; set; } + + public string FriendlyName => IsLocal ? Name : $"{Remote}/{Name}"; } } diff --git a/src/ViewModels/AddWorktree.cs b/src/ViewModels/AddWorktree.cs index 04cda5b5..00cf604b 100644 --- a/src/ViewModels/AddWorktree.cs +++ b/src/ViewModels/AddWorktree.cs @@ -71,7 +71,7 @@ namespace SourceGit.ViewModels if (branch.IsLocal) LocalBranches.Add(branch.Name); else - RemoteBranches.Add($"{branch.Remote}/{branch.Name}"); + RemoteBranches.Add(branch.FriendlyName); } if (RemoteBranches.Count > 0) diff --git a/src/ViewModels/BranchTreeNode.cs b/src/ViewModels/BranchTreeNode.cs index ef61579d..11486c20 100644 --- a/src/ViewModels/BranchTreeNode.cs +++ b/src/ViewModels/BranchTreeNode.cs @@ -69,6 +69,17 @@ namespace SourceGit.ViewModels set => SetProperty(ref _isSelected, value); } + public string Tooltip + { + get + { + if (Backend is Models.Branch b) + return b.FriendlyName; + + return null; + } + } + public CornerRadius CornerRadius { get => _cornerRadius; diff --git a/src/ViewModels/CreateBranch.cs b/src/ViewModels/CreateBranch.cs index e80dec15..2f7ac4f8 100644 --- a/src/ViewModels/CreateBranch.cs +++ b/src/ViewModels/CreateBranch.cs @@ -72,8 +72,7 @@ namespace SourceGit.ViewModels foreach (var b in creator._repo.Branches) { - var test = b.IsLocal ? b.Name : $"{b.Remote}/{b.Name}"; - if (test == name) + if (b.FriendlyName == name) return new ValidationResult("A branch with same name already exists!"); } diff --git a/src/ViewModels/DeleteBranch.cs b/src/ViewModels/DeleteBranch.cs index 787e00fc..292cc2aa 100644 --- a/src/ViewModels/DeleteBranch.cs +++ b/src/ViewModels/DeleteBranch.cs @@ -35,9 +35,8 @@ namespace SourceGit.ViewModels if (branch.IsLocal && !string.IsNullOrEmpty(branch.Upstream)) { - var upstream = branch.Upstream.Substring(13); - TrackingRemoteBranch = repo.Branches.Find(x => !x.IsLocal && $"{x.Remote}/{x.Name}" == upstream); - DeleteTrackingRemoteTip = new Views.NameHighlightedTextBlock("DeleteBranch.WithTrackingRemote", upstream); + TrackingRemoteBranch = repo.Branches.Find(x => x.FullName == branch.Upstream); + DeleteTrackingRemoteTip = new Views.NameHighlightedTextBlock("DeleteBranch.WithTrackingRemote", TrackingRemoteBranch.FriendlyName); } View = new Views.DeleteBranch() { DataContext = this }; diff --git a/src/ViewModels/DeleteMultipleBranches.cs b/src/ViewModels/DeleteMultipleBranches.cs index 433d80c6..6048ec68 100644 --- a/src/ViewModels/DeleteMultipleBranches.cs +++ b/src/ViewModels/DeleteMultipleBranches.cs @@ -37,7 +37,7 @@ namespace SourceGit.ViewModels { foreach (var target in Targets) { - SetProgressDescription($"Deleting remote branch : {target.Remote}/{target.Name}"); + SetProgressDescription($"Deleting remote branch : {target.FriendlyName}"); Commands.Branch.DeleteRemote(_repo.FullPath, target.Remote, target.Name); } } diff --git a/src/ViewModels/GitFlowStart.cs b/src/ViewModels/GitFlowStart.cs index 0806dfb4..ca580d99 100644 --- a/src/ViewModels/GitFlowStart.cs +++ b/src/ViewModels/GitFlowStart.cs @@ -39,8 +39,7 @@ namespace SourceGit.ViewModels var check = $"{starter._prefix}{name}"; foreach (var b in starter._repo.Branches) { - var test = b.IsLocal ? b.Name : $"{b.Remote}/{b.Name}"; - if (test == check) + if (b.FriendlyName == check) return new ValidationResult("A branch with same name already exists!"); } } diff --git a/src/ViewModels/Histories.cs b/src/ViewModels/Histories.cs index 7bdd0bf2..5d035f3b 100644 --- a/src/ViewModels/Histories.cs +++ b/src/ViewModels/Histories.cs @@ -175,7 +175,7 @@ namespace SourceGit.ViewModels } else if (d.Type == Models.DecoratorType.RemoteBranchHead) { - var b = _repo.Branches.Find(x => !x.IsLocal && d.Name == $"{x.Remote}/{x.Name}"); + var b = _repo.Branches.Find(x => !x.IsLocal && d.Name == x.FriendlyName); FillRemoteBranchMenu(menu, b, current, commit.IsMerged); } else if (d.Type == Models.DecoratorType.Tag) @@ -583,7 +583,7 @@ namespace SourceGit.ViewModels private void FillRemoteBranchMenu(ContextMenu menu, Models.Branch branch, Models.Branch current, bool merged) { - var name = $"{branch.Remote}/{branch.Name}"; + var name = branch.FriendlyName; var submenu = new MenuItem(); submenu.Icon = App.CreateMenuIcon("Icons.Branch"); diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index dec5486d..3246b967 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -1202,7 +1202,7 @@ namespace SourceGit.ViewModels if (upstream != null) { var fastForward = new MenuItem(); - fastForward.Header = new Views.NameHighlightedTextBlock("BranchCM.FastForward", $"{upstream.Remote}/{upstream.Name}"); + fastForward.Header = new Views.NameHighlightedTextBlock("BranchCM.FastForward", upstream.FriendlyName); fastForward.Icon = App.CreateMenuIcon("Icons.FastForward"); fastForward.IsEnabled = !string.IsNullOrEmpty(branch.UpstreamTrackStatus) && branch.UpstreamTrackStatus.IndexOf('↑') < 0; fastForward.Click += (o, e) => @@ -1491,9 +1491,10 @@ namespace SourceGit.ViewModels { var menu = new ContextMenu(); var current = Branches.Find(x => x.IsCurrent); + var name = branch.FriendlyName; var checkout = new MenuItem(); - checkout.Header = new Views.NameHighlightedTextBlock("BranchCM.Checkout", $"{branch.Remote}/{branch.Name}"); + checkout.Header = new Views.NameHighlightedTextBlock("BranchCM.Checkout", name); checkout.Icon = App.CreateMenuIcon("Icons.Check"); checkout.Click += (o, e) => { @@ -1506,7 +1507,7 @@ namespace SourceGit.ViewModels if (current != null) { var pull = new MenuItem(); - pull.Header = new Views.NameHighlightedTextBlock("BranchCM.PullInto", $"{branch.Remote}/{branch.Name}", current.Name); + pull.Header = new Views.NameHighlightedTextBlock("BranchCM.PullInto", name, current.Name); pull.Icon = App.CreateMenuIcon("Icons.Pull"); pull.Click += (o, e) => { @@ -1516,17 +1517,17 @@ namespace SourceGit.ViewModels }; var merge = new MenuItem(); - merge.Header = new Views.NameHighlightedTextBlock("BranchCM.Merge", $"{branch.Remote}/{branch.Name}", current.Name); + merge.Header = new Views.NameHighlightedTextBlock("BranchCM.Merge", name, current.Name); merge.Icon = App.CreateMenuIcon("Icons.Merge"); merge.Click += (o, e) => { if (PopupHost.CanCreatePopup()) - PopupHost.ShowPopup(new Merge(this, $"{branch.Remote}/{branch.Name}", current.Name)); + PopupHost.ShowPopup(new Merge(this, name, current.Name)); e.Handled = true; }; var rebase = new MenuItem(); - rebase.Header = new Views.NameHighlightedTextBlock("BranchCM.Rebase", current.Name, $"{branch.Remote}/{branch.Name}"); + rebase.Header = new Views.NameHighlightedTextBlock("BranchCM.Rebase", current.Name, name); rebase.Icon = App.CreateMenuIcon("Icons.Rebase"); rebase.Click += (o, e) => { @@ -1573,7 +1574,7 @@ namespace SourceGit.ViewModels menu.Items.Add(new MenuItem() { Header = "-" }); var delete = new MenuItem(); - delete.Header = new Views.NameHighlightedTextBlock("BranchCM.Delete", $"{branch.Remote}/{branch.Name}"); + delete.Header = new Views.NameHighlightedTextBlock("BranchCM.Delete", name); delete.Icon = App.CreateMenuIcon("Icons.Clear"); delete.Click += (o, e) => { @@ -1617,7 +1618,7 @@ namespace SourceGit.ViewModels copy.Icon = App.CreateMenuIcon("Icons.Copy"); copy.Click += (o, e) => { - App.CopyText(branch.Remote + "/" + branch.Name); + App.CopyText(name); e.Handled = true; }; @@ -1810,7 +1811,7 @@ namespace SourceGit.ViewModels { var dup = b; var target = new MenuItem(); - target.Header = b.IsLocal ? b.Name : $"{b.Remote}/{b.Name}"; + target.Header = b.FriendlyName; target.Icon = App.CreateMenuIcon(b.IsCurrent ? "Icons.Check" : "Icons.Branch"); target.Click += (_, e) => { diff --git a/src/Views/Archive.axaml b/src/Views/Archive.axaml index 33b58fe4..6d9bc3b2 100644 --- a/src/Views/Archive.axaml +++ b/src/Views/Archive.axaml @@ -23,7 +23,7 @@ - + diff --git a/src/Views/BranchCompare.axaml b/src/Views/BranchCompare.axaml index 9ad7db03..1ba30119 100644 --- a/src/Views/BranchCompare.axaml +++ b/src/Views/BranchCompare.axaml @@ -61,7 +61,7 @@ User="{Binding BaseHead.Author}"/> - + @@ -82,7 +82,7 @@ User="{Binding ToHead.Author}"/> - + diff --git a/src/Views/CreateBranch.axaml b/src/Views/CreateBranch.axaml index a6565807..f69ea150 100644 --- a/src/Views/CreateBranch.axaml +++ b/src/Views/CreateBranch.axaml @@ -24,7 +24,7 @@ - + diff --git a/src/Views/CreateTag.axaml b/src/Views/CreateTag.axaml index f3de6717..a3f901a4 100644 --- a/src/Views/CreateTag.axaml +++ b/src/Views/CreateTag.axaml @@ -23,7 +23,7 @@ - + diff --git a/src/Views/DeleteBranch.axaml b/src/Views/DeleteBranch.axaml index 8245c091..07230de9 100644 --- a/src/Views/DeleteBranch.axaml +++ b/src/Views/DeleteBranch.axaml @@ -18,7 +18,7 @@ - + diff --git a/src/Views/DeleteMultipleBranches.axaml b/src/Views/DeleteMultipleBranches.axaml index 75f28674..9fd87b90 100644 --- a/src/Views/DeleteMultipleBranches.axaml +++ b/src/Views/DeleteMultipleBranches.axaml @@ -64,8 +64,7 @@ - + diff --git a/src/Views/FastForwardWithoutCheckout.axaml b/src/Views/FastForwardWithoutCheckout.axaml index cb33c09e..713e9c3b 100644 --- a/src/Views/FastForwardWithoutCheckout.axaml +++ b/src/Views/FastForwardWithoutCheckout.axaml @@ -16,7 +16,7 @@ - + diff --git a/src/Views/InteractiveRebase.axaml b/src/Views/InteractiveRebase.axaml index 8e966509..d4238d65 100644 --- a/src/Views/InteractiveRebase.axaml +++ b/src/Views/InteractiveRebase.axaml @@ -54,7 +54,7 @@ - + diff --git a/src/Views/Pull.axaml b/src/Views/Pull.axaml index fca58231..0d749e60 100644 --- a/src/Views/Pull.axaml +++ b/src/Views/Pull.axaml @@ -48,7 +48,7 @@ - + diff --git a/src/Views/Rebase.axaml b/src/Views/Rebase.axaml index aa52a15b..f98756af 100644 --- a/src/Views/Rebase.axaml +++ b/src/Views/Rebase.axaml @@ -31,7 +31,7 @@ - + diff --git a/src/Views/Repository.axaml b/src/Views/Repository.axaml index edbf9432..0a3a9478 100644 --- a/src/Views/Repository.axaml +++ b/src/Views/Repository.axaml @@ -269,7 +269,7 @@ - + @@ -281,7 +281,10 @@ - + @@ -294,7 +297,8 @@ IsVisible="{Binding IsBranch}" Checked="OnToggleFilter" Unchecked="OnToggleFilter" - IsChecked="{Binding IsFiltered}"/> + IsChecked="{Binding IsFiltered}" + ToolTip.Tip="{DynamicResource Text.Filter}"/> @@ -343,7 +347,7 @@ - + @@ -357,7 +361,8 @@ Checked="OnToggleFilter" Unchecked="OnToggleFilter" IsVisible="{Binding IsBranch}" - IsChecked="{Binding IsFiltered}"/> + IsChecked="{Binding IsFiltered}" + ToolTip.Tip="{DynamicResource Text.Filter}"/> @@ -444,7 +449,8 @@ Background="Transparent" Checked="OnToggleFilter" Unchecked="OnToggleFilter" - IsChecked="{Binding IsFiltered}"/> + IsChecked="{Binding IsFiltered}" + ToolTip.Tip="{DynamicResource Text.Filter}"/> From 57a2144777f6362d75212d6b3d160715a5e0c28b Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 2 Jul 2024 12:30:12 +0800 Subject: [PATCH 3/5] fix: try to fix the timezone issue (#229) --- src/Commands/Blame.cs | 3 +-- src/Models/Commit.cs | 11 +++++------ src/Models/Stash.cs | 4 +--- src/Models/Statistics.cs | 4 +--- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/Commands/Blame.cs b/src/Commands/Blame.cs index 5d047d8c..e4c7f12a 100644 --- a/src/Commands/Blame.cs +++ b/src/Commands/Blame.cs @@ -9,7 +9,6 @@ namespace SourceGit.Commands [GeneratedRegex(@"^\^?([0-9a-f]+)\s+.*\((.*)\s+(\d+)\s+[\-\+]?\d+\s+\d+\) (.*)")] private static partial Regex REG_FORMAT(); - private static readonly DateTime UTC_START = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).ToLocalTime(); public Blame(string repo, string file, string revision) { @@ -67,7 +66,7 @@ namespace SourceGit.Commands var commit = match.Groups[1].Value; var author = match.Groups[2].Value; var timestamp = int.Parse(match.Groups[3].Value); - var when = UTC_START.AddSeconds(timestamp).ToString("yyyy/MM/dd"); + var when = DateTime.UnixEpoch.AddSeconds(timestamp).ToLocalTime().ToString("yyyy/MM/dd"); var info = new Models.BlameLineInfo() { diff --git a/src/Models/Commit.cs b/src/Models/Commit.cs index 363b4b08..0a95eac3 100644 --- a/src/Models/Commit.cs +++ b/src/Models/Commit.cs @@ -19,14 +19,13 @@ namespace SourceGit.Models public bool IsMerged { get; set; } = false; public Thickness Margin { get; set; } = new Thickness(0); - public string AuthorTimeStr => _utcStart.AddSeconds(AuthorTime).ToString("yyyy/MM/dd HH:mm:ss"); - public string CommitterTimeStr => _utcStart.AddSeconds(CommitterTime).ToString("yyyy/MM/dd HH:mm:ss"); - public string AuthorTimeShortStr => _utcStart.AddSeconds(AuthorTime).ToString("yyyy/MM/dd"); - public string CommitterTimeShortStr => _utcStart.AddSeconds(CommitterTime).ToString("yyyy/MM/dd"); + + public string AuthorTimeStr => DateTime.UnixEpoch.AddSeconds(AuthorTime).ToLocalTime().ToString("yyyy/MM/dd HH:mm:ss"); + public string CommitterTimeStr => DateTime.UnixEpoch.AddSeconds(CommitterTime).ToLocalTime().ToString("yyyy/MM/dd HH:mm:ss"); + public string AuthorTimeShortStr => DateTime.UnixEpoch.AddSeconds(AuthorTime).ToLocalTime().ToString("yyyy/MM/dd"); + public string CommitterTimeShortStr => DateTime.UnixEpoch.AddSeconds(CommitterTime).ToString("yyyy/MM/dd"); public bool IsCommitterVisible => Author != Committer || AuthorTime != CommitterTime; public bool IsCurrentHead => Decorators.Find(x => x.Type is DecoratorType.CurrentBranchHead or DecoratorType.CurrentCommitHead) != null; - - private static readonly DateTime _utcStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).ToLocalTime(); } } diff --git a/src/Models/Stash.cs b/src/Models/Stash.cs index 2fab0f2f..06da763a 100644 --- a/src/Models/Stash.cs +++ b/src/Models/Stash.cs @@ -4,13 +4,11 @@ namespace SourceGit.Models { public class Stash { - private static readonly DateTime UTC_START = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).ToLocalTime(); - public string Name { get; set; } = ""; public string SHA { get; set; } = ""; public ulong Time { get; set; } = 0; public string Message { get; set; } = ""; - public string TimeStr => UTC_START.AddSeconds(Time).ToString("yyyy/MM/dd HH:mm:ss"); + public string TimeStr => DateTime.UnixEpoch.AddSeconds(Time).ToLocalTime().ToString("yyyy/MM/dd HH:mm:ss"); } } diff --git a/src/Models/Statistics.cs b/src/Models/Statistics.cs index b0d619e1..abdd24df 100644 --- a/src/Models/Statistics.cs +++ b/src/Models/Statistics.cs @@ -49,7 +49,6 @@ namespace SourceGit.Models public Statistics() { - _utcStart = DateTime.UnixEpoch; _today = DateTime.Today; _thisWeekStart = _today.AddSeconds(-(int)_today.DayOfWeek * 3600 * 24 - _today.Hour * 3600 - _today.Minute * 60 - _today.Second); _thisWeekEnd = _thisWeekStart.AddDays(7); @@ -115,7 +114,7 @@ namespace SourceGit.Models public void AddCommit(string committer, double timestamp) { - var time = _utcStart.AddSeconds(timestamp).ToLocalTime(); + var time = DateTime.UnixEpoch.AddSeconds(timestamp).ToLocalTime(); if (time.CompareTo(_thisWeekStart) >= 0 && time.CompareTo(_thisWeekEnd) < 0) { Week.AddCommit((int)time.DayOfWeek, committer); @@ -136,7 +135,6 @@ namespace SourceGit.Models Week.Complete(); } - private readonly DateTime _utcStart; private readonly DateTime _today; private readonly DateTime _thisWeekStart; private readonly DateTime _thisWeekEnd; From 21ec16b4ccb700a33a8b43e46aa95b8b9b0796fe Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 2 Jul 2024 12:35:09 +0800 Subject: [PATCH 4/5] readme: add `winget` install tips --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3636e12e..f79c774b 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,9 @@ This software creates a folder `$"{System.Environment.SpecialFolder.ApplicationD For **Windows** users: * **MSYS Git is NOT supported**. Please use official [Git for Windows](https://git-scm.com/download/win) instead. -* `sourcegit_x.y.win-x64.zip` may be reported as virus by Windows Defender. I don't know why. I have manually tested the zip to be uploaded using Windows Defender before uploading and no virus was found. If you have installed .NET 8 SDK locally, I suggest you to compile it yourself. And if you have any idea about how to fix this, please open an issue. +* You can install the latest stable by `winget install SourceGit`. + - Note: `winget` will install this software as a commandline tool. You need run `SourceGit` from console or `Win+R` at the first time. Then you can add it to the taskbar. +* Portable versions can be found in [Releases](https://github.com/sourcegit-scm/sourcegit/releases/latest) For **macOS** users: From 50fe25a631967af4107fa7bf40bd335d4839c5b1 Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 2 Jul 2024 14:17:21 +0800 Subject: [PATCH 5/5] enhance: only load repository settings if file exists --- src/ViewModels/Repository.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index 3246b967..86f47656 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -268,11 +268,18 @@ namespace SourceGit.ViewModels public void Open() { var settingsFile = Path.Combine(_gitDir, "sourcegit.settings"); - try + if (File.Exists(settingsFile)) { - _settings = JsonSerializer.Deserialize(File.ReadAllText(settingsFile), JsonCodeGen.Default.RepositorySettings); + try + { + _settings = JsonSerializer.Deserialize(File.ReadAllText(settingsFile), JsonCodeGen.Default.RepositorySettings); + } + catch + { + _settings = new RepositorySettings(); + } } - catch + else { _settings = new RepositorySettings(); }