public bool Process(ILogger logger, IEnumerable<string> args, MetaProjectPersistence metaProject, ComponentsList components, string packagesOutputDirectory) { var destination = args.ParseStringParameter("to", metaProject.LastPublishedTo); if (string.IsNullOrWhiteSpace(destination)) return true; if (!Directory.Exists(destination)) { logger.Error("Could not find destination folder: '{0}'", destination); return true; } metaProject.LastPublishedTo = destination; var componentNamePattern = args.FirstOrDefault(s => !s.StartsWith("-")) ?? ".*"; var list = components.FilterBy(componentNamePattern, nugets: true); var listIsOk = true; foreach (var component in list) if (component is INugetSpec) if (!BuildHelper.PackageExists(component as INugetSpec, packagesOutputDirectory)) { listIsOk = false; logger.ErrorDetail("There is no built package for nuget '{0}'", component.Name); } if (listIsOk) foreach (var component in list) if (component is INugetSpec) BuildHelper.CopyIfNew(logger, component as INugetSpec, packagesOutputDirectory, destination); return true; }
private IEnumerable<IVersionable> GetPendingForPublishingComponents(ILogger logger, ComponentsList components, string packagesOutputDirectory) { var list = new List<IVersionable>(); foreach (var component in components.FilterBy(".*", nugets: true)) if (component is INugetSpec && component is IVersionable) if (!BuildHelper.PackageExists(component as INugetSpec, packagesOutputDirectory)) list.Add((IVersionable)component); foreach (var versionable in list) { var isRoot = true; foreach (var other in list) if (versionable.Dependencies.Contains(other)) isRoot = false; if (isRoot) yield return versionable; } }
public bool Process(ILogger logger, IEnumerable<string> args, MetaProjectPersistence metaProject, ComponentsList components, string packagesOutputDirectory) { var pattern = args.FirstOrDefault(s => !s.StartsWith("-")); bool full = args.Contains("-full") || args.Contains("-f"); bool nugets = args.Contains("-nugets") || args.Contains("-n"); bool orphans = args.Contains("-orphans"); bool solutions = args.Contains("-solutions") || args.Contains("-s"); bool orderByTreeDepth = args.Contains("-orderbytree") || args.Contains("-o"); bool groupByType = (args.Contains("-groupbytype") || args.Contains("-g")) && !nugets; var i = 0; if (solutions) { logger.Info("=========== [Solutions]"); foreach (var solution in components.Solutions) { logger.Info("[{0:0000}] {1}", ++i, solution.ToString()); if (full) using (logger.Block) { int j = 0; foreach (var project in solution.Projects.OrderBy(p => p.Name)) { var component = components.FindMatchingComponent(project); if (component == null) logger.Info("[{0:0000}] Missing project '{1}'", ++j, project.Name); else logger.Info("[{0:0000}] {1}", ++j, component.ToString()); } } } } else { if (string.IsNullOrWhiteSpace(pattern)) { logger.Info("Listing all {0}...", nugets ? "nugets" : "components"); } else { logger.Info("Listing {1} filtered by '{0}' ...", pattern, nugets ? "nugets" : "components"); pattern = pattern.ToLowerInvariant(); } if (orphans) logger.Info("-- only orphan projects"); if (orderByTreeDepth) logger.Info("-- ordered by dependents components tree depth (most referenced first)"); if (groupByType) logger.Info("-- grouped by type"); var lastGroup = ""; foreach (var component in components.FilterBy(pattern, nugets, orderByTreeDepth, groupByType, orphans)) { if (groupByType && component.Type != lastGroup) { lastGroup = component.Type; logger.Info("=========== [{0}]", lastGroup); } logger.Info("[{0:0000}] {1}", ++i, (full ? component.ToLongString() : component.ToString())); } } return true; }