public static string GetSelectedPatch(this FileViewer diffViewer, RevisionGrid grid, GitItemStatus file)
{
IList<GitRevision> revisions = grid.GetSelectedRevisions();
if (revisions.Count == 0)
return null;
if (revisions[0].Guid == GitRevision.UncommittedWorkingDirGuid) //working dir changes
{
if (file.IsTracked)
return Settings.Module.GetCurrentChanges(file.Name, file.OldName, false, diffViewer.GetExtraDiffArguments(), diffViewer.Encoding);
return FileReader.ReadFileContent(Settings.WorkingDir + file.Name, diffViewer.Encoding);
}
if (revisions[0].Guid == GitRevision.IndexGuid) //index
{
return Settings.Module.GetCurrentChanges(file.Name, file.OldName, true, diffViewer.GetExtraDiffArguments(), diffViewer.Encoding);
}
var secondRevision = revisions.Count == 2 ? revisions[1].Guid : revisions[0].Guid + "^";
PatchApply.Patch patch = Settings.Module.GetSingleDiff(revisions[0].Guid, secondRevision, file.Name, file.OldName,
diffViewer.GetExtraDiffArguments(), diffViewer.Encoding);
if (patch == null)
return null;
if (file.IsSubmodule)
return GitCommandHelpers.ProcessSubmodulePatch(patch.Text);
return patch.Text;
}