Junio C Hamano | d0bfd02 | 2007-04-12 01:07:32 -0700 | [diff] [blame] | 1 | #ifndef ATTR_H |
| 2 | #define ATTR_H |
| 3 | |
| 4 | /* An attribute is a pointer to this opaque structure */ |
| 5 | struct git_attr; |
| 6 | |
Brandon Williams | dc81cf3 | 2017-01-27 18:02:05 -0800 | [diff] [blame] | 7 | /* opaque structures used internally for attribute collection */ |
Brandon Williams | 685b292 | 2017-01-27 18:02:02 -0800 | [diff] [blame] | 8 | struct all_attrs_item; |
Brandon Williams | dc81cf3 | 2017-01-27 18:02:05 -0800 | [diff] [blame] | 9 | struct attr_stack; |
Brandon Williams | 685b292 | 2017-01-27 18:02:02 -0800 | [diff] [blame] | 10 | |
Junio C Hamano | a5e92ab | 2007-04-18 16:16:37 -0700 | [diff] [blame] | 11 | /* |
| 12 | * Given a string, return the gitattribute object that |
| 13 | * corresponds to it. |
| 14 | */ |
Brandon Williams | e810e06 | 2017-01-27 18:02:04 -0800 | [diff] [blame] | 15 | const struct git_attr *git_attr(const char *); |
Junio C Hamano | d0bfd02 | 2007-04-12 01:07:32 -0700 | [diff] [blame] | 16 | |
Junio C Hamano | 515106f | 2007-04-16 21:33:31 -0700 | [diff] [blame] | 17 | /* Internal use */ |
Junio C Hamano | a5e92ab | 2007-04-18 16:16:37 -0700 | [diff] [blame] | 18 | extern const char git_attr__true[]; |
| 19 | extern const char git_attr__false[]; |
Junio C Hamano | 515106f | 2007-04-16 21:33:31 -0700 | [diff] [blame] | 20 | |
| 21 | /* For public to check git_attr_check results */ |
Junio C Hamano | a5e92ab | 2007-04-18 16:16:37 -0700 | [diff] [blame] | 22 | #define ATTR_TRUE(v) ((v) == git_attr__true) |
| 23 | #define ATTR_FALSE(v) ((v) == git_attr__false) |
| 24 | #define ATTR_UNSET(v) ((v) == NULL) |
Junio C Hamano | 515106f | 2007-04-16 21:33:31 -0700 | [diff] [blame] | 25 | |
Junio C Hamano | a5e92ab | 2007-04-18 16:16:37 -0700 | [diff] [blame] | 26 | /* |
Junio C Hamano | 7bd1805 | 2017-01-27 18:01:54 -0800 | [diff] [blame] | 27 | * Send one or more git_attr_check to git_check_attrs(), and |
Junio C Hamano | a5e92ab | 2007-04-18 16:16:37 -0700 | [diff] [blame] | 28 | * each 'value' member tells what its value is. |
| 29 | * Unset one is returned as NULL. |
| 30 | */ |
Junio C Hamano | 7bd1805 | 2017-01-27 18:01:54 -0800 | [diff] [blame] | 31 | struct attr_check_item { |
Junio C Hamano | ec4d77a | 2017-01-27 18:01:48 -0800 | [diff] [blame] | 32 | const struct git_attr *attr; |
Junio C Hamano | a5e92ab | 2007-04-18 16:16:37 -0700 | [diff] [blame] | 33 | const char *value; |
Junio C Hamano | d0bfd02 | 2007-04-12 01:07:32 -0700 | [diff] [blame] | 34 | }; |
| 35 | |
Junio C Hamano | 3729376 | 2017-01-30 10:05:20 -0800 | [diff] [blame] | 36 | struct attr_check { |
| 37 | int nr; |
| 38 | int alloc; |
| 39 | struct attr_check_item *items; |
Brandon Williams | 685b292 | 2017-01-27 18:02:02 -0800 | [diff] [blame] | 40 | int all_attrs_nr; |
| 41 | struct all_attrs_item *all_attrs; |
Brandon Williams | dc81cf3 | 2017-01-27 18:02:05 -0800 | [diff] [blame] | 42 | struct attr_stack *stack; |
Junio C Hamano | 3729376 | 2017-01-30 10:05:20 -0800 | [diff] [blame] | 43 | }; |
| 44 | |
| 45 | extern struct attr_check *attr_check_alloc(void); |
| 46 | extern struct attr_check *attr_check_initl(const char *, ...); |
Brandon Williams | b0db704 | 2017-03-13 11:23:21 -0700 | [diff] [blame] | 47 | extern struct attr_check *attr_check_dup(const struct attr_check *check); |
Junio C Hamano | 3729376 | 2017-01-30 10:05:20 -0800 | [diff] [blame] | 48 | |
| 49 | extern struct attr_check_item *attr_check_append(struct attr_check *check, |
| 50 | const struct git_attr *attr); |
| 51 | |
| 52 | extern void attr_check_reset(struct attr_check *check); |
| 53 | extern void attr_check_clear(struct attr_check *check); |
| 54 | extern void attr_check_free(struct attr_check *check); |
| 55 | |
Michael Haggerty | 352404a | 2011-08-04 06:36:17 +0200 | [diff] [blame] | 56 | /* |
| 57 | * Return the name of the attribute represented by the argument. The |
| 58 | * return value is a pointer to a null-delimited string that is part |
| 59 | * of the internal data structure; it should not be modified or freed. |
| 60 | */ |
Junio C Hamano | ec4d77a | 2017-01-27 18:01:48 -0800 | [diff] [blame] | 61 | extern const char *git_attr_name(const struct git_attr *); |
Michael Haggerty | 352404a | 2011-08-04 06:36:17 +0200 | [diff] [blame] | 62 | |
Junio C Hamano | 3729376 | 2017-01-30 10:05:20 -0800 | [diff] [blame] | 63 | extern int git_check_attr(const char *path, struct attr_check *check); |
Junio C Hamano | d0bfd02 | 2007-04-12 01:07:32 -0700 | [diff] [blame] | 64 | |
Michael Haggerty | ee548df | 2011-08-04 06:36:23 +0200 | [diff] [blame] | 65 | /* |
Junio C Hamano | 7f86411 | 2017-01-30 10:06:08 -0800 | [diff] [blame] | 66 | * Retrieve all attributes that apply to the specified path. |
| 67 | * check holds the attributes and their values. |
Michael Haggerty | ee548df | 2011-08-04 06:36:23 +0200 | [diff] [blame] | 68 | */ |
Junio C Hamano | 7f86411 | 2017-01-30 10:06:08 -0800 | [diff] [blame] | 69 | extern void git_all_attrs(const char *path, struct attr_check *check); |
Michael Haggerty | ee548df | 2011-08-04 06:36:23 +0200 | [diff] [blame] | 70 | |
Junio C Hamano | 06f33c1 | 2009-03-13 21:24:08 -0700 | [diff] [blame] | 71 | enum git_attr_direction { |
| 72 | GIT_ATTR_CHECKIN, |
Nguyễn Thái Ngọc Duy | 4191e80 | 2009-04-18 00:17:58 +0200 | [diff] [blame] | 73 | GIT_ATTR_CHECKOUT, |
Gary V. Vaughan | 4b05548 | 2010-05-14 09:31:35 +0000 | [diff] [blame] | 74 | GIT_ATTR_INDEX |
Junio C Hamano | 06f33c1 | 2009-03-13 21:24:08 -0700 | [diff] [blame] | 75 | }; |
Brandon Williams | f0dd042 | 2017-01-27 18:02:07 -0800 | [diff] [blame] | 76 | void git_attr_set_direction(enum git_attr_direction new_direction, |
| 77 | struct index_state *istate); |
Junio C Hamano | 06f33c1 | 2009-03-13 21:24:08 -0700 | [diff] [blame] | 78 | |
Brandon Williams | 1a600b7 | 2017-01-27 18:02:01 -0800 | [diff] [blame] | 79 | extern void attr_start(void); |
| 80 | |
Junio C Hamano | d0bfd02 | 2007-04-12 01:07:32 -0700 | [diff] [blame] | 81 | #endif /* ATTR_H */ |