blame: silently ignore invalid ignore file objects

Since 610e2b9240 (blame: validate and peel the object names on the ignore list, 2020-09-24) git blame reports checks if objects specified with --ignore-rev and in files loaded with --ignore-revs-file and config option blame.ignoreRevsFile are actual objects and dies if they aren't. The intent is to report typos to the user. This also breaks the ability to use a single ignore file for multiple repositories. Typos are presumably less likely in files than on the command line, so alerting is less useful here. Restore that feature by skipping non-commits without dying. Reported-by: Jean-Yves Avenard <jyavenard@mozilla.com> Signed-off-by: René Scharfe <l.s.r@web.de> Reviewed-by: Barret Rhoden <brho@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

René Scharfe committed Nov 10, 2020 at 12:38 UTC c714d0587567d67e1c3702e44221c1b46dc969ff
2 files changed +5 -4
oidset.c
+3 -2
@@ -72,9 +72,10 @@ void oidset_parse_file_carefully(struct oidset *set, const char *path,
72 if (!sb.len)
73 continue;
74
75 - if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0' ||
76 - (fn && fn(&oid, cbdata)))
75 + if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0')
76 die("invalid object name: %s", sb.buf);
77 + if (fn && fn(&oid, cbdata))
78 + continue;
79 oidset_insert(set, &oid);
80 }
81 if (ferror(fp))
t/t8013-blame-ignore-revs.sh
+2 -2
@@ -39,10 +39,10 @@ test_expect_success 'validate --ignore-rev' '
39 test_must_fail git blame --ignore-rev X^{tree} file
40 '
41
42 -# Ensure bogus --ignore-revs-file requests are caught
42 +# Ensure bogus --ignore-revs-file requests are silently accepted
43 test_expect_success 'validate --ignore-revs-file' '
44 git rev-parse X^{tree} >ignore_x &&
45 - test_must_fail git blame --ignore-revs-file ignore_x file
45 + git blame --ignore-revs-file ignore_x file
46 '
47
48 for I in X XT