public string DiffFile(string fileName) { var tmpFileName = Path.ChangeExtension(Path.GetTempFileName(), ".diff"); try { var status = GetFileStatus(fileName); if (status == GitFileStatus.NotControlled || status == GitFileStatus.New || status == GitFileStatus.Added) { tmpFileName = Path.ChangeExtension(tmpFileName, Path.GetExtension(fileName)); File.Copy(Path.Combine(WorkingDirectory, fileName), tmpFileName); if (IsBinaryFile(tmpFileName)) { File.Delete(tmpFileName); File.WriteAllText(tmpFileName, "Binary file: " + fileName); } return(tmpFileName); } GitBash.RunCmd(string.Format("diff HEAD -- \"{0}\" > \"{1}\"", fileName, tmpFileName), WorkingDirectory); } catch (Exception ex) { File.WriteAllText(tmpFileName, ex.Message); } return(tmpFileName); }
public string DiffFile(string fileName, string commitId1, string commitId2) { try { if (!this.HasGitRepository) { return(""); } var tmpFileName = Path.ChangeExtension(Path.GetTempFileName(), ".diff"); var fileNameRel = GetRelativeFileName(fileName); if (GitBash.Exists) { GitBash.RunCmd(string.Format("diff {2} {3} -- \"{0}\" > \"{1}\"", fileNameRel, tmpFileName, commitId1, commitId2), this.GitWorkingDirectory); } else { HistogramDiff hd = new HistogramDiff(); hd.SetFallbackAlgorithm(null); RawText a = string.IsNullOrWhiteSpace(commitId1) ? new RawText(new byte[0]) : new RawText(this.RepositoryGraph.GetFileContent(commitId1, fileNameRel) ?? new byte[0]); RawText b = string.IsNullOrWhiteSpace(commitId2) ? new RawText(new byte[0]) : new RawText(this.RepositoryGraph.GetFileContent(commitId2, fileNameRel) ?? new byte[0]); var list = hd.Diff(RawTextComparator.DEFAULT, a, b); using (Stream stream = new FileStream(tmpFileName, System.IO.FileMode.CreateNew)) { DiffFormatter df = new DiffFormatter(stream); df.Format(list, a, b); df.Flush(); } //using (Stream mstream = new MemoryStream(), // stream = new BufferedStream(mstream)) //{ // DiffFormatter df = new DiffFormatter(stream); // df.Format(list, a, b); // df.Flush(); // stream.Seek(0, SeekOrigin.Begin); // var ret = new StreamReader(stream).ReadToEnd(); // ret = ret.Replace("\r", "").Replace("\n", "\r\n"); // File.WriteAllText(tmpFileName, ret); //} } return(tmpFileName); } catch (Exception ex) { Log.WriteLine("Refresh: {0}\r\n{1}", this.initFolder, ex.ToString()); return(""); } }
public void SaveFileFromLastCommit(string fileName, string tempFile) { if (!this.isGit) { return; } var head = GetBranchId("HEAD"); if (head != null) { GitBash.RunCmd(string.Format("show \"HEAD:{0}\" > \"{1}\"", fileName, tempFile), this.WorkingDirectory); } }
public string Blame(string fileName) { if (!this.IsGit) { return(""); } var tmpFileName = Path.ChangeExtension(Path.GetTempFileName(), ".blame"); var fileNameRel = fileName; GitBash.RunCmd(string.Format("blame -M -w -- \"{0}\" > \"{1}\"", fileNameRel, tmpFileName), WorkingDirectory); return(tmpFileName); }
public string DiffFile(string fileName, string commitId1, string commitId2) { if (!this.IsGit) { return(""); } var tmpFileName = Path.ChangeExtension(Path.GetTempFileName(), ".diff"); var fileNameRel = fileName; GitBash.RunCmd(string.Format("diff {2} {3} -- \"{0}\" > \"{1}\"", fileNameRel, tmpFileName, commitId1, commitId2), WorkingDirectory); return(tmpFileName); }
public string DiffFile(string fileName) { var tmpFileName = Path.ChangeExtension(Path.GetTempFileName(), ".diff"); try { GitBash.RunCmd(string.Format("diff HEAD -- \"{0}\" > \"{1}\"", fileName, tmpFileName), WorkingDirectory); } catch (Exception ex) { File.WriteAllText(tmpFileName, ex.Message); } return(tmpFileName); }
public string Blame(string fileName) { if (!this.HasGitRepository) { return(""); } var tmpFileName = Path.ChangeExtension(Path.GetTempFileName(), ".blame"); if (GitBash.Exists) { var fileNameRel = GetRelativeFileName(fileName); GitBash.RunCmd(string.Format("blame -M -w -- \"{0}\" > \"{1}\"", fileNameRel, tmpFileName), this.GitWorkingDirectory); } return(tmpFileName); }
public void SaveFileFromRepository(string fileName, string tempFile) { if (!this.HasGitRepository || this.head == null) { return; } if (GitBash.Exists) { string fileNameRel = GetRelativeFileNameForGit(fileName); GitBash.RunCmd(string.Format("show \"HEAD:{0}\" > \"{1}\"", fileNameRel, tempFile), this.GitWorkingDirectory); } else { var data = GetFileContent(fileName); using (var binWriter = new BinaryWriter(File.Open(tempFile, System.IO.FileMode.Create))) { binWriter.Write(data ?? new byte[] { }); } } }
public string DiffFileAdv(string fileName, bool diffIndex = false) { var tmpFileName = Path.ChangeExtension(Path.GetTempFileName(), diffIndex ? ".cached.diff" : ".diff"); try { if (diffIndex) { GitBash.RunCmd(string.Format("diff --cached -- \"{0}\" > \"{1}\"", fileName, tmpFileName), WorkingDirectory); } else { GitBash.RunCmd(string.Format("diff -- \"{0}\" > \"{1}\"", fileName, tmpFileName), WorkingDirectory); } } catch (Exception ex) { File.WriteAllText(tmpFileName, ex.Message); } return(tmpFileName); }
/// <summary> /// Diff working file with last commit /// </summary> /// <param name="fileName">Expect relative path</param> /// <returns>diff file in temp folder</returns> public string DiffFile(string fileName) { try { if (!this.HasGitRepository) { return(""); } var tmpFileName = Path.ChangeExtension(Path.GetTempFileName(), ".diff"); var status = GetFileStatus(fileName); if (head == null || status == GitFileStatus.New || status == GitFileStatus.Added) { tmpFileName = Path.ChangeExtension(tmpFileName, Path.GetExtension(fileName)); File.Copy(GetFullPath(fileName), tmpFileName); return(tmpFileName); } if (GitBash.Exists) { var fileNameRel = GetRelativeFileName(fileName); GitBash.RunCmd(string.Format("diff HEAD -- \"{0}\" > \"{1}\"", fileNameRel, tmpFileName), this.GitWorkingDirectory); } else { HistogramDiff hd = new HistogramDiff(); hd.SetFallbackAlgorithm(null); var fullName = GetFullPath(fileName); RawText b = new RawText(File.Exists(GetFullPath(fileName)) ? File.ReadAllBytes(fullName) : new byte[0]); RawText a = new RawText(GetFileContent(fileName) ?? new byte[0]); var list = hd.Diff(RawTextComparator.DEFAULT, a, b); using (Stream stream = File.Create(tmpFileName)) { DiffFormatter df = new DiffFormatter(stream); df.Format(list, a, b); df.Flush(); } //using (Stream mstream = new MemoryStream(), // stream = new BufferedStream(mstream)) //{ // DiffFormatter df = new DiffFormatter(stream); // df.Format(list, a, b); // df.Flush(); // stream.Seek(0, SeekOrigin.Begin); // var ret = new StreamReader(stream).ReadToEnd(); // File.WriteAllText(tmpFileName, ret); //} } return(tmpFileName); } catch (Exception ex) { Log.WriteLine("Refresh: {0}\r\n{1}", this.initFolder, ex.ToString()); return(""); } }
/// <summary> /// Diff working file with last commit /// </summary> /// <param name="fileName">Expect relative path</param> /// <returns>diff file in temp folder</returns> public string DiffFile(string fileName) { var tmpFileName = Path.ChangeExtension(Path.GetTempFileName(), ".diff"); try { if (!this.HasGitRepository) { return(""); } var status = GetFileStatus(fileName); if (head == null || status == GitFileStatus.New || status == GitFileStatus.Added) { tmpFileName = Path.ChangeExtension(tmpFileName, Path.GetExtension(fileName)); File.Copy(GetFullPath(fileName), tmpFileName); if (IsBinaryFile(tmpFileName)) { File.Delete(tmpFileName); File.WriteAllText(tmpFileName, "Binary file: " + fileName); } return(tmpFileName); } if (GitBash.Exists) { var fileNameRel = GetRelativeFileName(fileName); GitBash.RunCmd(string.Format("diff HEAD -- \"{0}\" > \"{1}\"", fileNameRel, tmpFileName), this.GitWorkingDirectory); } else { HistogramDiff hd = new HistogramDiff(); hd.SetFallbackAlgorithm(null); var fullName = GetFullPath(fileName); RawText b = new RawText(File.Exists(GetFullPath(fileName)) ? File.ReadAllBytes(fullName) : new byte[0]); RawText a = new RawText(GetFileContent(fileName) ?? new byte[0]); var list = hd.Diff(RawTextComparator.DEFAULT, a, b); using (Stream stream = File.Create(tmpFileName)) { DiffFormatter df = new DiffFormatter(stream); df.Format(list, a, b); df.Flush(); } } // normalize the line endings of the diff so VS doesn't ask to do it for us string text = File.ReadAllText(tmpFileName).Replace("\r\n", "\n").Replace('\r', '\n'); // normalize to Environment.NewLine since this is only used for display in the IDE // and we want users to be able to copy from the diff and paste in a document without // changing line endings File.WriteAllText(tmpFileName, text.Replace("\n", Environment.NewLine)); } catch (Exception ex) { Log.WriteLine("DiffFile: {0}\r\n{1}", this.initFolder, ex.ToString()); //File.WriteAllText(tmpFileName, ex.ToString()); } return(tmpFileName); }