Repository: timbrel/gitsavvy
Issue: 10 seconds of lag per commit when performing fixup operations 

I'm experiencing a crippling slowdown when using the performing actions 'fixup from stage' (through command palette) or `[Q] squash commit with ... ` (on the rebase panel)

Sublime text freezes completely for a good ~40-60 seconds on average. It is evident from the logs that I have to wait 10 seconds for every commit shown/manipulated by the rebase panel.

Using git normally from the terminal does not produce any of these slowdowns. This issue has knocked me into the terminal as I used to rely on GitSavvy for these actions.

Using `[u] move commit up (before previous)` and `[d] move commit down (after next)` does not cause this lag.
Actually rebasing my branch using the rebase panel does not cause any lag.
Showing commits (`[w] show commit`) or editing commit messages(`[e] edit commit message`) with the rebase panel are also unaffected.

#### Environment
**GitSavvy version:** v.2.27.4 (Package Control v3.4.1)

```console
$ uname -srvmpoi
Linux 5.9.0-8.3-liquorix-amd64 #1 ZEN SMP PREEMPT liquorix 5.9-5ubuntu1~bionic (2020-11-15) x86_64 x86_64 x86_64 GNU/Linux
$ git --version
git version 2.17.1
$ subl --version
Sublime Text Build 3211
```

<details>
<summary>console output when issue occurs</summary>

```console
$ git commit --author Odin H B <odinh2908@gmail.com> --date 1605881392 -F -
[detached HEAD 19b6d039c] fix models/invoice_transcription_spec
[detached HEAD 215f0f47a] fix ocr_statistics_controller_spec
[detached HEAD d409e6e1f] fix invoice_inbox_controller_spec
[detached HEAD d20911838] rewrite the invoice_transcription factory
[detached HEAD 36b8ac08b] fix invoice_transcription_previous_data_reports_controller_spec
 Date: Fri Nov 20 15:13:30 2020 +0100
 Date: Fri Nov 20 15:11:33 2020 +0100
 Date: Fri Nov 20 15:10:51 2020 +0100
 Date: Fri Nov 20 15:13:43 2020 +0100
 Date: Fri Nov 20 15:09:52 2020 +0100
 1 file changed, 321 insertions(+), 281 deletions(-)
 1 file changed, 6 insertions(+), 2 deletions(-)
 4 files changed, 636 insertions(+), 615 deletions(-)
 1 file changed, 12 insertions(+), 9 deletions(-)
 1 file changed, 58 insertions(+), 54 deletions(-)
 rewrite spec/factories/invoice_transcriptions.rb (97%)

[Done in 10.03s]
[Done in 10.03s]
[Done in 10.03s]
[Done in 10.02s]
[Done in 10.03s]
```

</details>

[gitsavvy log when reproducing issue](https://pastebin.com/d20Zvjpm)

Changed files:
core/interfaces/rebase.py

diff --git a/core/interfaces/rebase.py b/core/interfaces/rebase.py
index da5342f8..10d71eb2 100644
--- a/core/interfaces/rebase.py
+++ b/core/interfaces/rebase.py
@@ -1,3 +1,4 @@
+from functools import partial
 import os
 import re
 
@@ -12,6 +13,7 @@ from ..git_command import GitCommand
 from ..git_mixins.rebase import NearestBranchMixin
 from ..ui_mixins.quick_panel import PanelActionMixin, show_log_panel, show_branch_panel
 from ..ui_mixins.input_panel import show_single_line_input_panel
+from GitSavvy.core.runtime import enqueue_on_worker
 
 
 COMMIT_NODE_CHAR = "●"
@@ -591,7 +593,7 @@ class GsRebaseSquashCommand(RewriteBase):
             self.do_action(self.interface.entries[squash_idx - 1].long_hash)
         else:
             reversed_logs = list(reversed(self.interface.entries[0:squash_idx]))
-            show_log_panel(reversed_logs, self.do_action)
+            show_log_panel(reversed_logs, partial(enqueue_on_worker, self.do_action))
 
     def do_action(self, target_commit):
         if not target_commit:
@@ -729,7 +731,7 @@ class GsRebaseMoveUpCommand(RewriteBase):
             self.do_action(self.interface.entries[move_idx - 1].long_hash)
         else:
             logs = list(reversed(self.interface.entries[:move_idx]))
-            show_log_panel(logs, self.do_action)
+            show_log_panel(logs, partial(enqueue_on_worker, self.do_action))
 
     def do_action(self, target_commit):
         if not target_commit:
@@ -778,7 +780,7 @@ class GsRebaseMoveDownCommand(RewriteBase):
             self.do_action(self.interface.entries[move_idx + 1].long_hash)
         else:
             logs = self.interface.entries[move_idx + 1:]
-            show_log_panel(logs, self.do_action)
+            show_log_panel(logs, partial(enqueue_on_worker, self.do_action))
 
     def do_action(self, target_commit):
         if not target_commit: