- Jul 30, 2023
-
-
Georges Racinet authored
-
- Jul 05, 2023
-
-
Georges Racinet authored
-
- Jul 19, 2023
-
-
Georges Racinet authored
As we will match Gitaly v15.11, this will be a new minor version
-
Georges Racinet authored
-
Georges Racinet authored
The only relevant change is `encoding` in `GitCommit` message, see #142. We could as well not do this bump, but it will help to draw a line before we climb to v15.11
-
Georges Racinet authored
This is specified in protocol (all explained in added comment method implementation). Closes #138
-
Georges Racinet authored
The rule with `HEAD` is even more puzzling in this case that usual. Apart from that, this is straightforward. Comparison Tests are doing most of actual meaningful testing, with regular integration tests providing coverage if Gitaly not available.
-
- Jul 17, 2023
-
-
Georges Racinet authored
The implementation itself is more general than `FindCommits`: we make it an option in `message.commit()`. For this, we need to read all state files. Because `FindCommits` may return lots of commits, we do it once and cache the reverse mapping on the repository object. Of course this is somewhat heavy if only one commit is being queried, especially if the pattern is about only one type of refs (e.g. branch refs, whose numbers are much less than all past special refs). An improvement would be to remember which type of file has been read already, and load the files on-demand. Another improvement would be to have an efficient format allowing to have all refs in one single db file. Since it is unlikely that keep-arounds would be asked in this way, we omit them for the time being. Most of the actual testing is done as a Gitaly Comparison test. We don't have a formal definition of the matching at the time being, so this is defined by the examples in the test (reading Git source code should provide better answers). Finally, RHGitaly should grow the `message.commit` equivalent, but it would not be useful right now. However, if `FindCommit` would turn out to also get this option, we'd have to do the Rust version. Closes #136
-
- Jul 12, 2023
-
-
Georges Racinet authored
We will be matching Gitaly 15.10 and implement the methods and options that could be postponed from 15.9, hence a new minor version.
-
Georges Racinet authored
-
- Jul 11, 2023
-
-
Georges Racinet authored
Actually, this method is called by `gitaly-backup` as of Gitaly 15.10 only (forwarded to the Rake task in upstream Git commit 4be1f22815bed, part of the 15.11 development cycle, not imported in Heptapod Rails repo yet). Also, since for the time being an HGitaly storage always comes on top of a regular Gitaly storage at the same path, we will actually want *not* to call the HGitaly version for lots of time.
-
Georges Racinet authored
According to Gitaly commits a87977cf909a4c2c5a3d7b53e21e3fdf2e5e5048 and ebc3336284d9ef5f2242e47d433aa94e4093ec2a, this is indeed a simple renaming. We don't bother about deduplication in test fixture wrapping methods. After all, deprecation will lead to removal quite soon. Closes #140
-
- Jul 08, 2023
-
-
Georges Racinet authored
Developments on stable branch were entirely driven by RHGitaly, leading to better matching of Gitaly in corner cases and errors. A change had to be made for Comparison tests to pass: the error message in `FindCommit` with no arguments at all is now the one about the `repository` argument missing instead of `revision`. This is so much a corner case that we don't bother matching and simply add `same_details=False`. The change may have happened anywhere between Gitaly v15.5 and v15.9.
-
Georges Racinet authored
-
Georges Racinet authored
For GitLab 15.9, we'll take advantage of the fact that upstream CI image does have the Rust toolchain ( installed to `/usr/local`). However it did not keep `/root/.cargo/env`.
-
- Jul 05, 2023
-
-
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
-
- Jun 16, 2023
-
-
Georges Racinet authored
The `gitlab_revision_node_prefix()` function will be used in all gRPC methods that accept arguments that are single GitLab revisions. Even those that take ranges would use it, just less directly. `CommitService.FindCommit` would be the most straightforward case, but there are many more. Closes #126
-
Georges Racinet authored
As noted in comment, this should really be in the `store` subdirectory, but that is a fight (data migration) for another day.
-
Georges Racinet authored
`gitlab::state::lookup_typed_ref_as_node` is the specialization of `map_lookup_typed_ref` to return `Node`s, hence it is working on a single stream of typed refs, whereas the higher level `gitlab::revision::full_ref_node` is the specialization of `map_full_ref` that works for any ref given by its full path.
-
- Jun 15, 2023
-
-
Georges Racinet authored
Perhaps the simplest useful application of `map_full_ref`. Testing provided by Comparison tests. We have to introduce another wrapper for propper logging of the `revision` field (otherwise it is almost impossible to follow, even if one knows one's ASCII). This will be needed by many other methods. Closes #128
-
Georges Racinet authored
These were uncovered by doing the Rust implementation.
-
- Jun 04, 2023
-
-
Georges Racinet authored
As usual, we're copying over the proto file, removing the `rpc` blocks that we don't intend to implement, yet keeping all message definitions.
-
- Jun 14, 2023
-
-
Georges Racinet authored
Of course it will grow the equivalenbt of Python's `gitlab_revision_changeset`, which is one of the most common helper functions in HGitaly, making the `FindCommit` gRPC method almost trivial.
-
Georges Racinet authored
This time, because there is no arbitrary name to consider, hence no bytes string, Tokio's `LinesStream` is perfectly suitable for our needs.
-
Georges Racinet authored
This follows the file format and conventions defined in the server side `heptapod` Python package. Since everything is async, we actually provide Streams of TypedRef objects, and the `map_lookup_typed_ref` for the numerous use cases when one is looking for a specific ref. The file format is very primitive, so all we can do at this point is to perform a full scan, but it has room (version preamble) for more advanced formats in the future (e.g, append-only persistent hash map or similar). A preliminary version of this was using Tokio's `LineStream`, but this has several drawbacks: - it is unicode-centric, yielding `String`s - we had to implement our own `Stream`, keeping the `LineStream` as a field. Hence because `poll_next()` takes `&mut Pin<Self>` we had to write a pinning accessor, which is unsafe (see the doc for `std::pin` for more details).
-
Georges Racinet authored
When a file contains a list of values, it is a common pattern that the absence of the file is equivalent to the list being empty. This `io_error_not_found_as_none` will help keeping duplication low (even if fairly trivial).
-