mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-24 20:57:19 -08:00
enhance: auto-select branch after remote changed while pulling (#342)
This commit is contained in:
parent
a75d50bf97
commit
f98423b4c7
1 changed files with 62 additions and 37 deletions
|
@ -21,16 +21,7 @@ namespace SourceGit.ViewModels
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (SetProperty(ref _selectedRemote, value))
|
if (SetProperty(ref _selectedRemote, value))
|
||||||
{
|
PostRemoteSelected();
|
||||||
var branches = new List<Models.Branch>();
|
|
||||||
foreach (var branch in _repo.Branches)
|
|
||||||
{
|
|
||||||
if (branch.Remote == value.Name)
|
|
||||||
branches.Add(branch);
|
|
||||||
}
|
|
||||||
RemoteBranches = branches;
|
|
||||||
SelectedBranch = branches.Count > 0 ? branches[0] : null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,46 +71,35 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
_selectedRemote = repo.Remotes.Find(x => x.Name == specifiedRemoteBranch.Remote);
|
_selectedRemote = repo.Remotes.Find(x => x.Name == specifiedRemoteBranch.Remote);
|
||||||
_selectedBranch = specifiedRemoteBranch;
|
_selectedBranch = specifiedRemoteBranch;
|
||||||
|
|
||||||
|
var branches = new List<Models.Branch>();
|
||||||
|
foreach (var branch in _repo.Branches)
|
||||||
|
{
|
||||||
|
if (branch.Remote == specifiedRemoteBranch.Remote)
|
||||||
|
branches.Add(branch);
|
||||||
|
}
|
||||||
|
|
||||||
|
_remoteBranches = branches;
|
||||||
HasSpecifiedRemoteBranch = true;
|
HasSpecifiedRemoteBranch = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
var autoSelectedRemote = null as Models.Remote;
|
||||||
if (!string.IsNullOrEmpty(_current.Upstream))
|
if (!string.IsNullOrEmpty(_current.Upstream))
|
||||||
{
|
{
|
||||||
foreach (var branch in repo.Branches)
|
var remoteNameEndIdx = _current.Upstream.IndexOf('/', 13);
|
||||||
|
if (remoteNameEndIdx > 0)
|
||||||
{
|
{
|
||||||
if (!branch.IsLocal && _current.Upstream == branch.FullName)
|
var remoteName = _current.Upstream.Substring(13, remoteNameEndIdx - 13);
|
||||||
{
|
autoSelectedRemote = _repo.Remotes.Find(x => x.Name == remoteName);
|
||||||
_selectedRemote = repo.Remotes.Find(x => x.Name == branch.Remote);
|
|
||||||
_selectedBranch = branch;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_selectedRemote = autoSelectedRemote ?? repo.Remotes[0];
|
||||||
|
PostRemoteSelected();
|
||||||
HasSpecifiedRemoteBranch = false;
|
HasSpecifiedRemoteBranch = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure remote is exists.
|
|
||||||
if (_selectedRemote == null)
|
|
||||||
{
|
|
||||||
_selectedRemote = repo.Remotes[0];
|
|
||||||
_selectedBranch = null;
|
|
||||||
HasSpecifiedRemoteBranch = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_remoteBranches = new List<Models.Branch>();
|
|
||||||
foreach (var branch in _repo.Branches)
|
|
||||||
{
|
|
||||||
if (branch.Remote == _selectedRemote.Name)
|
|
||||||
_remoteBranches.Add(branch);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_selectedBranch == null && _remoteBranches.Count > 0)
|
|
||||||
{
|
|
||||||
_selectedBranch = _remoteBranches[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
View = new Views.Pull() { DataContext = this };
|
View = new Views.Pull() { DataContext = this };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,6 +169,51 @@ namespace SourceGit.ViewModels
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void PostRemoteSelected()
|
||||||
|
{
|
||||||
|
var remoteName = _selectedRemote.Name;
|
||||||
|
var branches = new List<Models.Branch>();
|
||||||
|
foreach (var branch in _repo.Branches)
|
||||||
|
{
|
||||||
|
if (branch.Remote == remoteName)
|
||||||
|
branches.Add(branch);
|
||||||
|
}
|
||||||
|
|
||||||
|
RemoteBranches = branches;
|
||||||
|
|
||||||
|
var autoSelectedBranch = false;
|
||||||
|
if (!string.IsNullOrEmpty(_current.Upstream))
|
||||||
|
{
|
||||||
|
if (_current.Upstream.StartsWith($"refs/remotes/{remoteName}/", System.StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
foreach (var branch in branches)
|
||||||
|
{
|
||||||
|
if (_current.Upstream == branch.FullName)
|
||||||
|
{
|
||||||
|
SelectedBranch = branch;
|
||||||
|
autoSelectedBranch = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var branch in branches)
|
||||||
|
{
|
||||||
|
if (_current.Name == branch.Name)
|
||||||
|
{
|
||||||
|
SelectedBranch = branch;
|
||||||
|
autoSelectedBranch = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!autoSelectedBranch)
|
||||||
|
SelectedBranch = branches.Count > 0 ? branches[0] : null;
|
||||||
|
}
|
||||||
|
|
||||||
private readonly Repository _repo = null;
|
private readonly Repository _repo = null;
|
||||||
private readonly Models.Branch _current = null;
|
private readonly Models.Branch _current = null;
|
||||||
private Models.Remote _selectedRemote = null;
|
private Models.Remote _selectedRemote = null;
|
||||||
|
|
Loading…
Reference in a new issue