public void Deploy(string id, string deployer, bool clean) { ITracer tracer = _traceFactory.GetTracer(); IDisposable deployStep = null; try { deployStep = tracer.Step("DeploymentManager.Deploy(id)"); // Check to see if we have a deployment with this id already string trackingFilePath = GetStatusFilePath(id, ensureDirectory: false); if (!_fileSystem.File.Exists(trackingFilePath)) { // If we don't then throw throw new FileNotFoundException(String.Format(CultureInfo.CurrentCulture, Resources.Error_DeployNotFound, id)); } // Remove the old log file for this deployment id string logPath = GetLogPath(id); FileSystemHelpers.DeleteFileSafe(logPath); ILogger logger = GetLogger(id); using (tracer.Step("Updating to specific changeset")) { // Update to the the specific changeset _serverRepository.Update(id); } using (tracer.Step("Updating submodules")) { _serverRepository.UpdateSubmodules(); } if (clean) { tracer.Trace("Cleaning git repository"); logger.Log(Resources.Log_CleaningGitRepository); _serverRepository.Clean(); } // Perform the build deployment of this changeset Build(id, tracer, deployStep); } catch (Exception ex) { tracer.TraceError(ex); if (deployStep != null) { deployStep.Dispose(); } throw; } }