diff --git a/repo.py b/repo.py index 78b5d4bd..1c770260 100644 --- a/repo.py +++ b/repo.py @@ -36,17 +36,21 @@ def run(self): def branch_done(self, result): self.results = result.rstrip().split('\n') - self.quick_panel(self.results, self.panel_done, - sublime.MONOSPACE_FONT) + self.quick_panel(self.results, self.panel_done, sublime.MONOSPACE_FONT) + + def process(self, command): + self.run_command(['git'] + command + [self.picked_branch], self.update_status) def panel_done(self, picked): if 0 > picked < len(self.results): return picked_branch = self.results[picked] if picked_branch.startswith("*"): + self.panel("Can't process with current branch") return - picked_branch = picked_branch.strip() - self.run_command(['git'] + self.command_to_run_after_branch + [picked_branch], self.update_status) + self.picked_branch = picked_branch.strip() + + self.process(self.command_to_run_after_branch) def update_status(self, result): global branch @@ -61,7 +65,32 @@ class GitMergeCommand(GitBranchCommand): class GitDeleteBranchCommand(GitBranchCommand): - command_to_run_after_branch = ['branch', '-d'] + command_to_run_after_branch = ['branch', '-D'] + command_to_run_after_branch_force = ['branch', '-D'] + command_is_branch_merged = ['branch', '--no-merged'] + + def _process(self, command): + # default process behaviour + super(GitDeleteBranchCommand, self).process(command) + + def process(self, command): + def no_merged_branches(result): + if any( + branch for branch in result.split('\n') + if branch.strip() == self.picked_branch + ): + self.quick_panel( + ['Delete not fully merged branch', 'Cancel'], + self.force_delete, + ) + else: + self._process(command) + + self.run_command(['git'] + self.command_is_branch_merged, no_merged_branches) + + def force_delete(self, picked): + if picked == 0: + self._process(self.command_to_run_after_branch_force) class GitNewBranchCommand(GitWindowCommand):