Skip to content

Commit

Permalink
FileStatusList handling of parents and selected revision
Browse files Browse the repository at this point in the history
Resolves gitextensions#4561
Refactoring to consistently use Revision and Parents in FileStatusList
FileStatusList forms should use that instead of assuming parents from RevisionGrid.GetSelectedRevisions().
The changes will remove code too.

Note: This commits enables corrections for gitextensions#4387 and gitextensions#4396 etc too.

Review comments: typecasting for GitRevision, consistently use GitItemsWithParents
  • Loading branch information
gerhardol committed Mar 5, 2018
1 parent cd4ad61 commit ab8d864
Show file tree
Hide file tree
Showing 9 changed files with 170 additions and 220 deletions.
12 changes: 6 additions & 6 deletions GitUI/CommandsDialogs/FormCommit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -718,7 +718,7 @@ private void InitializedStaged()
{
Cursor.Current = Cursors.WaitCursor;
SolveMergeconflicts.Visible = Module.InTheMiddleOfConflictedMerge();
Staged.GitItemStatuses = Module.GetStagedFilesWithSubmodulesStatus();
Staged.SetDiffs(new GitRevision(GitRevision.IndexGuid), new GitRevision("HEAD"), Module.GetStagedFilesWithSubmodulesStatus());
Cursor.Current = Cursors.Default;
}

Expand Down Expand Up @@ -747,8 +747,8 @@ private void LoadUnstagedOutput(IList<GitItemStatus> allChangedFiles)
else
unStagedFiles.Add(fileStatus);
}
Unstaged.GitItemStatuses = unStagedFiles;
Staged.GitItemStatuses = stagedFiles;
Unstaged.SetDiffs(new GitRevision(GitRevision.UnstagedGuid), new GitRevision(GitRevision.IndexGuid), unStagedFiles);
Staged.SetDiffs(new GitRevision(GitRevision.IndexGuid), new GitRevision("HEAD"), stagedFiles);

Loading.Visible = false;
LoadingStaged.Visible = false;
Expand Down Expand Up @@ -1309,8 +1309,8 @@ private void Unstage(bool canUseUnstageAll = true)
item.IsStaged = false;
unStagedFiles.Add(item);
}
Staged.GitItemStatuses = stagedFiles;
Unstaged.GitItemStatuses = unStagedFiles;
Unstaged.SetDiffs(new GitRevision(GitRevision.UnstagedGuid), new GitRevision(GitRevision.IndexGuid), unStagedFiles);
Staged.SetDiffs(new GitRevision(GitRevision.IndexGuid), new GitRevision("HEAD"), stagedFiles);
_skipUpdate = false;
Staged.SelectStoredNextIndex();

Expand Down Expand Up @@ -1498,7 +1498,7 @@ private void Stage(IList<GitItemStatus> gitItemStatuses)
{
item.SubmoduleStatus.Result.Status = SubmoduleStatus.Unknown;
}
Unstaged.GitItemStatuses = unStagedFiles;
Unstaged.SetDiffs(new GitRevision(GitRevision.UnstagedGuid), new GitRevision(GitRevision.IndexGuid), unStagedFiles);
Unstaged.ClearSelected();
_skipUpdate = false;
Unstaged.SelectStoredNextIndex();
Expand Down
2 changes: 1 addition & 1 deletion GitUI/CommandsDialogs/FormDiff.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ private void ShowSelectedFileDiff()

IList<GitRevision> items = new List<GitRevision> { _headRevision, baseCommit };
if (items.Count() == 1)
items.Add(new GitRevision(DiffFiles.SelectedItemParent));
items.Add(DiffFiles.SelectedItemParent);
DiffText.ViewChanges(items, DiffFiles.SelectedItem, String.Empty);
}

