git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v7 09/12] ref-filter: add 'ref-filter.h'

From
Karthik Nayak <karthik.188@gmail.com>
Date
Jun 11, 2015, 16:10 UTC
Message-ID
<1434039003-10928-9-git-send-email-karthik.188@gmail.com>
In-Reply-To
<1434039003-10928-1-git-send-email-karthik.188@gmail.com>

This is step one of creating a common library for 'for-each-ref', 'branch -l' and 'tag -l'. This creates a header file with the functions and data structures that ref-filter will provide. We move the data structures created in for-each-ref to this header file.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
---
 builtin/for-each-ref.c | 41 +------------------------------
 ref-filter.h           | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+), 40 deletions(-)
 create mode 100644 ref-filter.h
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 3cf456a..2fbbc59 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -10,49 +10,10 @@
 #include "parse-options.h"
 #include "remote.h"
 #include "color.h"
-
-/* Quoting styles */
-#define QUOTE_NONE 0
-#define QUOTE_SHELL 1
-#define QUOTE_PERL 2
-#define QUOTE_PYTHON 4
-#define QUOTE_TCL 8
+#include "ref-filter.h"
 
 typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
 
-struct atom_value {
-	const char *s;
-	unsigned long ul; /* used for sorting when not FIELD_STR */
-};
-
-struct ref_sorting {
-	struct ref_sorting *next;
-	int atom; /* index into 'struct atom_value *' array */
-	unsigned reverse : 1;
-};
-
-struct ref_array_item {
-	unsigned char objectname[20];
-	int flag;
-	const char *symref;
-	struct atom_value *value;
-	char *refname;
-};
-
-struct ref_array {
-	int nr, alloc;
-	struct ref_array_item **items;
-};
-
-struct ref_filter {
-	const char **name_patterns;
-};
-
-struct ref_filter_cbdata {
-	struct ref_array array;
-	struct ref_filter filter;
-};
-
 static struct {
 	const char *name;
 	cmp_type cmp_type;
diff --git a/ref-filter.h b/ref-filter.h
new file mode 100644
index 0000000..d9e043f
--- /dev/null
+++ b/ref-filter.h
@@ -0,0 +1,66 @@
+#ifndef REF_FILTER_H
+#define REF_FILTER_H
+
+#include "sha1-array.h"
+#include "refs.h"
+#include "commit.h"
+#include "parse-options.h"
+
+/* Quoting styles */
+#define QUOTE_NONE 0
+#define QUOTE_SHELL 1
+#define QUOTE_PERL 2
+#define QUOTE_PYTHON 4
+#define QUOTE_TCL 8
+
+struct atom_value {
+	const char *s;
+	unsigned long ul; /* used for sorting when not FIELD_STR */
+};
+
+struct ref_sorting {
+	struct ref_sorting *next;
+	int atom; /* index into 'struct atom_value *' array */
+	unsigned reverse : 1;
+};
+
+struct ref_array_item {
+	unsigned char objectname[20];
+	int flag;
+	const char *symref;
+	struct atom_value *value;
+	char *refname;
+};
+
+struct ref_array {
+	int nr, alloc;
+	struct ref_array_item **items;
+};
+
+struct ref_filter {
+	const char **name_patterns;
+};
+
+struct ref_filter_cbdata {
+	struct ref_array array;
+	struct ref_filter filter;
+};
+
+/*  Callback function for for_each_*ref(). This filters the refs based on the filters set */
+int ref_filter_handler(const char *refname, const struct object_id *oid, int flag, void *cb_data);
+/*  Clear all memory allocated to ref_array */
+void ref_array_clear(struct ref_array *array);
+/*  Parse format string and sort specifiers */
+int parse_ref_filter_atom(const char *atom, const char *ep);
+/*  Used to verify if the given format is correct and to parse out the used atoms */
+int verify_ref_format(const char *format);
+/*  Sort the given ref_array as per the ref_sorting provided */
+void ref_array_sort(struct ref_sorting *sort, struct ref_array *array);
+/*  Print the ref using the given format and quote_style */
+void show_ref_array_item(struct ref_array_item *info, const char *format, int quote_style);
+/*  Callback function for parsing the sort option */
+int parse_opt_ref_sorting(const struct option *opt, const char *arg, int unset);
+/*  Default sort option based on refname */
+struct ref_sorting *ref_default_sorting(void);
+
+#endif /*  REF_FILTER_H  */
-- 
2.4.2
Previous: Karthik NayakNext: Karthik Nayak
Message 22 of 32 in “Create ref-filter from for-each-ref”
  1. 0/12 Create ref-filter from for-each-refKarthik Nayak, Jun 11, 2015
  2. 01/12 for-each-ref: extract helper functions out of grab_single_ref()Karthik Nayak, Jun 11, 2015
  3. 02/12 for-each-ref: clean up codeKarthik Nayak, Jun 11, 2015
  4. 03/12 for-each-ref: change comment in ref_sortKarthik Nayak, Jun 11, 2015
  5. Junio C HamanoJun 12, 2015
  6. Karthik NayakJun 12, 2015
  7. Junio C HamanoJun 12, 2015
  8. Karthik NayakJun 12, 2015
  9. Christian CouderJun 12, 2015
  10. Junio C HamanoJun 12, 2015
  11. karthik nayakJun 12, 2015
  12. 04/12 for-each-ref: rename 'refinfo' to 'ref_array_item'Karthik Nayak, Jun 11, 2015
  13. 05/12 for-each-ref: introduce new structures for better organisationKarthik Nayak, Jun 11, 2015
  14. Matthieu MoyJun 11, 2015
  15. Karthik NayakJun 11, 2015
  16. Matthieu MoyJun 11, 2015
  17. Karthik NayakJun 11, 2015
  18. Matthieu MoyJun 11, 2015
  19. 06/12 for-each-ref: introduce 'ref_array_clear()'Karthik Nayak, Jun 11, 2015
  20. 07/12 for-each-ref: rename some functions and make them publicKarthik Nayak, Jun 11, 2015
  21. 08/12 for-each-ref: rename variables called sort to sortingKarthik Nayak, Jun 11, 2015
  22. 09/12 ref-filter: add 'ref-filter.h'Karthik Nayak, Jun 11, 2015
  23. 10/12 ref-filter: move code from 'for-each-ref'Karthik Nayak, Jun 11, 2015
  24. 11/12 for-each-ref: introduce filter_refs()Karthik Nayak, Jun 11, 2015
  25. Matthieu MoyJun 11, 2015
  26. Karthik NayakJun 11, 2015
  27. Junio C HamanoJun 12, 2015
  28. 11/12 for-each-ref: introduce filter_refs()Karthik Nayak, Jun 11, 2015
  29. 12/12 ref-filter: make 'ref_array_item' use a FLEX_ARRAY for refnameKarthik Nayak, Jun 11, 2015
  30. Junio C HamanoJun 12, 2015
  31. Karthik NayakJun 12, 2015
  32. Matthieu MoyJun 11, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.