1#ifndef ATTR_H 2#define ATTR_H 3 4struct index_state; 5 6/* An attribute is a pointer to this opaque structure */ 7struct git_attr; 8 9/* opaque structures used internally for attribute collection */ 10struct all_attrs_item; 11struct attr_stack; 12struct index_state; 13 14/* 15 * Given a string, return the gitattribute object that 16 * corresponds to it. 17 */ 18const struct git_attr *git_attr(const char*); 19 20/* Internal use */ 21externconst char git_attr__true[]; 22externconst char git_attr__false[]; 23 24/* For public to check git_attr_check results */ 25#define ATTR_TRUE(v) ((v) == git_attr__true) 26#define ATTR_FALSE(v) ((v) == git_attr__false) 27#define ATTR_UNSET(v) ((v) == NULL) 28 29/* 30 * Send one or more git_attr_check to git_check_attrs(), and 31 * each 'value' member tells what its value is. 32 * Unset one is returned as NULL. 33 */ 34struct attr_check_item { 35const struct git_attr *attr; 36const char*value; 37}; 38 39struct attr_check { 40int nr; 41int alloc; 42struct attr_check_item *items; 43int all_attrs_nr; 44struct all_attrs_item *all_attrs; 45struct attr_stack *stack; 46}; 47 48struct attr_check *attr_check_alloc(void); 49struct attr_check *attr_check_initl(const char*, ...); 50struct attr_check *attr_check_dup(const struct attr_check *check); 51 52struct attr_check_item *attr_check_append(struct attr_check *check, 53const struct git_attr *attr); 54 55voidattr_check_reset(struct attr_check *check); 56voidattr_check_clear(struct attr_check *check); 57voidattr_check_free(struct attr_check *check); 58 59/* 60 * Return the name of the attribute represented by the argument. The 61 * return value is a pointer to a null-delimited string that is part 62 * of the internal data structure; it should not be modified or freed. 63 */ 64const char*git_attr_name(const struct git_attr *); 65 66intgit_check_attr(const struct index_state *istate, 67const char*path,struct attr_check *check); 68 69/* 70 * Retrieve all attributes that apply to the specified path. 71 * check holds the attributes and their values. 72 */ 73voidgit_all_attrs(const struct index_state *istate, 74const char*path,struct attr_check *check); 75 76enum git_attr_direction { 77 GIT_ATTR_CHECKIN, 78 GIT_ATTR_CHECKOUT, 79 GIT_ATTR_INDEX 80}; 81voidgit_attr_set_direction(enum git_attr_direction new_direction); 82 83voidattr_start(void); 84 85#endif/* ATTR_H */