private static void GenerateManifest(Parameters Params, IDictionary <string, DependencyFile> DepFiles, IDictionary <string, DependencyBlob> DepBlobs, IDictionary <string, DependencyPack> DepPacks) { DependencyManifest Manifest = new DependencyManifest(); IDictionary <string, DependencyFile> Files = new SortedDictionary <string, DependencyFile>(); IDictionary <string, DependencyBlob> Blobs = new SortedDictionary <string, DependencyBlob>(); IDictionary <string, DependencyPack> Packs = new SortedDictionary <string, DependencyPack>(); foreach (DependencyFile DepFile in DepFiles.Values) { Files.Add(DepFile.Name, DepFile); DependencyBlob DepBlob = DepBlobs[DepFile.Hash]; if (!Blobs.ContainsKey(DepBlob.Hash)) { Blobs.Add(DepBlob.Hash, DepBlob); DependencyPack DepPack = DepPacks[DepBlob.PackHash]; if (!Packs.ContainsKey(DepPack.Hash)) { Packs.Add(DepPack.Hash, DepPack); } } } Manifest.BaseUrl = Params.BaseUrl; Manifest.IgnoreProxy = Params.IgnoreProxy; Manifest.Files = Files.Values.ToArray(); Manifest.Blobs = Blobs.Values.ToArray(); Manifest.Packs = Packs.Values.ToArray(); WriteXmlObject(Params.Target, Manifest); }
private static void GenerateBlobListThread(string Root, ConcurrentQueue <string> FilesQueue, ConcurrentDictionary <string, DependencyFile> DepFiles, ConcurrentDictionary <string, DependencyBlob> DepBlobs) { string PackFile; while (FilesQueue.TryDequeue(out PackFile)) { string FullPath = Path.Combine(Root, PackFile); long FileSize; // Add File info. DependencyFile DepFile = new DependencyFile(); DepFile.IsExecutable = StatFileHelper.IsExecutalbe(FullPath); DepFile.Name = PackFile; DepFile.Hash = ComputeHashForFile(FullPath, out FileSize); if (DepFiles.TryAdd(PackFile, DepFile)) { // Add Blob info. DependencyBlob DepBlob = new DependencyBlob(); DepBlob.Hash = DepFile.Hash; DepBlob.Size = FileSize; DepBlobs.TryAdd(DepBlob.Hash, DepBlob); } } }
private static int CompareBlobsBySize(DependencyBlob A, DependencyBlob B) { return((A.Size == B.Size) ? A.Hash.CompareTo(B.Hash) : B.Size.CompareTo(A.Size)); }