public ChangeSet CreateChangeSet(AssemblyNode assemblyNode) { try { var visitor = new ChangeSetNodeVisitor(ignoreChangeSet, true); assemblyNode.Accept(visitor); return(visitor.AsChangeSet()); } catch (Exception ex) { Console.WriteLine("Could not decompiler: \r\n" + ex); throw ex; } }
public string CreateXMLDiff(AssemblyNode assemblyNode) { try { var visitor = new ChangeSetNodeVisitor(ignoreChangeSet, true); assemblyNode.Accept(visitor); var changeSet = visitor.AsChangeSet(); var xmlSerializer = new XmlSerializer(typeof(ChangeSet)); using (var stringWriter = new StringWriter()) { xmlSerializer.Serialize(stringWriter, changeSet); return(stringWriter.ToString()); } } catch (Exception ex) { Console.WriteLine("Could not decompiler: \r\n" + ex); throw ex; } }
public void CreatePatchFileAndSources(AssemblyNode assemblyNode, string patchFilePath, string sourcesPath) { try { var visitor = new ChangedNodesNodeVisitor(ignoreChangeSet, true); assemblyNode.Accept(visitor); var changedNodes = visitor.GetChangedNodes(); var tempFolder = Path.Combine(Path.GetTempPath(), "JustAssembly_" + Path.GetRandomFileName()); Directory.CreateDirectory(tempFolder); var oldFolder = Path.Combine(tempFolder, "old"); Directory.CreateDirectory(oldFolder); var newFolder = Path.Combine(tempFolder, "new"); Directory.CreateDirectory(newFolder); foreach (var node in changedNodes) { var fileName = GetNormalizedName(node); if (!string.IsNullOrEmpty(node.OldSource)) { using (var writer = File.CreateText(Path.Combine(oldFolder, fileName))) { writer.WriteLine("# Namespace: " + node.Namespace); writer.WriteLine("# Name: " + node.Name); writer.Write(node.OldSource); } } if (!string.IsNullOrEmpty(node.NewSource)) { using (var writer = File.CreateText(Path.Combine(newFolder, fileName))) { writer.WriteLine("# Namespace: " + node.Namespace); writer.WriteLine("# Name: " + node.Name); writer.Write(node.NewSource); } } } File.Delete(sourcesPath); ZipFile.CreateFromDirectory(tempFolder, sourcesPath); var processStartInfo = new ProcessStartInfo("git.exe"); processStartInfo.CreateNoWindow = true; processStartInfo.FileName = "cmd.exe"; processStartInfo.Arguments = $"/c \"git diff --no-index old new > out.patch"; processStartInfo.WorkingDirectory = tempFolder; var process = Process.Start(processStartInfo); process.WaitForExit(); File.Delete(patchFilePath); File.Move(Path.Combine(tempFolder, "out.patch"), patchFilePath); try { Directory.Delete(tempFolder, true); } catch { } } catch (Exception ex) { Console.WriteLine("Could not create path file: \r\n" + ex); throw; } }