public override void ExecuteCommand()

in Source/NuGetGallery.Operations/Tasks/DeleteBrokenPackageBackupsTask.cs [13:55]


        public override void ExecuteCommand()
        {
            var blobClient = CreateBlobClient();
            var storageName = StorageAccountName;

            Log.Trace("Getting all broken package backup files on storage account '{0}'.", storageName);
            var packageBackupsBlobContainer = Util.GetPackageBackupsBlobContainer(blobClient);

            var blobItems = GetPackageBackupBlobItems().ToList();

            var blobDirectories = blobItems
                .Select(bi => bi as CloudBlobDirectory)
                .Where(directory => directory != null)
                .ToList();

            var totalCount = blobDirectories.Count;
            var processedCount = 0;
            Log.Trace(
                "Deleting {0} broken package backup files (out of {1} total blob items) on storage account '{2}'.",
                totalCount,
                blobItems.Count,
                storageName);
            
            Parallel.ForEach(blobDirectories, blobDirectory =>
            {
                try
                {
                    if (!WhatIf)
                    {
                        DeleteBlobDirectory(blobDirectory);
                    }
                    Interlocked.Increment(ref processedCount);
                    Log.Info(string.Format("Deleted broken package backup root directory '{0}' ({1} of {2}).", blobDirectory.Uri.Segments.Last(), processedCount, totalCount));
                }
                catch(Exception ex)
                {
                    Interlocked.Increment(ref processedCount);
                    Log.Error(
                            "Error deleting broken package backup root directory '{0}': {1} ({2} of {3}).", 
                            blobDirectory.Uri.Segments.Last(), processedCount, totalCount, ex.Message);
                }
            });
        }