Ejemplo n.º 1
0
		public bool Process(ILogger logger, IEnumerable<string> args, MetaProjectPersistence metaProject, ComponentsList components, string packagesOutputDirectory)
		{
			var nugetNamePattern = args.FirstOrDefault();
			if (nugetNamePattern == null || nugetNamePattern.StartsWith("-") || nugetNamePattern.EndsWith("\"")) {
				logger.Error("No nuget pattern specified");
				return true;
			}
			var nugetComponent = components.FindComponent<INugetSpec>(nugetNamePattern);
			if (nugetComponent == null)
				return true;
			logger.Info("== Nuget to add: {0}", nugetComponent);
			var componentNamePattern = args.LastOrDefault();
			if (componentNamePattern == null || componentNamePattern.StartsWith("-") || componentNamePattern.EndsWith("\"")) {
				logger.Error("No component pattern specified");
				return true;
			}
			var specificComponent = components.FindComponent<IProject>(componentNamePattern);
			if (specificComponent == null)
				return true;
			logger.Info("== Component to reference nuget: {0}", specificComponent);
			if (specificComponent == nugetComponent) {
				logger.Error("Nuget can't be added to itself");
				return true;
			}
			specificComponent.AddNuget(logger, nugetComponent, components, packagesOutputDirectory);
			return true;
		}
Ejemplo n.º 2
0
		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;
		}
Ejemplo n.º 3
0
		public bool Process(ILogger logger, IEnumerable<string> args, MetaProjectPersistence metaProject, ComponentsList components, string packagesOutputDirectory)
		{
			// BIG TODO: reengineer command parsing
			var componentNamePattern = args.LastOrDefault();
			if (componentNamePattern == null || componentNamePattern.StartsWith("-") || componentNamePattern.EndsWith("\"")) {
				logger.Error("No component pattern specified");
				return true;
			}
			string tags = args.ParseStringParameter("tags");
			string licenseUrl = args.ParseStringParameter("licenseUrl");
			string projectUrl = args.ParseStringParameter("projectUrl");
			string iconUrl = args.ParseStringParameter("iconUrl");
			string copyright = args.ParseStringParameter("copyright");
			bool requireLicenseAcceptance = args.Contains("-r");
			if (licenseUrl == null && requireLicenseAcceptance) {
				logger.Error("Requiring license acceptance demands a license url");
				return true;
			}
			var specificComponent = components.FindComponent<IProject>(componentNamePattern, c => c.CanBecomeNugget);
			if (specificComponent == null)
				return true;
			if (specificComponent.PromoteToNuget(logger, packagesOutputDirectory, tags,
				licenseUrl, projectUrl, iconUrl, copyright, requireLicenseAcceptance) != null)
				ScanCommand.Rescan(logger, metaProject, components);
			return true;
		}
Ejemplo n.º 4
0
		public bool Process(ILogger logger, IEnumerable<string> args, MetaProjectPersistence metaProject, ComponentsList components, string packagesOutputDirectory)
		{
			logger.Info("Directories that will be scanned:");
			using (logger.Block)
				foreach (var dir in metaProject.ListOfDirectories)
					logger.Info(dir);
			logger.Info("Directories that won't be scanned:");
			using (logger.Block)
				foreach (var dir in metaProject.ListOfExcludedDirectories)
					logger.Info(dir);
			Rescan(logger, metaProject, components);
			return true;
		}
Ejemplo n.º 5
0
		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;
		}
Ejemplo n.º 6
0
		public bool Process(ILogger logger, IEnumerable<string> args, MetaProjectPersistence metaProject, ComponentsList components, string packagesOutputDirectory)
		{
			UpdatePackagesCommand.UpdateDependencies(logger, components, packagesOutputDirectory);
			var componentNamePattern = args.FirstOrDefault(s => !s.StartsWith("-"));
			if (!string.IsNullOrWhiteSpace(componentNamePattern)) {
				var rootComponent = components.FindComponent<IVersionable>(componentNamePattern);
				if (rootComponent == null)
					return true;
				BuildHelper.BuildChain(logger, rootComponent, packagesOutputDirectory, rootComponent.DependentProjects);
			} else {
				foreach (var rootComponent in GetPendingForPublishingComponents(logger, components, packagesOutputDirectory))
					BuildHelper.BuildChain(logger, rootComponent, packagesOutputDirectory, rootComponent.DependentProjects);
			}
			return true;
		}
