Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
        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;
            }
        }