static int foreach_path_cb(git_submodule *submodule, const char *name, void *payload) { PyObject *list = (PyObject *)payload; PyObject *path = to_unicode(git_submodule_path(submodule), NULL, NULL); return PyList_Append(list, path); }
static int SubmoduleCallback(git_submodule *sm, const char * /*name*/, void *payload) { auto spayload = (SubmodulePayload *)payload; CString path = CUnicodeUtils::GetUnicode(git_submodule_path(sm)); if (spayload->prefixList.empty()) { CTGitPath subPath(spayload->basePath); subPath.AppendPathString(path); spayload->list.push_back(subPath.GetGitPathString()); SubmodulePayload tpayload(spayload->list, subPath.GetGitPathString()); GetSubmodulePathList(tpayload); } else { for (size_t i = 0; i < spayload->prefixList.size(); ++i) { CString prefix = spayload->prefixList.at(i) + _T("/"); if (path.Left(prefix.GetLength()) == prefix) { CTGitPath subPath(spayload->basePath); subPath.AppendPathString(path); spayload->list.push_back(subPath.GetGitPathString()); SubmodulePayload tpayload(spayload->list, subPath.GetGitPathString()); GetSubmodulePathList(tpayload); } } } return 0; }
static int print_submodules(git_submodule *sm, const char *name, void *p) { unsigned int loc = 0; GIT_UNUSED(p); git_submodule_location(&loc, sm); fprintf(stderr, "# submodule %s (at %s) flags %x\n", name, git_submodule_path(sm), loc); return 0; }
void test_submodule_lookup__accessors(void) { git_submodule *sm; const char *oid = "480095882d281ed676fe5b863569520e54a7d5c0"; cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_unchanged")); cl_assert(git_submodule_owner(sm) == g_repo); cl_assert_equal_s("sm_unchanged", git_submodule_name(sm)); cl_assert(git__suffixcmp(git_submodule_path(sm), "sm_unchanged") == 0); cl_assert(git__suffixcmp(git_submodule_url(sm), "/submod2_target") == 0); cl_assert(git_oid_streq(git_submodule_index_id(sm), oid) == 0); cl_assert(git_oid_streq(git_submodule_head_id(sm), oid) == 0); cl_assert(git_oid_streq(git_submodule_wd_id(sm), oid) == 0); cl_assert(git_submodule_ignore(sm) == GIT_SUBMODULE_IGNORE_NONE); cl_assert(git_submodule_update(sm) == GIT_SUBMODULE_UPDATE_CHECKOUT); git_submodule_free(sm); cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_changed_head")); cl_assert_equal_s("sm_changed_head", git_submodule_name(sm)); cl_assert(git_oid_streq(git_submodule_index_id(sm), oid) == 0); cl_assert(git_oid_streq(git_submodule_head_id(sm), oid) == 0); cl_assert(git_oid_streq(git_submodule_wd_id(sm), "3d9386c507f6b093471a3e324085657a3c2b4247") == 0); git_submodule_free(sm); cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_added_and_uncommited")); cl_assert_equal_s("sm_added_and_uncommited", git_submodule_name(sm)); cl_assert(git_oid_streq(git_submodule_index_id(sm), oid) == 0); cl_assert(git_submodule_head_id(sm) == NULL); cl_assert(git_oid_streq(git_submodule_wd_id(sm), oid) == 0); git_submodule_free(sm); cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_missing_commits")); cl_assert_equal_s("sm_missing_commits", git_submodule_name(sm)); cl_assert(git_oid_streq(git_submodule_index_id(sm), oid) == 0); cl_assert(git_oid_streq(git_submodule_head_id(sm), oid) == 0); cl_assert(git_oid_streq(git_submodule_wd_id(sm), "5e4963595a9774b90524d35a807169049de8ccad") == 0); git_submodule_free(sm); }
static int print_submod(git_submodule *sm, const char *name, void *payload) { int *count = payload; (void)name; if (*count == 0) printf("# Submodules\n"); (*count)++; printf("# - submodule '%s' at %s\n", git_submodule_name(sm), git_submodule_path(sm)); return 0; }
static int SubmoduleCallback(git_submodule *sm, const char * /*name*/, void *payload) { STRING_VECTOR *list = *(STRING_VECTOR **)payload; STRING_VECTOR *prefixList = *((STRING_VECTOR **)payload + 1); CString path = CUnicodeUtils::GetUnicode(git_submodule_path(sm)); if (prefixList->empty()) list->push_back(path); else { for (size_t i = 0; i < prefixList->size(); ++i) { CString prefix = prefixList->at(i) + L'/'; if (CStringUtils::StartsWith(path, prefix)) list->push_back(path); } } return 0; }
static int SubmoduleCallback(git_submodule *sm, const char * /*name*/, void *payload) { STRING_VECTOR *list = *(STRING_VECTOR **)payload; STRING_VECTOR *prefixList = *((STRING_VECTOR **)payload + 1); CString path = CUnicodeUtils::GetUnicode(git_submodule_path(sm)); if (prefixList->empty()) { list->push_back(path); } else { for (size_t i = 0; i < prefixList->size(); ++i) { CString prefix = prefixList->at(i) + _T("/"); if (path.Left(prefix.GetLength()) == prefix) list->push_back(path); } } return 0; }
void test_submodule_nosubs__add_and_delete(void) { git_repository *repo = cl_git_sandbox_init("status"); git_submodule *sm; git_buf buf = GIT_BUF_INIT; /* note lack of calls to git_submodule_reload_all - this *should* work */ cl_git_fail(git_submodule_lookup(NULL, repo, "libgit2")); cl_git_fail(git_submodule_lookup(NULL, repo, "submodules/libgit2")); /* create */ cl_git_pass(git_submodule_add_setup( &sm, repo, "https://github.com/libgit2/libgit2.git", "submodules/libgit2", 1)); cl_assert_equal_s("submodules/libgit2", git_submodule_name(sm)); cl_assert_equal_s("submodules/libgit2", git_submodule_path(sm)); git_submodule_free(sm); cl_git_pass(git_futils_readbuffer(&buf, "status/.gitmodules")); cl_assert(strstr(buf.ptr, "[submodule \"submodules/libgit2\"]") != NULL); cl_assert(strstr(buf.ptr, "path = submodules/libgit2") != NULL); git_buf_free(&buf); /* lookup */ cl_git_fail(git_submodule_lookup(&sm, repo, "libgit2")); cl_git_pass(git_submodule_lookup(&sm, repo, "submodules/libgit2")); cl_assert_equal_s("submodules/libgit2", git_submodule_name(sm)); cl_assert_equal_s("submodules/libgit2", git_submodule_path(sm)); git_submodule_free(sm); /* update name */ cl_git_rewritefile( "status/.gitmodules", "[submodule \"libgit2\"]\n" " path = submodules/libgit2\n" " url = https://github.com/libgit2/libgit2.git\n"); cl_git_pass(git_submodule_lookup(&sm, repo, "libgit2")); cl_assert_equal_s("libgit2", git_submodule_name(sm)); cl_assert_equal_s("submodules/libgit2", git_submodule_path(sm)); git_submodule_free(sm); cl_git_pass(git_submodule_lookup(&sm, repo, "submodules/libgit2")); git_submodule_free(sm); /* revert name update */ cl_git_rewritefile( "status/.gitmodules", "[submodule \"submodules/libgit2\"]\n" " path = submodules/libgit2\n" " url = https://github.com/libgit2/libgit2.git\n"); cl_git_fail(git_submodule_lookup(&sm, repo, "libgit2")); cl_git_pass(git_submodule_lookup(&sm, repo, "submodules/libgit2")); git_submodule_free(sm); /* remove completely */ cl_must_pass(p_unlink("status/.gitmodules")); cl_git_fail(git_submodule_lookup(&sm, repo, "libgit2")); cl_git_fail(git_submodule_lookup(&sm, repo, "submodules/libgit2")); }