string GetInitialExtractionDirectory(VariableDictionary variables) { var root = variables.Get(SpecialVariables.Tentacle.Agent.ApplicationDirectoryPath) ?? variables.Evaluate("#{env:SystemDrive}\\Applications"); root = AppendEnvironmentNameIfProvided(variables, root); fileSystem.EnsureDirectoryExists(root); fileSystem.EnsureDiskHasEnoughFreeSpace(root); return(root); }
/// This will be specific to Tenant and/or Environment if these variables are available. static string GetEnvironmentApplicationDirectory(ICalamariFileSystem fileSystem, VariableDictionary variables) { var root = GetApplicationDirectoryRoot(fileSystem, variables); root = AppendTenantNameIfProvided(fileSystem, variables, root); root = AppendEnvironmentNameIfProvided(fileSystem, variables, root); fileSystem.EnsureDirectoryExists(root); fileSystem.EnsureDiskHasEnoughFreeSpace(root); return(root); }
/// <summary> /// Downloads the artifact from the Maven repo. This method first checks the repo for /// artifacts with all available extensions, as we have no indication what type of artifact /// (jar, war, zip etc) that we are attempting to download. /// </summary> /// <param name="packageId">The package id</param> /// <param name="version">The package version</param> /// <param name="feedUri">The maven repo uri</param> /// <param name="feedCredentials">The mavben repo credentials</param> /// <param name="cacheDirectory">The directory to download the file into</param> /// <param name="maxDownloadAttempts">How many times to try the download</param> /// <param name="downloadAttemptBackoff">How long to wait between attempts</param> /// <returns>The path to the downloaded artifact</returns> string DownloadPackage( string packageId, IVersion version, Uri feedUri, ICredentials feedCredentials, string cacheDirectory, int maxDownloadAttempts, TimeSpan downloadAttemptBackoff) { Guard.NotNullOrWhiteSpace(packageId, "packageId can not be null"); Guard.NotNull(version, "version can not be null"); Guard.NotNullOrWhiteSpace(cacheDirectory, "cacheDirectory can not be null"); Guard.NotNull(feedUri, "feedUri can not be null"); Log.Info("Downloading Maven package {0} {1} from feed: '{2}'", packageId, version, feedUri); Log.VerboseFormat("Downloaded package will be stored in: '{0}'", cacheDirectory); fileSystem.EnsureDirectoryExists(cacheDirectory); fileSystem.EnsureDiskHasEnoughFreeSpace(cacheDirectory); var mavenPackageId = new MavenPackageID(packageId, version); var snapshotMetadata = GetSnapshotMetadata( mavenPackageId, feedUri, feedCredentials, maxDownloadAttempts, downloadAttemptBackoff); return(FirstToRespond(mavenPackageId, feedUri, feedCredentials, snapshotMetadata) .Tee(mavenGavFirst => Log.VerboseFormat("Found package {0} version {1}", packageId, version)) .Map(mavenGavFirst => DownloadArtifact( mavenGavFirst, packageId, version, feedUri, feedCredentials, cacheDirectory, maxDownloadAttempts, downloadAttemptBackoff, snapshotMetadata))); }
public override int Execute(string[] commandLineArguments) { Options.Parse(commandLineArguments); string deltaFilePath; string newFilePath; string basisFilePath; try { ValidateParameters(out basisFilePath, out deltaFilePath, out newFilePath); fileSystem.EnsureDiskHasEnoughFreeSpace(PackageStore.GetPackagesDirectory()); var tempNewFilePath = newFilePath + ".partial"; #if USE_OCTODIFF_EXE var factory = new OctoDiffCommandLineRunner(); #else var factory = new OctoDiffLibraryCallRunner(); #endif var octoDiff = factory.OctoDiff .Action("patch") .PositionalArgument(basisFilePath) .PositionalArgument(deltaFilePath) .PositionalArgument(tempNewFilePath); if (skipVerification) { octoDiff.Flag("skip-verification"); } if (showProgress) { octoDiff.Flag("progress"); } Log.Info("Applying delta to {0} with hash {1} and storing as {2}", basisFilePath, fileHash, newFilePath); var result = factory.Execute(); if (result.ExitCode != 0) { fileSystem.DeleteFile(tempNewFilePath, FailureOptions.ThrowOnFailure); throw new CommandLineException("OctoDiff", result.ExitCode, result.Errors); } File.Move(tempNewFilePath, newFilePath); if (!File.Exists(newFilePath)) { throw new CommandException($"Failed to apply delta file {deltaFilePath} to {basisFilePath}"); } } catch (Exception e) when(e is CommandLineException || e is CommandException) { Log.ServiceMessages.DeltaVerificationError(e.Message); return(0); } var package = PackagePhysicalFileMetadata.Build(newFilePath); if (package == null) { return(0); } Log.ServiceMessages.DeltaVerification(newFilePath, package.Hash, package.Size); return(0); }
public override int Execute(string[] commandLineArguments) { Options.Parse(commandLineArguments); string deltaFilePath; string newFilePath; string basisFilePath; ValidateParameters(out basisFilePath, out deltaFilePath, out newFilePath); fileSystem.EnsureDiskHasEnoughFreeSpace(packageStore.GetPackagesDirectory()); var tempNewFilePath = newFilePath + ".partial"; #if USE_OCTODIFF_EXE var factory = new OctoDiffCommandLineRunner(); #else var factory = new OctoDiffLibraryCallRunner(); #endif var octoDiff = factory.OctoDiff .Action("patch") .PositionalArgument(basisFilePath) .PositionalArgument(deltaFilePath) .PositionalArgument(tempNewFilePath); if (skipVerification) { octoDiff.Flag("skip-verification"); } if (showProgress) { octoDiff.Flag("progress"); } Log.Info("Applying delta to {0} with hash {1} and storing as {2}", basisFilePath, fileHash, newFilePath); var result = factory.Execute(); if (result.ExitCode != 0) { fileSystem.DeleteFile(tempNewFilePath, FailureOptions.ThrowOnFailure); throw new CommandLineException("OctoDiff", result.ExitCode, result.Errors); } File.Move(tempNewFilePath, newFilePath); if (!File.Exists(newFilePath)) { throw new CommandException("Failed to apply delta file " + deltaFilePath + " to " + basisFilePath); } var package = packageStore.GetPackage(newFilePath); if (package == null) { return(0); } using (var file = new FileStream(package.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { var size = file.Length; Log.ServiceMessages.DeltaVerification(package.FullPath, package.Metadata.Hash, size); } return(0); }
public override int Execute(string[] commandLineArguments) { Options.Parse(commandLineArguments); string deltaFilePath; string newFilePath; string basisFilePath; ValidateParameters(out basisFilePath, out deltaFilePath, out newFilePath); fileSystem.EnsureDiskHasEnoughFreeSpace(packageStore.GetPackagesDirectory()); var commandLineRunner = new CommandLineRunner(new SplitCommandOutput(new ConsoleCommandOutput(), new ServiceMessageCommandOutput(new VariableDictionary()))); var tempNewFilePath = newFilePath + ".partial"; var executable = FindOctoDiffExecutable(); var octoDiff = CommandLine.Execute(executable) .Action("patch") .PositionalArgument(basisFilePath) .PositionalArgument(deltaFilePath) .PositionalArgument(tempNewFilePath); if (skipVerification) { octoDiff.Flag("skip-verification"); } if (showProgress) { octoDiff.Flag("progress"); } Log.Info("Applying delta to {0} with hash {1} and storing as {2}", basisFilePath, fileHash, newFilePath); var result = commandLineRunner.Execute(octoDiff.Build()); if (result.ExitCode != 0) { fileSystem.DeleteFile(tempNewFilePath, DeletionOptions.TryThreeTimes); throw new CommandLineException(executable, result.ExitCode, result.Errors); } File.Move(tempNewFilePath, newFilePath); if (!File.Exists(newFilePath)) { throw new CommandException("Failed to apply delta file " + deltaFilePath + " to " + basisFilePath); } var package = packageStore.GetPackage(newFilePath); if (package == null) { return(0); } using (var file = new FileStream(package.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { var size = file.Length; Log.ServiceMessages.DeltaVerification(package.FullPath, package.Metadata.Hash, size); } return(0); }