Subject: [PATCH] [GSOC] ref-filter: solve bugs caused by enumeration

From: "ZheNing Hu via GitGitGadget" <[email-masked]>
Date: Wed, 05 May 2021 15:31:04 +0000

From: ZheNing Hu <[email-masked]>

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 <[email-masked]>
---
    [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