Ejemplo n.º 7
0
		static void Main(string[] args)
		{
			Console.WriteLine("NugetCracker {0}\nSee https://github.com/monoman/NugetCracker\n", Version.ToString(3));
			using (_metaProjectPersistence = new MetaProjectPersistence(args.GetMetaProjectFilePath())) {
				Console.WriteLine("Using {0}", _metaProjectPersistence.FilePath);
				_components = new ComponentsList();
				if (!args.TakeWhile(s => s.ToLowerInvariant() != "-c").Any(s => s.ToLowerInvariant() == "-noscan"))
					ProcessCommand(new string[] { "scan" });
				var inlineCommand = args.SkipWhile(s => s.ToLowerInvariant() != "-c").Skip(1);
				if (inlineCommand.Count() > 0) {
					ProcessCommand(inlineCommand);
					Console.WriteLine("Done!");
				} else
					InteractiveLoop();
			}
		}
Ejemplo n.º 8
0
		public bool Process(ILogger logger, IEnumerable<string> args, MetaProjectPersistence metaProject, ComponentsList components, string packagesOutputDirectory)
		{
			bool foundOne = false;
			var partToBump = ParsePartToBump(logger, args);
			bool noBuild = args.Where(s => s.StartsWith("-n")).Count() > 0;
			foreach (var componentNamePattern in args.Where(s => !s.StartsWith("-"))) {
				foundOne = true;
				var specificComponent = components.FindComponent<IVersionable>(componentNamePattern);
				if (specificComponent == null)
					return true;
				BumpVersion(logger, specificComponent, partToBump, packagesOutputDirectory, noBuild);
			}
			if (!foundOne) {
				logger.Error("No component pattern specified");
				return true;
			}
			return true;
		}
		public bool Process(ILogger logger, IEnumerable<string> args, MetaProjectPersistence metaProject, ComponentsList components, string packagesOutputDirectory)
		{
			var relativePath = string.Join(" ", args.Where(s => !s.StartsWith("-")));
			if (string.IsNullOrWhiteSpace(relativePath)) {
				logger.Error("No relativePath provided");
				return true;
			}
			bool force = args.Any(s => s.Length > 1 && "-force".StartsWith(s.ToLowerInvariant()));
			var path = metaProject.ToAbsolutePath(relativePath);
			if (!Directory.Exists(path)) {
				logger.Error("The path '{0}' doesn't exist", path);
				return true;
			}
			if (!force) {
				Console.Write("Exclude directory '{0}' and all subfolders from scanning?  [y/N]", path);
				var answer = Console.ReadLine().Trim().ToLowerInvariant();
				if (answer != "y")
					return true;
			}
			metaProject.AddExcludedDirectory(path);
			components.Prune(path);
			logger.Info("Directory '{0}' excluded from scanning", relativePath);
			return true;
		}
Ejemplo n.º 10
0
		public static void Rescan(ILogger logger, MetaProjectPersistence metaProject, ComponentsList components)
		{
			components.Clear();
			int scannedDirsCount = 0;
			foreach (string dir in metaProject.ListOfDirectories) {
				string path = metaProject.ToAbsolutePath(dir);
				logger.Info("Scanning '{0}' > '{1}'", dir, path);
				components.Scan(metaProject, path, _factories, s =>
				{
					logger.Debug(s);
					scannedDirsCount++;
				});
			}
			logger.Info("Scanned {0} directories", scannedDirsCount);
			logger.Info("Found {0} component{1}", components.Count, components.Count > 1 ? "s" : "");
			logger.Info("Found {0} solution{1}", components.Solutions.Count, components.Solutions.Count > 1 ? "s" : "");
			logger.Info("Sorting...");
			components.SortByName();
			logger.Info("Finding dependents...");
			components.FindDependents();
			logger.Info("Matching solutions to projects...");
			components.MatchSolutionsToProjects();
			return;
		}