Expand Down
1 change: 0 additions & 1 deletion GitUI/CommandsDialogs/FormLog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ private void ViewSelectedFileDiff()
private void RevisionGridSelectionChanged(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
DiffFiles.GitItemStatuses = null;
DiffFiles.SetDiffs(RevisionGrid.GetSelectedRevisions());
Cursor.Current = Cursors.Default;
}
Expand Down
12 changes: 4 additions & 8 deletions GitUI/CommandsDialogs/FormStash.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,24 +90,20 @@ private void InitializeSoft()
{
GitStash gitStash = Stashes.SelectedItem as GitStash;

Stashed.GitItemStatuses = null;
Stashed.SetDiffs();

Loading.Visible = true;
Stashes.Enabled = false;
refreshToolStripButton.Enabled = false;
toolStripButton_customMessage.Enabled = false;
if (gitStash == null)
{
Stashed.GitItemStatuses = null;
}
else if (gitStash == currentWorkingDirStashItem)
if (gitStash == currentWorkingDirStashItem)
{
toolStripButton_customMessage.Enabled = true;
_asyncLoader.Load(() => Module.GetAllChangedFiles(), LoadGitItemStatuses);
Clear.Enabled = false; // disallow Drop (of current working directory)
Apply.Enabled = false; // disallow Apply (of current working directory)
}
else
else if (gitStash != null)
{
_asyncLoader.Load(() => Module.GetStashDiffFiles(gitStash.Name), LoadGitItemStatuses);
Clear.Enabled = true; // allow Drop
Expand All @@ -117,7 +113,7 @@ private void InitializeSoft()

private void LoadGitItemStatuses(IList<GitItemStatus> gitItemStatuses)
{
Stashed.GitItemStatuses = gitItemStatuses;
Stashed.SetDiffs(items: gitItemStatuses);
Loading.Visible = false;
Stashes.Enabled = true;
refreshToolStripButton.Enabled = true;
Expand Down
6 changes: 3 additions & 3 deletions GitUI/CommandsDialogs/RepoHosting/ViewPullRequestsForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ private void ResetAllAndShowLoadingPullRequests()
{
_discussionWB.DocumentText = "";
_diffViewer.ViewPatch("");
_fileStatusList.GitItemStatuses = null;
_fileStatusList.SetDiffs();

_pullRequestsList.Items.Clear();
var lvi = new ListViewItem("");
Expand Down Expand Up @@ -209,7 +209,7 @@ private void _pullRequestsList_SelectedIndexChanged(object sender, EventArgs e)
return;
_discussionWB.DocumentText = DiscussionHtmlCreator.CreateFor(_currentPullRequestInfo);
_diffViewer.ViewPatch("");
_fileStatusList.GitItemStatuses = null;
_fileStatusList.SetDiffs();

LoadDiffPatch();
LoadDiscussion();
Expand Down Expand Up @@ -281,7 +281,7 @@ private void SplitAndLoadDiff(string diffData)
_diffCache.Add(gis.Name, match.Groups[3].Value);
}

_fileStatusList.GitItemStatuses = giss;
_fileStatusList.SetDiffs(items: giss);
}

private void _fetchBtn_Click(object sender, EventArgs e)
Expand Down
17 changes: 8 additions & 9 deletions GitUI/CommandsDialogs/RevisionDiff.cs
Original file line number Diff line number Diff line change
Expand Up @@ -203,10 +203,10 @@ private ContextMenuSelectionInfo GetSelectionInfo()
{
IList<GitRevision> selectedRevisions = _revisionGrid.GetSelectedRevisions();

bool isAnyCombinedDiff = DiffFiles.SelectedItemParents.Any(item => item == DiffFiles.CombinedDiff.Text);
bool isAnyCombinedDiff = DiffFiles.SelectedItemParents.Any(item => item.Guid == DiffFiles.CombinedDiff.Text);
bool isExactlyOneItemSelected = DiffFiles.SelectedItems.Count() == 1;
bool isAnyItemSelected = DiffFiles.SelectedItems.Count() > 0;
var isCombinedDiff = isExactlyOneItemSelected && DiffFiles.CombinedDiff.Text == DiffFiles.SelectedItemParent;
var isCombinedDiff = isExactlyOneItemSelected && DiffFiles.CombinedDiff.Text == DiffFiles.SelectedItemParent?.Guid;
var selectedItemStatus = DiffFiles.SelectedItem;
bool isBareRepository = Module.IsBareRepository();
bool singleFileExists = isExactlyOneItemSelected && File.Exists(_fullPathResolver.Resolve(DiffFiles.SelectedItem.Name));
Expand Down Expand Up @@ -248,10 +248,10 @@ private async Task ShowSelectedFileDiff()

if (items.Count() == 1)
{
items.Add(new GitRevision(DiffFiles.SelectedItemParent));
items.Add(DiffFiles.SelectedItemParent);

if (!string.IsNullOrWhiteSpace(DiffFiles.SelectedItemParent)
&& DiffFiles.SelectedItemParent == DiffFiles.CombinedDiff.Text)
if (!string.IsNullOrWhiteSpace(DiffFiles.SelectedItemParent?.Guid)
&& DiffFiles.SelectedItemParent?.Guid == DiffFiles.CombinedDiff.Text)
{
var diffOfConflict = Module.GetCombinedDiffContent(items.First(), DiffFiles.SelectedItem.Name,
DiffText.GetExtraDiffArguments(), DiffText.Encoding);
Expand Down Expand Up @@ -496,8 +496,7 @@ private void openWithDifftoolToolStripMenuItem_Click(object sender, EventArgs e)

foreach (var itemWithParent in DiffFiles.SelectedItemsWithParent)
{
GitItemStatus selectedItem = itemWithParent.Item;
_revisionGrid.OpenWithDifftool(selectedItem.Name, selectedItem.OldName, diffKind, itemWithParent.Item.IsTracked);
_revisionGrid.OpenWithDifftool(itemWithParent.Item.Name, itemWithParent.Item.OldName, diffKind, itemWithParent.Item.IsTracked);
}
}

Expand Down Expand Up @@ -710,15 +709,15 @@ private bool DeleteSelectedFiles()
{
try
{
if (DiffFiles.SelectedItem == null || !DiffFiles.Revision.IsArtificial ||
if (DiffFiles.SelectedItem == null || DiffFiles.Revision == null || !DiffFiles.Revision.IsArtificial ||
MessageBox.Show(this, _deleteSelectedFiles.Text, _deleteSelectedFilesCaption.Text, MessageBoxButtons.YesNo) !=
DialogResult.Yes)
{
return false;
}

var selectedItems = DiffFiles.SelectedItems;
if (DiffFiles.Revision.Guid == GitRevision.IndexGuid)
if (DiffFiles.Revision?.Guid == GitRevision.IndexGuid)
{
var files = new List<GitItemStatus>();
var stagedItems = selectedItems.Where(item => item.IsStaged);
Expand Down
23 changes: 9 additions & 14 deletions GitUI/HelperDialogs/FormCommitDiff.cs
Original file line number Diff line number Diff line change
@@ -1,44 +1,39 @@
using System;
using System;
using System.Windows.Forms;
using GitCommands;

namespace GitUI.HelperDialogs
{
public sealed partial class FormCommitDiff : GitModuleForm
{
private readonly GitRevision _revision;

private FormCommitDiff(GitUICommands aCommands)
: base(aCommands)
{
InitializeComponent();
Translate();
DiffText.ExtraDiffArgumentsChanged += DiffText_ExtraDiffArgumentsChanged;
DiffFiles.Focus();
DiffFiles.GitItemStatuses = null;
DiffFiles.SetDiffs();
}

private FormCommitDiff()
: this(null)
{

}

public FormCommitDiff(GitUICommands aCommands, string revision)
public FormCommitDiff(GitUICommands aCommands, string revisionGuid)
: this(aCommands)
{
// We cannot use the GitRevision from revision grid. When a filtered commit list
// is shown (file history/normal filter) the parent guids are not the 'real' parents,
// but the parents in the filtered list.
_revision = Module.GetRevision(revision);
GitRevision revision = Module.GetRevision(revisionGuid);

if (_revision != null)
if (revision != null)
{
DiffFiles.SetDiff(_revision);

commitInfo.Revision = _revision;
DiffFiles.SetDiffs(revision);

Text = "Diff - " + GitRevision.ToShortSha(_revision.Guid) + " - " + _revision.AuthorDate + " - " + _revision.Author + " - " + Module.WorkingDir; ;
Text = "Diff - " + GitRevision.ToShortSha(revision.Guid) + " - " + revision.AuthorDate + " - " + revision.Author + " - " + Module.WorkingDir; ;
}
}

Expand All @@ -49,10 +44,10 @@ private void DiffFiles_SelectedIndexChanged(object sender, EventArgs e)

private void ViewSelectedDiff()
{
if (DiffFiles.SelectedItem != null && _revision != null)
if (DiffFiles.SelectedItem != null && DiffFiles.Revision != null)
{
Cursor.Current = Cursors.WaitCursor;
DiffText.ViewChanges(DiffFiles.SelectedItemParent, _revision.Guid, DiffFiles.SelectedItem, String.Empty);
DiffText.ViewChanges(DiffFiles.SelectedItemParent?.Guid, DiffFiles.Revision?.Guid, DiffFiles.SelectedItem, String.Empty);
Cursor.Current = Cursors.Default;
}
}
Expand Down
2 changes: 1 addition & 1 deletion GitUI/UserControls/FileStatusList.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit ab8d864

Please sign in to comment.