Example #1
0
        /// <summary>
        /// Merges the given distributions into the system.
        /// </summary>
        /// <param name="distarr">the distributions to merge</param>
        /// <param name="mopts">merge option flags</param>
        public void Merge(IDistribution[] distarr, MergeOptions mopts)
        {
            if (distarr.Length == 0)
                return;

            Downloader downloader = new Downloader(_cfg.DistFilesDir);
            List<MergeEventArgs> scheduled = null;

            this.ScheduleMerges(distarr, mopts, downloader, out scheduled);

            if (!mopts.HasFlag(MergeOptions.Pretend)) {
                if (this.OnParallelFetch != null)
                    this.OnParallelFetch.Invoke(this, new EventArgs());

                downloader.FetchAsync();
            }

            for (int i = 0; i < scheduled.Count; i++) {
                MergeEventArgs mea = scheduled[i];
                mea.CurrentIter = i + 1;
                mea.TotalMerges = scheduled.Count;

                this.MergeOne(mea, mopts, downloader, _pkgmgr.RootDir);
            }

            if (!mopts.HasFlag(MergeOptions.Pretend)) {
                if (this.OnAutoClean != null)
                    this.OnAutoClean.Invoke(this, new EventArgs());

                TrashWorker.Purge(_pkgmgr);
            }
        }