diff --git a/src/Commands/Fetch.cs b/src/Commands/Fetch.cs index 914361257..2a0a4e72a 100644 --- a/src/Commands/Fetch.cs +++ b/src/Commands/Fetch.cs @@ -5,7 +5,7 @@ namespace SourceGit.Commands { public class Fetch : Command { - public Fetch(string repo, string remote, bool noTags, bool force) + public Fetch(string repo, string remote, bool noTags, bool force, bool prune) { _remote = remote; @@ -17,6 +17,8 @@ public Fetch(string repo, string remote, bool noTags, bool force) builder.Append(noTags ? "--no-tags " : "--tags "); if (force) builder.Append("--force "); + if (prune) + builder.Append("--prune "); builder.Append(remote); Args = builder.ToString(); diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index daa23e13d..8e027ed82 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -386,6 +386,7 @@ Fetch all remotes Force override local refs Fetch without tags + Prune deleted branches Remote: Fetch Remote Changes Assume unchanged diff --git a/src/ViewModels/AddRemote.cs b/src/ViewModels/AddRemote.cs index fb5f0264b..f48c1e2b5 100644 --- a/src/ViewModels/AddRemote.cs +++ b/src/ViewModels/AddRemote.cs @@ -105,7 +105,7 @@ public override async Task Sure() .Use(log) .SetAsync($"remote.{_name}.sshkey", _useSSH ? SSHKey : null); - await new Commands.Fetch(_repo.FullPath, _name, false, false) + await new Commands.Fetch(_repo.FullPath, _name, false, false, false) .Use(log) .RunAsync(); } diff --git a/src/ViewModels/Fetch.cs b/src/ViewModels/Fetch.cs index 43bc5a18a..b39b2d73c 100644 --- a/src/ViewModels/Fetch.cs +++ b/src/ViewModels/Fetch.cs @@ -43,6 +43,12 @@ public bool Force set => _repo.Settings.EnableForceOnFetch = value; } + public bool Prune + { + get => _prune; + set => SetProperty(ref _prune, value); + } + public Fetch(Repository repo, Models.Remote preferredRemote = null) { _repo = repo; @@ -62,6 +68,10 @@ public Fetch(Repository repo, Models.Remote preferredRemote = null) { SelectedRemote = _repo.Remotes[0]; } + + // Initialize prune from git config + var pruneConfig = new Commands.Config(_repo.FullPath).Get("fetch.prune"); + _prune = pruneConfig == "true"; } public override async Task Sure() @@ -71,19 +81,20 @@ public override async Task Sure() var navigateToUpstreamHEAD = _repo.SelectedView is Histories { AutoSelectedCommit: { IsCurrentHead: true } }; var notags = _repo.Settings.FetchWithoutTags; var force = _repo.Settings.EnableForceOnFetch; + var prune = Prune; var log = _repo.CreateLog("Fetch"); Use(log); if (FetchAllRemotes) { foreach (var remote in _repo.Remotes) - await new Commands.Fetch(_repo.FullPath, remote.Name, notags, force) + await new Commands.Fetch(_repo.FullPath, remote.Name, notags, force, prune) .Use(log) .RunAsync(); } else { - await new Commands.Fetch(_repo.FullPath, SelectedRemote.Name, notags, force) + await new Commands.Fetch(_repo.FullPath, SelectedRemote.Name, notags, force, prune) .Use(log) .RunAsync(); } @@ -106,5 +117,6 @@ public override async Task Sure() private readonly Repository _repo = null; private bool _fetchAllRemotes = false; + private bool _prune = false; } } diff --git a/src/Views/Fetch.axaml b/src/Views/Fetch.axaml index 1a60f3eb7..0cace187f 100644 --- a/src/Views/Fetch.axaml +++ b/src/Views/Fetch.axaml @@ -18,7 +18,7 @@ Text="{DynamicResource Text.Fetch.Title}"/> - + + +