Skip to content
Snippets Groups Projects
  1. Jun 01, 2020
    • Manuel Jacob's avatar
      absorb: make it explicit if empty changeset was created · f55099982bc5
      Manuel Jacob authored
      If the config rewrite.empty-successor=skip is set, a message "became empty and
      was dropped" is shown if the changeset became empty. If the config
      rewrite.empty-successor=keep is set, absorb may create changesets even if they
      became empty. It’s probably a good idea to make that explicit. Therefore the
      message is changed to be a combination of both: "became empty and became ...".
      
      Repeating the word "became" is not very elegant. This results from the fact
      that "became" was and is overloaded to indicate both the change from non-empty
      to empty and the successor relation. In the combinated message, both meanings
      are used in one sentence.
      f55099982bc5
    • Manuel Jacob's avatar
      absorb: consider rewrite.empty-successor configuration · 3ee8e2d5c0d8
      Manuel Jacob authored
      This adds support for the recently added rewrite.empty-successor configuration.
      3ee8e2d5c0d8
    • Manuel Jacob's avatar
      rebase: consider rewrite.empty-successor configuration · 1efbfa9b36a7
      Manuel Jacob authored
      This adds support for the recently added rewrite.empty-successor configuration.
      1efbfa9b36a7
  2. Jul 12, 2020
  3. Jul 11, 2020
    • Manuel Jacob's avatar
      config: add option to control creation of empty successors during rewrite · b6269741ed42
      Manuel Jacob authored
      The default for many history-rewriting commands (e.g. rebase and absorb) is
      that changesets which would become empty are not created in the target branch.
      This makes sense if the source branch consists of small fix-up changes. For
      more advanced workflows that make heavy use of history-editing to create
      curated patch series, dropping empty changesets is not as important or even
      undesirable.
      
      Some users want to keep the meta-history, e.g. to make finding comments in a
      code review tool easier or to avoid that divergent bookmarks are created. For
      that, obsmarkers from the (to-be) empty changeset to the changeset(s) that
      already made the changes should be added. If a to-be empty changeset is pruned
      without a successor, adding the obsmarkers is hard because the changeset has to
      be found within the hidden part of the history.
      
      If rebasing in TortoiseHg, it’s easy to miss the fact that the to-be empty
      changeset was pruned. An empty changeset will function as a reminder that
      obsmarkers should be added.
      
      Martin von Zweigbergk mentioned another advantage. Stripping the successor will
      de-obsolete the predecessor. If no (empty) successor is created, this won’t be
      possible.
      
      In the future, we may want to consider other behaviors, like e.g. creating the
      empty successor, but pruning it right away. Therefore this configuration
      accepts 'skip' and 'keep' instead of being a boolean configuration.
      b6269741ed42
  4. Aug 31, 2019
  5. Jul 06, 2020
  6. Jul 07, 2020
    • Jörg Sonnenberger's avatar
      phases: sparsify phase lists · b1e51ef4e536
      Jörg Sonnenberger authored
      When the internal and archived phase was added, allphase became a large,
      sparsely populated list. This dramatically increased the number of
      lookup operations for public relations in `phasecache.phase`. As a first
      step, define allphases and related lists explicitly to contain only the
      actual phases. Make phasenames a dictionary and create corresponding
      dictionaries for mapping phase names back to numbers. Adjust various
      list to be sparse as well with the exception of phaseroots and phasesets
      members of phasecache. Keep those as a separate step as it involves
      changes to the C module.
      
      Differential Revision: https://phab.mercurial-scm.org/D8697
      b1e51ef4e536
    • Jörg Sonnenberger's avatar
      phases: updatephases should not skip internal phase · 361a7444bc41
      Jörg Sonnenberger authored
      Historically, updatephases used to skip the secret phase, but wasn't
      updated when archived and internal were added.
      
      Differential Revision: https://phab.mercurial-scm.org/D8696
      361a7444bc41
  7. Jun 27, 2020
  8. Jul 07, 2020
  9. Jun 24, 2020
    • Raphaël Gomès's avatar
      hg-core: define a `dirstate_status` `Operation` · 98817e5daca7
      Raphaël Gomès authored
      This is 3/3 in a series of patches to improve dirstate status' code.
      
      Following in the footsteps of a46e36b82461, we move the main status
      functionality to an `Operation`. This will most likely be subject to change in
      the future (what function signature, what parameters, etc., but we will see
      when `rhg` gets `hg status` support.
      
      Differential Revision: https://phab.mercurial-scm.org/D8663
      98817e5daca7
    • Raphaël Gomès's avatar
      rust-status: improve documentation and readability · 470d306e616c
      Raphaël Gomès authored
      This patch is 2/3 in the series to improve the dirstate status code. It adds a
      number of common type aliases to add more obvious semantics to function
      signatures, improves/adds documentation where necessary and improves one or two
      patterns to be more idiomatic.
      
      Differential Revision: https://phab.mercurial-scm.org/D8662
      470d306e616c
    • Raphaël Gomès's avatar
      rust-status: refactor status into a struct · 7528699c6ccb
      Raphaël Gomès authored
      The code for `dirstate/status` has grown too large for comfort, this is the
      first of three patches that try to improve maintainability.
      In this patch, refactoring dirstate's status into a struct allows for slimming
      down function signatures drastically, keeping the mental (and maintenance)
      burden lower, since pretty much all of them shared a few common arguments.
      
      This had the pleasant side-effect of simplifying lifetimes a little. This has
      no observable impact on performance.
      
      The next patch will add/improve documentation and refactor some types. I tried
      to keep new code down to a minimum in this patch because it's already pretty
      big.
      
      Differential Revision: https://phab.mercurial-scm.org/D8661
      7528699c6ccb
  10. Dec 14, 2019
  11. Jun 22, 2020
  12. Apr 14, 2020
  13. Jul 14, 2020
    • Martin von Zweigbergk's avatar
      extensions: make `hg nonexistent` not crash with PyOxidizer · 5d09a120b4be
      Martin von Zweigbergk authored
      When running `hg nonexistent`, we try to look for extensions that
      provide that command. We do that by looking for files in the
      `hgext.__file__` directory. However, PyOxidizer doesn't provide a
      `__file__`, so we crash when running with PyOxidizer.
      
      We should be able to look for the command in built-in extensions, but
      we seem to already have code for skipping the scan when running in a
      frozen binary, so I just modified that code instead.
      
      By the way, it also seems like we should be able to search for
      extensions in the `hgext3rd` module, but we don't do that yet either
      (before or after this patch).
      
      Differential Revision: https://phab.mercurial-scm.org/D8750
      5d09a120b4be
  14. Jul 09, 2020
  15. Jul 15, 2020
  16. Jul 13, 2020
  17. Jul 09, 2020
  18. Jul 15, 2020
  19. Jul 06, 2020
  20. Jul 09, 2020
    • Manuel Jacob's avatar
      tests: check that procutil.std{out,err}.write() returns correct result · dff208398ede
      Manuel Jacob authored
      On Windows, we currently don’t fully test the case when the stream is connected
      to a TTY, but we test the child process side by connecting them to NUL, which
      is recognized as a TTY by Python. To make the large write test a bit more
      useful besides checking that it doesn’t crash, we can check that the write()
      method returns the correct result.
      dff208398ede
    • Manuel Jacob's avatar
      tests: add tests for when stdout or stderr is connected to `os.devnull` · e9e452eafbfb
      Manuel Jacob authored
      The original motivation was that creating PTYs on Windows is not possible, but
      `NUL` is recognized as a TTY, so we can have at least some test coverage for
      the TTY case. I think it doesn’t hurt to run the test cases on all systems.
      e9e452eafbfb
  21. Jul 10, 2020
    • Manuel Jacob's avatar
      procutil: ensure that procutil.std{out,err}.write() writes all bytes · 8e04607023e5
      Manuel Jacob authored
      Python 3 offers different kind of streams and it’s not guaranteed for all of
      them that calling write() writes all bytes.
      
      When Python is started in unbuffered mode, sys.std{out,err}.buffer are
      instances of io.FileIO, whose write() can write less bytes for
      platform-specific reasons (e.g. Linux has a 0x7ffff000 bytes maximum and could
      write less if interrupted by a signal; when writing to Windows consoles, it’s
      limited to 32767 bytes to avoid the "not enough space" error). This can lead to
      silent loss of data, both when using sys.std{out,err}.buffer (which may in fact
      not be a buffered stream) and when using the text streams sys.std{out,err}
      (I’ve created a CPython bug report for that:
      https://bugs.python.org/issue41221).
      
      Python may fix the problem at some point. For now, we implement our own wrapper
      for procutil.std{out,err} that calls the raw stream’s write() method until all
      bytes have been written. We don’t use sys.std{out,err} for larger writes, so I
      think it’s not worth the effort to patch them.
      8e04607023e5
  22. Jul 11, 2020
    • Manuel Jacob's avatar
      procutil: move assignments · b4c35e439ea5
      Manuel Jacob authored
      This should probably be part of the previous patch, but folding it results in a
      less useful word diff, so I decided to keep it separate for review.
      b4c35e439ea5
  23. Jul 10, 2020
    • Manuel Jacob's avatar
      procutil: distribute code for stdout · 63196198dbf0
      Manuel Jacob authored
      It makes sense to have the distinction between Python 2 and 3 at the top level,
      as we have to fight a different kind of battle on each: On Python 3, we get
      consistent behavior on all platforms, but need to create correctly-behaving
      binary streams. On Python 2, we have to account for platform differences.
      63196198dbf0
  24. Jul 14, 2020
  25. Jul 11, 2020
  26. Jul 10, 2020
  27. Jul 09, 2020
Loading