static void test_get_commit_tree_in_graph(const char *gitdir, const char *worktree, const struct object_id *commit_oid) { struct repository r; struct commit *c; struct tree *tree; setup_git_env(gitdir); if (repo_init(&r, gitdir, worktree)) die("Couldn't init repo"); c = lookup_commit(&r, commit_oid); /* * get_commit_tree_in_graph does not automatically parse the commit, so * parse it first. */ if (!parse_commit_in_graph(&r, c)) die("Couldn't parse commit"); tree = get_commit_tree_in_graph(&r, c); if (!tree) die("Couldn't get commit tree"); printf("%s\n", oid_to_hex(&tree->object.oid)); repo_clear(&r); }
/* * Initialize 'submodule' as the submodule given by 'path' in parent repository * 'superproject'. * Return 0 upon success and a non-zero value upon failure. */ int repo_submodule_init(struct repository *submodule, struct repository *superproject, const char *path) { const struct submodule *sub; struct strbuf gitdir = STRBUF_INIT; struct strbuf worktree = STRBUF_INIT; int ret = 0; sub = submodule_from_path(superproject, &null_oid, path); if (!sub) { ret = -1; goto out; } strbuf_repo_worktree_path(&gitdir, superproject, "%s/.git", path); strbuf_repo_worktree_path(&worktree, superproject, "%s", path); if (repo_init(submodule, gitdir.buf, worktree.buf)) { /* * If initilization fails then it may be due to the submodule * not being populated in the superproject's worktree. Instead * we can try to initilize the submodule by finding it's gitdir * in the superproject's 'modules' directory. In this case the * submodule would not have a worktree. */ strbuf_reset(&gitdir); strbuf_repo_git_path(&gitdir, superproject, "modules/%s", sub->name); if (repo_init(submodule, gitdir.buf, NULL)) { ret = -1; goto out; } } submodule->submodule_prefix = xstrfmt("%s%s/", superproject->submodule_prefix ? superproject->submodule_prefix : "", path); out: strbuf_release(&gitdir); strbuf_release(&worktree); return ret; }
void svndump_init(const char *filename) { buffer_init(filename); repo_init(); reset_dump_ctx(~0); reset_rev_ctx(0); reset_node_ctx(NULL); init_keys(); }
static void test_parse_commit_in_graph(const char *gitdir, const char *worktree, const struct object_id *commit_oid) { struct repository r; struct commit *c; struct commit_list *parent; setup_git_env(gitdir); if (repo_init(&r, gitdir, worktree)) die("Couldn't init repo"); c = lookup_commit(&r, commit_oid); if (!parse_commit_in_graph(&r, c)) die("Couldn't parse commit"); printf("%"PRItime, c->date); for (parent = c->parents; parent; parent = parent->next) printf(" %s", oid_to_hex(&parent->item->object.oid)); printf("\n"); repo_clear(&r); }