feature: add an option to clean up ignored files when discard all changes in repo (#531)

This commit is contained in:
leo 2024-10-02 21:17:44 +08:00
parent a59600ce18
commit 4e57cd50cd
No known key found for this signature in database
12 changed files with 104 additions and 46 deletions

View file

@ -7,7 +7,6 @@ namespace SourceGit.ViewModels
public string Branch
{
get;
private set;
}
public Models.DealWithLocalChanges PreAction
@ -49,7 +48,7 @@ namespace SourceGit.ViewModels
else if (PreAction == Models.DealWithLocalChanges.Discard)
{
SetProgressDescription("Discard local changes ...");
Commands.Discard.All(_repo.FullPath);
Commands.Discard.All(_repo.FullPath, false);
}
}

View file

@ -7,7 +7,6 @@ namespace SourceGit.ViewModels
public Models.Commit Commit
{
get;
private set;
}
public bool AutoStash
@ -49,7 +48,7 @@ namespace SourceGit.ViewModels
else
{
SetProgressDescription("Discard local changes ...");
Commands.Discard.All(_repo.FullPath);
Commands.Discard.All(_repo.FullPath, false);
}
}

View file

@ -17,7 +17,6 @@ namespace SourceGit.ViewModels
public object BasedOn
{
get;
private set;
}
public Models.DealWithLocalChanges PreAction
@ -105,7 +104,7 @@ namespace SourceGit.ViewModels
else if (PreAction == Models.DealWithLocalChanges.Discard)
{
SetProgressDescription("Discard local changes...");
Commands.Discard.All(_repo.FullPath);
Commands.Discard.All(_repo.FullPath, false);
}
}

View file

@ -3,19 +3,45 @@ using System.Threading.Tasks;
namespace SourceGit.ViewModels
{
public class DiscardAllMode
{
public bool IncludeIgnored
{
get;
set;
} = false;
}
public class DiscardSingleFile
{
public string Path
{
get;
set;
} = string.Empty;
}
public class DiscardMultipleFiles
{
public int Count
{
get;
set;
} = 0;
}
public class Discard : Popup
{
public object Mode
{
get;
private set;
}
public Discard(Repository repo)
{
_repo = repo;
Mode = new Models.Null();
Mode = new DiscardAllMode();
View = new Views.Discard { DataContext = this };
}
@ -25,11 +51,11 @@ namespace SourceGit.ViewModels
_changes = changes;
if (_changes == null)
Mode = new Models.Null();
Mode = new DiscardAllMode();
else if (_changes.Count == 1)
Mode = _changes[0].Path;
Mode = new DiscardSingleFile() { Path = _changes[0].Path };
else
Mode = _changes.Count;
Mode = new DiscardMultipleFiles() { Count = _changes.Count };
View = new Views.Discard() { DataContext = this };
}
@ -41,8 +67,8 @@ namespace SourceGit.ViewModels
return Task.Run(() =>
{
if (_changes == null)
Commands.Discard.All(_repo.FullPath);
if (Mode is DiscardAllMode all)
Commands.Discard.All(_repo.FullPath, all.IncludeIgnored);
else
Commands.Discard.Changes(_repo.FullPath, _changes);

View file

@ -139,7 +139,7 @@ namespace SourceGit.ViewModels
else if (PreAction == Models.DealWithLocalChanges.Discard)
{
SetProgressDescription("Discard local changes ...");
Commands.Discard.All(_repo.FullPath);
Commands.Discard.All(_repo.FullPath, false);
}
}

View file

@ -1271,7 +1271,6 @@ namespace SourceGit.ViewModels
var discard = new MenuItem();
discard.Header = App.Text("BranchCM.DiscardAll");
discard.Icon = App.CreateMenuIcon("Icons.Undo");
discard.IsEnabled = _localChangesCount > 0;
discard.Click += (_, e) =>
{
if (PopupHost.CanCreatePopup())