Skip to content

Commit

Permalink
Add extension methods for FileStatusItem
Browse files Browse the repository at this point in the history
  • Loading branch information
gerhardol committed May 13, 2020
1 parent 78d2e83 commit 6d3a2ae
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 73 deletions.
34 changes: 17 additions & 17 deletions GitUI/CommandsDialogs/FormCommit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1631,7 +1631,7 @@ private void UnstagedSelectionChanged(object sender, EventArgs e)
ClearDiffViewIfNoFilesLeft();
Staged.ClearSelected();

_currentSelection = Unstaged.SelectedGitItems.ToList();
_currentSelection = Unstaged.SelectedItems.Items().ToList();
FileStatusItem item = Unstaged.SelectedItem;
ShowChanges(item, false);

Expand Down Expand Up @@ -1698,8 +1698,8 @@ private void Unstage(bool canUseUnstageAll = true)
return;
}

// Staged.SelectedGitItems is needed only once, so we can safely convert to list here
var allFiles = Staged.SelectedGitItems.ToList();
// Staged.SelectedItems.Items() is needed only once, so we can safely convert to list here
var allFiles = Staged.SelectedItems.Items().ToList();
if (allFiles.Count == 0)
{
return;
Expand Down Expand Up @@ -1844,7 +1844,7 @@ private void StageClick(object sender, EventArgs e)
return;
}

Stage(Unstaged.SelectedGitItems.Where(s => !s.IsAssumeUnchanged && !s.IsSkipWorktree).ToList());
Stage(Unstaged.SelectedItems.Items().Where(s => !s.IsAssumeUnchanged && !s.IsSkipWorktree).ToList());
if (Unstaged.IsEmpty)
{
Message.Focus();
Expand All @@ -1854,7 +1854,7 @@ private void StageClick(object sender, EventArgs e)
private void Unstaged_DoubleClick(object sender, EventArgs e)
{
_currentFilesList = Unstaged;
Stage(Unstaged.SelectedGitItems.ToList());
Stage(Unstaged.SelectedItems.Items().ToList());
if (Unstaged.IsEmpty)
{
Message.Focus();
Expand Down Expand Up @@ -1890,7 +1890,7 @@ private void StagedSelectionChanged(object sender, EventArgs e)
ClearDiffViewIfNoFilesLeft();

Unstaged.ClearSelected();
_currentSelection = Staged.SelectedGitItems.ToList();
_currentSelection = Staged.SelectedItems.Items().ToList();
var item = Staged.SelectedItem;
ShowChanges(item, true);
}
Expand Down Expand Up @@ -2054,7 +2054,7 @@ private void ResetSoftClick(object sender, EventArgs e)
}

// Unstage file first, then reset
var selectedFiles = Staged.SelectedGitItems.ToList();
var selectedFiles = Staged.SelectedItems.Items().ToList();
toolStripProgressBar1.Visible = true;
toolStripProgressBar1.Maximum = selectedFiles.Count;
toolStripProgressBar1.Value = 0;
Expand Down Expand Up @@ -2449,7 +2449,7 @@ private void AssumeUnchangedToolStripMenuItemClick(object sender, EventArgs e)

SelectedDiff.Clear();

Module.AssumeUnchangedFiles(Unstaged.SelectedGitItems.ToList(), true, out _);
Module.AssumeUnchangedFiles(Unstaged.SelectedItems.Items().ToList(), true, out _);

Initialize();
}
Expand All @@ -2463,7 +2463,7 @@ private void DoNotAssumeUnchangedToolStripMenuItemClick(object sender, EventArgs

SelectedDiff.Clear();

Module.AssumeUnchangedFiles(Unstaged.SelectedGitItems.ToList(), false, out _);
Module.AssumeUnchangedFiles(Unstaged.SelectedItems.Items().ToList(), false, out _);

Initialize();
}
Expand All @@ -2477,7 +2477,7 @@ private void SkipWorktreeToolStripMenuItemClick(object sender, EventArgs e)

