public void FindDiffError(int startRevision, string path) { int revisionNumber = startRevision; string revision = scmDataWithoutCache.RevisionByNumber(revisionNumber); do { Console.WriteLine("Searching for diff errors in commit {0}({1})...", revision, revisionNumber); List <string> fileErrors = new List <string>(); foreach (var file in scmDataWithoutCache.Log(revision).TouchedFiles.Select(x => x.Path)) { if ((path != null) && (path != file)) { continue; } var diff = scmDataWithoutCache.Diff(revision, file); if (diff.AddedLines.Count() > 0) { var blame = scmDataWithoutCache.Blame(revision, file); foreach (var line in diff.AddedLines) { if (blame[line] != revision) { fileErrors.Add(string.Format( "Line {0}: added in diff, but blame say otherwise.", line )); } } foreach (var line in blame.Where(x => x.Value == revision).Select(x => x.Key)) { if (!diff.AddedLines.Contains(line)) { fileErrors.Add(string.Format( "Line {0}: not added in diff, but blame say otherwise.", line )); } } } if (fileErrors.Count > 0) { Console.WriteLine("Diff error in revision {0} in file {1}.", revision, file); foreach (var error in fileErrors) { Console.WriteLine(error); } return; } } revisionNumber++; revision = scmDataWithoutCache.RevisionByNumber(revisionNumber); } while (revision != null); Console.WriteLine("No diff errors."); }
public ScmDataCache(IScmData innerScmData) { this.innerScmData = innerScmData; logs = new FixedSizeDictionary<string,ILog>(1, x => innerScmData.Log(x)); diffs = new FixedSizeDictionary<string,SmartDictionary<string,IDiff>>(1, x => new SmartDictionary<string,IDiff>(y => innerScmData.Diff(x, y)) ); blames = new FixedSizeDictionary<string,IBlame>(100); }
public IDiff Diff(string newPath, string newRevision, string oldPath, string oldRevision) { return(innerScmData.Diff(newPath, newRevision, oldPath, oldRevision)); }
public ScmDataCache(IScmData innerScmData) { this.innerScmData = innerScmData; logs = new FixedSizeDictionary <string, ILog>(1, x => innerScmData.Log(x)); diffs = new FixedSizeDictionary <string, SmartDictionary <string, IDiff> >(1, x => new SmartDictionary <string, IDiff>(y => innerScmData.Diff(x, y)) ); blames = new FixedSizeDictionary <string, IBlame>(100); bodys = new FixedSizeDictionary <string, IBodyFile>(100); }