Branch Coverage

deps/libgit2/src/libgit2/repository.c
Criterion Covered Total %
branch 449 1184 37.9


line true false branch
94 2 63 if (odb) {
99 35 30 if ((odb = git_atomic_swap(repo->_odb, odb)) != NULL) {
107 0 63 if (refdb) {
112 54 9 if ((refdb = git_atomic_swap(repo->_refdb, refdb)) != NULL) {
120 0 63 if (config) {
125 63 0 if ((config = git_atomic_swap(repo->_config, config)) != NULL) {
135 1 64 if (index) {
140 17 48 if ((index = git_atomic_swap(repo->_index, index)) != NULL) {
148 0 63 GIT_ASSERT_ARG(repo);
166 18 63 if (repo == NULL)
176 0 63 for (i = 0; i < repo->reserved_names.size; i++)
177 0 0 git_str_dispose(git_array_get(repo->reserved_names, i));
202 65 5 if (!git_fs_path_contains_file(repository_path, GIT_COMMONDIR_FILE)) {
203 65 0 if ((error = git_str_set(commondir, repository_path->ptr, repository_path->size)) == 0)
212 5 0 if ((error = git_str_joinpath(&common_link, repository_path->ptr, GIT_COMMONDIR_FILE)) < 0 ||
5 0 if ((error = git_str_joinpath(&common_link, repository_path->ptr, GIT_COMMONDIR_FILE)) < 0 ||
217 0 5 if (git_fs_path_is_relative(common_link.ptr)) {
218 0 0 if ((error = git_str_joinpath(commondir, repository_path->ptr, common_link.ptr)) < 0)
261 0 70 if ((error = lookup_commondir(&separate_commondir, common_path, repository_path)) < 0)
265 6 64 if (git_fs_path_contains_file(repository_path, GIT_HEAD_FILE) == false)
269 0 64 if (git_fs_path_contains_dir(common_path, GIT_OBJECTS_DIR) == false)
271 0 64 if (git_fs_path_contains_dir(common_path, GIT_REFS_DIR) == false)
275 64 0 if ((error = validate_repo_path(common_path)) < 0 ||
5 59 if ((error = validate_repo_path(common_path)) < 0 ||
276 0 5 (separate_commondir &&
293 0 63 if (!repo->reserved_names.ptr)
302 0 0 if (repo)
314 0 0 GIT_ERROR_CHECK_ALLOC(repo);
327 0 63 if (err < 0 && err != GIT_ENOTFOUND)
0 0 if (err < 0 && err != GIT_ENOTFOUND)
331 63 0 if (err != GIT_ENOTFOUND)
332 8 55 repo->is_bare = is_bare && !repo->is_worktree;
8 0 repo->is_bare = is_bare && !repo->is_worktree;
346 8 55 if (repo->is_bare)
349 0 55 if ((error = git_config__lookup_entry(
353 5 50 if (repo->is_worktree) {
355 0 5 if (!gitlink) {
370 0 50 else if (ce && ce->value) {
0 0 else if (ce && ce->value) {
371 0 0 if ((error = git_fs_path_prettify_dir(
377 50 0 else if (parent_path && git_fs_path_isdir(parent_path->ptr))
50 0 else if (parent_path && git_fs_path_isdir(parent_path->ptr))
389 0 55 GIT_ERROR_CHECK_ALLOC(repo->workdir);
413 0 1 GIT_ASSERT_ARG(path);
417 0 1 if (ceiling_directories == NULL || min_len == 0)
0 0 if (ceiling_directories == NULL || min_len == 0)
420 0 0 for (sep = ceil = ceiling_directories; *sep; ceil = sep + 1) {
421 0 0 for (sep = ceil; *sep && *sep != GIT_PATH_LIST_SEPARATOR; sep++);
0 0 for (sep = ceil; *sep && *sep != GIT_PATH_LIST_SEPARATOR; sep++);
424 0 0 if (len == 0 || len >= sizeof(buf) || git_fs_path_root(ceil) == -1)
0 0 if (len == 0 || len >= sizeof(buf) || git_fs_path_root(ceil) == -1)
0 0 if (len == 0 || len >= sizeof(buf) || git_fs_path_root(ceil) == -1)
430 0 0 if (p_realpath(buf, buf2) == NULL)
434 0 0 if (len > 0 && buf2[len-1] == '/')
0 0 if (len > 0 && buf2[len-1] == '/')
437 0 0 if (!strncmp(path, buf2, len) &&
0 0 if (!strncmp(path, buf2, len) &&
438 0 0 (path[len] == '/' || !path[len]) &&
0 0 (path[len] == '/' || !path[len]) &&
459 0 5 GIT_ASSERT_ARG(path_out);
460 0 5 GIT_ASSERT_ARG(file_path);
462 0 5 if (git_futils_readbuffer(&file, file_path) < 0)
476 5 0 else if ((error = git_fs_path_dirname_r(path_out, file_path)) >= 0) {
478 10 0 while (*gitlink && git__isspace(*gitlink)) gitlink++;
5 5 while (*gitlink && git__isspace(*gitlink)) gitlink++;
498 0 0 if (strcmp(entry->value, "") == 0)
501 0 0 if (git_fs_path_prettify_dir(&data->tmp, entry->value, NULL) == 0 &&
0 0 if (git_fs_path_prettify_dir(&data->tmp, entry->value, NULL) == 0 &&
516 0 0 if (load_global_config(&config) != 0)
538 123 0 if (path)
541 0 123 if (error == GIT_ENOTFOUND) {
565 55 8 if (repo->workdir)
568 5 58 if (repo->gitlink)
573 123 63 for (i = 0; i < validation_len; i++) {
576 0 123 if ((error = validate_ownership_path(&is_safe, path)) < 0)
579 0 123 if (!is_safe)
583 0 63 if (is_safe ||
0 0 if (is_safe ||
587 0 0 if (!is_safe) {
620 0 64 if (error < 0)
630 0 64 if (flags & (GIT_REPOSITORY_OPEN_BARE | GIT_REPOSITORY_OPEN_NO_DOTGIT)) {
639 96 0 if (!(flags & GIT_REPOSITORY_OPEN_NO_DOTGIT)) {
640 65 31 if (!in_dot_git) {
641 0 65 if ((error = git_str_joinpath(&path, path.ptr, DOT_GIT)) < 0)
647 65 31 if (p_stat(path.ptr, &st) == 0) {
649 64 1 if (initial_device == 0)
651 0 1 else if (st.st_dev != initial_device &&
0 0 else if (st.st_dev != initial_device &&
655 60 5 if (S_ISDIR(st.st_mode)) {
656 0 60 if ((error = is_valid_repository_path(&is_valid, &path, &common_link)) < 0)
659 59 1 if (is_valid) {
660 59 0 if ((error = git_fs_path_to_dir(&path)) < 0 ||
59 0 if ((error = git_fs_path_to_dir(&path)) < 0 ||
664 58 1 if (gitlink_path)
665 0 58 if ((error = git_str_attach(gitlink_path, git_worktree__read_link(path.ptr, GIT_GITDIR_FILE), 0)) < 0)
667 58 1 if (commondir_path)
672 5 0 } else if (S_ISREG(st.st_mode) && git__suffixcmp(path.ptr, "/" DOT_GIT) == 0) {
5 0 } else if (S_ISREG(st.st_mode) && git__suffixcmp(path.ptr, "/" DOT_GIT) == 0) {
673 5 0 if ((error = read_gitfile(&repo_link, path.ptr)) < 0 ||
5 0 if ((error = read_gitfile(&repo_link, path.ptr)) < 0 ||
677 5 0 if (is_valid) {
680 5 0 if (gitlink_path)
681 0 5 if ((error = git_str_put(gitlink_path, path.ptr, path.size)) < 0)
683 5 0 if (commondir_path)
693 0 32 if ((error = git_fs_path_dirname_r(&path, path.ptr)) < 0)
698 32 0 if (min_iterations && (--min_iterations == 0))
1 31 if (min_iterations && (--min_iterations == 0))
702 1 31 if (min_iterations == 0 &&
1 0 if (min_iterations == 0 &&
703 1 0 (path.ptr[ceiling_offset] == 0 || (flags & GIT_REPOSITORY_OPEN_NO_SEARCH)))
707 63 1 if (workdir_path && !(flags & GIT_REPOSITORY_OPEN_BARE)) {
63 0 if (workdir_path && !(flags & GIT_REPOSITORY_OPEN_BARE)) {
708 0 63 if (!git_str_len(gitdir_path))
710 63 0 else if ((error = git_fs_path_dirname_r(workdir_path, path.ptr)) < 0 ||
63 0 else if ((error = git_fs_path_dirname_r(workdir_path, path.ptr)) < 0 ||
717 0 64 if (!git_str_len(gitdir_path)) {
739 0 0 if ((error = git_fs_path_prettify_dir(&path, bare_path, NULL)) < 0 ||
0 0 if ((error = git_fs_path_prettify_dir(&path, bare_path, NULL)) < 0 ||
743 0 0 if (!is_valid) {
751 0 0 GIT_ERROR_CHECK_ALLOC(repo);
754 0 0 GIT_ERROR_CHECK_ALLOC(repo->gitdir);
756 0 0 GIT_ERROR_CHECK_ALLOC(repo->commondir);
787 0 0 if (!start_path) {
789 0 0 if (error == GIT_ENOTFOUND) {
792 0 0 } else if (error < 0)
802 0 0 if (error == GIT_ENOTFOUND)
804 0 0 else if (error < 0)
810 0 0 if (error == GIT_ENOTFOUND)
812 0 0 else if (error < 0)
817 0 0 if (error < 0)
819 0 0 if (across_fs)
824 0 0 if (error == GIT_ENOTFOUND)
826 0 0 else if (error < 0)
830 0 0 if (error < 0)
835 0 0 if (error == GIT_ENOTFOUND)
837 0 0 else if (error < 0)
841 0 0 if (error == GIT_ENOTFOUND)
843 0 0 else if (error < 0)
847 0 0 if (error < 0)
852 0 0 if (error == GIT_ENOTFOUND)
854 0 0 else if (error < 0)
863 0 0 if (error == GIT_ENOTFOUND)
865 0 0 else if (error < 0)
874 0 0 if (error < 0)
877 0 0 if (odb)
881 0 0 if (error == GIT_ENOTFOUND) {
884 0 0 } else if (error < 0)
889 0 0 if (!odb) {
891 0 0 if (error < 0)
896 0 0 for (sep = alt = alts_buf.ptr; sep != end; alt = sep+1) {
897 0 0 for (sep = alt; *sep && *sep != GIT_PATH_LIST_SEPARATOR; sep++)
0 0 for (sep = alt; *sep && *sep != GIT_PATH_LIST_SEPARATOR; sep++)
899 0 0 if (*sep)
902 0 0 if (error < 0)
907 0 0 if (git_str_len(&namespace_buf)) {
909 0 0 if (error < 0)
915 0 0 if (out) {
942 63 0 if (repo->commondir && repo->gitdir
63 0 if (repo->commondir && repo->gitdir
943 58 5 && !strcmp(repo->commondir, repo->gitdir)) {
948 0 5 if ((error = git_str_joinpath(&gitdir_link, repo->gitdir, "gitdir")) < 0)
973 0 63 if (flags & GIT_REPOSITORY_OPEN_FROM_ENV)
976 63 0 if (repo_ptr)
982 63 0 if (error < 0 || !repo_ptr)
63 0 if (error < 0 || !repo_ptr)
986 0 63 GIT_ERROR_CHECK_ALLOC(repo);
989 0 63 GIT_ERROR_CHECK_ALLOC(repo->gitdir);
991 5 58 if (gitlink.size) {
993 0 5 GIT_ERROR_CHECK_ALLOC(repo->gitlink);
995 63 0 if (commondir.size) {
997 0 63 GIT_ERROR_CHECK_ALLOC(repo->commondir);
1000 0 63 if ((error = repo_is_worktree(&is_worktree, repo)) < 0)
1010 0 63 if (error < 0 && error != GIT_ENOTFOUND)
0 0 if (error < 0 && error != GIT_ENOTFOUND)
1013 63 0 if (config && (error = check_repositoryformatversion(&version, config)) < 0)
0 63 if (config && (error = check_repositoryformatversion(&version, config)) < 0)
1016 0 63 if ((error = check_extensions(config, version)) < 0)
1019 0 63 if ((flags & GIT_REPOSITORY_OPEN_BARE) != 0) {
1022 63 0 if (config &&
63 0 if (config &&
1023 63 0 ((error = load_config_data(repo, config)) < 0 ||
1032 63 0 if (git_repository__validate_ownership &&
0 63 if (git_repository__validate_ownership &&
1043 0 63 if (error < 0)
1045 63 0 else if (repo_ptr)
1064 0 2 GIT_ASSERT_ARG(repo_out);
1065 0 2 GIT_ASSERT_ARG(wt);
1070 2 0 if (len <= 4 || strcasecmp(wt->gitlink_path + len - 4, ".git")) {
0 2 if (len <= 4 || strcasecmp(wt->gitlink_path + len - 4, ".git")) {
1075 0 2 if ((err = git_str_set(&path, wt->gitlink_path, len - 4)) < 0)
1078 0 2 if ((err = git_repository_open(&repo, path.ptr)) < 0)
1094 0 0 GIT_ERROR_CHECK_ALLOC(repo);
1108 1 0 uint32_t flags = across_fs ? GIT_REPOSITORY_OPEN_CROSS_FS : 0;
1110 0 1 GIT_ASSERT_ARG(start_path);
1112 1 0 GIT_BUF_WRAP_PRIVATE(out, find_repo, NULL, NULL, NULL, start_path, flags, ceiling_dirs);
1 0 GIT_BUF_WRAP_PRIVATE(out, find_repo, NULL, NULL, NULL, start_path, flags, ceiling_dirs);
1127 0 63 GIT_ASSERT_ARG(out);
1129 0 63 if ((error = git_config_new(&cfg)) < 0)
1132 63 0 if (repo) {
1133 63 0 if ((error = git_repository__item_path(&config_path, repo, GIT_REPOSITORY_ITEM_CONFIG)) == 0)
1136 0 63 if (error && error != GIT_ENOTFOUND)
0 0 if (error && error != GIT_ENOTFOUND)
1142 63 0 if (global_config_path != NULL &&
0 63 if (global_config_path != NULL &&
1144 0 0 cfg, global_config_path, GIT_CONFIG_LEVEL_GLOBAL, repo, 0)) < 0 &&
1148 0 63 if (xdg_config_path != NULL &&
0 0 if (xdg_config_path != NULL &&
1150 0 0 cfg, xdg_config_path, GIT_CONFIG_LEVEL_XDG, repo, 0)) < 0 &&
1154 0 63 if (system_config_path != NULL &&
0 0 if (system_config_path != NULL &&
1156 0 0 cfg, system_config_path, GIT_CONFIG_LEVEL_SYSTEM, repo, 0)) < 0 &&
1160 0 63 if (programdata_path != NULL &&
0 0 if (programdata_path != NULL &&
1162 0 0 cfg, programdata_path, GIT_CONFIG_LEVEL_PROGRAMDATA, repo, 0)) < 0 &&
1180 63 189 return git_str_len(buf) > 0 ? git_str_cstr(buf) : NULL;
1187 63 931 if (repo->_config == NULL) {
1200 0 63 if (git_str_len(&global_buf) == 0)
1209 63 0 if (!error) {
1212 0 63 if (git_atomic_compare_and_swap(&repo->_config, NULL, config) != NULL) {
1230 0 15 if (git_repository_config__weakptr(out, repo) < 0)
1242 0 502 if ((error = git_repository_config__weakptr(&weak, repo)) < 0)
1250 0 0 GIT_ASSERT_ARG(repo);
1251 0 0 GIT_ASSERT_ARG(config);
1261 0 2346 GIT_ASSERT_ARG(repo);
1262 0 2346 GIT_ASSERT_ARG(out);
1265 33 2313 if (*out == NULL) {
1269 33 0 if ((error = git_repository__item_path(&odb_path, repo,
1270 0 33 GIT_REPOSITORY_ITEM_OBJECTS)) < 0 ||
1276 33 0 if ((error = git_odb__set_caps(odb, GIT_ODB_CAP_FROM_OWNER)) < 0 ||
0 33 if ((error = git_odb__set_caps(odb, GIT_ODB_CAP_FROM_OWNER)) < 0 ||
1282 0 33 if (git_atomic_compare_and_swap(&repo->_odb, NULL, odb) != NULL) {
1296 0 164 if (git_repository_odb__weakptr(out, repo) < 0)
1305 0 2 GIT_ASSERT_ARG(repo);
1306 0 2 GIT_ASSERT_ARG(odb);
1316 0 1320 GIT_ASSERT_ARG(out);
1317 0 1320 GIT_ASSERT_ARG(repo);
1319 54 1266 if (repo->_refdb == NULL) {
1323 54 0 if (!error) {
1326 0 54 if (git_atomic_compare_and_swap(&repo->_refdb, NULL, refdb) != NULL) {
1339 0 83 if (git_repository_refdb__weakptr(out, repo) < 0)
1348 0 0 GIT_ASSERT_ARG(repo);
1349 0 0 GIT_ASSERT_ARG(refdb);
1359 0 3036 GIT_ASSERT_ARG(out);
1360 0 3036 GIT_ASSERT_ARG(repo);
1362 16 3020 if (repo->_index == NULL) {
1366 0 16 if ((error = git_str_joinpath(&index_path, repo->gitdir, GIT_INDEX_FILE)) < 0)
1370 16 0 if (!error) {
1373 0 16 if (git_atomic_compare_and_swap(&repo->_index, NULL, index) != NULL) {
1391 0 219 if (git_repository_index__weakptr(out, repo) < 0)
1400 0 2 GIT_ASSERT_ARG(repo);
1409 0 0 if (namespace == NULL) {
1414 0 0 return (repo->namespace = git__strdup(namespace)) ? 0 : -1;
1512 370 0 if (include_ntfs) {
1530 0 63 if (error == GIT_ENOTFOUND)
1533 0 63 if (error < 0)
1536 0 63 if (GIT_REPO_MAX_VERSION < *version) {
1562 0 0 git_vector_foreach (&user_extensions, i, extension) {
1569 0 0 if ((reject = (extension[0] == '!')) == true)
1572 0 0 if ((error = git_str_printf(&cfg, "extensions.%s", extension)) < 0)
1575 0 0 if (strcmp(entry->name, cfg.ptr) == 0) {
1576 0 0 if (reject)
1583 0 0 for (i = 0; i < ARRAY_SIZE(builtin_extensions); i++) {
1587 0 0 if ((error = git_str_printf(&cfg, "extensions.%s", extension)) < 0)
1590 0 0 if (strcmp(entry->name, cfg.ptr) == 0)
1605 68 0 if (version < 1)
1618 0 0 if (git_vector_init(&extensions, 8, NULL) < 0)
1621 0 0 for (i = 0; i < ARRAY_SIZE(builtin_extensions); i++) {
1626 0 0 git_vector_foreach (&user_extensions, j, user) {
1627 0 0 if (user[0] == '!' && strcmp(builtin, &user[1]) == 0) {
0 0 if (user[0] == '!' && strcmp(builtin, &user[1]) == 0) {
1633 0 0 if (match)
1641 0 0 git_vector_foreach (&user_extensions, i, user) {
1642 0 0 if (user[0] == '!')
1661 0 0 for (i = 0; i < len; i++) {
1682 7 0 if ((error = git_str_joinpath(&ref_path, git_dir, GIT_HEAD_FILE)) < 0 ||
7 0 if ((error = git_str_joinpath(&ref_path, git_dir, GIT_HEAD_FILE)) < 0 ||
1686 2 5 if (git__prefixcmp(ref_name, GIT_REFS_DIR) == 0)
1691 7 0 if ((error = git_filebuf_printf(&ref, fmt, ref_name)) < 0 ||
1705 0 5 if (p_stat(file_path, &st1) < 0)
1708 0 5 if (p_chmod(file_path, st1.st_mode ^ S_IXUSR) < 0)
1711 0 5 if (p_stat(file_path, &st2) < 0)
1722 5 0 if (!git_str_joinpath(&path, gitdir_path, "CoNfIg"))
1779 0 5 if (!(symlinks = git_fs_path_supports_symlinks(wd_path)))
1791 0 5 if ((fd = p_creat(path, mode)) < 0) {
1796 0 5 if (p_close(fd) < 0) {
1814 0 5 if (git_str_joinpath(config_dir, repo_dir, GIT_CONFIG_FILENAME_INREPO) < 0)
1819 5 0 if (!git_fs_path_isfile(cfg_path) &&
0 5 if (!git_fs_path_isfile(cfg_path) &&
1824 5 0 if (!repo)
1828 0 0 if ((error = git_repository_config__weakptr(&parent, repo)) < 0)
1831 0 0 if (git_config_open_level(out, parent, GIT_CONFIG_LEVEL_LOCAL) < 0) {
1834 0 0 if (!(error = git_config_add_file_ondisk(
1853 2 3 if (!work_dir)
1856 0 5 if ((error = git_config_set_bool(
1860 0 5 if (!are_symlinks_supported(work_dir)) {
1861 0 0 if ((error = git_config_set_bool(cfg, "core.symlinks", false)) < 0)
1863 5 0 } else if (git_config_delete_entry(cfg, "core.symlinks") < 0)
1866 5 0 if (update_ignorecase) {
1867 0 5 if (is_filesystem_case_insensitive(repo_dir)) {
1868 0 0 if ((error = git_config_set_bool(cfg, "core.ignorecase", true)) < 0)
1870 5 0 } else if (git_config_delete_entry(cfg, "core.ignorecase") < 0)
1898 0 5 if ((error = repo_local_config(&config, &cfg_path, NULL, repo_dir)) < 0)
1901 0 5 if (is_reinit && (error = check_repositoryformatversion(&version, config)) < 0)
0 0 if (is_reinit && (error = check_repositoryformatversion(&version, config)) < 0)
1904 0 5 if ((error = check_extensions(config, version)) < 0)
1911 0 5 SET_REPO_CONFIG(bool, "core.bare", is_bare);
1912 0 5 SET_REPO_CONFIG(int32, "core.repositoryformatversion", GIT_REPO_VERSION);
1914 0 5 if ((error = repo_init_fs_configs(
1918 3 2 if (!is_bare) {
1919 0 3 SET_REPO_CONFIG(bool, "core.logallrefupdates", true);
1921 0 3 if (!(flags & GIT_REPOSITORY_INIT__NATURAL_WD)) {
1922 0 0 if ((error = git_str_sets(&worktree_path, work_dir)) < 0)
1925 0 0 if ((flags & GIT_REPOSITORY_INIT_RELATIVE_GITLINK))
1926 0 0 if ((error = git_fs_path_make_relative(&worktree_path, repo_dir)) < 0)
1929 0 0 SET_REPO_CONFIG(string, "core.worktree", worktree_path.ptr);
1930 0 3 } else if (is_reinit) {
1931 0 0 if (git_config_delete_entry(config, "core.worktree") < 0)
1936 0 5 if (mode == GIT_REPOSITORY_INIT_SHARED_GROUP) {
1937 0 0 SET_REPO_CONFIG(int32, "core.sharedrepository", 1);
1938 0 0 SET_REPO_CONFIG(bool, "receive.denyNonFastforwards", true);
1940 0 5 else if (mode == GIT_REPOSITORY_INIT_SHARED_ALL) {
1941 0 0 SET_REPO_CONFIG(int32, "core.sharedrepository", 2);
1942 0 0 SET_REPO_CONFIG(bool, "receive.denyNonFastforwards", true);
1973 0 0 if (!(error = repo_local_config(&config, &path, repo, repo_dir)))
1982 0 0 if (!repo->is_bare && recurse)
0 0 if (!repo->is_bare && recurse)
1999 0 15 if (git_str_joinpath(&path, git_dir, file) < 0)
2002 0 15 if (allow_overwrite)
2009 15 0 if (fd >= 0) {
2014 0 0 else if (errno != EEXIST)
2028 0 15 if (error)
2045 0 0 if (git_str_oom(&buf))
2049 0 0 if (git__suffixcmp(to_repo, "/" DOT_GIT "/") == 0 &&
0 0 if (git__suffixcmp(to_repo, "/" DOT_GIT "/") == 0 &&
2056 0 0 if ((error = git_str_joinpath(&buf, in_dir, DOT_GIT)) < 0)
2059 0 0 if (!p_stat(buf.ptr, &st) && !S_ISREG(st.st_mode)) {
0 0 if (!p_stat(buf.ptr, &st) && !S_ISREG(st.st_mode)) {
2070 0 0 if (!error && use_relative_path)
0 0 if (!error && use_relative_path)
2073 0 0 if (!error)
2076 0 0 if (!error)
2087 10 0 if (opts->mode == GIT_REPOSITORY_INIT_SHARED_UMASK)
2089 0 0 if (opts->mode == GIT_REPOSITORY_INIT_SHARED_GROUP)
2091 0 0 if (opts->mode == GIT_REPOSITORY_INIT_SHARED_ALL)
2122 3 2 if ((opts->flags & GIT_REPOSITORY_INIT_BARE) == 0 &&
0 3 if ((opts->flags & GIT_REPOSITORY_INIT_BARE) == 0 &&
2125 0 0 if (repo_write_gitlink(work_dir, repo_dir, opts->flags & GIT_REPOSITORY_INIT_RELATIVE_GITLINK) < 0)
2130 0 5 if (external_tpl) {
2136 0 0 if (opts->template_path)
2138 0 0 else if ((error = git_config_open_default(&cfg)) >= 0) {
2139 0 0 if (!git_config__get_path(&template_buf, cfg, "init.templatedir"))
2144 0 0 if (!tdir) {
2145 0 0 if (!(error = git_sysdir_find_template_dir(&template_buf)))
2156 0 0 if (tdir && git__strcmp(tdir, "") != 0) {
0 0 if (tdir && git__strcmp(tdir, "") != 0) {
2160 0 0 if (opts->mode != GIT_REPOSITORY_INIT_SHARED_UMASK)
2173 0 0 if (error < 0) {
2174 0 0 if (!default_template && error != GIT_ENOTFOUND)
0 0 if (!default_template && error != GIT_ENOTFOUND)
2188 50 0 for (tpl = repo_template; !error && tpl->path; ++tpl) {
45 5 for (tpl = repo_template; !error && tpl->path; ++tpl) {
2189 30 15 if (!tpl->content) {
2191 0 30 if (chmod)
2197 15 0 else if (!external_tpl) {
2200 0 15 if (opts->description && strcmp(tpl->path, GIT_DESC_FILE) == 0)
0 0 if (opts->description && strcmp(tpl->path, GIT_DESC_FILE) == 0)
2216 0 5 return git_futils_mkdir(
2257 3 2 (opts->flags & GIT_REPOSITORY_INIT_NO_DOTGIT_DIR) == 0 &&
2258 3 0 !is_bare &&
2259 5 0 git__suffixcmp(given_repo, "/" DOT_GIT) != 0 &&
3 0 git__suffixcmp(given_repo, "/" DOT_GIT) != 0 &&
2262 3 2 if (git_str_joinpath(repo_path, given_repo, add_dotgit ? GIT_DIR : "") < 0)
0 5 if (git_str_joinpath(repo_path, given_repo, add_dotgit ? GIT_DIR : "") < 0)
2266 3 2 if (has_dotgit)
2271 3 2 if (!is_bare) {
2272 0 3 if (opts->workdir_path) {
2273 0 0 if (git_fs_path_join_unrooted(
2276 3 0 } else if (has_dotgit) {
2277 0 3 if (git_fs_path_dirname_r(wd_path, repo_path->ptr) < 0)
2285 0 3 if (git_fs_path_to_dir(wd_path) < 0)
2292 3 0 has_dotgit &&
2293 3 0 wd_path->size > 0 &&
2294 3 2 wd_path->size + strlen(GIT_DIR) == repo_path->size &&
3 0 wd_path->size + strlen(GIT_DIR) == repo_path->size &&
2296 3 2 if (natural_wd)
2303 5 0 if ((opts->flags & GIT_REPOSITORY_INIT_MKPATH) != 0) {
2305 3 2 if (wd_path->size > 0 &&
0 3 if (wd_path->size > 0 &&
2310 2 3 if (!natural_wd &&
0 2 if (!natural_wd &&
2315 5 0 if ((opts->flags & GIT_REPOSITORY_INIT_MKDIR) != 0 ||
5 0 if ((opts->flags & GIT_REPOSITORY_INIT_MKDIR) != 0 ||
2319 3 2 if (wd_path->size > 0 &&
0 3 if (wd_path->size > 0 &&
2326 2 3 if (!natural_wd &&
0 2 if (!natural_wd &&
2333 5 0 if ((opts->flags & GIT_REPOSITORY_INIT_MKDIR) != 0 ||
0 5 if ((opts->flags & GIT_REPOSITORY_INIT_MKDIR) != 0 ||
2334 0 0 (opts->flags & GIT_REPOSITORY_INIT_MKPATH) != 0 ||
2338 0 5 error = git_futils_mkdir(repo_path->ptr, dirmode,
2344 5 0 if (!error) {
2347 5 0 if (!error && wd_path->size > 0)
3 2 if (!error && wd_path->size > 0)
2361 0 5 if ((error = git_str_joinpath(&head_path, repo_dir, GIT_HEAD_FILE)) < 0)
2368 0 5 if (git_fs_path_exists(head_path.ptr) && !given)
0 0 if (git_fs_path_exists(head_path.ptr) && !given)
2371 0 5 if (given) {
2373 5 0 } else if ((error = git_config_open_default(&cfg)) >= 0 &&
5 0 } else if ((error = git_config_open_default(&cfg)) >= 0 &&
2374 5 0 (error = git_config__get_string_buf(&cfg_branch, cfg, "init.defaultbranch")) >= 0 &&
2379 0 5 if (!initial_head)
2397 0 0 if (!(error = git_remote_create(&remote, repo, GIT_REMOTE_ORIGIN, url))) {
2410 2 3 if (is_bare)
2427 0 5 GIT_ASSERT_ARG(out);
2428 0 5 GIT_ASSERT_ARG(given_repo);
2429 0 5 GIT_ASSERT_ARG(opts);
2431 0 5 GIT_ERROR_CHECK_VERSION(opts, GIT_REPOSITORY_INIT_OPTIONS_VERSION, "git_repository_init_options");
2433 0 5 if ((error = repo_init_directories(&repo_path, &wd_path, given_repo, opts)) < 0)
2436 3 2 wd = (opts->flags & GIT_REPOSITORY_INIT_BARE) ? NULL : git_str_cstr(&wd_path);
2438 0 5 if ((error = is_valid_repository_path(&is_valid, &repo_path, &common_path)) < 0)
2441 0 5 if (is_valid) {
2442 0 0 if ((opts->flags & GIT_REPOSITORY_INIT_NO_REINIT) != 0) {
2451 0 0 if ((error = repo_init_config(repo_path.ptr, wd, opts->flags, opts->mode)) < 0)
2456 5 0 if ((error = repo_init_structure(repo_path.ptr, wd, opts)) < 0 ||
5 0 if ((error = repo_init_structure(repo_path.ptr, wd, opts)) < 0 ||
2457 5 0 (error = repo_init_config(repo_path.ptr, wd, opts->flags, opts->mode)) < 0 ||
2462 0 5 if ((error = git_repository_open(out, repo_path.ptr)) < 0)
2465 0 5 if (opts->origin_url &&
0 0 if (opts->origin_url &&
2483 0 6 if (git_repository_odb__weakptr(&odb, repo) < 0)
2486 0 6 if (git_reference_lookup(&ref, repo, GIT_HEAD_FILE) < 0)
2489 2 4 if (git_reference_type(ref) == GIT_REFERENCE_SYMBOLIC) {
2505 0 0 GIT_ASSERT_ARG(repo);
2506 0 0 GIT_ASSERT_ARG(name);
2508 0 0 if ((error = git_repository_head_for_worktree(&ref, repo, name)) < 0)
2523 0 265 GIT_ASSERT_ARG(head_out);
2525 0 265 if ((error = git_reference_lookup(&head, repo, GIT_HEAD_FILE)) < 0)
2528 21 244 if (git_reference_type(head) == GIT_REFERENCE_DIRECT) {
2536 229 15 return error == GIT_ENOTFOUND ? GIT_EUNBORNBRANCH : error;
2546 0 1 GIT_ASSERT_ARG(out);
2547 0 1 GIT_ASSERT_ARG(repo);
2548 0 1 GIT_ASSERT_ARG(name);
2552 1 0 if ((error = git_worktree_lookup(&worktree, repo, name)) < 0 ||
1 0 if ((error = git_worktree_lookup(&worktree, repo, name)) < 0 ||
2553 1 0 (error = git_repository_open_from_worktree(&worktree_repo, worktree)) < 0 ||
2557 1 0 if (git_reference_type(head) != GIT_REFERENCE_DIRECT) {
2558 0 1 if ((error = git_reference_lookup_resolved(out, worktree_repo, git_reference_symbolic_target(head), -1)) < 0)
2585 0 18 if (!repo->commondir)
2595 0 18 if ((error = git_worktree_list(&worktrees, repo)) < 0)
2598 0 18 for (i = 0; i < worktrees.count; i++) {
2604 0 0 if ((error = git_worktree_lookup(&worktree, repo, worktrees.strings[i]) < 0) ||
0 0 if ((error = git_worktree_lookup(&worktree, repo, worktrees.strings[i]) < 0) ||
2606 0 0 if (error != GIT_ENOTFOUND)
2612 0 0 if ((error = cb(worktree_repo, payload)) != 0)
2631 0 0 if (error == GIT_EUNBORNBRANCH) {
2636 0 0 if (error < 0)
2648 0 2 if ((error = git_reference_iterator_new(&iter, repo)) < 0)
2654 2 0 if (error == GIT_ITEROVER)
2667 0 2 if ((error = git_repository_config__weakptr(&config, repo)) < 0)
2670 2 0 if ((error = git_config_get_entry(&entry, config, "init.defaultbranch")) == 0 &&
2 0 if ((error = git_config_get_entry(&entry, config, "init.defaultbranch")) == 0 &&
2674 0 0 else if (!error || error == GIT_ENOTFOUND) {
0 0 else if (!error || error == GIT_ENOTFOUND) {
2681 2 0 if ((error = git_str_puts(out, GIT_REFS_HEADS_DIR)) < 0 ||
2 0 if ((error = git_str_puts(out, GIT_REFS_HEADS_DIR)) < 0 ||
2682 2 0 (error = git_str_puts(out, branch)) < 0 ||
2686 0 2 if (!valid) {
2702 2 0 if ((result = git_reference_lookup(&head, repo, GIT_HEAD_FILE)) < 0 ||
2 0 if ((result = git_reference_lookup(&head, repo, GIT_HEAD_FILE)) < 0 ||
2706 2 0 result = (git_reference_type(head) == GIT_REFERENCE_SYMBOLIC &&
2707 2 0 strcmp(git_reference_symbolic_target(head), initialbranch.ptr) == 0 &&
2 0 strcmp(git_reference_symbolic_target(head), initialbranch.ptr) == 0 &&
2735 0 1428 if (!parent && fallback != GIT_REPOSITORY_ITEM__LAST)
0 0 if (!parent && fallback != GIT_REPOSITORY_ITEM__LAST)
2746 0 0 GIT_BUF_WRAP_PRIVATE(out, git_repository__item_path, repo, item);
0 0 GIT_BUF_WRAP_PRIVATE(out, git_repository__item_path, repo, item);
2755 0 1428 if (parent == NULL) {
2760 0 1428 if (git_str_sets(out, parent) < 0)
2763 1428 0 if (items[item].name) {
2764 0 1428 if (git_str_joinpath(out, parent, items[item].name) < 0)
2768 1365 63 if (items[item].directory) {
2769 0 1365 if (git_fs_path_to_dir(out) < 0)
2778 0 30 GIT_ASSERT_ARG_WITH_RETVAL(repo, NULL);
2784 0 7555 GIT_ASSERT_ARG_WITH_RETVAL(repo, NULL);
2786 0 7555 if (repo->is_bare)
2797 0 912 if (!repo->workdir) {
2802 912 0 if (!(error = git_str_joinpath(out, repo->workdir, path)))
2810 0 1431 GIT_ASSERT_ARG_WITH_RETVAL(repo, NULL);
2820 0 2 GIT_ASSERT_ARG(repo);
2821 0 2 GIT_ASSERT_ARG(workdir);
2823 0 2 if (git_fs_path_prettify_dir(&path, workdir, NULL) < 0)
2826 2 0 if (repo->workdir && strcmp(repo->workdir, path.ptr) == 0)
2 0 if (repo->workdir && strcmp(repo->workdir, path.ptr) == 0)
2829 0 0 if (update_gitlink) {
2832 0 0 if (git_repository_config__weakptr(&config, repo) < 0)
2838 0 0 if (error == GIT_PASSTHROUGH)
2840 0 0 else if (!error)
2843 0 0 if (!error)
2847 0 0 if (!error) {
2861 0 997 GIT_ASSERT_ARG(repo);
2867 0 2 GIT_ASSERT_ARG(repo);
2876 0 0 GIT_ASSERT_ARG(repo);
2878 0 0 if (repo->is_bare)
2881 0 0 if ((error = git_repository_config__weakptr(&config, repo)) < 0)
2884 0 0 if ((error = git_config_set_bool(config, "core.bare", true)) < 0)
2887 0 0 if ((error = git_config__update_entry(config, "core.worktree", NULL, true, true)) < 0)
2903 14 86 if ((error = git_repository_head(&head, repo)) < 0)
2906 0 86 if ((error = git_reference_peel(&obj, head, GIT_OBJECT_TREE)) < 0)
2925 7 0 if ((error = git_str_joinpath(&file_path, repo->gitdir, GIT_ORIG_HEAD_FILE)) == 0 &&
7 0 if ((error = git_str_joinpath(&file_path, repo->gitdir, GIT_ORIG_HEAD_FILE)) == 0 &&
2926 7 0 (error = git_filebuf_open(&file, file_path.ptr, GIT_FILEBUF_CREATE_LEADING_DIRS, GIT_MERGE_FILE_MODE)) == 0 &&
2930 0 7 if (error < 0)
2944 0 1 if (git_str_joinpath(&path, repo->gitdir, GIT_MERGE_MSG_FILE) < 0)
2947 0 1 if ((error = p_stat(git_str_cstr(&path), &st)) < 0) {
2948 0 0 if (errno == ENOENT)
2962 1 0 GIT_BUF_WRAP_PRIVATE(out, git_repository__message, repo);
1 0 GIT_BUF_WRAP_PRIVATE(out, git_repository__message, repo);
2970 0 0 if (git_str_joinpath(&path, repo->gitdir, GIT_MERGE_MSG_FILE) < 0)
2994 0 0 GIT_ASSERT_ARG(out);
2995 0 0 GIT_ASSERT_ARG(path);
2996 0 0 GIT_ASSERT_ARG(repo);
2998 0 0 if ((error = git_fs_path_join_unrooted(&full_path, path, workdir, NULL)) < 0 ||
0 0 if ((error = git_fs_path_join_unrooted(&full_path, path, workdir, NULL)) < 0 ||
3006 0 0 if (!as_path) {
3007 0 0 if (workdir && !git__prefixcmp(full_path.ptr, workdir))
0 0 if (workdir && !git__prefixcmp(full_path.ptr, workdir))
3014 0 0 if (strlen(as_path) > 0) {
3019 0 0 if (error < 0)
3026 0 0 if (fd < 0) {
3031 0 0 if ((error = git_futils_filesize(&len, fd)) < 0)
3034 0 0 if (!git__is_sizet(len)) {
3043 0 0 if (fd >= 0)
3055 19 1 if (git_reference_type(old) == GIT_REFERENCE_SYMBOLIC)
3063 0 1 git_reference__is_tag(new) ||
3069 0 20 if (git_str_oom(out))
3082 0 1 GIT_ASSERT_ARG(repo);
3083 0 1 GIT_ASSERT_ARG(id);
3085 0 1 if ((error = git_reference_lookup(¤t, repo, GIT_HEAD_FILE)) < 0)
3088 0 1 if ((error = git_object_lookup(&object, repo, id, GIT_OBJECT_ANY)) < 0)
3091 0 1 if ((error = git_object_peel(&peeled, object, GIT_OBJECT_COMMIT)) < 0)
3094 1 0 if (new == NULL)
3097 0 1 if ((error = checkout_message(&log_message, current, new)) < 0)
3119 0 19 GIT_ASSERT_ARG(repo);
3120 0 19 GIT_ASSERT_ARG(refname);
3122 0 19 if ((error = git_reference_lookup(¤t, repo, GIT_HEAD_FILE)) < 0)
3125 0 19 if ((error = checkout_message(&log_message, current, refname)) < 0)
3129 0 19 if (error < 0 && error != GIT_ENOTFOUND)
0 0 if (error < 0 && error != GIT_ENOTFOUND)
3132 19 0 if (ref && current->type == GIT_REFERENCE_SYMBOLIC && git__strcmp(current->target.symbolic, ref->name) &&
18 1 if (ref && current->type == GIT_REFERENCE_SYMBOLIC && git__strcmp(current->target.symbolic, ref->name) &&
3133 0 17 git_reference_is_branch(ref) && git_branch_is_checked_out(ref)) {
3140 19 0 if (!error) {
3141 19 0 if (git_reference_is_branch(ref)) {
3145 0 0 error = detach(repo, git_reference_target(ref),
3146 0 0 git_reference_is_tag(ref) || git_reference_is_remote(ref) ? refname : NULL);
3148 0 0 } else if (git_reference__is_branch(refname)) {
3172 0 0 GIT_ASSERT_ARG(repo);
3173 0 0 GIT_ASSERT_ARG(committish);
3185 0 0 GIT_ASSERT_ARG(repo);
3187 0 0 if ((error = git_reference_lookup(¤t, repo, GIT_HEAD_FILE)) < 0)
3190 0 0 if ((error = git_repository_head(&old_head, repo)) < 0)
3193 0 0 if ((error = git_object_lookup(&object, repo, git_reference_target(old_head), GIT_OBJECT_COMMIT)) < 0)
3196 0 0 if ((error = checkout_message(&log_message, current, git_oid_tostr_s(git_object_id(object)))) < 0)
3220 0 37 GIT_ASSERT_ARG(repo);
3222 0 37 if (git_str_puts(&repo_path, repo->gitdir) < 0)
3225 1 36 if (git_fs_path_contains_file(&repo_path, GIT_REBASE_MERGE_INTERACTIVE_FILE))
3227 3 33 else if (git_fs_path_contains_dir(&repo_path, GIT_REBASE_MERGE_DIR))
3229 1 32 else if (git_fs_path_contains_file(&repo_path, GIT_REBASE_APPLY_REBASING_FILE))
3231 1 31 else if (git_fs_path_contains_file(&repo_path, GIT_REBASE_APPLY_APPLYING_FILE))
3233 1 30 else if (git_fs_path_contains_dir(&repo_path, GIT_REBASE_APPLY_DIR))
3235 4 26 else if (git_fs_path_contains_file(&repo_path, GIT_MERGE_HEAD_FILE))
3237 2 24 else if (git_fs_path_contains_file(&repo_path, GIT_REVERT_HEAD_FILE)) {
3239 0 2 if (git_fs_path_contains_file(&repo_path, GIT_SEQUENCER_TODO_FILE)) {
3242 3 21 } else if (git_fs_path_contains_file(&repo_path, GIT_CHERRYPICK_HEAD_FILE)) {
3244 0 3 if (git_fs_path_contains_file(&repo_path, GIT_SEQUENCER_TODO_FILE)) {
3247 1 20 } else if (git_fs_path_contains_file(&repo_path, GIT_BISECT_LOG_FILE))
3261 193 0 for (error = 0, i = 0; !error && i < files_len; ++i) {
173 20 for (error = 0, i = 0; !error && i < files_len; ++i) {
3264 0 173 if (git_str_joinpath(&buf, repo->gitdir, files[i]) < 0)
3269 25 148 if (git_fs_path_isfile(path)) {
3271 6 142 } else if (git_fs_path_isdir(path)) {
3297 0 19 GIT_ASSERT_ARG(repo);
3308 0 0 if ((error = git_str_joinpath(&path, repo->gitdir, "shallow")) < 0)
3314 0 0 if (error == GIT_ENOTFOUND) {
3319 0 0 if (error < 0)
3327 0 0 GIT_INIT_STRUCTURE_FROM_TEMPLATE(
3353 0 0 if (name) {
3355 0 0 GIT_ERROR_CHECK_ALLOC(tmp_name);
3358 0 0 if (email) {
3360 0 0 GIT_ERROR_CHECK_ALLOC(tmp_email);
3374 0 0 GIT_ASSERT_ARG(repo);
3381 0 63 GIT_ASSERT_ARG(repo);