From: ZheNing Hu <adlternative@xxxxxxxxx> Johannes Schindelin seems to have introduced a bug in cc72385f(for-each-ref: let upstream/push optionally report the remote name), it use `atom->u.remote_ref.option` which is a member of enumeration in the judgment statement. When we use other members in the enumeration `used_atom.u`, and it happened to fill in `remote_ref.push`, this judgment may still be established and produces errors. So replace the judgment statement with `starts_with(name, "push")` to fix the error. Signed-off-by: ZheNing Hu <adlternative@xxxxxxxxx> --- [GSOC] ref-filter: solve bugs caused by enumeration This is the problem I found in the implementation of git for-each-ref --format="%(notes)". I added a new option to the enum used_atom.u , but the program seems to output the value of "%(push)". After research, it should be the problem of incorrect use of enumeration values here. Thanks, may the force be with you! Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-949%2Fadlternative%2Fref-filter-enum-bug-fix-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-949/adlternative/ref-filter-enum-bug-fix-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/949 ref-filter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ref-filter.c b/ref-filter.c index a0adb4551d87..f467f2fbbb73 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1730,7 +1730,7 @@ static int populate_value(struct ref_array_item *ref, struct strbuf *err) else v->s = xstrdup(""); continue; - } else if (atom->u.remote_ref.push) { + } else if (starts_with(name, "push")) { const char *branch_name; v->s = xstrdup(""); if (!skip_prefix(ref->refname, "refs/heads/", base-commit: 311531c9de557d25ac087c1637818bd2aad6eb3a -- gitgitgadget