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 static VersionPart ParsePartToBump(ILogger logger, IEnumerable<string> args)
		{
			var defaultPart = "revision";
			var part = args.ParseStringParameter("part", defaultPart);
			var versionPart = TranslateToVersionPart(part);
			if (versionPart != VersionPart.None)
				return versionPart;
			logger.ErrorDetail("Invalid value for 'part' option: '{0}'. Using default value '{1}'.", part, defaultPart);
			return TranslateToVersionPart(defaultPart);
		}
Exemple #3
0
		public static void ClearPackageInstallDirectories(ILogger logger, IEnumerable<IComponent> components)
		{
			var installDirs = new List<string>();
			foreach (var component in components) {
				var installedPackagesDir = component.InstalledPackagesDir;
				if ((!installDirs.Contains(installedPackagesDir)) && Directory.Exists(installedPackagesDir))
					installDirs.Add(installedPackagesDir);
			}
			logger.Info("Clearing all package installation directories ({0})", installDirs.Count);
			foreach (var dir in installDirs)
				foreach (var packageDir in Directory.EnumerateDirectories(dir))
					try {
						Directory.Delete(packageDir, true);
					} catch (Exception e) {
						logger.ErrorDetail("Could not delete package installed at {0} . Cause: {1}", dir, e.Message);
					}
		}
Exemple #4
0
		public static void CopyIfNew(ILogger logger, INugetSpec nuget, string packagesOutputDirectory, string destination)
		{
			var package = nuget.OutputPackageFilename;
			var destinationPackage = destination.Combine(package);
			if (File.Exists(destinationPackage))
				return;
			var originPackage = packagesOutputDirectory.Combine(package);
			if (File.Exists(originPackage)) {
				try {
					logger.Info("Publishing package '{0}' to '{1}'", package, destination);
					File.Copy(originPackage, destinationPackage);
				} catch (Exception e) {
					logger.Error(e);
				}
			} else {
				logger.ErrorDetail("No built package for nuget '{0}'", nuget.Name);
			}
		}
		public bool UpgradePackageDependency(ILogger logger, IComponent newPackage, string sourceDirectory, ICollection<string> installDirs)
		{
			var packagesFile = PackagesConfigFilePath;
			if (!File.Exists(packagesFile)) {
				logger.ErrorDetail("Probably component '{0}' is referencing the package '{1}' as a project...", Name, newPackage.Name);
				return true;
			}
			try {
				UpdatePackagesConfig(newPackage, packagesFile);
				UpdatePackageReferencesOnProject(logger, newPackage);
				ParseAvailableData();
				if (!installDirs.Contains(InstalledPackagesDir))
					installDirs.Add(InstalledPackagesDir);
				return true;
			} catch (Exception e) {
				logger.Error(e.Message);
				logger.Debug(e);
				return false;
			}
		}
		private void DoAddNuget(ILogger logger, INugetSpec nugetComponent, IComponentFinder components, string packagesOutputDirectory, bool firstlevel)
		{
			try {
				if (Dependencies.Any(c => c.Equals(nugetComponent))) {
					if (firstlevel)
						logger.Info("Component already references nuget {0}", nugetComponent.Name);
				} else {
					AddToPackagesConfig(nugetComponent, PackagesConfigFilePath);
					_dependencies.Add(new NugetReference(nugetComponent));
					var framework = nugetComponent.CompatibleFramework(_targetFrameworkVersion);
					foreach (var assembly in nugetComponent.AssemblyNames)
						FullPath.TransformFile(xml => AddSingleLibReference(xml, nugetComponent.Name, assembly, framework, RelativeInstalledPackagesDir));
				}
				foreach (var subdependency in nugetComponent.Dependencies) {
					var dep = components.FindComponent<INugetSpec>("^" + subdependency.Name + "$", interactive: false);
					if (dep != null)
						DoAddNuget(logger, dep, components, packagesOutputDirectory, false);
				}
				if (!Directory.Exists(InstalledPackagesDir.Combine(nugetComponent.Name)))
					BuildHelper.InstallPackage(logger, nugetComponent, InstalledPackagesDir, packagesOutputDirectory);
			} catch (Exception e) {
				logger.ErrorDetail("Could not add all recursive references of needed nugets. Cause: {0}", e.Message);
			}
		}
		private static void ProcessBuildOutput(ILogger logger, string line)
		{
			if (string.IsNullOrWhiteSpace(line) || (line != line.TrimStart()))
				return;
			if (line.Contains(" (are you")) // shorten irritating long error message from csc (will it work with mcs?)
				line = line.Substring(0, line.IndexOf(" (are you"));
			if (line.Contains(": error"))
				logger.ErrorDetail(line);
			else
				logger.Info(line);
		}