[PATCH 2/7] sequencer: invalidate sequencer state without todo
- From
Ramkumar Ramachandra <artagnon@gmail.com>
- Date
- Nov 13, 2011, 10:46 UTC
- Message-ID
- <1321181181-23923-3-git-send-email-artagnon@gmail.com>
- In-Reply-To
- <1321181181-23923-1-git-send-email-artagnon@gmail.com>
To check whether an existing sequencer operation is in progress and error out, we currently check for the existence of the '.git/sequencer' directory.
$ git cherry-pick foo..bar ... conflict in bar~1 ... ... .git/sequencer is created ... $ echo "resolved" >problematicfile $ git add problematicfile $ git commit # Success! $ git cherry-pick moo # .git/sequencer exists error: A cherry-pick or revert is in progress
Although the sequencer state is useless without '.git/sequencer/todo', this case never occurs. However, in the light of the next patch, where will handle single-commit picks as a special case by not persisting '.git/sequencer/todo' in the first place, we are forced to reconsider. So, when starting a fresh sequencer invocation, remove the sequencer state carried over from a previous invocation if it's missing '.git/sequencer/todo'.
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> --- sequencer.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/sequencer.c b/sequencer.c index 87f146b..8b2518c 100644 --- a/sequencer.c +++ b/sequencer.c @@ -649,11 +649,15 @@ static void walk_revs_populate_todo(struct replay_insn_list **todo_list, static int create_seq_dir(void) { + const char *todo_file = git_path(SEQ_TODO_FILE); const char *seq_dir = git_path(SEQ_DIR); - if (file_exists(seq_dir)) - return error(_("%s already exists."), seq_dir); - else if (mkdir(seq_dir, 0777) < 0) + if (file_exists(todo_file)) + return error(_("%s already exists."), todo_file); + + /* If todo_file doesn't exist, discard sequencer state */ + remove_sequencer_state(1); + if (mkdir(seq_dir, 0777) < 0) die_errno(_("Could not create sequencer directory '%s'."), seq_dir); return 0; }
-- 1.7.6.351.gb35ac.dirty