| line |
true |
false |
branch |
|
25
|
2426 |
0 |
if (unlock) |
|
39
|
0 |
2426 |
GIT_ERROR_CHECK_ALLOC(attrs); |
|
41
|
0 |
2426 |
if (git_mutex_init(&attrs->lock) < 0) { |
|
46
|
0 |
2426 |
if (git_pool_init(&attrs->pool, 1) < 0) |
|
65
|
0 |
2426 |
if (need_lock && git_mutex_lock(&file->lock) < 0) { |
|
|
0 |
0 |
if (need_lock && git_mutex_lock(&file->lock) < 0) { |
|
70
|
44 |
2426 |
git_vector_foreach(&file->rules, i, rule) |
|
74
|
0 |
2426 |
if (need_lock) |
|
82
|
649 |
7895 |
if (!file) |
|
84
|
2426 |
5469 |
GIT_REFCOUNT_DEC(file, attr_file_free); |
|
|
2426 |
0 |
GIT_REFCOUNT_DEC(file, attr_file_free); |
|
95
|
1272 |
0 |
if ((error = git_repository_index__weakptr(&idx, repo)) < 0 || |
|
|
1272 |
0 |
if ((error = git_repository_index__weakptr(&idx, repo)) < 0 || |
|
99
|
0 |
0 |
if (!(entry = git_index_get_byindex(idx, pos))) |
|
137
|
0 |
1272 |
if ((error = attr_file_oid_from_index(&id, repo, entry->path)) < 0 || |
|
|
0 |
0 |
if ((error = attr_file_oid_from_index(&id, repo, entry->path)) < 0 || |
|
145
|
0 |
0 |
GIT_ERROR_CHECK_BLOBSIZE(blobsize); |
|
155
|
15 |
2397 |
if (p_stat(entry->fullpath, &st) < 0 || |
|
|
15 |
0 |
if (p_stat(entry->fullpath, &st) < 0 || |
|
156
|
15 |
0 |
S_ISDIR(st.st_mode) || |
|
157
|
0 |
15 |
(fd = git_futils_open_ro(entry->fullpath)) < 0 || |
|
161
|
15 |
2397 |
if (fd >= 0) |
|
168
|
0 |
0 |
if (source->type == GIT_ATTR_FILE_SOURCE_COMMIT) { |
|
169
|
0 |
0 |
if ((error = git_commit_lookup(&commit, repo, source->commit_id)) < 0 || |
|
|
0 |
0 |
if ((error = git_commit_lookup(&commit, repo, source->commit_id)) < 0 || |
|
173
|
0 |
0 |
if ((error = git_repository_head_tree(&tree, repo)) < 0) |
|
177
|
0 |
0 |
if ((error = git_tree_entry_bypath(&tree_entry, tree, entry->path)) < 0) { |
|
183
|
0 |
0 |
if (error == GIT_ENOTFOUND) { |
|
191
|
0 |
0 |
if ((error = git_blob_lookup(&blob, repo, git_tree_entry_id(tree_entry))) < 0) |
|
200
|
0 |
0 |
GIT_ERROR_CHECK_BLOBSIZE(blobsize); |
|
201
|
0 |
0 |
if ((error = git_str_put(&content, |
|
212
|
0 |
2426 |
if ((error = git_attr_file__new(&file, entry, source)) < 0) |
|
219
|
0 |
2426 |
if (bom == GIT_STR_BOM_UTF8) |
|
225
|
117 |
2309 |
if (attr_session) |
|
228
|
2412 |
14 |
if (parser && (error = parser(repo, file, content_str, allow_macros)) < 0) { |
|
|
0 |
2412 |
if (parser && (error = parser(repo, file, content_str, allow_macros)) < 0) { |
|
234
|
2397 |
29 |
if (nonexistent) |
|
236
|
0 |
29 |
else if (source->type == GIT_ATTR_FILE_SOURCE_INDEX) |
|
238
|
0 |
29 |
else if (source->type == GIT_ATTR_FILE_SOURCE_HEAD) |
|
240
|
0 |
29 |
else if (source->type == GIT_ATTR_FILE_SOURCE_COMMIT) |
|
242
|
15 |
14 |
else if (source->type == GIT_ATTR_FILE_SOURCE_FILE) |
|
264
|
0 |
3043 |
if (!file) |
|
270
|
465 |
2578 |
if (attr_session && attr_session->key == file->session_key) |
|
|
361 |
104 |
if (attr_session && attr_session->key == file->session_key) |
|
272
|
2325 |
357 |
else if (file->nonexistent) |
|
287
|
0 |
0 |
if ((error = attr_file_oid_from_index( |
|
298
|
0 |
0 |
if (error < 0) |
|
312
|
0 |
0 |
if ((error = git_commit_lookup(&commit, repo, source->commit_id)) < 0) |
|
318
|
0 |
0 |
if (error < 0) |
|
348
|
2059 |
0 |
if (attrs->entry && git_fs_path_root(attrs->entry->path) < 0 && |
|
352
|
0 |
2059 |
if (git_mutex_lock(&attrs->lock) < 0) { |
|
357
|
2059 |
0 |
while (!error && *scan) { |
|
|
0 |
2059 |
while (!error && *scan) { |
|
359
|
0 |
0 |
if (!rule) { |
|
361
|
0 |
0 |
GIT_ERROR_CHECK_ALLOC(rule); |
|
368
|
0 |
0 |
if ((error = git_attr_fnmatch__parse(&rule->match, &attrs->pool, context, &scan)) < 0 || |
|
|
0 |
0 |
if ((error = git_attr_fnmatch__parse(&rule->match, &attrs->pool, context, &scan)) < 0 || |
|
371
|
0 |
0 |
if (error != GIT_ENOTFOUND) |
|
377
|
0 |
0 |
if (rule->match.flags & GIT_ATTR_FNMATCH_MACRO) { |
|
379
|
0 |
0 |
if (!allow_macros) |
|
381
|
0 |
0 |
if ((error = git_attr_cache__insert_macro(repo, rule)) < 0) |
|
383
|
0 |
0 |
} else if ((error = git_vector_insert(&attrs->rules, rule)) < 0) |
|
401
|
0 |
4 |
GIT_ASSERT_ARG(name); |
|
403
|
20 |
4 |
while ((c = (int)*name++) != 0) |
|
423
|
0 |
0 |
git_attr_file__foreach_matching_rule(file, path, i, rule) { |
|
|
0 |
0 |
git_attr_file__foreach_matching_rule(file, path, i, rule) { |
|
426
|
0 |
0 |
if (!git_vector_bsearch(&pos, &rule->assigns, &name)) { |
|
443
|
0 |
0 |
if ((error = git_futils_readbuffer(&content, path)) < 0) |
|
451
|
0 |
0 |
if ((error = git_attr_file__new(&file, NULL, &source)) < 0 || |
|
|
0 |
0 |
if ((error = git_attr_file__new(&file, NULL, &source)) < 0 || |
|
452
|
0 |
0 |
(error = git_attr_file__parse_buffer(NULL, file, content.ptr, true)) < 0 || |
|
458
|
0 |
0 |
if (error < 0) |
|
478
|
0 |
2330 |
if (match->containing_dir) { |
|
479
|
0 |
0 |
if (match->flags & GIT_ATTR_FNMATCH_ICASE) { |
|
480
|
0 |
0 |
if (git__strncasecmp(path->path, match->containing_dir, match->containing_dir_length)) |
|
483
|
0 |
0 |
if (git__prefixcmp(path->path, match->containing_dir)) |
|
490
|
0 |
2330 |
if (match->flags & GIT_ATTR_FNMATCH_ICASE) |
|
493
|
0 |
2330 |
if (match->flags & GIT_ATTR_FNMATCH_FULLPATH) { |
|
500
|
0 |
2330 |
if ((match->flags & GIT_ATTR_FNMATCH_DIRECTORY) && !path->is_dir) { |
|
|
0 |
0 |
if ((match->flags & GIT_ATTR_FNMATCH_DIRECTORY) && !path->is_dir) { |
|
508
|
0 |
0 |
if (!(match->flags & GIT_ATTR_FNMATCH_IGNORE) || |
|
|
0 |
0 |
if (!(match->flags & GIT_ATTR_FNMATCH_IGNORE) || |
|
514
|
0 |
0 |
!strcasecmp(match->pattern, relpath) : |
|
517
|
0 |
0 |
if (samename) |
|
532
|
0 |
0 |
if (rule->match.flags & GIT_ATTR_FNMATCH_NEGATIVE) |
|
546
|
0 |
0 |
if (git_vector_bsearch(&pos, &rule->assigns, &key)) |
|
563
|
0 |
1394 |
if (git_fs_path_join_unrooted(&info->full, path, base, &root) < 0) |
|
569
|
1911 |
0 |
while (info->full.size > 0) { |
|
570
|
1394 |
517 |
if (info->full.ptr[info->full.size - 1] != '/') |
|
577
|
0 |
1394 |
while (*info->path == '/') |
|
582
|
249 |
1145 |
if (info->basename) |
|
584
|
249 |
1145 |
if (!info->basename || !*info->basename) |
|
|
0 |
249 |
if (!info->basename || !*info->basename) |
|
652
|
128 |
0 |
for (n = len; n; n--) { |
|
653
|
128 |
0 |
if (p[n-1] != ' ' && p[n-1] != '\t') |
|
|
128 |
0 |
if (p[n-1] != ' ' && p[n-1] != '\t') |
|
664
|
0 |
0 |
while (i > 1 && p[i-2] == '\\') |
|
|
0 |
0 |
while (i > 1 && p[i-2] == '\\') |
|
666
|
0 |
0 |
if ((n - i) % 2) |
|
677
|
0 |
128 |
if (!str) |
|
680
|
637 |
128 |
for (scan = str; *scan; scan++) { |
|
681
|
637 |
0 |
if (!escaped && *scan == '\\') { |
|
|
0 |
637 |
if (!escaped && *scan == '\\') { |
|
687
|
0 |
637 |
if (escaped && !git__isspace(*scan)) |
|
|
0 |
0 |
if (escaped && !git__isspace(*scan)) |
|
694
|
0 |
128 |
if (pos != scan) |
|
715
|
0 |
156 |
GIT_ASSERT_ARG(spec); |
|
716
|
156 |
0 |
GIT_ASSERT_ARG(base && *base); |
|
|
0 |
156 |
GIT_ASSERT_ARG(base && *base); |
|
718
|
0 |
156 |
if (parse_optimized_patterns(spec, pool, *base)) |
|
726
|
0 |
156 |
while (!allow_space && git__isspace(*pattern)) |
|
|
0 |
0 |
while (!allow_space && git__isspace(*pattern)) |
|
729
|
156 |
0 |
if (!*pattern || *pattern == '#' || *pattern == '\n' || |
|
|
128 |
28 |
if (!*pattern || *pattern == '#' || *pattern == '\n' || |
|
|
128 |
0 |
if (!*pattern || *pattern == '#' || *pattern == '\n' || |
|
|
0 |
128 |
if (!*pattern || *pattern == '#' || *pattern == '\n' || |
|
730
|
0 |
0 |
(*pattern == '\r' && *(pattern + 1) == '\n')) { |
|
735
|
0 |
128 |
if (*pattern == '[' && (spec->flags & GIT_ATTR_FNMATCH_ALLOWMACRO) != 0) { |
|
|
0 |
0 |
if (*pattern == '[' && (spec->flags & GIT_ATTR_FNMATCH_ALLOWMACRO) != 0) { |
|
736
|
0 |
0 |
if (strncmp(pattern, "[attr]", 6) == 0) { |
|
743
|
0 |
128 |
if (*pattern == '!' && (spec->flags & GIT_ATTR_FNMATCH_ALLOWNEG) != 0) { |
|
|
0 |
0 |
if (*pattern == '!' && (spec->flags & GIT_ATTR_FNMATCH_ALLOWNEG) != 0) { |
|
751
|
683 |
84 |
for (scan = pattern; *scan != '\0'; ++scan) { |
|
754
|
0 |
683 |
if (c == '\\' && !escaped) { |
|
|
0 |
0 |
if (c == '\\' && !escaped) { |
|
757
|
44 |
639 |
} else if (git__isspace(c) && !escaped) { |
|
|
44 |
0 |
} else if (git__isspace(c) && !escaped) { |
|
758
|
44 |
0 |
if (!allow_space || (c != ' ' && c != '\t' && c != '\r')) |
|
|
44 |
0 |
if (!allow_space || (c != ' ' && c != '\t' && c != '\r')) |
|
|
44 |
0 |
if (!allow_space || (c != ' ' && c != '\t' && c != '\r')) |
|
|
0 |
44 |
if (!allow_space || (c != ' ' && c != '\t' && c != '\r')) |
|
760
|
11 |
628 |
} else if (c == '/') { |
|
764
|
5 |
6 |
if (slash_count == 1 && pattern == scan) |
|
|
0 |
5 |
if (slash_count == 1 && pattern == scan) |
|
766
|
16 |
612 |
} else if (git__iswildcard(c) && !escaped) { |
|
|
16 |
0 |
} else if (git__iswildcard(c) && !escaped) { |
|
776
|
0 |
128 |
if ((spec->length = scan - pattern) == 0) |
|
784
|
0 |
128 |
if (pattern[spec->length - 1] == '\r') |
|
785
|
0 |
0 |
if (--spec->length == 0) |
|
791
|
0 |
128 |
if (spec->length == 0) |
|
794
|
2 |
126 |
if (pattern[spec->length - 1] == '/') { |
|
797
|
2 |
0 |
if (--slash_count <= 0) |
|
801
|
0 |
128 |
if (context) { |
|
804
|
0 |
0 |
if (slash) { |
|
814
|
0 |
128 |
if (!spec->pattern) { |
|
830
|
0 |
156 |
if (!pattern[1] && (pattern[0] == '*' || pattern[0] == '.')) { |
|
|
0 |
0 |
if (!pattern[1] && (pattern[0] == '*' || pattern[0] == '.')) { |
|
|
0 |
0 |
if (!pattern[1] && (pattern[0] == '*' || pattern[0] == '.')) { |
|
846
|
32 |
32 |
if (b->name_hash < a->name_hash) |
|
848
|
32 |
0 |
else if (b->name_hash > a->name_hash) |
|
869
|
0 |
0 |
GIT_REFCOUNT_DEC(*old, git_attr_assignment__free); |
|
|
0 |
0 |
GIT_REFCOUNT_DEC(*old, git_attr_assignment__free); |
|
884
|
16 |
0 |
GIT_ASSERT_ARG(assigns && !assigns->length); |
|
|
0 |
16 |
GIT_ASSERT_ARG(assigns && !assigns->length); |
|
888
|
64 |
16 |
while (*scan && *scan != '\n') { |
|
|
64 |
0 |
while (*scan && *scan != '\n') { |
|
892
|
48 |
64 |
while (git__isspace(*scan) && *scan != '\n') scan++; |
|
|
48 |
0 |
while (git__isspace(*scan) && *scan != '\n') scan++; |
|
895
|
64 |
0 |
if (!assign) { |
|
897
|
0 |
64 |
GIT_ERROR_CHECK_ALLOC(assign); |
|
905
|
64 |
0 |
if (*scan == '-') { |
|
908
|
0 |
0 |
} else if (*scan == '!') { |
|
911
|
0 |
0 |
} else if (*scan == '#') /* comment rest of line */ |
|
916
|
320 |
16 |
while (*scan && !git__isspace(*scan) && *scan != '=') { |
|
|
272 |
48 |
while (*scan && !git__isspace(*scan) && *scan != '=') { |
|
|
272 |
0 |
while (*scan && !git__isspace(*scan) && *scan != '=') { |
|
921
|
0 |
64 |
if (scan == name_start) { |
|
925
|
0 |
0 |
while (*scan && !git__isspace(*scan)) scan++; |
|
|
0 |
0 |
while (*scan && !git__isspace(*scan)) scan++; |
|
931
|
0 |
64 |
GIT_ERROR_CHECK_ALLOC(assign->name); |
|
934
|
0 |
64 |
if (*scan == '=') { |
|
935
|
0 |
0 |
for (value_start = ++scan; *scan && !git__isspace(*scan); ++scan); |
|
|
0 |
0 |
for (value_start = ++scan; *scan && !git__isspace(*scan); ++scan); |
|
938
|
0 |
0 |
if (scan > value_start) { |
|
940
|
0 |
0 |
GIT_ERROR_CHECK_ALLOC(assign->value); |
|
945
|
64 |
0 |
if (repo != NULL && assign->value == git_attr__true) { |
|
|
0 |
64 |
if (repo != NULL && assign->value == git_attr__true) { |
|
949
|
0 |
0 |
if (macro != NULL) { |
|
953
|
0 |
0 |
git_vector_foreach(¯o->assigns, i, massign) { |
|
958
|
0 |
0 |
if (error < 0 && error != GIT_EEXISTS) { |
|
|
0 |
0 |
if (error < 0 && error != GIT_EEXISTS) { |
|
968
|
0 |
64 |
if (error < 0 && error != GIT_EEXISTS) |
|
|
0 |
0 |
if (error < 0 && error != GIT_EEXISTS) |
|
975
|
0 |
16 |
if (assign != NULL) |
|
980
|
0 |
16 |
return (assigns->length == 0) ? GIT_ENOTFOUND : 0; |
|
988
|
2059 |
60 |
if (!rule) |
|
991
|
16 |
44 |
if (!(rule->match.flags & GIT_ATTR_FNMATCH_IGNORE)) { |
|
992
|
64 |
16 |
git_vector_foreach(&rule->assigns, i, assign) |
|
993
|
64 |
0 |
GIT_REFCOUNT_DEC(assign, git_attr_assignment__free); |
|
|
64 |
0 |
GIT_REFCOUNT_DEC(assign, git_attr_assignment__free); |
|
1010
|
0 |
351 |
GIT_ASSERT_ARG(repo); |
|
1020
|
0 |
351 |
if (!session) |