- Aug 07, 2023
-
-
Georges Racinet authored
There are for now completely identical to methods for blobs, but they could well become different (e.g, different disk caches or whatever).
-
Georges Racinet authored
This will be useful to implement `CommitService.TreeEntry`. There is plenty of room for performance improvement, notably: - the position of the first relevant entry could be found by binary search instead of a linear scan - we could try and clone less But it is possible that this would not be really needed, given the performance and scalability boost given by RHGitaly over HGitaly, before Mercurial manifests start using a more efficient layout, making this code obsolete.
-
Georges Racinet authored
We will soon implement `CommitService.TreeEntry`, which has to behave like `GetBlobs` on one `RevisionPath` in case it turns out the path is a blob.
-
- Jul 31, 2023
-
-
Georges Racinet authored
We split `lookup_blob()` in two functions, so that parts can be reused without reopening changelogs, manifests etc. Notably, the implementation of `TreeEntry` will use `read_blob` in case it is serving a blob and not a tree: in this case the manifest entry has already been found, no need to reopen and rescan anything.
-
- Aug 05, 2023
-
-
Georges Racinet authored
This job is way longer than the Python tests in the same stage and is needed for Comparison Tests. Most of the time being spent in Rust compilation, it should be worthwile to launch a worker with more CPUs.
-
Georges Racinet authored
In CI, the artifact size is becoming huge (~1.6G), and it's not so useful to rebuild in the `comparison` job, as this is not caching. We introduce the option to take a path to a prebuilt RHGitaly from environment variables, and use it in CI, which allows us to restrict the artifact to the (much smaller) final executable, provided we actually run `cargo build`.
-
- Aug 01, 2023
-
-
Georges Racinet authored
In HDK initialisation, this will be more suitable than sharing from an existing repository (self-contained, would not be forgotten)
-
- Jul 31, 2023
-
-
Georges Racinet authored
This method is mostly used to check if the repository is emtpy (and that is in the case of Mercurial logically equivalent), but it's better to implement it using the GitLab branches file as it avoids actually opening the repository, spawning a thread for blocking iteration etc.
-
- Jul 30, 2023
-
-
Georges Racinet authored
The oldstable branch probably should have already included this one.
-
- Jul 29, 2023
-
-
Georges Racinet authored
This finally puts together all the common logic already used in `GetBlob`, and we can switch on the Comparison tests (one single test function for both gRPC methods). Using `blocking_gitlab_revision_node_prefix` is not very elegant, we could probably resolve all the revisions before entering the blocking thread (and perhaps also avoid scanning the state files many times), but this is deemed not so important for the time being, compared to the huge efficiency boost provided to Heptapod by implementing this method in Rust. As is now customary, the tracing part has us create a wrapper struct and implement `Debug` because of the bytes in `RevisionPath`. At some point we'll have to come up with something more generic for this.
-
Georges Racinet authored
This will be used once in a thread created by `spawn_blocking`, typically with the closure given to the likes of `repository::load_repo_and_stream`. It is a bit annoying to introduce the dependency to `futures::executor` for this, but we don't feel at ease using `tokio::runtime::Runtime.block_on`, as this is really meant as an entry point (looks like we'd need to create a new runtime and it's not clear whether it would interfere with the current running one or not).
-
Georges Racinet authored
This builds on the previously introduced repository file extraction and conversion to `GetBlobResponse`. It is important to emit at least one response, even if the resulting data is empty (usually because of `limit=0`).
-
Georges Racinet authored
As noted in the comment, this is an important use case.
-
Georges Racinet authored
This handles the fact that `GetBlobResponse` and `GetBlobsResponse` have some similar logic (including metadata only on the first message for a given blob) and some differences (more metadata in the latter). We enclose the common logic in the new `message::BlobResponseChunk` trait, and implement it for both response types. The intermixing with data is not very natural in the Rust ownership context, we try and make it not too painful. There is possibly room for improvement in reducing cloning/allocations, perhaps using the `Bytes`-oriented variant of `prost`.
-
Georges Racinet authored
This provides the base logic to access file data, and a common representation for metadata that will be enough to implement the `GetBlob` and `GetBlobs` gRPC request, and that we hope to be reusable for the likes of `TreeEntry` and `GetTreeEntries`. The `rhgitaly::message` module will provide the necessary conversions to actual Gitaly response types.
-
Georges Racinet authored
Same as in `hgitaly.streaming`, and ultimately as in Gitaly, this is used as a constant that can be overridden by environment variable.
-
- Jul 28, 2023
-
-
Georges Racinet authored
Up to now, we didn't have the proper responses for the usual bogus cases (unknown commit, path, missing repo in requests, etc).
-
- Jul 29, 2023
-
-
Georges Racinet authored
-
- Jul 28, 2023
-
-
Georges Racinet authored
Same purpose as Python `hgitaly.oid`, of course more strongly typed.
-
- Jul 25, 2023
-
-
Georges Racinet authored
This is the removal of previously unneeded blocks kept for indentation.
-
Georges Racinet authored
Reduced duplication, and simpler error treatment.
-
Georges Racinet authored
Again keeping an unneeded block to get a readable diff.
-
Georges Racinet authored
This function provides the path to the store vfs, taking care of performing all checks, in particular that the repository exists. One advantage is the collapsing of the various problems (missing repo specfication, repo not found...) into a single `RepoSpecError`, so that callers can simply use `map_err()` and we don't need to take an error treatment argument. The check for `None` spares us a conditional block in the service implementation (kept an artificial block to have a readable diff by avoiding reindent). This is a new, simpler pattern, we'll see to generalize it.
-
- Jul 29, 2023
-
-
Georges Racinet authored
This is more convenient than using grpcurl to check the version. Also, one day it will be displayed in Heptapod UI, but that is not done yet.
-
- Jul 27, 2023
-
-
Georges Racinet authored
In the stable branches it's probably not so important to run triggered HGitaly pipelines, as usually py-heptapod does not change at all, but in any case this prevents the triggering job in py-heptapod to appear failed.
-
- Jul 26, 2023
-
-
Georges Racinet authored
-
- Jul 05, 2023
-
-
Georges Racinet authored
-
Georges Racinet authored
-
Georges Racinet authored
Closes #141
-
Georges Racinet authored
Someone got hasty…
-
Georges Racinet authored
Probably just a leftover, it passes.
-
- Jun 30, 2023
-
-
Georges Racinet authored
-
Georges Racinet authored
-
- Jun 29, 2023
-
-
Georges Racinet authored
This is now a direct application of `gitlab_revision_node_prefix()`. Perhaps worth of notice is the fact thay we stay purely async until the revision is resolved as a `NodePrefix`, and only spawn a thread once it is really needed (access to repository `Changelog`).
-
Georges Racinet authored
As usual, the Rust reimplementation raises some questions, and we answer them. The case of empty (missing) revision was spotted because Gitaly returns the error about it even if the repo argument is missing.
-
Georges Racinet authored
This method is fairly simple, but it has the tremendous advantage to flatten three possible `RevlogError` into one, considerably simplifying error treatment for the caller.
-
Georges Racinet authored
This is in particular useful because it makes the return type of the `spawn_blocking` call explicit, a hint that the compiler would request even for so simple a method as `FindCommit`. Like `load_repo_and_stream()` it takes care of converting some errors into the proper `Status`, still letting the caller define what happens with `RepoSpecError`, which may have to differ from one request to the other.
-
Georges Racinet authored
-