Source/NuGetGallery.Operations/Tasks/Backups/BackupPackageFileTask.cs (71 lines of code) (raw):

using System.IO; using Microsoft.WindowsAzure.Storage; using NuGetGallery.Operations.Common; namespace NuGetGallery.Operations { [Command("backuppackagefile", "Back up a specific package file", AltName = "bpf", MaxArgs = 0)] public class BackupPackageFileTask : PackageVersionTask { [Option("The destination storage account for the backups", AltName = "d")] public CloudStorageAccount BackupStorage { get; set; } public override void ValidateArguments() { base.ValidateArguments(); if (BackupStorage == null) { BackupStorage = StorageAccount; if (CurrentEnvironment != null) { BackupStorage = CurrentEnvironment.BackupStorage; } } } public override void ExecuteCommand() { var client = CreateBlobClient(); var backupClient = BackupStorage.CreateCloudBlobClient(); var backupBlobs = backupClient.GetContainerReference("package-backups"); var packageBlobs = client.GetContainerReference("packages"); if (!WhatIf) { backupBlobs.CreateIfNotExists(); } var backupFileName = Util.GetPackageBackupFileName( PackageId, PackageVersion, PackageHash); var backupPackageBlob = backupBlobs.GetBlockBlobReference(backupFileName); if (backupPackageBlob.Exists()) { Log.Info("Skipped {0} {1}: backup already exists", PackageId, PackageVersion); return; } var packageFileBlob = Util.GetPackageFileBlob( packageBlobs, PackageId, PackageVersion); var packageFileName = Util.GetPackageFileName( PackageId, PackageVersion); var downloadedPackageFilePath = Path.Combine(Util.GetTempFolder(), packageFileName); Log.Trace("Downloading package file '{0}' to temporary file '{1}'.", packageFileName, downloadedPackageFilePath); if (!WhatIf) { packageFileBlob.DownloadToFile(downloadedPackageFilePath); } Log.Trace("Uploading package file backup '{0}' from temporary file '{1}'.", backupFileName, downloadedPackageFilePath); if (!WhatIf) { backupPackageBlob.UploadFile(downloadedPackageFilePath); backupPackageBlob.Properties.ContentType = "application/zip"; backupPackageBlob.SetProperties(); } Log.Trace("Deleting temporary file '{0}'.", downloadedPackageFilePath); if (!WhatIf) { File.Delete(downloadedPackageFilePath); } Log.Info("Backed Up {0} {1}", PackageId, PackageVersion); } } }