You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.4 KiB
100 lines
2.4 KiB
#include "test-tool.h" |
|
#include "cache.h" |
|
#include "commit-graph.h" |
|
#include "commit.h" |
|
#include "config.h" |
|
#include "object-store.h" |
|
#include "object.h" |
|
#include "repository.h" |
|
#include "tree.h" |
|
|
|
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); |
|
|
|
memset(the_repository, 0, sizeof(*the_repository)); |
|
|
|
if (repo_init(&r, gitdir, worktree)) |
|
die("Couldn't init repo"); |
|
|
|
repo_set_hash_algo(the_repository, hash_algo_by_ptr(r.hash_algo)); |
|
|
|
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); |
|
} |
|
|
|
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); |
|
|
|
memset(the_repository, 0, sizeof(*the_repository)); |
|
|
|
if (repo_init(&r, gitdir, worktree)) |
|
die("Couldn't init repo"); |
|
|
|
repo_set_hash_algo(the_repository, hash_algo_by_ptr(r.hash_algo)); |
|
|
|
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); |
|
} |
|
|
|
int cmd__repository(int argc, const char **argv) |
|
{ |
|
int nongit_ok = 0; |
|
|
|
setup_git_directory_gently(&nongit_ok); |
|
|
|
if (argc < 2) |
|
die("must have at least 2 arguments"); |
|
if (!strcmp(argv[1], "parse_commit_in_graph")) { |
|
struct object_id oid; |
|
if (argc < 5) |
|
die("not enough arguments"); |
|
if (parse_oid_hex(argv[4], &oid, &argv[4])) |
|
die("cannot parse oid '%s'", argv[4]); |
|
test_parse_commit_in_graph(argv[2], argv[3], &oid); |
|
} else if (!strcmp(argv[1], "get_commit_tree_in_graph")) { |
|
struct object_id oid; |
|
if (argc < 5) |
|
die("not enough arguments"); |
|
if (parse_oid_hex(argv[4], &oid, &argv[4])) |
|
die("cannot parse oid '%s'", argv[4]); |
|
test_get_commit_tree_in_graph(argv[2], argv[3], &oid); |
|
} else { |
|
die("unrecognized '%s'", argv[1]); |
|
} |
|
return 0; |
|
}
|
|
|