All of lore.kernel.org
 help / color / mirror / Atom feed
From: Meet Soni <meetsoni3017@gmail.com>
To: git@vger.kernel.org
Cc: shubham.kanodia10@gmail.com, Meet Soni <meetsoni3017@gmail.com>,
	Pavel Rappo <pavel.rappo@gmail.com>,
	Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
	Jacob Keller <jacob.e.keller@intel.com>,
	Patrick Steinhardt <ps@pks.im>,
	Matthew Rogers <mattr94@gmail.com>,
	Jacob Keller <jacob.keller@gmail.com>
Subject: [PATCH v2 1/3] refspec: relocate omit_name_by_refspec and related functions
Date: Mon, 27 Jan 2025 16:06:42 +0530	[thread overview]
Message-ID: <20250127103644.36627-2-meetsoni3017@gmail.com> (raw)
In-Reply-To: <20250127103644.36627-1-meetsoni3017@gmail.com>

Move the functions `omit_name_by_refspec()`, `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>
---
 refspec.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 refspec.h | 13 +++++++++++++
 remote.c  | 48 ------------------------------------------------
 remote.h  |  6 ------
 4 files changed, 61 insertions(+), 54 deletions(-)

diff --git a/refspec.c b/refspec.c
index 6d86e04442..66989a1d75 100644
--- 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 omit_name_by_refspec(const char *name, struct refspec *rs)
+{
+	int i;
+
+	for (i = 0; i < rs->nr; i++) {
+		if (rs->items[i].negative && refspec_match(&rs->items[i], name))
+			return 1;
+	}
+	return 0;
+}
diff --git a/refspec.h b/refspec.h
index 69d693c87d..891d50b159 100644
--- a/refspec.h
+++ b/refspec.h
@@ -71,4 +71,17 @@ struct strvec;
 void refspec_ref_prefixes(const struct refspec *rs,
 			  struct strvec *ref_prefixes);
 
+/*
+ * Check whether a name matches any negative refspec in rs. Returns 1 if the
+ * name matches at least one negative refspec, and 0 otherwise.
+ */
+int omit_name_by_refspec(const char *name, 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 */
diff --git a/remote.c b/remote.c
index 0f6fba8562..40c2418065 100644
--- 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 omit_name_by_refspec(const char *name, struct refspec *rs)
-{
-	int i;
-
-	for (i = 0; i < rs->nr; i++) {
-		if (rs->items[i].negative && refspec_match(&rs->items[i], name))
-			return 1;
-	}
-	return 0;
-}
-
 struct ref *apply_negative_refspecs(struct ref *ref_map, struct refspec *rs)
 {
 	struct ref **tail;
diff --git a/remote.h b/remote.h
index bda10dd5c8..0d109fa9c9 100644
--- a/remote.h
+++ b/remote.h
@@ -261,12 +261,6 @@ int resolve_remote_symref(struct ref *ref, struct ref *list);
  */
 struct ref *ref_remove_duplicates(struct ref *ref_map);
 
-/*
- * Check whether a name matches any negative refspec in rs. Returns 1 if the
- * name matches at least one negative refspec, and 0 otherwise.
- */
-int omit_name_by_refspec(const char *name, struct refspec *rs);
-
 /*
  * Remove all entries in the input list which match any negative refspec in
  * the refspec list.
-- 
2.34.1


  reply	other threads:[~2025-01-27 10:36 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-27 10:36 [PATCH v2 0/3] refspec: centralize refspec-related logic Meet Soni
2025-01-27 10:36 ` Meet Soni [this message]
2025-01-27 17:21   ` [PATCH v2 1/3] refspec: relocate omit_name_by_refspec and related functions Junio C Hamano
2025-01-29  5:15     ` Meet Soni
2025-01-27 10:36 ` [PATCH v2 2/3] refspec: relocate query " Meet Soni
2025-01-27 19:25   ` Junio C Hamano
2025-01-29  6:32     ` Meet Soni
2025-01-27 10:36 ` [PATCH v2 3/3] refspec: relocate apply_refspecs and related funtions Meet Soni
2025-01-27 20:14   ` Junio C Hamano
2025-01-29  7:03     ` Meet Soni
2025-01-27 11:00 ` [PATCH v2 0/3] refspec: centralize refspec-related logic Meet Soni
2025-01-27 18:10 ` Junio C Hamano
2025-01-29  5:18   ` Meet Soni
2025-02-01  6:41 ` [PATCH v3 0/5] " Meet Soni
2025-02-01  6:41   ` [PATCH v3 1/5] refactor(remote): rename function omit_name_by_refspec Meet Soni
2025-02-03  6:45     ` Patrick Steinhardt
2025-02-01  6:41   ` [PATCH v3 2/5] refspec: relocate refname_matches_negative_refspec_item Meet Soni
2025-02-01  6:42   ` [PATCH v3 3/5] refactor(remote): rename query_refspecs functions Meet Soni
2025-02-03  6:46     ` Patrick Steinhardt
2025-02-04  3:39       ` Meet Soni
2025-02-04 13:58         ` Junio C Hamano
2025-02-01  6:42   ` [PATCH v3 4/5] refspec: relocate matching related functions Meet Soni
2025-02-01  6:42   ` [PATCH v3 5/5] refspec: relocate apply_refspecs and related funtions Meet Soni
2025-02-04  4:05   ` [GSoC][PATCH v4 0/5] refspec: centralize refspec-related logic Meet Soni
2025-02-04  4:05     ` [GSoC][PATCH v4 1/5] remote: rename function omit_name_by_refspec Meet Soni
2025-02-04  9:00       ` Karthik Nayak
2025-02-04 13:58         ` Meet Soni
2025-02-06 10:13           ` Karthik Nayak
2025-02-04  4:05     ` [GSoC][PATCH v4 2/5] refspec: relocate refname_matches_negative_refspec_item Meet Soni
2025-02-04  4:05     ` [GSoC][PATCH v4 3/5] remote: rename query_refspecs functions Meet Soni
2025-02-04  4:05     ` [GSoC][PATCH v4 4/5] refspec: relocate matching related functions Meet Soni
2025-02-04  4:05     ` [GSoC][PATCH v4 5/5] refspec: relocate apply_refspecs and related funtions Meet Soni
2025-02-04  7:16     ` [GSoC][PATCH v4 0/5] refspec: centralize refspec-related logic Patrick Steinhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250127103644.36627-2-meetsoni3017@gmail.com \
    --to=meetsoni3017@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jacob.e.keller@intel.com \
    --cc=jacob.keller@gmail.com \
    --cc=mattr94@gmail.com \
    --cc=pavel.rappo@gmail.com \
    --cc=peff@peff.net \
    --cc=ps@pks.im \
    --cc=shubham.kanodia10@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.