RHGitaly CommitService.GetTreeEntries implementation
- Aug 31, 2023
-
-
Georges Racinet authored
Testing the case of `limit=0` and revision unknown uncovered a small difference between HGitaly and Gitaly (RHGitaly was already compliant): HGitaly was returning a response, with an empty list of entries. Decided to change `chunked()` to avoid yielding an empty chunk, but it turned out that `RepositoryService.SearchFilesByName` was actually expected to yield responses with empty lists, hence we hade to make it optional. The check in `CommitService` to avoid empty chunks having become default, we had to remove it to kepp coverage.
-
- Aug 30, 2023
-
-
Georges Racinet authored
This builds on the previously introduced elements: iterators for the three cases, helpers to stream in paginated chunks and activates the Gitaly Comparison tests for this method. The actual call to the iterators look to be identical, but they are not, as monomorphisation will give us three different `stream_get_tree_entries_from_iterator`.
-
Georges Racinet authored
This is the engine behind the non-recursive case of `CommitService.GetTreeEntries`, if `skip_flat_paths` is `false`. Like the Python reference HGitaly implementation, we are interpreting the "flat path" to be the greatest common path of all entries equal or inside the given entry (see `hgitaly.manifest` Python module for details about this)
-
- Sep 01, 2023
-
-
Georges Racinet authored
-
- Aug 30, 2023
-
-
Georges Racinet authored
This is the core engine for one of the three modes of `CommitService.GetTreeEntries`.
-
- Aug 31, 2023
-
-
Georges Racinet authored
This iterator will be the core engine of `CommitService.GetTreeEntries` in the simplest case: non-recursive without flat paths computation. The flat paths computation is not as expensive in the Mercurial case as it is in the Git case, because we are iterating over the entire manifest anyway (a later version might use a binary search to find the starting point of the requested directory, but all files within the directory will have to be scanned), but not doing it enables this simple implementation: namely we can yield top-level directories immediately, and hence to have at most one `TreeEntry` to yield per run of the loop.
-
- Aug 30, 2023
-
-
Georges Racinet authored
This utility method finds the greatest common denominator of two paths, and helps using the remainder in one of them. It takes care of the various edge cases (strict equality, trailing slashes) and will be used several times in the `GetTreeEntries` implementation.
-
Georges Racinet authored
This will be useful to implement the various cases of `GetTreeEntries`. It could also be extended to be used in `ls_path`, but that would require treating the special case where the given path is actually a file. Consider sending this UPSTREAM.
-
Georges Racinet authored
This generic helper in `rhgitaly::streaming` is for the case of streamed responses with `repeated` items, the whole stream being the current page. In all cases known to us, GitLab derives some information from the last item of the last chunk to be the `next_cursor`, hence we introduce a trait for the item to represent that, and use it in the implementation. The first use-case will be the implementation of `CommitService.GetTreeEntries`, but this also makes the likes of `RefService.FindLocalBranches` essentially trivial.
-
Georges Racinet authored
This Rust version of Python `hgitaly.util.chunked` should be useful for many gRPC methods. It provide the means to distinguish the first response, but does not implement the pagination protocol.
-
- Aug 18, 2023
-
-
Georges Racinet authored
Probably more complicated than it should, but it works and can be swapped later to something more straightforward.
-