/// <summary> /// Adds aall input/output properties of a CSProject to a hash collection /// </summary> /// <param name="Hasher"></param> /// <param name="Project"></param> /// <returns></returns> public static bool AddCsProjectInfo(this HashCollection Hasher, CsProjectInfo Project, HashCollection.HashType HashType) { // Get the output assembly and pdb file FileReference OutputFile; if (!Project.TryGetOutputFile(out OutputFile)) { throw new Exception(String.Format("Unable to get output file for {0}", Project.ProjectPath)); } FileReference DebugFile = OutputFile.ChangeExtension("pdb"); // build a list of all input and output files from this module List <FileReference> DependentFiles = new List <FileReference> { Project.ProjectPath, OutputFile, DebugFile }; DependentFiles.AddRange(Project.CompileReferences); if (!Hasher.AddFiles(DependentFiles, HashType)) { return(false); } return(true); }
/// <summary> /// Compares two collections by comparing the underlying hashsets /// </summary> /// <param name="obj"></param> /// <returns></returns> public override bool Equals(object obj) { HashCollection RHS = obj as HashCollection; if (RHS == null) { return(false); } return(Hashes.SetEquals(RHS.Hashes)); }
/// <summary> /// Logs differences between two collections for debugging /// </summary> /// <param name="RHS"></param> public void LogDifferences(HashCollection RHS) { foreach (var Entry in Hashes) { if (!RHS.HasEntryForName(Entry.Name)) { Log.TraceInformation("RHS does not have an entry for {0}", Entry.Name); } else if (!RHS.Hashes.Contains(Entry)) { HashEntry RHSEntry = RHS.GetEntryForName(Entry.Name); Log.TraceInformation("RHS hash mismatch for {0}", Entry.Name); Log.TraceInformation("LHS:\n\t{0}\n\t{1}\n\t{2}", Entry.Hash, Entry.Name, Entry.MetaData); Log.TraceInformation("RHS:\n\t{0}\n\t{1}\n\t{2}", RHSEntry.Hash, RHSEntry.Name, RHSEntry.MetaData); } } }
/// <summary> /// Adds aall input/output properties of a CSProject to a hash collection /// </summary> /// <param name="Hasher"></param> /// <param name="Project"></param> /// <returns></returns> public static bool AddCsProjectInfo(this HashCollection Hasher, CsProjectInfo Project, HashCollection.HashType HashType) { // Get the output assembly and pdb file DirectoryReference ProjectDirectory = Project.ProjectPath.Directory; DirectoryReference OutputDir = Project.GetOutputDir(ProjectDirectory); FileReference OutputFile = FileReference.Combine(OutputDir, Project.GetAssemblyName() + ".dll"); FileReference DebugFile = OutputFile.ChangeExtension("pdb"); // build a list of all input and output files from this module List <FileReference> DependentFiles = new List <FileReference> { Project.ProjectPath, OutputFile, DebugFile }; DependentFiles.AddRange(Project.CompileReferences); if (!Hasher.AddFiles(DependentFiles, HashType)) { return(false); } return(true); }