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