private void RepoBGW_DoWork(object sender, DoWorkEventArgs e)
        {
            //Only for clones
            var Repo = Instance.Repository;

            switch (action)
            {
            case RepoAction.Clone:
                repoError = Repo.Setup(CloneRepoURL, CheckoutBranch);
                break;

            case RepoAction.Checkout:
                repoError = Repo.Checkout(CheckoutBranch);
                break;

            case RepoAction.Merge:
                repoError = Repo.Update(false);
                break;

            case RepoAction.Reset:
                repoError = Repo.Reset(true);
                break;

            case RepoAction.Test:
                repoError = Repo.MergePullRequest(TestPR);
                break;

            case RepoAction.Update:
                repoError = Repo.Update(true);
                break;

            case RepoAction.Wait:
                break;

            case RepoAction.GenCL:
                var result = Repo.GenerateChangelog(out repoError);
                if (repoError != null)
                {
                    repoError += ": " + result;
                }
                break;

            default:
                //reeee
                return;
            }

            do
            {
                Thread.Sleep(1000);
                RepoBGW.ReportProgress(Repo.CheckoutProgress());
            } while (Repo.OperationInProgress());
        }
        void DoAsyncOp(RepoAction ra, string message)
        {
            if (RepoBGW.IsBusy || (ra != RepoAction.Wait && RepoBusyCheck()))
            {
                return;
            }

            SyncCommitsCheckBox.Visible    = false;
            CurrentRevisionLabel.Visible   = false;
            CurrentRevisionTitle.Visible   = false;
            TestMergeListLabel.Visible     = false;
            TestMergeListTitle.Visible     = false;
            RepoApplyButton.Visible        = false;
            UpdateRepoButton.Visible       = false;
            MergePRButton.Visible          = false;
            CloneRepositoryButton.Visible  = false;
            RemoteNameTitle.Visible        = false;
            RepoRemoteTextBox.Visible      = false;
            BranchNameTitle.Visible        = false;
            RepoBranchTextBox.Visible      = false;
            RepoProgressBar.Visible        = true;
            HardReset.Visible              = false;
            IdentityLabel.Visible          = false;
            TestmergeSelector.Visible      = false;
            RepoGenChangelogButton.Visible = false;
            RecloneButton.Visible          = false;
            ResetRemote.Visible            = false;
            BackupTagsList.Visible         = false;
            RepoRefreshButton.Visible      = false;
            TGSJsonUpdate.Visible          = false;

            RepoPanel.UseWaitCursor = true;

            RepoProgressBar.Value = 0;
            RepoProgressBar.Style = ProgressBarStyle.Marquee;

            RepoProgressBarLabel.Text    = message;
            RepoProgressBarLabel.Visible = true;

            action    = ra;
            repoError = null;

            RepoBGW.RunWorkerAsync();
        }