diff options
author | Stefan Haller <stefan@haller-berlin.de> | 2023-04-06 07:04:25 +0200 |
---|---|---|
committer | Stefan Haller <stefan@haller-berlin.de> | 2023-04-29 07:28:33 +0200 |
commit | ab25600ccbbc9b8880289c496f521710894e26cc (patch) | |
tree | 143fbad1da1f2f38aec9db8718fa4318145afb79 | |
parent | d50c58b4c669b1de94bf4d04f508b3eb5b84647c (diff) |
Extract EditRebaseTodo into a function in utils.rebaseTodo
We want to reuse it from the daemon code in the next commit.
-rw-r--r-- | pkg/commands/git_commands/rebase.go | 21 | ||||
-rw-r--r-- | pkg/utils/rebase_todo.go | 23 |
2 files changed, 25 insertions, 19 deletions
diff --git a/pkg/commands/git_commands/rebase.go b/pkg/commands/git_commands/rebase.go index 26c0536e9..31eaf1366 100644 --- a/pkg/commands/git_commands/rebase.go +++ b/pkg/commands/git_commands/rebase.go @@ -231,25 +231,8 @@ func (self *RebaseCommands) AmendTo(commit *models.Commit) error { // EditRebaseTodo sets the action for a given rebase commit in the git-rebase-todo file func (self *RebaseCommands) EditRebaseTodo(commit *models.Commit, action todo.TodoCommand) error { - fileName := filepath.Join(self.dotGitDir, "rebase-merge/git-rebase-todo") - todos, err := utils.ReadRebaseTodoFile(fileName) - if err != nil { - return err - } - - for i := range todos { - t := &todos[i] - // Comparing just the sha is not enough; we need to compare both the - // action and the sha, as the sha could appear multiple times (e.g. in a - // pick and later in a merge) - if t.Command == commit.Action && t.Commit == commit.Sha { - t.Command = action - return utils.WriteRebaseTodoFile(fileName, todos) - } - } - - // Should never get here - return fmt.Errorf("Todo %s not found in git-rebase-todo", commit.Sha) + return utils.EditRebaseTodo( + filepath.Join(self.dotGitDir, "rebase-merge/git-rebase-todo"), commit.Sha, commit.Action, action) } // MoveTodoDown moves a rebase todo item down by one position diff --git a/pkg/utils/rebase_todo.go b/pkg/utils/rebase_todo.go index 0b6a6a40c..a61d4c36c 100644 --- a/pkg/utils/rebase_todo.go +++ b/pkg/utils/rebase_todo.go @@ -9,6 +9,29 @@ import ( "github.com/samber/lo" ) +// Read a git-rebase-todo file, change the action for the given sha to +// newAction, and write it back +func EditRebaseTodo(filePath string, sha string, oldAction todo.TodoCommand, newAction todo.TodoCommand) error { + todos, err := ReadRebaseTodoFile(filePath) + if err != nil { + return err + } + + for i := range todos { + t := &todos[i] + // Comparing just the sha is not enough; we need to compare both the + // action and the sha, as the sha could appear multiple times (e.g. in a + // pick and later in a merge) + if t.Command == oldAction && equalShas(t.Commit, sha) { + t.Command = newAction + return WriteRebaseTodoFile(filePath, todos) + } + } + + // Should never get here + return fmt.Errorf("Todo %s not found in git-rebase-todo", sha) +} + func equalShas(a, b string) bool { return strings.HasPrefix(a, b) || strings.HasPrefix(b, a) } |