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