public static bool CreatePatch(ChangeSet items, bool test)
{
bool can = CanCreatePatch(items);
if (test || !can)
{
return(can);
}
Repository repo = items.Repository;
items = items.Clone();
List <DiffInfo> diffs = new List <DiffInfo> ();
object[] exts = AddinManager.GetExtensionObjects("/MonoDevelop/VersionControl/CommitDialogExtensions", typeof(CommitDialogExtension), false);
List <CommitDialogExtension> activeExtensions = new List <CommitDialogExtension> ();
try
{
foreach (CommitDialogExtension ext in exts)
{
if (ext.Initialize(items))
{
activeExtensions.Add(ext);
if (!ext.OnBeginCommit(items))
{
break;
}
}
else
{
ext.Destroy();
}
}
diffs.AddRange(repo.PathDiff(items, false));
}
finally
{
foreach (CommitDialogExtension ext in activeExtensions)
{
ext.OnEndCommit(items, false);
ext.Destroy();
}
}
string patch = repo.CreatePatch(diffs);
string filename = string.Format("{0}.diff", ((string)items.BaseLocalPath.FullPath).TrimEnd(Path.DirectorySeparatorChar));
IdeApp.Workbench.NewDocument(filename, "text/x-diff", patch);
return(can);
}