Skip to content
Snippets Groups Projects
  1. Mar 04, 2014
    • Siddharth Agarwal's avatar
      import_tags: don't import tags that don't have an hg commit equivalent · 6dc550f2
      Siddharth Agarwal authored
      The theme of this and upcoming patches is that relying on self.git.object_store
      to figure out which commits/tags/bookmarks to import is not great. This breaks
      if the git repo is manually put in place (as might be done in a server-based
      replication scenario), or if a partial fetch pulled too many commits in for
      whatever reason. Indeed we were just about always pulling an entire pack in,
      because listkeys for bookmarks currently calls fetch_pack without any
      filtering. (This is probably a bug and should be fixed, but this series doesn't
      do that.)
      
      Instead, rely on whether we actually imported the commit into Mercurial to
      determine whether to import the tag. This is clean, straightforward, and
      clearly correct.
      
      There is a whole series of bugs in this code that any test case for this would
      hit -- an upcoming patch will include a test for all these bugs at once.
      6dc550f2
    • Siddharth Agarwal's avatar
      determine_wants: factor ref filtering code out into a separate function · a58ae693
      Siddharth Agarwal authored
      This will be used in another context in an upcoming patch.
      a58ae693
    • Siddharth Agarwal's avatar
      git_handler: don't write out objects if already in object store · a7383625
      Siddharth Agarwal authored
      object_store.add_object doesn't check to see if the object is already in a
      pack, so it is still written out in that case. Do the check ourselves before
      calling add_object.
      a7383625
  2. Feb 28, 2014
  3. Mar 01, 2014
  4. Feb 26, 2014
    • Siddharth Agarwal's avatar
      verify: add new command to verify the contents of a Mercurial rev · 9b194d7c
      Siddharth Agarwal authored
      Since the Git to Mercurial conversion process is incremental, it's at risk of
      missing files, or recording files the wrong way, or recording the wrong commit
      metadata. Add a command called 'gverify' that can verify the contents of a
      particular Mercurial rev against the corresponding Git commit.
      
      Currently, this is limited to checking file names, flags and contents, but this
      can be made as robust as desired. Further additions will probably require
      refactoring git_handler.py a bit though.
      
      This function is pretty fast: on a Linux machine with a warm cache, verifying a
      repository with around 50,000 files takes just 20 seconds. There is scope for
      further improvement through parallelization, but conducting tree walks in
      parallel is non-trivial with the current worker infrastructure in Mercurial.
      9b194d7c
    • Siddharth Agarwal's avatar
      git_handler: remove init_if_missing · cf3bb80a
      Siddharth Agarwal authored
      This function is a no-op and can be removed.
      cf3bb80a
    • Siddharth Agarwal's avatar
      git_handler: make self.git a lazily evaluated property · 6ab17ae0
      Siddharth Agarwal authored
      This allows other functions to be able to use the `git` property without
      needing to care about initializing it.
      
      An upcoming patch will remove the `init_if_missing` function.
      6ab17ae0
  5. Feb 25, 2014
    • Siddharth Agarwal's avatar
      overlayrevlog: handle root commits correctly · c99941ff
      Siddharth Agarwal authored
      Previously, we'd try to access commit.parents[0] and fail. Now, check for
      commit.parents being empty and return what Mercurial thinks is a repository
      root in that case.
      c99941ff
    • Siddharth Agarwal's avatar
      overlayrevlog: handle rev = 0 correctly · aa8519da
      Siddharth Agarwal authored
      Previously we'd just test if gitrev was falsy, which it is if the rev returned
      is 0, even though it shouldn't be. With this patch, test against None
      explicitly.
      
      This unmasks another bug: see next patch for a fix and a test.
      aa8519da
  6. Feb 24, 2014
    • Siddharth Agarwal's avatar
      git_handler: fix call to self.ui.progress in flush · 1323058c
      Siddharth Agarwal authored
      Since we now directly use progress on self.ui, we shouldn't pass in self.ui as
      the first argument. Oops.
      1323058c
    • Siddharth Agarwal's avatar
      git_handler: don't compute tags for each tag imported · 7ca655e4
      Siddharth Agarwal authored
      Previously we'd recompute the repo tags each time we'd consider importing a Git
      tag. This is O(n^2) in the number of tags and produced noticeable slowdowns in
      repos with large numbers of tags.
      
      To fix this, compute the tags just once. This is correct because the only case
      where we'd have issues is if multiple new Git tags with the same name were
      introduced, which can't happen because Git tags cannot share names.
      
      For a repository with over 200 tags, this causes a no-op hg pull to be sped up
      by around 0.5 seconds.
      7ca655e4
  7. Feb 20, 2014
  8. Feb 19, 2014
  9. Feb 20, 2014
    • Siddharth Agarwal's avatar
      tests: upgrade run-tests.py · 0b33ab75
      Siddharth Agarwal authored
      This is the version in Mercurial rev 87e52e642562, plus a patch to make
      --with-hg work for system hg (sent upstream). Importantly, this gets us the
      hash seed randomization we need for bugs like the one fixed by the parent
      commit to be detected.
      0b33ab75
    • Siddharth Agarwal's avatar
      hg2git: fix subrepo handling to be deterministic · fbfa6353
      Siddharth Agarwal authored
      Previously, the correctness of _handle_subrepos was based on the order the
      files were processed in. For example, consider the case where a subrepo at
      location 'loc' is replaced with a file at 'loc', while another subrepo exists.
      This would cause .hgsubstate and .hgsub to be modified and the file added.
      
      If .hgsubstate was seen _before_ 'loc' in the modified/added loop, then
      _handle_subrepos would run and remove 'loc' correctly, before 'loc' was added
      back later. If, however, .hgsubstate was seen _after_ 'loc', then
      _handle_subrepos would run after 'loc' was added and would remove 'loc'.
      
      With this patch, _handle_subrepos merely computes the changes that need to be
      applied. The changes are then applied, making sure removed files and subrepos
      are processed before added ones.
      
      This was detected by setting a random PYTHONHASHSEED (in this case, 3910358828)
      and running the test suite against it. An upcoming patch will randomize the
      PYTHONHASHSEED in run-tests.py, just like is done in Mercurial.
      fbfa6353
    • Siddharth Agarwal's avatar
      hg2git: move parse_subrepos to top level · 71fb5dd6
      Siddharth Agarwal authored
      durin42 expressed a desire for this function to be at the top level.
      71fb5dd6
  10. Feb 19, 2014
Loading