public void Deploy(IRepository repository, ChangeSet changeSet, string deployer, bool clean) { ITracer tracer = _traceFactory.GetTracer(); IDisposable deployStep = null; ILogger innerLogger = null; string targetBranch = null; var deploymentRepository = new DeploymentRepository(repository); // If we don't get a changeset, find out what branch we should be deploying and get the commit ID from it if (changeSet == null) { targetBranch = _settings.GetBranch(); changeSet = deploymentRepository.GetChangeSet(targetBranch); } string id = changeSet.Id; IDeploymentStatusFile statusFile = null; try { deployStep = tracer.Step("DeploymentManager.Deploy(id)"); // Remove the old log file for this deployment id string logPath = GetLogPath(id); FileSystemHelpers.DeleteFileSafe(logPath); statusFile = GetOrCreateStatusFile(changeSet, tracer, deployer); statusFile.MarkPending(); ILogger logger = GetLogger(changeSet.Id); using (tracer.Step("Updating to specific changeset")) { innerLogger = logger.Log(Resources.Log_UpdatingBranch, targetBranch ?? id); using (var writer = new ProgressWriter()) { // Update to the the specific changeset deploymentRepository.Update(id); } } using (tracer.Step("Updating submodules")) { innerLogger = logger.Log(Resources.Log_UpdatingSubmodules); deploymentRepository.UpdateSubmodules(); } if (clean) { tracer.Trace("Cleaning {0} repository", repository.RepositoryType); innerLogger = logger.Log(Resources.Log_CleaningRepository, repository.RepositoryType); deploymentRepository.Clean(); } // set to null as Build() below takes over logging innerLogger = null; // Perform the build deployment of this changeset Build(id, tracer, deployStep); } catch (Exception ex) { if (innerLogger != null) { innerLogger.Log(ex); } if (statusFile != null) { statusFile.MarkFailed(); } tracer.TraceError(ex); if (deployStep != null) { deployStep.Dispose(); } throw; } }
public void Deploy(IRepository repository, ChangeSet changeSet, string deployer, bool clean) { ITracer tracer = _traceFactory.GetTracer(); IDisposable deployStep = null; var deploymentRepository = new DeploymentRepository(repository); // If we don't get a changeset, find out what branch we should be deploying and update the repo to it if (changeSet == null) { string targetBranch = _settings.GetValue(SettingsKeys.Branch); deploymentRepository.Update(targetBranch); changeSet = deploymentRepository.GetChangeSet(repository.CurrentId); } string id = changeSet.Id; try { deployStep = tracer.Step("DeploymentManager.Deploy(id)"); // Remove the old log file for this deployment id string logPath = GetLogPath(id); FileSystemHelpers.DeleteFileSafe(logPath); ILogger logger = GetOrCreateStatusFile(changeSet, tracer, deployer); using (tracer.Step("Updating to specific changeset")) { // Update to the the specific changeset deploymentRepository.Update(id); } using (tracer.Step("Updating submodules")) { deploymentRepository.UpdateSubmodules(); } if (clean) { tracer.Trace("Cleaning {0} repository", repository.RepositoryType); logger.Log(Resources.Log_CleaningRepository, repository.RepositoryType); deploymentRepository.Clean(); } // Perform the build deployment of this changeset Build(id, tracer, deployStep); } catch (Exception ex) { tracer.TraceError(ex); if (deployStep != null) { deployStep.Dispose(); } throw; } }