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