| 80 | } |
| 81 | |
| 82 | unsigned whitespace_rule(struct index_state *istate, const char *pathname) |
| 83 | { |
| 84 | static struct attr_check *attr_whitespace_rule; |
| 85 | const char *value; |
| 86 | |
| 87 | if (!attr_whitespace_rule) |
| 88 | attr_whitespace_rule = attr_check_initl("whitespace", NULL); |
| 89 | |
| 90 | git_check_attr(istate, pathname, attr_whitespace_rule); |
| 91 | value = attr_whitespace_rule->items[0].value; |
| 92 | if (ATTR_TRUE(value)) { |
| 93 | /* true (whitespace) */ |
| 94 | unsigned all_rule = ws_tab_width(whitespace_rule_cfg); |
| 95 | int i; |
| 96 | for (i = 0; i < ARRAY_SIZE(whitespace_rule_names); i++) |
| 97 | if (!whitespace_rule_names[i].loosens_error && |
| 98 | !whitespace_rule_names[i].exclude_default) |
| 99 | all_rule |= whitespace_rule_names[i].rule_bits; |
| 100 | return all_rule; |
| 101 | } else if (ATTR_FALSE(value)) { |
| 102 | /* false (-whitespace) */ |
| 103 | return ws_tab_width(whitespace_rule_cfg); |
| 104 | } else if (ATTR_UNSET(value)) { |
| 105 | /* reset to default (!whitespace) */ |
| 106 | return whitespace_rule_cfg; |
| 107 | } else { |
| 108 | /* string */ |
| 109 | return parse_whitespace_rule(value); |
| 110 | } |
| 111 | } |
| 112 | |
| 113 | /* The returned string should be freed by the caller. */ |
| 114 | char *whitespace_error_string(unsigned ws) |
no test coverage detected