/// <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); } }