Commit Graph

13 Commits

Author SHA1 Message Date
lhchavez
83862c8374 commit-graph: Add a way to write commit-graph files
This change adds the git_commit_graph_writer_* functions to allow to
write and create `commit-graph` files from `.idx`/`.pack` files or
`git_revwalk`s.

Part of: #5757
2021-07-27 16:00:19 -07:00
lhchavez
8d453f1638 Swap the order of the git_graph_reachable_from_any params
len, array -> array, len
2021-07-27 13:00:31 -07:00
lhchavez
ce5400cdc7 graph: Create git_graph_reachable_from_any()
This change introduces a new API function
`git_graph_reachable_from_any()`, that answers the question whether a
commit is reachable from any of the provided commits through following
parent edges.

This function can take advantage of optimizations provided by the
existence of a `commit-graph` file, since it makes it faster to know
whether, given two commits X and Y, X cannot possibly be an reachable
from Y.

Part of: #5757
2021-07-27 08:14:08 -07:00
Edward Thomson
2370e49102 Merge pull request #5765 from lhchavez/cgraph-revwalks
commit-graph: Use the commit-graph in revwalks
2021-07-26 16:27:54 -04:00
Edward Thomson
d6bea53d10 Update tests/graph/commit_graph.c 2021-07-16 08:47:28 -04:00
Calvin Buckley
3f28eafeaf stdint constants in test suite
Passes w/ gcc 11 on Fedora x64.

Protip: So you don;t have to suffer,

```
perl -pe 's/(-?(?:0x)?[A-Fa-f0-9]+)([Uu])?[Ll][Ll]/\U$2INT64_C(\E$1)/mg'
```
2021-07-07 19:35:42 -03:00
lhchavez
25b75cd9bc commit-graph: Create git_commit_graph as an abstraction for the file
This change does a medium-size refactor of the git_commit_graph_file and
the interaction with the ODB. Now instead of the ODB owning a direct
reference to the git_commit_graph_file, there will be an intermediate
git_commit_graph. The main advantage of that is that now end users can
explicitly set a git_commit_graph that is eagerly checked for errors,
while still being able to lazily use the commit-graph in a regular ODB,
if the file is present.
2021-03-10 07:09:47 -08:00
lhchavez
1a2f960907 commit-graph: Introduce git_commit_graph_needs_refresh()
This change introduces a function that allows the caller to know whether
the `commit-graph` file has not been modified since it was parsed.

Part of: #5757
2021-01-10 11:18:38 -08:00
lhchavez
1f32ed25ee commit-graph: Support lookups of entries in a commit-graph
This change introduces `git_commit_graph_entry_find()` and
`git_commit_graph_entry_parent()`. These two functions allow a much
faster lookup of commits by ID, since the ODB does not need to be
consulted, the commit object does not need to be inflated, and the
contents of the commit object do not need to be parsed.

Part of: #5757
2021-01-10 11:18:38 -08:00
lhchavez
3fd57a75e9 commit-graph: Introduce a parser for commit-graph files
This change is the first in a series to add support for git's
commit-graph. This should speed up commit graph traversals by avoiding
object parsing and allowing some operations to terminate earlier.

Part of: #5757
2021-01-10 11:18:38 -08:00
Janardhan Pulivarthi
fdd10839ac Implement test for graph ahead and behind 2019-07-22 23:38:11 +05:30
Jacques Germishuys
8a8e312792 Added a no path test for git_graph_descendant_of 2014-04-08 16:32:06 +02:00
Arthur Schreiber
e7c16943f4 Add git_graph_descendant_of. 2014-01-28 19:39:14 +01:00