ref-filter: add function to print single ref_array_item
ref-filter functions are useful for printing git object information using a format specifier. However, some other modules may not want to use this functionality on a ref-array but only print a single item. Expose a pretty_print_ref function to create, pretty print and free individual ref-items. Signed-off-by: Lukas Puehringer <luk.puehringer@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
94240b918f
commit
2111aa794b
27
ref-filter.c
27
ref-filter.c
@ -1329,7 +1329,7 @@ static struct ref_array_item *new_ref_array_item(const char *refname,
|
|||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int filter_ref_kind(struct ref_filter *filter, const char *refname)
|
static int ref_kind_from_refname(const char *refname)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
@ -1342,11 +1342,7 @@ static int filter_ref_kind(struct ref_filter *filter, const char *refname)
|
|||||||
{ "refs/tags/", FILTER_REFS_TAGS}
|
{ "refs/tags/", FILTER_REFS_TAGS}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (filter->kind == FILTER_REFS_BRANCHES ||
|
if (!strcmp(refname, "HEAD"))
|
||||||
filter->kind == FILTER_REFS_REMOTES ||
|
|
||||||
filter->kind == FILTER_REFS_TAGS)
|
|
||||||
return filter->kind;
|
|
||||||
else if (!strcmp(refname, "HEAD"))
|
|
||||||
return FILTER_REFS_DETACHED_HEAD;
|
return FILTER_REFS_DETACHED_HEAD;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(ref_kind); i++) {
|
for (i = 0; i < ARRAY_SIZE(ref_kind); i++) {
|
||||||
@ -1357,6 +1353,15 @@ static int filter_ref_kind(struct ref_filter *filter, const char *refname)
|
|||||||
return FILTER_REFS_OTHERS;
|
return FILTER_REFS_OTHERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int filter_ref_kind(struct ref_filter *filter, const char *refname)
|
||||||
|
{
|
||||||
|
if (filter->kind == FILTER_REFS_BRANCHES ||
|
||||||
|
filter->kind == FILTER_REFS_REMOTES ||
|
||||||
|
filter->kind == FILTER_REFS_TAGS)
|
||||||
|
return filter->kind;
|
||||||
|
return ref_kind_from_refname(refname);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A call-back given to for_each_ref(). Filter refs and keep them for
|
* A call-back given to for_each_ref(). Filter refs and keep them for
|
||||||
* later object processing.
|
* later object processing.
|
||||||
@ -1637,6 +1642,16 @@ void show_ref_array_item(struct ref_array_item *info, const char *format, int qu
|
|||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pretty_print_ref(const char *name, const unsigned char *sha1,
|
||||||
|
const char *format)
|
||||||
|
{
|
||||||
|
struct ref_array_item *ref_item;
|
||||||
|
ref_item = new_ref_array_item(name, sha1, 0);
|
||||||
|
ref_item->kind = ref_kind_from_refname(name);
|
||||||
|
show_ref_array_item(ref_item, format, 0);
|
||||||
|
free_array_item(ref_item);
|
||||||
|
}
|
||||||
|
|
||||||
/* If no sorting option is given, use refname to sort as default */
|
/* If no sorting option is given, use refname to sort as default */
|
||||||
struct ref_sorting *ref_default_sorting(void)
|
struct ref_sorting *ref_default_sorting(void)
|
||||||
{
|
{
|
||||||
|
@ -107,4 +107,11 @@ struct ref_sorting *ref_default_sorting(void);
|
|||||||
/* Function to parse --merged and --no-merged options */
|
/* Function to parse --merged and --no-merged options */
|
||||||
int parse_opt_merge_filter(const struct option *opt, const char *arg, int unset);
|
int parse_opt_merge_filter(const struct option *opt, const char *arg, int unset);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print a single ref, outside of any ref-filter. Note that the
|
||||||
|
* name must be a fully qualified refname.
|
||||||
|
*/
|
||||||
|
void pretty_print_ref(const char *name, const unsigned char *sha1,
|
||||||
|
const char *format);
|
||||||
|
|
||||||
#endif /* REF_FILTER_H */
|
#endif /* REF_FILTER_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user