internal void OnCommit() { if (tracker == null) { return; } try { //service.NoRefresh = true; //if (chkNewBranch.IsChecked == true) //{ // if (string.IsNullOrWhiteSpace(txtNewBranch.Text)) // { // MessageBox.Show("Please enter new branch name.", "Commit", // MessageBoxButton.OK, MessageBoxImage.Exclamation); // txtNewBranch.Focus(); // return; // } // tracker.CheckOutBranch(txtNewBranch.Text, true); //} var isAmend = chkAmend.IsChecked == true; if (string.IsNullOrWhiteSpace(Comments)) { MessageBox.Show("Please enter comments for the commit.", "Commit", MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } ShowStatusMessage("Staging files ..."); StageSelectedFiles(); if (!isAmend) { tracker.Refresh(); bool hasStaged = tracker == null ? false : tracker.ChangedFiles.Any(f => f.IsStaged); if (!hasStaged) { MessageBox.Show("No file has been selected/staged for commit.", "Commit", MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } } else { const string amendMsg = @"You are about to amend a commit that has tags or remotes, which could cause issues in local and remote repositories. Are you sure you want to continue?"; if (tracker.CurrentCommitHasRefs() && MessageBox.Show(amendMsg, "Amend Last Commit", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No) { return; } } var id = tracker.Commit(Comments, isAmend, chkSignOff.IsChecked == true); ShowStatusMessage("Commit successfully. Commit Hash: " + id); ClearUI(); //service.NoRefresh = false; tracker.Refresh(); toolWindow.Refresh(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); ShowStatusMessage(ex.Message); } }
internal async Task OnCommit() { if (tracker == null) { return; } try { var isAmend = chkAmend.IsChecked == true; if (string.IsNullOrWhiteSpace(Comments)) { Comments = tracker.GetCommitTemplate(); if (string.IsNullOrWhiteSpace(Comments)) { MessageBox.Show("Please enter comments for the commit.", "Commit", MessageBoxButton.OK, MessageBoxImage.Exclamation); } return; } var unstaged = this.listView1.Items.Cast <GitFile>() .Where(item => item.IsSelected && !item.IsStaged); var count = unstaged.Count(); var advancedMode = this.chkAdvMode.IsChecked == true; var changed = this.listUnstaged.ItemsSource.Cast <GitFile>(); ShowStatusMessage("Staging files ..."); if (!isAmend) { tracker.Refresh(); bool hasStaged = false; if (advancedMode) { // advanced mode hasStaged = tracker == null ? false : tracker.ChangedFiles.Any(f => f.X != ' ') || count > 0; // if nothing staged, staged to be all changes if (!hasStaged) { hasStaged = changed.Count() > 0; } } else { // simple mode hasStaged = tracker == null ? false : tracker.ChangedFiles.Any(f => f.IsStaged) || count > 0; } if (!hasStaged) { MessageBox.Show("No file has been selected/staged for commit.", "Commit", MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } } else { const string amendMsg = @"You are about to amend a commit that has tags or remotes, which could cause issues in local and remote repositories. Are you sure you want to continue?"; if (tracker.CurrentCommitHasRefs() && MessageBox.Show(amendMsg, "Amend Last Commit", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No) { return; } } this.toolWindow.Service.NoRefresh = true; int i = 1; bool signoff = chkSignOff.IsChecked == true; await Task.Run(() => { if (advancedMode && changed.Count() > 0 && listStaged.Items.Count == 0) { count = changed.Count(); // auto stage all changes if nothing is staged foreach (var item in changed) { tracker.StageFile(item.FileName); ShowStatusMessage(string.Format("Staged ({0}/{1}): {2}", i++, count, item.FileName)); } } else { foreach (var item in unstaged) { tracker.StageFile(item.FileName); ShowStatusMessage(string.Format("Staged ({0}/{1}): {2}", i++, count, item.FileName)); } } var id = tracker.Commit(Comments, isAmend, signoff); ShowStatusMessage("Commit successfully. Commit Hash: " + id); }); ClearUI(); Comments = tracker.GetCommitTemplate(); this.toolWindow.Service.NoRefresh = false; await this.toolWindow.Service.RefreshToolWindows(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); ShowStatusMessage(ex.Message); } }