private void BranchesDropDown(object sender, EventArgs e)
{
if ((PullFromUrl.Checked && string.IsNullOrEmpty(PullSource.Text)) &&
(PullFromRemote.Checked && string.IsNullOrEmpty(Remotes.Text)))
{
Branches.DataSource = null;
return;
}
Cursor.Current = Cursors.WaitCursor;
LoadPuttyKey();
if (_heads == null)
{
if (PullFromUrl.Checked)
{
_heads = GitCommands.GitCommands.GetHeads(false, true);
}
else
{
// The line below is the most reliable way to get a list containing
// all remote branches but it is also the slowest.
// Heads = GitCommands.GitCommands.GetRemoteHeads(Remotes.Text, false, true);
// The code below is a quick way to get a list containg all remote branches.
// It only returns the heads that are allready known to the repository. This
// doesn't return heads that are new on the server. This can be updated using
// update branch info in the manage remotes dialog.
_heads = new List<GitHead>();
foreach (var head in GitCommands.GitCommands.GetHeads(true, true))
{
if (!head.IsRemote ||
!head.Name.StartsWith(Remotes.Text, StringComparison.CurrentCultureIgnoreCase))
continue;
_heads.Insert(0, head);
}
}
}
Branches.DisplayMember = "LocalName";
//_heads.Insert(0, GitHead.AllHeads); --> disable this because it is only for expert users
_heads.Insert(0, GitHead.NoHead);
Branches.DataSource = _heads;
Cursor.Current = Cursors.Default;
}