Skip to content
Snippets Groups Projects
  1. Mar 09, 2024
  2. Mar 08, 2024
  3. Mar 07, 2024
    • Georges Racinet's avatar
      rhgitaly::message::commit_for_node_prefix_or_none · b454d908
      Georges Racinet authored
      This reduces duplication in error treatment for Node prefixes
      that do not resolve, an area in which we hope `hg-core` will change.
      b454d908
    • Georges Racinet's avatar
      rhgitaly::repository new load_changelog_and... helpers · 5f8ebd65
      Georges Racinet authored
      This helps reduce the duplication in service code a bit, as the
      error treatment always turns out to be the same. It seems unlikely
      anything other than `Internal` could be useful if the changelog
      cannot be opened.
      
      It also uncovers that methods returning several blob or trees were
      reopening the changelog for each returned value and reduces that partially
      (not true in case of `get_blobs`). This is probably not much anyway for
      anything making use of the manifest, given how inefficient it is, but
      it may help in the future.
      5f8ebd65
    • Georges Racinet's avatar
      RHGitaly implement ObjectFormat · 48a9d02b
      Georges Racinet authored
      This is essentially trivial, since we are returning a constant.
      The Comparison test looks silly, but it is still useful,
      as it is the only thing proving that it actually works,
      and it forced us to return the
      same errors as Gitaly, which is obviously a good thing.
      
      We might want a direct HGitay vs RHGitaly comparison at some point,
      though.
      
      Closes #187
      48a9d02b
    • Georges Racinet's avatar
      RHGitaly implement FindTag · 27a7fd0e
      Georges Racinet authored
      Because we need to release ASAP as part of Heptapod 1.1.2 (also
      has an upstream security release), we won't deduplicate the
      fetching of the target commit, but it should be done shortly
      after the release.
      
      Closes #186
      27a7fd0e
    • Georges Racinet's avatar
      rhgitaly::gitlab::state:StateFileError usable with question mark operator · 8d9351c7
      Georges Racinet authored
      It is hard imagining converting this Heptapod-specific error into
      something else than `Internal`. Anyway, such shortcuts do not preclude
      performing manual error treatment.
      8d9351c7
    • Georges Racinet's avatar
      rhgitaly::gitlab: helper for full ref paths of tags · 704a192d
      Georges Racinet authored
      Expected to be used more than once across the code base, like its
      older sibling for branches.
      704a192d
  4. Mar 03, 2024
  5. Mar 02, 2024
    • Georges Racinet's avatar
      GetTreeEntries: structured errors, Python only · fa53ea51
      Georges Racinet authored
      This is the Python part of #156, and it also serves to prepare
      the Comparison test that will validate the Rust side.
      
      In ordinary integration tests, we do not assert the exact value
      of the structured error: the Comparison tests will be much better
      to make sure they are correct, so we content ourselves with maintaining
      coverage in them.
      fa53ea51
  6. Feb 14, 2024
  7. Feb 13, 2024
    • Georges Racinet's avatar
      RHGitaly: bumped hg-core to Mercurial 6.6.3 · 9d85d59c
      Georges Racinet authored
      It contains an important fix for `ChangelogRevisionData.files`. We
      don't seem to use that method yet, but are prone to, as it would be
      the main backing data access for the likes of `LastCommitForPath`
      9d85d59c
  8. Feb 10, 2024
  9. Jan 13, 2024
  10. Jan 09, 2024
  11. Jan 07, 2024
    • Georges Racinet's avatar
      RHGitaly packaging: fix hg-core by including configitems.toml · 1b5b0f07
      Georges Racinet authored
      This is now needed to build hg-core, but lies outside of it.
      
      In truth what happens is that taking a tarball of hg-core or even
      the entire rust workspace of Mercurial is not self-contained and
      cannot be fixed unless there is at least one intermediate directory
      (as is the case here).
      
      Should talk upstream about it.
    • Georges Racinet's avatar
      RHGitaly: updating hg-core to version 6.6.1 · ff013182
      Georges Racinet authored
      - using the node id rather than the tag in `mercurial.rev`,
        to dodge the usual problems with tags
      - had to pin down the new `toml` dependency and the `serde_spanned`
        it brings because MSRV of serde_spanned 0.6.5 is 1.67.0
      - a few into() were needed due to the introduction of `UncheckedRevision`.
        Mostly because we get `Revision` from nodemap calls. Perhaps this
        can be simplified later on. This is expected to be 0-cost anyway.
      ff013182
  12. Jan 03, 2024
  13. Jan 02, 2024
    • Georges Racinet's avatar
      rhgitaly: upgrade tonic to 0.10 · a341ff42
      Georges Racinet authored
      Done initially as an attempt to fix the `RST_STREAM` code 1 error
      (actually triggered by clients based on gRPC core 1.58 sending the
      wrong `authority` for Unix Domain Sockets), but it is an interesting
      update in itself, apparently bringing in rich errors capabilities that
      could well be the same one we will be needing in `GetTreeEntries` etc.
      a341ff42
  14. Dec 23, 2023
    • Georges Racinet's avatar
      RHGitaly: bump hg-core dependency to 6.5.3 · de615355
      Georges Racinet authored
      This matches the version used in Heptapod 0.40 and the future 0.41.
      
      HG: Enter commit message.  Lines beginning with 'HG:' are removed.
      HG: Leave message empty to abort commit.
      HG: --
      HG: user: Georges Racinet <georges.racinet@octobus.net>
      HG: topic 'bump-proto'
      HG: branch 'stable'
      HG: changed rust/Cargo.lock
      HG: changed rust/mercurial.rev
      de615355
    • Georges Racinet's avatar
      Bump Gitaly protocol to v16.3 · 9ae42b08
      Georges Racinet authored
      As often, it doesn't change in patch versions.
      9ae42b08
  15. Nov 10, 2023
  16. Sep 24, 2023
    • Georges Racinet's avatar
      RefService.FindDefaultBranchName: filter out non existing target · 41582380
      Georges Racinet authored
      It turns out that Gitaly returns an empty response on an empty
      repository, whatever the value stored as default branch might be.
      In case the default branch points to a branch that does not exist,
      it returns the first branch it can find. This latter case cannot
      happen with the state maintainer provided by py-heptapod.
      
      This can be important for various mechanisms to actually set the
      default branch. We're simply returning an empty response if the
      default branch is set but its target does not exist. This amounts
      to the same in all current scenarios. Later on we could return the
      first GitLab branch if that becomes useful.
      41582380
  17. Sep 21, 2023
    • Georges Racinet's avatar
      RHGitaly: resynced protocol with general Gitaly protocol · 14ed2552
      Georges Racinet authored
      Parent changeset removed two messages, and previous bump of Gitaly
      protocol had some other changes that don't affect RHGitaly (or introduce new
      options that are not implemented yet), but should be applied for clarity:
      RHGitaly protocol definitions should have all messages and a subset
      of the methods.
      14ed2552
  18. Sep 20, 2023
    • Georges Racinet's avatar
      CommitService.GetTreeEntries: remove root_oid · eef65d4b
      Georges Racinet authored
      Of course this requires an update of the base image, to get a Gitaly past
      the point when `root_oid` is removed from protocol. We could run locally
      the Comparison tests with 16.0.0, which is simpler to reference than an
      exact commit, so we'll try this.
      
      The length of the first response in `test_compare_get_tree_entries_pagination`
      by Gitaly changes, perhaps because each `TreeEntry` is a bit smaller (we've long
      suspected the streaming logic was based on actual size hints), but we did not
      check that.
      
      Closes #151
      eef65d4b
  19. Aug 31, 2023
    • Georges Racinet's avatar
      GetTreeEntries: testing and fixing some corner cases · 45749dd3
      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.
      45749dd3
  20. Aug 30, 2023
    • Georges Racinet's avatar
      RHGitaly: implement CommitService.GetTreeEntries · 63daae2a
      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`.
      63daae2a
    • Georges Racinet's avatar
      rhgitaly::mercurial::DirIteratorWithFlatPaths · aba79850
      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)
      aba79850
    • Georges Racinet's avatar
      rhgitaly::mercurial::RecursiveDirIterator · 934afef8
      Georges Racinet authored
      This is the core engine for one of the three modes of
      `CommitService.GetTreeEntries`.
      934afef8
  21. Aug 31, 2023
    • Georges Racinet's avatar
      rhgitaly::mercurial::DirIteratorWithoutFlatPaths · 74c6bbd8
      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.
      74c6bbd8
  22. Aug 30, 2023
    • Georges Racinet's avatar
      rhgitaly::util::common_subpath_split · b4465e96
      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.
      b4465e96
    • Georges Racinet's avatar
      rhgitaly::mercurial: an iterator over a directory of a manifest · 831f85fc
      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.
      831f85fc
    • Georges Racinet's avatar
      rhgitaly::streaming::stream_with_pagination · 13486a81
      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.
      13486a81
Loading