public void Deploy(string deployer) { var tracer = _traceFactory.GetTracer(); IDisposable deployStep = null; try { deployStep = tracer.Step("Deploy"); ReceiveInfo receiveInfo = _serverRepository.GetReceiveInfo(); string targetBranch = _settings.GetValue("branch") ?? "master"; tracer.Trace("Deploying branch '{0}'", targetBranch); // Something went wrong here since we weren't able to deploy if receiveInfo is null if (receiveInfo == null || !targetBranch.Equals(receiveInfo.Branch.Name, StringComparison.OrdinalIgnoreCase)) { if (receiveInfo == null) { tracer.TraceWarning("Push info was null. Post receive hook didn't execute correctly"); } else { tracer.Trace("Unexpected branch deployed '{0}'.", receiveInfo.Branch.Name); _globalLogger.Log(Resources.Log_UnexpectedBranchPushed, receiveInfo.Branch.Name, targetBranch); } ReportCompleted(); deployStep.Dispose(); return; } // Get the pushed branch's id string id = receiveInfo.Branch.Id; // If nothing changed then do nothing if (IsActive(id)) { tracer.Trace("Deployment '{0}' already active", id); _globalLogger.Log(Resources.Log_DeploymentAlreadyActive, id); ReportCompleted(); deployStep.Dispose(); return; } ILogger logger = CreateAndPopulateStatusFile(tracer, id, deployer); using (tracer.Step("Update to " + receiveInfo.Branch.Name)) { logger.Log(Resources.Log_UpdatingBranch, receiveInfo.Branch.Name); using (var progressWriter = new ProgressWriter()) { progressWriter.Start(); // Update to the target branch _serverRepository.Update(targetBranch); } } Build(id, tracer, deployStep); } catch (Exception ex) { _globalLogger.Log(ex); tracer.TraceError(ex); if (deployStep != null) { deployStep.Dispose(); } ReportCompleted(); } }