[PATCH 03/10] revert: tolerate extra spaces, tabs in insn sheet
- From
Ramkumar Ramachandra <artagnon@gmail.com>
- Date
- Dec 14, 2011, 16:54 UTC
- Message-ID
- <1323881677-11117-4-git-send-email-artagnon@gmail.com>
- In-Reply-To
- <1323881677-11117-1-git-send-email-artagnon@gmail.com>
Tolerate extra spaces and tabs as part of the the field separator in '.git/sequencer/todo', for people with fat fingers.
Suggested-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> --- builtin/revert.c | 18 ++++++++++++------ t/t3510-cherry-pick-sequence.sh | 11 +++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/builtin/revert.c b/builtin/revert.c index 70055e5..be0686d 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -716,18 +716,24 @@ static struct commit *parse_insn_line(char *bol, char *eol, struct replay_opts * unsigned char commit_sha1[20]; enum replay_action action; char *end_of_object_name; - int saved, status; + int saved, status, padding; - if (!prefixcmp(bol, "pick ")) { + if (!prefixcmp(bol, "pick")) { action = CHERRY_PICK; - bol += strlen("pick "); - } else if (!prefixcmp(bol, "revert ")) { + bol += strlen("pick"); + } else if (!prefixcmp(bol, "revert")) { action = REVERT; - bol += strlen("revert "); + bol += strlen("revert"); } else return NULL; - end_of_object_name = bol + strcspn(bol, " \n"); + /* Eat up extra spaces/ tabs before object name */ + padding = strspn(bol, " \t"); + if (!padding) + return NULL; + bol += padding; + + end_of_object_name = bol + strcspn(bol, " \t\n"); saved = *end_of_object_name; *end_of_object_name = '\0'; status = get_sha1(bol, commit_sha1); diff --git a/t/t3510-cherry-pick-sequence.sh b/t/t3510-cherry-pick-sequence.sh index 6390f2a..781c5ac 100755 --- a/t/t3510-cherry-pick-sequence.sh +++ b/t/t3510-cherry-pick-sequence.sh @@ -342,6 +342,17 @@ test_expect_success 'malformed instruction sheet 3' ' test_must_fail git cherry-pick --continue ' +test_expect_success 'instruction sheet, fat-fingers version' ' + pristine_detach initial && + test_must_fail git cherry-pick base..anotherpick && + echo "c" >foo && + git add foo && + git commit && + sed "s/pick \([0-9a-f]*\)/pick \1 /" .git/sequencer/todo >new_sheet && + cp new_sheet .git/sequencer/todo && + git cherry-pick --continue +' + test_expect_success 'commit descriptions in insn sheet are optional' ' pristine_detach initial && test_must_fail git cherry-pick base..anotherpick &&
-- 1.7.4.1