]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refspec: relocate refname_matches_negative_refspec_item
authorMeet Soni <meetsoni3017@gmail.com>
Tue, 4 Feb 2025 04:05:55 +0000 (09:35 +0530)
committerJunio C Hamano <gitster@pobox.com>
Tue, 4 Feb 2025 17:51:41 +0000 (09:51 -0800)
Move the functions `refname_matches_negative_refspec_item()`,
`refspec_match()`, and `match_name_with_pattern()` from `remote.c` to
`refspec.c`. These functions focus on refspec matching, so placing them
in `refspec.c` aligns with the separation of concerns. Keep
refspec-related logic in `refspec.c` and remote-specific logic in
`remote.c` for better code organization.

Signed-off-by: Meet Soni <meetsoni3017@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refspec.c
refspec.h
remote.c

index 6d86e04442ca2132c318616fd6ebd4b94a28e4eb..b447768304bd83b031caab23b45b7b3432bdf790 100644 (file)
--- a/refspec.c
+++ b/refspec.c
@@ -276,3 +276,51 @@ void refspec_ref_prefixes(const struct refspec *rs,
                }
        }
 }
+
+int match_name_with_pattern(const char *key, const char *name,
+                                  const char *value, char **result)
+{
+       const char *kstar = strchr(key, '*');
+       size_t klen;
+       size_t ksuffixlen;
+       size_t namelen;
+       int ret;
+       if (!kstar)
+               die(_("key '%s' of pattern had no '*'"), key);
+       klen = kstar - key;
+       ksuffixlen = strlen(kstar + 1);
+       namelen = strlen(name);
+       ret = !strncmp(name, key, klen) && namelen >= klen + ksuffixlen &&
+               !memcmp(name + namelen - ksuffixlen, kstar + 1, ksuffixlen);
+       if (ret && value) {
+               struct strbuf sb = STRBUF_INIT;
+               const char *vstar = strchr(value, '*');
+               if (!vstar)
+                       die(_("value '%s' of pattern has no '*'"), value);
+               strbuf_add(&sb, value, vstar - value);
+               strbuf_add(&sb, name + klen, namelen - klen - ksuffixlen);
+               strbuf_addstr(&sb, vstar + 1);
+               *result = strbuf_detach(&sb, NULL);
+       }
+       return ret;
+}
+
+static int refspec_match(const struct refspec_item *refspec,
+                        const char *name)
+{
+       if (refspec->pattern)
+               return match_name_with_pattern(refspec->src, name, NULL, NULL);
+
+       return !strcmp(refspec->src, name);
+}
+
+int refname_matches_negative_refspec_item(const char *refname, struct refspec *rs)
+{
+       int i;
+
+       for (i = 0; i < rs->nr; i++) {
+               if (rs->items[i].negative && refspec_match(&rs->items[i], refname))
+                       return 1;
+       }
+       return 0;
+}
index 69d693c87d31a00dcaaccc40fe802f804cdbcbcb..584d9c9eb55f0d6ff9d298ec62aaf6a39bf3bf21 100644 (file)
--- a/refspec.h
+++ b/refspec.h
@@ -71,4 +71,13 @@ struct strvec;
 void refspec_ref_prefixes(const struct refspec *rs,
                          struct strvec *ref_prefixes);
 
+int refname_matches_negative_refspec_item(const char *refname, struct refspec *rs);
+
+/*
+ * Checks whether a name matches a pattern and optionally generates a result.
+ * Returns 1 if the name matches the pattern, 0 otherwise.
+ */
+int match_name_with_pattern(const char *key, const char *name,
+                                  const char *value, char **result);
+
 #endif /* REFSPEC_H */
index cb70ce6f3bb6f4bd5c11a326f17acf837e101ac7..1da8ec703768b2baac02a25177a0f2544c5f73be 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -907,54 +907,6 @@ void ref_push_report_free(struct ref_push_report *report)
        }
 }
 
-static int match_name_with_pattern(const char *key, const char *name,
-                                  const char *value, char **result)
-{
-       const char *kstar = strchr(key, '*');
-       size_t klen;
-       size_t ksuffixlen;
-       size_t namelen;
-       int ret;
-       if (!kstar)
-               die(_("key '%s' of pattern had no '*'"), key);
-       klen = kstar - key;
-       ksuffixlen = strlen(kstar + 1);
-       namelen = strlen(name);
-       ret = !strncmp(name, key, klen) && namelen >= klen + ksuffixlen &&
-               !memcmp(name + namelen - ksuffixlen, kstar + 1, ksuffixlen);
-       if (ret && value) {
-               struct strbuf sb = STRBUF_INIT;
-               const char *vstar = strchr(value, '*');
-               if (!vstar)
-                       die(_("value '%s' of pattern has no '*'"), value);
-               strbuf_add(&sb, value, vstar - value);
-               strbuf_add(&sb, name + klen, namelen - klen - ksuffixlen);
-               strbuf_addstr(&sb, vstar + 1);
-               *result = strbuf_detach(&sb, NULL);
-       }
-       return ret;
-}
-
-static int refspec_match(const struct refspec_item *refspec,
-                        const char *name)
-{
-       if (refspec->pattern)
-               return match_name_with_pattern(refspec->src, name, NULL, NULL);
-
-       return !strcmp(refspec->src, name);
-}
-
-int refname_matches_negative_refspec_item(const char *refname, struct refspec *rs)
-{
-       int i;
-
-       for (i = 0; i < rs->nr; i++) {
-               if (rs->items[i].negative && refspec_match(&rs->items[i], refname))
-                       return 1;
-       }
-       return 0;
-}
-
 struct ref *apply_negative_refspecs(struct ref *ref_map, struct refspec *rs)
 {
        struct ref **tail;