using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace SourceGit.UI { /// /// Rebase current branch on selected commit/branch /// public partial class Rebase : UserControl { private Git.Repository repo = null; private string based = null; /// /// Constructor. /// /// Opened repository public Rebase(Git.Repository opened) { repo = opened; InitializeComponent(); } /// /// Rebase current branch on selected branch /// /// /// public static void Show(Git.Repository opened, Git.Branch branch) { if (branch == null) return; var current = opened.CurrentBranch(); if (current == null) return; var dialog = new Rebase(opened); dialog.based = branch.Head; dialog.branch.Content = current.Name; dialog.type.Data = dialog.FindResource("Icon.Branch") as Geometry; dialog.desc.Content = branch.Name; PopupManager.Show(dialog); } /// /// Rebase current branch on selected commit. /// /// /// public static void Show(Git.Repository opened, Git.Commit commit) { var current = opened.CurrentBranch(); if (current == null) return; var dialog = new Rebase(opened); dialog.based = commit.SHA; dialog.branch.Content = current.Name; dialog.type.Data = dialog.FindResource("Icon.Commit") as Geometry; dialog.desc.Content = $"{commit.ShortSHA} {commit.Subject}"; PopupManager.Show(dialog); } /// /// Start rebase. /// /// /// private async void Start(object sender, RoutedEventArgs e) { PopupManager.Lock(); var autoStash = chkAutoStash.IsChecked == true; await Task.Run(() => repo.Rebase(based, autoStash)); PopupManager.Close(true); } private void Cancel(object sender, RoutedEventArgs e) { PopupManager.Close(); } } }