AzureWebFarm.Services.SyncService.DeploySitesFromLocal C# (CSharp) Method

DeploySitesFromLocal() public method

public DeploySitesFromLocal ( ) : void
return void
        public void DeploySitesFromLocal()
        {
            _logger.DebugFormat("[Local Storage => IIS] - Site deploy times: {0}", string.Join(",", _siteDeployTimes.Select(t => t.Key + " - " + t.Value).ToArray()));

            foreach (var site in Directory.EnumerateDirectories(_localTempPath).Select(d => Path.GetFileName(d).ToLowerInvariant()))
            {
                var sitePath = Path.Combine(_localSitesPath, site);
                var tempSitePath = Path.Combine(_localTempPath, site);

                if (Directory.Exists(tempSitePath))
                {
                    // Sync from package to IIS App using MSDeploy
                    string packageFile;
                    try
                    {
                        packageFile = Directory.EnumerateFiles(tempSitePath).SingleOrDefault(f => f.ToLowerInvariant().EndsWith(".zip"));
                    }
                    catch (InvalidOperationException e)
                    {
                        if (string.IsNullOrEmpty(e.Message))
                        {
                            throw new InvalidOperationException("Multiple packages exist for the site '" + site + "'.");
                        }

                        throw;
                    }

                    if (packageFile != null)
                    {
                        if (!_siteDeployTimes.ContainsKey(site))
                        {
                            _siteDeployTimes.Add(site, DateTime.MinValue);
                        }

                        var packageLastModifiedTime = Directory.GetLastWriteTimeUtc(packageFile);
                        _logger.DebugFormat("[Local Storage => IIS] - Package last modified time: '{0}'", packageLastModifiedTime);

                        if (_siteDeployTimes[site] < packageLastModifiedTime)
                        {
                            _logger.InfoFormat("[Local Storage => IIS] - Deploying the package '{0}' to '{1}' with MSDeploy", packageFile, sitePath);

                            try
                            {
                                using (var deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.Package, packageFile))
                                {
                                    deploymentObject.SyncTo(DeploymentWellKnownProvider.DirPath, sitePath, new DeploymentBaseOptions(), new DeploymentSyncOptions {UseChecksum = true});
                                }

                                UpdateSyncStatus(site, SyncInstanceStatus.Deployed);
                                _logger.DebugFormat(string.Format("Calling OnSiteUpdated event for {0}...", site));
                                OnSiteUpdated(site);
                                _siteDeployTimes[site] = DateTime.UtcNow;
                            }
                            catch (Exception ex)
                            {
                                UpdateSyncStatus(site, SyncInstanceStatus.Error, ex);
                                throw;
                            }
                        }
                    }
                }
            }
        }