commit - 11d7587ef5019e3735f6ec20c43f580eb5c8a94e
commit + 3d5092374a96864fbc4c3d2d2e752f588c63ac39
blob - 9f9906e1f49348ef40c8d4cc7841bc6fbae5a3c7
blob + 1600fc869822946bf76150e16a141479b9920830
--- got/got.c
+++ got/got.c
goto done;
}
- err = got_commit_graph_open(&graph, head_commit_id, "/", 1, repo);
+ err = got_commit_graph_open(&graph, "/", 1);
if (err)
goto done;
regcomp(®ex, search_pattern, REG_EXTENDED | REG_NOSUB | REG_NEWLINE))
return got_error_msg(GOT_ERR_REGEX, search_pattern);
- err = got_commit_graph_open(&graph, root_id, path,
- first_parent_traversal, repo);
+ err = got_commit_graph_open(&graph, path, first_parent_traversal);
if (err)
return err;
err = got_commit_graph_iter_start(graph, root_id, repo,
struct got_object_qid *qid;
struct got_object_id *commit_id = initial_commit_id;
- err = got_commit_graph_open(&graph, initial_commit_id, "/", 1, repo);
+ err = got_commit_graph_open(&graph, "/", 1);
if (err)
return err;
blob - e21a5301c9f6ed92c32d078f03478d6f8a79423f
blob + 2ad08d326790ee2c3002810b856dc2fce9064196
--- include/got_commit_graph.h
+++ include/got_commit_graph.h
struct got_commit_graph;
const struct got_error *got_commit_graph_open(struct got_commit_graph **,
- struct got_object_id *commit_id, const char *, int,
- struct got_repository *repo);
+ const char *, int);
void got_commit_graph_close(struct got_commit_graph *);
const struct got_error *got_commit_graph_iter_start(
blob - b8f22cf154bb9629cdb7274e611319bef1a7031d
blob + e1ce795a74206c1e1b511b5a6e38da648a543624
--- include/got_error.h
+++ include/got_error.h
#define GOT_ERR_PACK_OFFSET 42
#define GOT_ERR_OBJ_EXISTS 43
#define GOT_ERR_BAD_OBJ_ID 44
-/* 45 is currently unused */
+#define GOT_ERR_ITER_BUSY 45
#define GOT_ERR_ITER_COMPLETED 46
#define GOT_ERR_RANGE 47
#define GOT_ERR_EXPECTED 48 /* for use in regress tests only */
{ GOT_ERR_PACK_OFFSET, "bad offset in pack file" },
{ GOT_ERR_OBJ_EXISTS, "object already exists" },
{ GOT_ERR_BAD_OBJ_ID, "bad object id" },
- /* 45 is currently unused */
+ { GOT_ERR_ITER_BUSY, "iteration already in progress" },
{ GOT_ERR_ITER_COMPLETED,"iteration completed" },
{ GOT_ERR_RANGE, "value out of range" },
{ GOT_ERR_EXPECTED, "expected an error but have no error" },
blob - 00b87984bbe853e9f667f29f39ff58191c20ca30
blob + 004a114385e43ca9db16c42ae42deef3c0382b60
--- lib/blame.c
+++ lib/blame.c
goto done;
}
- err = got_commit_graph_open(&graph, start_commit_id, path, 1, repo);
+ err = got_commit_graph_open(&graph, path, 1);
if (err)
return err;
err = got_commit_graph_iter_start(graph, start_commit_id, repo,
blob - 3547daee92b9b6e429ebe95b6bfa67382fe47e83
blob + 388504ad5d406257f8345279e079a74e730d8967
--- lib/commit_graph.c
+++ lib/commit_graph.c
const struct got_error *
got_commit_graph_open(struct got_commit_graph **graph,
- struct got_object_id *commit_id, const char *path,
- int first_parent_traversal, struct got_repository *repo)
-{
- const struct got_error *err = NULL;
- struct got_commit_object *commit;
- int changed, branch_done;
- struct got_commit_graph_node *node;
-
- *graph = NULL;
-
- err = got_object_open_as_commit(&commit, repo, commit_id);
- if (err)
- return err;
-
- /* The path must exist in our initial commit. */
- if (!got_path_is_root_dir(path)) {
- struct got_object_id *obj_id;
- err = got_object_id_by_path(&obj_id, repo, commit_id, path);
- if (err)
- return err;
- free(obj_id);
- }
-
+ const char *path, int first_parent_traversal)
+{
*graph = alloc_graph(path);
- if (*graph == NULL) {
- err = got_error_from_errno("alloc_graph");
- got_object_commit_close(commit);
- return err;
- }
+ if (*graph == NULL)
+ return got_error_from_errno("alloc_graph");
if (first_parent_traversal)
(*graph)->flags |= GOT_COMMIT_GRAPH_FIRST_PARENT_TRAVERSAL;
- err = add_node(&node, &changed, &branch_done, *graph,
- commit_id, commit, NULL, repo);
- if (err == NULL) {
- err = advance_branch(*graph, node, commit_id,
- commit, repo);
- }
- got_object_commit_close(commit);
- if (err) {
- got_commit_graph_close(*graph);
- *graph = NULL;
- return err;
- }
-
return NULL;
}
const struct got_error *err = NULL;
struct got_commit_graph_node *start_node;
struct got_commit_object *commit;
- int changed;
+ int changed, branch_done;
- start_node = got_object_idset_get(graph->node_ids, id);
- while (start_node == NULL) {
- int ncommits;
- err = fetch_commits_from_open_branches(&ncommits, NULL, graph,
- repo, cancel_cb, cancel_arg);
- if (err)
- return err;
- if (ncommits == 0)
- return got_error_no_obj(id);
- start_node = got_object_idset_get(graph->node_ids, id);
- }
+ if (!TAILQ_EMPTY(&graph->iter_list))
+ return got_error(GOT_ERR_ITER_BUSY);
- err = got_object_open_as_commit(&commit, repo, &start_node->id);
+ err = got_object_open_as_commit(&commit, repo, id);
if (err)
return err;
+ err = add_node(&start_node, &changed, &branch_done, graph, id,
+ commit, NULL, repo);
+ if (err)
+ goto done;
+
+ err = advance_branch(graph, start_node, id, commit, repo);
+ if (err)
+ goto done;
+
err = detect_changed_path(&changed, commit, &start_node->id,
graph->path, repo);
if (err) {
}
start_node = got_object_idset_get(graph->node_ids, changed_id);
}
+done:
got_object_commit_close(commit);
-
- graph->iter_node = start_node;
- return NULL;
+ if (err == NULL)
+ graph->iter_node = start_node;
+ return err;
}
const struct got_error *
if (commit_ids == NULL)
return got_error_from_errno("got_object_idset_alloc");
- err = got_commit_graph_open(&graph, commit_id, "/", 1, repo);
+ err = got_commit_graph_open(&graph, "/", 1);
if (err)
goto done;
- err = got_commit_graph_open(&graph2, commit_id2, "/", 1, repo);
+ err = got_commit_graph_open(&graph2, "/", 1);
if (err)
goto done;
blob - 837e0f916a1ff344f792025b8159bb1660fe019e
blob + c74a02a1146f0439a627fbf598f75fc0109c1848
--- tog/tog.c
+++ tog/tog.c
err = got_repo_open(&thread_repo, got_repo_get_path(repo), NULL);
if (err)
goto done;
- err = got_commit_graph_open(&thread_graph, start_id, s->in_repo_path,
- 0, thread_repo);
+ err = got_commit_graph_open(&thread_graph, s->in_repo_path, 0);
if (err)
goto done;