Skip to content
Snippets Groups Projects
  1. Feb 18, 2014
    • Lucas Moscovicz's avatar
      revset: changed minrev and maxrev implementations to use ordered sets · f15ff553
      Lucas Moscovicz authored
      Performance Benchmarking:
      
      0) max(tip:0)
      1) min(0:tip)
      2) min(0::)
      
      b96cb15ec9e0 (2.9.1 release)
      
          0) ! wall 0.005699 comb 0.000000 user 0.000000 sys 0.000000 (best of 450)
          1) ! wall 0.005414 comb 0.010000 user 0.010000 sys 0.000000 (best of 493)
          2) ! wall 0.025951 comb 0.030000 user 0.030000 sys 0.000000 (best of 107)
      
      05267e6e94dd (public tip at submission time)
      
          0) ! wall 0.015177 comb 0.020000 user 0.020000 sys 0.000000 (best of 175)
          1) ! wall 0.014779 comb 0.010000 user 0.010000 sys 0.000000 (best of 189)
          2) ! wall 12.345179 comb 12.350000 user 12.350000 sys 0.000000 (best of 3)
      
      Current patches:
      
          0) ! wall 0.001911 comb 0.000000 user 0.000000 sys 0.000000 (best of 1357)
          1) ! wall 0.001943 comb 0.010000 user 0.010000 sys 0.000000 (best of 1406)
          2) ! wall 0.000405 comb 0.000000 user 0.000000 sys 0.000000 (best of 6761)
      f15ff553
  2. Mar 14, 2014
  3. Mar 13, 2014
  4. Mar 12, 2014
  5. Feb 19, 2014
    • Lucas Moscovicz's avatar
      revset: added min and max methods to baseset and lazyset · 6b731b29
      Lucas Moscovicz authored
      This classes have no particular order so they rely on python min() and max()
      implementation. This methods will be implemented in every smartset class in
      future patches. For other classes there are lazy implementations that can be
      made for this methods.
      6b731b29
  6. Mar 14, 2014
  7. Feb 17, 2014
  8. Dec 05, 2013
    • Chris Jerdonek's avatar
      parsers: fail fast if Python has wrong minor version (issue4110) · 3681de20
      Chris Jerdonek authored
      This change causes an informative ImportError to be raised when importing
      the parsers extension module if the minor version of the currently-running
      Python interpreter doesn't match that of the Python used when compiling
      the extension module.
      
      This change also exposes a parsers.versionerrortext constant in the
      C implementation of the module.  Its presence can be used to determine
      whether this behavior is present in a version of the module.  The value
      of the constant is the leading text of the ImportError raised and is set
      to "Python minor version mismatch".
      
      Here is an example of what the new error looks like:
      
        Traceback (most recent call last):
          File "test.py", line 1, in <module>
            import mercurial.parsers
        ImportError: Python minor version mismatch: The Mercurial extension
        modules were compiled with Python 2.7.6, but Mercurial is currently using
        Python with sys.hexversion=33883888: Python 2.5.6
        (r256:88840, Nov 18 2012, 05:37:10)
        [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))]
         at: /opt/local/Library/Frameworks/Python.framework/Versions/2.5/Resources/
          Python.app/Contents/MacOS/Python
      
      The reason for raising an error in this scenario is that Python's C API
      is known not to be compatible from minor version to minor version, even
      if sys.api_version is the same.  See for example this Python bug report
      about incompatibilities between 2.5 and 2.6+:
      
        http://bugs.python.org/issue8118
      
      These incompatibilities can cause Mercurial to break in mysterious,
      unforeseen ways.  For example, when Mercurial compiled with Python 2.7 was
      run with 2.5, the following crash occurred when running "hg status":
      
        http://bz.selenic.com/show_bug.cgi?id=4110
      
      After this crash was fixed, running with Python 2.5 no longer crashes, but
      the following puzzling behavior still occurs:
      
          $ hg status
            ...
            File ".../mercurial/changelog.py", line 123, in __init__
              revlog.revlog.__init__(self, opener, "00changelog.i")
            File ".../mercurial/revlog.py", line 251, in __init__
              d = self._io.parseindex(i, self._inline)
            File ".../mercurial/revlog.py", line 158, in parseindex
              index, cache = parsers.parse_index2(data, inline)
          TypeError: data is not a string
      
      which can be reproduced more simply with:
      
          import mercurial.parsers as parsers
          parsers.parse_index2("", True)
      
      Both the crash and the TypeError occurred because the Python C API's
      PyString_Check() returns the wrong value when the C header files from
      Python 2.7 are run with Python 2.5.  This is an example of an
      incompatibility of the sort mentioned in the Python bug report above.
      
      Failing fast with an informative error message results in a better user
      experience in cases like the above.  The information in the ImportError
      also simplifies troubleshooting for those on Mercurial mailing lists, the
      bug tracker, etc.
      
      This patch only adds the version check to parsers.c, which is sufficient
      to affect command-line commands like "hg status" and "hg summary".
      An idea for a future improvement is to move the version-checking C code
      to a more central location, and have it run when importing all
      Mercurial extension modules and not just parsers.c.
      3681de20
  9. Mar 14, 2014
  10. Dec 31, 2013
    • Chris Jerdonek's avatar
      debuginstall: add Python information to debuginstall output (issue4128) · 535283a7
      Chris Jerdonek authored
      This change adds to the output of "hg debuginstall" information about the
      Python being used by Mercurial.  It adds both the path to the Python
      executable (i.e. the value of sys.executable) and the version of Python
      (specifically the major, minor, and micro versions).
      
      Below is an example of what the output looks like after this change.
      The marked lines are the new output lines:
      
          $ hg debuginstall
          checking encoding (UTF-8)...
       -->showing Python executable (/Users/chris/.virtualenvs/default/bin/python)
       -->showing Python version (2.7.6)
          checking Python lib (/Users/chris/.virtualenvs/default/lib/python2.7)...
          checking installed modules (/Users/chris/mercurial)...
          checking templates (/Users/chris/mercurial/templates)...
          checking commit editor...
          checking username...
          no problems detected
      
      Note that we use the word "showing" without an ellipsis for the new lines
      because, unlike the other lines (except for "Python lib" which will be
      adjusted in a subsequent commit), no check follows the display of this
      information.
      535283a7
  11. Mar 14, 2014
  12. Mar 12, 2014
  13. Mar 14, 2014
  14. Mar 12, 2014
  15. Mar 14, 2014
  16. Mar 12, 2014
    • Lucas Moscovicz's avatar
      revset: added isascending and isdescending methods to smartset classes · cf628b50
      Lucas Moscovicz authored
      This methods state if the class is sorted in an ascending or descending order
      
      We need this to implement methods based on order on smartset classes in order
      to be able to create new objects with a given order.
      
      We cannot just rely on a simple boolean since unordered set are neither
      ascending nor descending.
      cf628b50
    • Lucas Moscovicz's avatar
      revset: added sort method in addset · e9a64b3f
      Lucas Moscovicz authored
      We need this method to duck-type generatorset since this class is not going to
      be used outside revset.py and we don't need to duck-type baseset.
      
      This sort method will only do something when the addset is not already sorted
      or is not sorted in the way we want it to be.
      e9a64b3f
  17. Mar 14, 2014
  18. Mar 13, 2014
  19. Mar 11, 2014
  20. Mar 14, 2014
  21. Jun 25, 2011
Loading