353 if _hgversion is None: |
353 if _hgversion is None: |
354 _hgversion = _gethgversion() |
354 _hgversion = _gethgversion() |
355 return _hgversion |
355 return _hgversion |
356 |
356 |
357 |
357 |
358 @checkvers("hg", "Mercurial >= %s", [(1.0 * x) / 10 for x in range(9, 99)]) |
358 @checkvers( |
|
359 "hg", "Mercurial >= %s", ['%d.%d' % divmod(x, 10) for x in range(9, 99)] |
|
360 ) |
359 def has_hg_range(v): |
361 def has_hg_range(v): |
360 major, minor = v.split('.')[0:2] |
362 major, minor = v.split('.')[0:2] |
361 return gethgversion() >= (int(major), int(minor)) |
363 return gethgversion() >= (int(major), int(minor)) |
362 |
364 |
363 |
365 |
431 os.access(os.path.join(path, exe), os.X_OK) |
433 os.access(os.path.join(path, exe), os.X_OK) |
432 for path in os.environ["PATH"].split(os.pathsep) |
434 for path in os.environ["PATH"].split(os.pathsep) |
433 ) |
435 ) |
434 |
436 |
435 |
437 |
436 @checkvers("git", "git client (with ext::sh support) version >= %s", (1.9,)) |
438 @checkvers("git", "git client (with ext::sh support) version >= %s", ('1.9',)) |
437 def has_git_range(v): |
439 def has_git_range(v): |
438 major, minor = v.split('.')[0:2] |
440 major, minor = v.split('.')[0:2] |
439 return getgitversion() >= (int(major), int(minor)) |
441 return getgitversion() >= (int(major), int(minor)) |
440 |
442 |
441 |
443 |
455 if not m: |
457 if not m: |
456 return (0, 0) |
458 return (0, 0) |
457 return (int(m.group(1)), int(m.group(2))) |
459 return (int(m.group(1)), int(m.group(2))) |
458 |
460 |
459 |
461 |
460 @checkvers("svn", "subversion client and admin tools >= %s", (1.3, 1.5)) |
462 @checkvers("svn", "subversion client and admin tools >= %s", ('1.3', '1.5')) |
461 def has_svn_range(v): |
463 def has_svn_range(v): |
462 major, minor = v.split('.')[0:2] |
464 major, minor = v.split('.')[0:2] |
463 return getsvnversion() >= (int(major), int(minor)) |
465 return getsvnversion() >= (int(major), int(minor)) |
464 |
466 |
465 |
467 |
658 return (int(parts[0]), int(parts[1])) |
660 return (int(parts[0]), int(parts[1])) |
659 except ImportError: |
661 except ImportError: |
660 return (0, 0) |
662 return (0, 0) |
661 |
663 |
662 |
664 |
663 @checkvers("pygments", "Pygments version >= %s", (2.5, 2.11, 2.14)) |
665 @checkvers("pygments", "Pygments version >= %s", ('2.5', '2.11', '2.14')) |
664 def has_pygments_range(v): |
666 def has_pygments_range(v): |
665 major, minor = v.split('.')[0:2] |
667 major, minor = v.split('.')[0:2] |
666 return getpygmentsversion() >= (int(major), int(minor)) |
668 return getpygmentsversion() >= (int(major), int(minor)) |
667 |
669 |
668 |
670 |
864 return (not has_chg()) and os.environ.get('HGDEMANDIMPORT') != 'disable' |
866 return (not has_chg()) and os.environ.get('HGDEMANDIMPORT') != 'disable' |
865 |
867 |
866 |
868 |
867 # Add "py36", "py37", ... as possible feature checks. Note that there's no |
869 # Add "py36", "py37", ... as possible feature checks. Note that there's no |
868 # punctuation here. |
870 # punctuation here. |
869 @checkvers("py", "Python >= %s", (3.6, 3.7, 3.8, 3.9, 3.10, 3.11)) |
871 @checkvers("py", "Python >= %s", ('3.6', '3.7', '3.8', '3.9', '3.10', '3.11')) |
870 def has_python_range(v): |
872 def has_python_range(v): |
871 major, minor = v.split('.')[0:2] |
873 major, minor = v.split('.')[0:2] |
872 py_major, py_minor = sys.version_info.major, sys.version_info.minor |
874 py_major, py_minor = sys.version_info.major, sys.version_info.minor |
873 |
875 |
874 return (py_major, py_minor) >= (int(major), int(minor)) |
876 return (py_major, py_minor) >= (int(major), int(minor)) |