public async Task UpdateTemplateAsync() { var selection = SelectedTemplate; Debug.Assert(selection != null); if (selection == null) { throw new InvalidOperationException("UpdateTemplateAsync called with null SelectedTemplate"); } ResetStatus(); try { UpdatingStatus = OperationStatus.InProgress; _outputWindow.ShowAndActivate(); _outputWindow.WriteLine(String.Empty); _outputWindow.WriteLine(Strings.UpdatingTemplateStarted.FormatUI(selection.DisplayName)); await _installedSource.UpdateTemplateAsync(selection.ClonedPath); selection.IsUpdateAvailable = false; UpdatingStatus = OperationStatus.Succeeded; _outputWindow.WriteLine(Strings.UpdatingTemplateSuccess.FormatUI(selection.DisplayName, selection.ClonedPath)); ReportTemplateEvent(CookiecutterTelemetry.TelemetryArea.Template, CookiecutterTelemetry.TemplateEvents.Update, selection); } catch (Exception ex) when(!ex.IsCriticalException()) { UpdatingStatus = OperationStatus.Failed; _outputWindow.WriteErrorLine(ex.Message); _outputWindow.WriteLine(Strings.UpdatingTemplateFailed.FormatUI(selection.DisplayName)); ReportTemplateEvent(CookiecutterTelemetry.TelemetryArea.Template, CookiecutterTelemetry.TemplateEvents.Update, selection, ex); } }