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); }