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

Re: [WIP/PATCH v4 8/8] ref-filter: add 'ref-filter.h'

From
Eric Sunshine <sunshine@sunshineco.com>
Date
May 31, 2015, 03:43 UTC
Message-ID
<CAPig+cR88O=STcJDrB+96uJ0Y60mO49QxoJfbOY8Xk4hPvNxGA@mail.gmail.com>
In-Reply-To
<1433008411-8550-8-git-send-email-karthik.188@gmail.com>
On Sat, May 30, 2015 at 1:53 PM, Karthik Nayak <karthik.188@gmail.com> wrote:
> Create 'ref-filter.h', also add ref-filter to the Makefile.
> This completes movement of creation of 'ref-filter' from
> 'for-each-ref'.

It's important that the project can be built successfully and function correctly at each stage of a patch series. Unfortunately, the way this series is organized, the build breaks after application of patch 7/8 since for-each-ref.c is trying to access functionality which was moved to ref-filter.c, but there is no header at that stage which advertises the functionality. Fixing this may be as simple as swapping patches 7/8 and 8/8, along with whatever minor adjustments they might need to keep them sane. (The alternative would be to combine patches 7/8 and 8/8, however, Matthieu didn't seem to favor that approach[1].)

Overall, this round has been a more pleasant read than previous rounds.
[1]: http://article.gmane.org/gmane.comp.version-control.git/270192
Show 161 quoted lines
> 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>
> ---
>  Makefile               |  1 +
>  builtin/for-each-ref.c | 41 +------------------------------
>  ref-filter.c           |  1 +
>  ref-filter.h           | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 69 insertions(+), 40 deletions(-)
>  create mode 100644 ref-filter.h
>
> diff --git a/Makefile b/Makefile
> index 323c401..ad455a3 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -762,6 +762,7 @@ LIB_OBJS += reachable.o
>  LIB_OBJS += read-cache.o
>  LIB_OBJS += reflog-walk.o
>  LIB_OBJS += refs.o
> +LIB_OBJS += ref-filter.o
>  LIB_OBJS += remote.o
>  LIB_OBJS += replace_object.o
>  LIB_OBJS += rerere.o
> diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
> index 65ed954..2f11c01 100644
> --- a/builtin/for-each-ref.c
> +++ b/builtin/for-each-ref.c
> @@ -2,46 +2,7 @@
>  #include "cache.h"
>  #include "refs.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_sort {
> -       struct ref_sort *next;
> -       int atom; /* index into used_atom 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;
> -};
> +#include "ref-filter.h"
>
>  static char const * const for_each_ref_usage[] = {
>         N_("git for-each-ref [<options>] [<pattern>]"),
> diff --git a/ref-filter.c b/ref-filter.c
> index 2a8f504..1c73750 100644
> --- a/ref-filter.c
> +++ b/ref-filter.c
> @@ -2,6 +2,7 @@
>  #include "cache.h"
>  #include "parse-options.h"
>  #include "refs.h"
> +#include "ref-filter.h"
>  #include "wildmatch.h"
>  #include "commit.h"
>  #include "remote.h"
> diff --git a/ref-filter.h b/ref-filter.h
> new file mode 100644
> index 0000000..dacae59
> --- /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_sort {
> +       struct ref_sort *next;
> +       int atom; /* index into used_atom 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 unsigned char *sha1, int flag, void *cb_data);
> +/*  Clear all memory allocated to ref_filter_data */
> +void ref_filter_clear_data(struct ref_filter_cbdata *ref_cbdata);
> +/*  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_sort provided */
> +void sort_ref_array(struct ref_sort *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 opt_parse_ref_sort(const struct option *opt, const char *arg, int unset);
> +/*  Default sort option based on refname */
> +struct ref_sort *ref_default_sort(void);
> +
> +#endif /*  REF_FILTER_H  */
> --
> 2.4.2
Previous: Karthik NayakNext: Karthik Nayak
Message 35 of 44 in “for-each-ref: extract helper functions out of grab_single_ref()”
  1. 1/8 for-each-ref: extract helper functions out of grab_single_ref()Karthik Nayak, May 30, 2015
  2. Eric SunshineMay 31, 2015
  3. Karthik NayakMay 31, 2015
  4. Junio C HamanoMay 31, 2015
  5. Karthik NayakMay 31, 2015
  6. Matthieu MoyMay 31, 2015
  7. Junio C HamanoJun 1, 2015
  8. 2/8 for-each-ref: simplify codeKarthik Nayak, May 30, 2015
  9. 3/8 for-each-ref: rename 'refinfo' to 'ref_array_item'Karthik Nayak, May 30, 2015
  10. Junio C HamanoMay 31, 2015
  11. Karthik NayakMay 31, 2015
  12. 4/8 for-each-ref: introduce new structures for better organisationKarthik Nayak, May 30, 2015
  13. Eric SunshineMay 31, 2015
  14. Karthik NayakMay 31, 2015
  15. 5/8 for-each-ref: introduce 'ref_filter_clear_data()'Karthik Nayak, May 30, 2015
  16. Christian CouderMay 31, 2015
  17. Karthik NayakMay 31, 2015
  18. 6/8 for-each-ref: rename some functions and make them publicKarthik Nayak, May 30, 2015
  19. Eric SunshineMay 31, 2015
  20. Karthik NayakMay 31, 2015
  21. Christian CouderMay 31, 2015
  22. Christian CouderMay 31, 2015
  23. Karthik NayakMay 31, 2015
  24. Christian CouderMay 31, 2015
  25. Karthik NayakMay 31, 2015
  26. Matthieu MoyJun 1, 2015
  27. Karthik NayakJun 1, 2015
  28. Junio C HamanoMay 31, 2015
  29. Junio C HamanoMay 31, 2015
  30. Karthik NayakMay 31, 2015
  31. Junio C HamanoJun 1, 2015
  32. Karthik NayakJun 1, 2015
  33. 7/8 ref-filter: move code from 'for-each-ref'Karthik Nayak, May 30, 2015
  34. 8/8 ref-filter: add 'ref-filter.h'Karthik Nayak, May 30, 2015
  35. Eric SunshineMay 31, 2015
  36. Karthik NayakMay 31, 2015
  37. Eric SunshineMay 31, 2015
  38. Karthik NayakMay 31, 2015
  39. Matthieu MoyMay 31, 2015
  40. Karthik NayakMay 31, 2015
  41. Christian CouderMay 31, 2015
  42. Matthieu MoyJun 1, 2015
  43. Christian CouderMay 31, 2015
  44. Karthik NayakMay 31, 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.