Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
 private static int CompareBlobsBySize(DependencyBlob A, DependencyBlob B)
 {
     return((A.Size == B.Size) ? A.Hash.CompareTo(B.Hash) : B.Size.CompareTo(A.Size));
 }