mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-24 20:57:19 -08:00
feature<Dashboard>: add context menu "Tracking" to change upstream of selected local branch
This commit is contained in:
parent
5e6ef8abcb
commit
19bccbecf6
4 changed files with 66 additions and 6 deletions
|
@ -153,6 +153,19 @@ namespace SourceGit.Git {
|
||||||
if (errs != null) App.RaiseError(errs);
|
if (errs != null) App.RaiseError(errs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Change upstream
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="repo"></param>
|
||||||
|
/// <param name="upstream"></param>
|
||||||
|
public void SetUpstream(Repository repo, string upstream) {
|
||||||
|
var errs = repo.RunCommand($"branch {Name} -u {upstream}", null);
|
||||||
|
if (errs != null) App.RaiseError(errs);
|
||||||
|
|
||||||
|
repo.Branches(true);
|
||||||
|
repo.OnBranchChanged?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete branch.
|
/// Delete branch.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -835,6 +835,18 @@ namespace SourceGit.Git {
|
||||||
return cachedBranches;
|
return cachedBranches;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get all remote branches
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>All remote branches</returns>
|
||||||
|
public List<Branch> RemoteBranches() {
|
||||||
|
var ret = new List<Branch>();
|
||||||
|
foreach (var b in cachedBranches) {
|
||||||
|
if (!b.IsLocal) ret.Add(b);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get current branch
|
/// Get current branch
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -61,7 +61,9 @@
|
||||||
<Path Grid.Column="2" Width="8" Height="8" Style="{DynamicResource Style.Icon}" Data="M 0 0 L 0 7 L 4 3.5 Z"/>
|
<Path Grid.Column="2" Width="8" Height="8" Style="{DynamicResource Style.Icon}" Data="M 0 0 L 0 7 L 4 3.5 Z"/>
|
||||||
<Popup Name="Popup" Placement="Right" HorizontalOffset="-2" IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Fade">
|
<Popup Name="Popup" Placement="Right" HorizontalOffset="-2" IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Fade">
|
||||||
<Border Name="SubmenuBorder" SnapsToDevicePixels="True" Background="{DynamicResource Brush.BG1}" BorderBrush="{DynamicResource Brush.Border1}" BorderThickness="1">
|
<Border Name="SubmenuBorder" SnapsToDevicePixels="True" Background="{DynamicResource Brush.BG1}" BorderBrush="{DynamicResource Brush.Border1}" BorderThickness="1">
|
||||||
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle"/>
|
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" CanContentScroll="True">
|
||||||
|
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle"/>
|
||||||
|
</ScrollViewer>
|
||||||
</Border>
|
</Border>
|
||||||
</Popup>
|
</Popup>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
|
@ -641,14 +641,14 @@ namespace SourceGit.UI {
|
||||||
if (branch.Kind != Git.Branch.Type.Normal) {
|
if (branch.Kind != Git.Branch.Type.Normal) {
|
||||||
menu.Items.Add(new Separator());
|
menu.Items.Add(new Separator());
|
||||||
|
|
||||||
var icon = new System.Windows.Shapes.Path();
|
var flowIcon = new System.Windows.Shapes.Path();
|
||||||
icon.Style = FindResource("Style.Icon") as Style;
|
flowIcon.Style = FindResource("Style.Icon") as Style;
|
||||||
icon.Data = FindResource("Icon.Flow") as Geometry;
|
flowIcon.Data = FindResource("Icon.Flow") as Geometry;
|
||||||
icon.Width = 10;
|
flowIcon.Width = 10;
|
||||||
|
|
||||||
var finish = new MenuItem();
|
var finish = new MenuItem();
|
||||||
finish.Header = $"Git Flow - Finish '{branch.Name}'";
|
finish.Header = $"Git Flow - Finish '{branch.Name}'";
|
||||||
finish.Icon = icon;
|
finish.Icon = flowIcon;
|
||||||
finish.Click += (o, e) => {
|
finish.Click += (o, e) => {
|
||||||
GitFlowFinishBranch.Show(repo, branch);
|
GitFlowFinishBranch.Show(repo, branch);
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -693,6 +693,39 @@ namespace SourceGit.UI {
|
||||||
menu.Items.Add(createTag);
|
menu.Items.Add(createTag);
|
||||||
menu.Items.Add(new Separator());
|
menu.Items.Add(new Separator());
|
||||||
|
|
||||||
|
var remoteBranches = repo.RemoteBranches();
|
||||||
|
if (remoteBranches.Count > 0) {
|
||||||
|
var trackingIcon = new System.Windows.Shapes.Path();
|
||||||
|
trackingIcon.Style = FindResource("Style.Icon") as Style;
|
||||||
|
trackingIcon.Data = FindResource("Icon.Branch") as Geometry;
|
||||||
|
trackingIcon.VerticalAlignment = VerticalAlignment.Bottom;
|
||||||
|
trackingIcon.Width = 10;
|
||||||
|
|
||||||
|
var currentTrackingIcon = new System.Windows.Shapes.Path();
|
||||||
|
currentTrackingIcon.Style = FindResource("Style.Icon") as Style;
|
||||||
|
currentTrackingIcon.Data = FindResource("Icon.Check") as Geometry;
|
||||||
|
currentTrackingIcon.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
currentTrackingIcon.Width = 10;
|
||||||
|
|
||||||
|
var tracking = new MenuItem();
|
||||||
|
tracking.Header = "Tracking ...";
|
||||||
|
tracking.Icon = trackingIcon;
|
||||||
|
|
||||||
|
foreach (var b in remoteBranches) {
|
||||||
|
var target = new MenuItem();
|
||||||
|
target.Header = b.Name;
|
||||||
|
if (branch.Upstream == b.FullName) target.Icon = currentTrackingIcon;
|
||||||
|
target.Click += (o, e) => {
|
||||||
|
branch.SetUpstream(repo, b.Name);
|
||||||
|
e.Handled = true;
|
||||||
|
};
|
||||||
|
tracking.Items.Add(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.Items.Add(tracking);
|
||||||
|
menu.Items.Add(new Separator());
|
||||||
|
}
|
||||||
|
|
||||||
var copy = new MenuItem();
|
var copy = new MenuItem();
|
||||||
copy.Header = "Copy Branch Name";
|
copy.Header = "Copy Branch Name";
|
||||||
copy.Click += (o, e) => {
|
copy.Click += (o, e) => {
|
||||||
|
|
Loading…
Reference in a new issue