SelectedDiff.Clear();

Module.SkipWorktreeFiles(Unstaged.SelectedGitItems.ToList(), true);
Module.SkipWorktreeFiles(Unstaged.SelectedItems.Items().ToList(), true);

Initialize();
}
Expand All @@ -2491,7 +2491,7 @@ private void DoNotSkipWorktreeToolStripMenuItemClick(object sender, EventArgs e)

SelectedDiff.Clear();

Module.SkipWorktreeFiles(Unstaged.SelectedGitItems.ToList(), false);
Module.SkipWorktreeFiles(Unstaged.SelectedItems.Items().ToList(), false);

Initialize();
}
Expand Down Expand Up @@ -2576,7 +2576,7 @@ private void OpenFilesWithDiffTool(IEnumerable<GitItemStatus> items, string firs

private void OpenWithDifftoolToolStripMenuItemClick(object sender, EventArgs e)
{
OpenFilesWithDiffTool(Unstaged.SelectedGitItems, GitRevision.IndexGuid, GitRevision.WorkTreeGuid);
OpenFilesWithDiffTool(Unstaged.SelectedItems.Items(), GitRevision.IndexGuid, GitRevision.WorkTreeGuid);
}

private void OpenWithDiffTool()
Expand All @@ -2586,7 +2586,7 @@ private void OpenWithDiffTool()

private void ResetPartOfFileToolStripMenuItemClick(object sender, EventArgs e)
{
var items = Unstaged.SelectedGitItems.ToList();
var items = Unstaged.SelectedItems.Items().ToList();

if (items.Count != 1)
{
Expand Down Expand Up @@ -2979,7 +2979,7 @@ private void commitSubmoduleChanges_Click(object sender, EventArgs e)

private void resetSubmoduleChanges_Click(object sender, EventArgs e)
{
var unstagedFiles = Unstaged.SelectedGitItems.ToList();
var unstagedFiles = Unstaged.SelectedItems.Items().ToList();
if (unstagedFiles.Count == 0)
{
return;
Expand Down Expand Up @@ -3011,7 +3011,7 @@ private void resetSubmoduleChanges_Click(object sender, EventArgs e)

private void updateSubmoduleMenuItem_Click(object sender, EventArgs e)
{
var unstagedFiles = Unstaged.SelectedGitItems.ToList();
var unstagedFiles = Unstaged.SelectedItems.Items().ToList();
if (unstagedFiles.Count == 0)
{
return;
Expand All @@ -3027,7 +3027,7 @@ private void updateSubmoduleMenuItem_Click(object sender, EventArgs e)

private void stashSubmoduleChangesToolStripMenuItem_Click(object sender, EventArgs e)
{
var unstagedFiles = Unstaged.SelectedGitItems.ToList();
var unstagedFiles = Unstaged.SelectedItems.Items().ToList();
if (unstagedFiles.Count == 0)
{
return;
Expand Down Expand Up @@ -3148,7 +3148,7 @@ private void OpenContainingFolder(FileStatusList list)

private void stagedOpenDifftoolToolStripMenuItem9_Click(object sender, EventArgs e)
{
OpenFilesWithDiffTool(Staged.SelectedGitItems, "HEAD", GitRevision.IndexGuid);
OpenFilesWithDiffTool(Staged.SelectedItems.Items(), "HEAD", GitRevision.IndexGuid);
}

private void openFolderToolStripMenuItem10_Click(object sender, EventArgs e)
Expand Down
7 changes: 2 additions & 5 deletions GitUI/CommandsDialogs/FormDiff.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using GitExtUtils.GitUI.Theming;
using GitUI.HelperDialogs;
using GitUI.Theming;
using GitUI.UserControls;
using GitUIPluginInterfaces;
using JetBrains.Annotations;
using ResourceManager;
Expand Down Expand Up @@ -285,11 +286,7 @@ private void diffContextToolStripMenuItem_Opening(object sender, System.Componen

private ContextMenuDiffToolInfo GetContextMenuDiffToolInfo()
{
var parentIds = DiffFiles.SelectedItems
.Where(i => i.FirstRevision != null)
.Select(i => i.FirstRevision.ObjectId)
.Distinct()
.ToList();
var parentIds = DiffFiles.SelectedItems.FirstIds().ToList();
bool firstIsParent = _revisionTester.AllFirstAreParentsToSelected(parentIds, _headRevision);
bool localExists = _revisionTester.AnyLocalFileExists(DiffFiles.SelectedItems.Select(i => i.Item));

Expand Down
33 changes: 9 additions & 24 deletions GitUI/CommandsDialogs/RevisionDiffControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -280,15 +280,11 @@ private ContextMenuSelectionInfo GetSelectionInfo()
var selectedItems = DiffFiles.SelectedItems.ToList();

// Some items are not supported if more than one revision is selected
var revisions = selectedItems.Select(item => item.SecondRevision).Distinct().ToList();
var revisions = selectedItems.SecondRevs().ToList();
var selectedRev = revisions.Count() != 1 ? null : revisions.FirstOrDefault();

// First (A) is parent if one revision selected or if parent, then selected
var parentIds = selectedItems
.Where(i => i.FirstRevision != null)
.Select(i => i.FirstRevision.ObjectId)
.Distinct()
.ToList();
var parentIds = selectedItems.FirstIds().ToList();

// Combined diff is a display only diff, no manipulations
bool isAnyCombinedDiff = parentIds.Contains(ObjectId.CombinedDiffId);
Expand Down Expand Up @@ -353,7 +349,7 @@ private void ResetSelectedItemsTo(bool actsAsChild)
.Select(item => item.Item.Name).ToList();
Module.RemoveFiles(deletedItems, false);

foreach (var childId in selectedItems.Select(i => i.SecondRevision.ObjectId).Distinct())
foreach (var childId in selectedItems.SecondIds())
{
var itemsToCheckout = selectedItems
.Where(item => !item.Item.IsDeleted && item.SecondRevision.ObjectId == childId)
Expand All @@ -370,10 +366,7 @@ private void ResetSelectedItemsTo(bool actsAsChild)
.Select(item => item.Item.Name).ToList();
Module.RemoveFiles(addedItems, false);

foreach (var parentId in selectedItems
.Where(i => i.FirstRevision != null)
.Select(i => i.FirstRevision.ObjectId)
.Distinct())
foreach (var parentId in selectedItems.FirstIds())
{
var itemsToCheckout = selectedItems
.Where(item => !item.Item.IsNew && item.FirstRevision?.ObjectId == parentId)
Expand Down Expand Up @@ -696,14 +689,10 @@ private void SaveSelectedItemToTempFile(Action<string> onSaved)
private ContextMenuDiffToolInfo GetContextMenuDiffToolInfo()
{
// Some items are not supported if more than one revision is selected
var revisions = DiffFiles.SelectedItems.Select(item => item.SecondRevision).Distinct().ToList();
var revisions = DiffFiles.SelectedItems.SecondRevs().ToList();
var selectedRev = revisions.Count() != 1 ? null : revisions.FirstOrDefault();

var parentIds = DiffFiles.SelectedItems
.Where(i => i.FirstRevision != null)
.Select(i => i.FirstRevision.ObjectId)
.Distinct()
.ToList();
var parentIds = DiffFiles.SelectedItems.FirstIds().ToList();
bool firstIsParent = _gitRevisionTester.AllFirstAreParentsToSelected(parentIds, selectedRev);
bool localExists = _gitRevisionTester.AnyLocalFileExists(DiffFiles.SelectedItems.Select(i => i.Item));

Expand Down Expand Up @@ -732,7 +721,7 @@ private void openWithDifftoolToolStripMenuItem_DropDownOpening(object sender, Ev
MenuUtil.SetAsCaptionMenuItem(selectedDiffCaptionMenuItem, DiffContextMenu);

firstDiffCaptionMenuItem.Text = _firstRevision.Text +
(DescribeRevision(DiffFiles.SelectedItems.Select(i => i.FirstRevision).Distinct().ToList()) ?? string.Empty);
(DescribeRevision(DiffFiles.SelectedItems.FirstRevs().ToList()) ?? string.Empty);
firstDiffCaptionMenuItem.Visible = true;
MenuUtil.SetAsCaptionMenuItem(firstDiffCaptionMenuItem, DiffContextMenu);
}
Expand Down Expand Up @@ -771,7 +760,7 @@ private bool CanResetToRevision(ObjectId guid)
private void resetFileToToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
{
var items = DiffFiles.SelectedItems;
var selectedIds = items.Select(it => it.SecondRevision.ObjectId).Distinct().ToList();
var selectedIds = items.SecondIds().ToList();
if (selectedIds.Count == 0)
{
resetFileToSelectedToolStripMenuItem.Visible = false;
Expand All @@ -790,11 +779,7 @@ private void resetFileToToolStripMenuItem_DropDownOpening(object sender, EventAr
_selectedRevision + DescribeRevision(selectedIds.FirstOrDefault(), 50);
}

var parentIds = DiffFiles.SelectedItems
.Where(i => i.FirstRevision != null)
.Select(i => i.FirstRevision.ObjectId)
.Distinct()
.ToList();
var parentIds = DiffFiles.SelectedItems.FirstIds().ToList();
if (parentIds.Count != 1 || !CanResetToRevision(parentIds.FirstOrDefault()))
{
resetFileToParentToolStripMenuItem.Visible = false;
Expand Down
41 changes: 41 additions & 0 deletions GitUI/UserControls/FileStatusItemExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System.Collections.Generic;
using System.Linq;
using GitCommands;
using GitUIPluginInterfaces;

namespace GitUI.UserControls
{
public static class FileStatusItemExtensions
{
public static IEnumerable<GitRevision> FirstRevs(this IEnumerable<FileStatusItem> l)
{
return l.Where(i => i.FirstRevision != null)
.Select(i => i.FirstRevision)
.Distinct();
}

public static IEnumerable<ObjectId> FirstIds(this IEnumerable<FileStatusItem> l)
{
return l.Where(i => i.FirstRevision != null)
.Select(i => i.FirstRevision.ObjectId)
.Distinct();
}

public static IEnumerable<GitRevision> SecondRevs(this IEnumerable<FileStatusItem> l)
{
return l.Select(i => i.SecondRevision)
.Distinct();
}

public static IEnumerable<ObjectId> SecondIds(this IEnumerable<FileStatusItem> l)
{
return l.Select(i => i.SecondRevision.ObjectId)
.Distinct();
}

public static IEnumerable<GitItemStatus> Items(this IEnumerable<FileStatusItem> l)
{
return l.Select(i => i.Item);
}
}
}
3 changes: 1 addition & 2 deletions GitUI/UserControls/FileStatusList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ private bool FilterVisibleInternal

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public IReadOnlyList<GitItemStatus> GitItemFilteredStatuses => AllItems.Select(i => i.Item).AsReadOnlyList();
public IReadOnlyList<GitItemStatus> GitItemFilteredStatuses => AllItems.Items().AsReadOnlyList();

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
Expand Down Expand Up @@ -364,7 +364,6 @@ ListViewItem GetItemByStatus(GitItemStatus status)
[Browsable(false)]
public IEnumerable<GitItemStatus> SelectedGitItems
{
get => SelectedItems.Select(i => i.Item);
set
{
if (value == null)
Expand Down
Loading

0 comments on commit 6d3a2ae

Please sign in to comment.