Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }