def _get_deprecated_tense(self, deprecated_version, future_tense='Will be', past_tense='Was'): """Provides the grammatical tense for a given deprecated version vs the current version.""" return future_tense if (Revision.semver(deprecated_version) >= Revision.semver(VERSION)) else past_tense
def _validate_supports_more_than_one_source(self): # Support for doing the right thing with multiple files landed in # https://issues.apache.org/jira/browse/THRIFT-3776; first available in 0.10.0 if self.get_options().multiple_files_per_target_override: return required_version = '0.10.0' if Revision.semver(self._thrift_version) < Revision.semver(required_version): raise TaskError('A single .thrift source file is supported per go_thrift_library with thrift ' 'version `{}`: upgrade to at least `{}` to support multiple files.'.format( self._thrift_version, required_version))
def _validate_supports_more_than_one_source(self): # Support for doing the right thing with multiple files landed in # https://issues.apache.org/jira/browse/THRIFT-3776; first available in 0.10.0 if self.get_options().multiple_files_per_target_override: return required_version = '0.10.0' if Revision.semver(self._thrift_version) < Revision.semver(required_version): raise TaskError('A single .thrift source file is supported per go_thrift_library with thrift ' 'version `{}`: upgrade to at least `{}` to support multiple files.'.format( self._thrift_version, required_version))
def test_pre_release(self): self.assertEqual(Revision.semver("1.2.3-pre1.release.1"), Revision.semver("1.2.3-pre1.release.1")) self.assertComponents(Revision.semver("1.2.3-pre1.release.1"), 1, 2, 3, "pre1", "release", 1, None) self.assertTrue(Revision.semver("1.2.3-pre1.release.1") < Revision.semver("1.2.3-pre2.release.1")) self.assertTrue(Revision.semver("1.2.3-pre1.release.2") < Revision.semver("1.2.3-pre1.release.10")) self.assertTrue(Revision.semver("1.2.3") < Revision.semver("1.2.3-pre2.release.1"))
def test_pre_release(self): self.assertEqual(Revision.semver('1.2.3-pre1.release.1'), Revision.semver('1.2.3-pre1.release.1')) self.assertComponents(Revision.semver('1.2.3-pre1.release.1'), 1, 2, 3, 'pre1', 'release', 1, None) self.assertTrue( Revision.semver('1.2.3-pre1.release.1') < Revision.semver('1.2.3-pre2.release.1')) self.assertTrue( Revision.semver('1.2.3-pre1.release.2') < Revision.semver('1.2.3-pre1.release.10')) self.assertTrue(Revision.semver('1.2.3') < Revision.semver('1.2.3-pre2.release.1'))
def test_pre_release(self): self.assertEqual(Revision.semver('1.2.3-pre1.release.1'), Revision.semver('1.2.3-pre1.release.1')) self.assertComponents(Revision.semver('1.2.3-pre1.release.1'), 1, 2, 3, 'pre1', 'release', 1, None) self.assertTrue( Revision.semver('1.2.3-pre1.release.1') < Revision.semver('1.2.3-pre2.release.1')) self.assertTrue( Revision.semver('1.2.3-pre1.release.2') < Revision.semver('1.2.3-pre1.release.10')) self.assertTrue(Revision.semver('1.2.3') < Revision.semver('1.2.3-pre2.release.1'))
def _parse_java_version(version): # Java version strings have been well defined since release 1.3.1 as defined here: # http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html # These version strings comply with semver except that the traditional pre-release semver # slot (the 4th) can be delimited by an _ in the case of update releases of the jdk. # We accomodate that difference here. return Revision.semver(version.replace('_', '-'))
def console_output(self, targets): self._force_option_parsing() for scope, options in sorted( self.context.options.tracker.option_history_by_scope.items()): if not self._scope_filter(scope): continue for option, history in sorted(options.items()): if not self._option_filter(option): continue if not self._rank_filter(history.latest.rank): continue if self.get_options( ).only_overridden and not history.was_overridden: continue # Skip the option if it has already passed the deprecation period. if history.latest.deprecation_version and PANTS_SEMVER >= Revision.semver( history.latest.deprecation_version): continue if self.get_options().skip_inherited: parent_scope, parent_value = self._get_parent_scope_option( scope, option) if parent_scope is not None and parent_value == history.latest.value: continue yield '{} = {}'.format(self._format_scope(scope, option), self._format_record(history.latest)) if self.get_options().show_history: for line in self._show_history(history): yield line
def console_output(self, targets): self._force_option_parsing() for scope, options in sorted(self.context.options.tracker.option_history_by_scope.items()): if not self._scope_filter(scope): continue for option, history in sorted(options.items()): if not self._option_filter(option): continue if not self._rank_filter(history.latest.rank): continue if self.get_options().only_overridden and not history.was_overridden: continue # Skip the option if it has already passed the deprecation period. if history.latest.deprecation_version and PANTS_SEMVER >= Revision.semver( history.latest.deprecation_version): continue if self.get_options().skip_inherited: parent_scope, parent_value = self._get_parent_scope_option(scope, option) if parent_scope is not None and parent_value == history.latest.value: continue yield '{} = {}'.format(self._format_scope(scope, option), self._format_record(history.latest)) if self.get_options().show_history: for line in self._show_history(history): yield line
def test_validate_version(self): with pytest.raises(Distribution.Error): with self.distribution(executables=self.exe('java', '1.7.0_25')) as jdk: Distribution(bin_path=jdk, minimum_version='1.7.0_45').validate() with self.distribution(executables=self.exe('java', '1.7.0_25')) as jdk: Distribution(bin_path=jdk, minimum_version='1.7.0_25').validate() Distribution(bin_path=jdk, minimum_version=Revision.semver('1.6.0')).validate()
def _check_deprecated(self, dest, kwargs): """Checks option for deprecation and issues a warning/error if necessary.""" deprecated_ver = kwargs.get('deprecated_version', None) if deprecated_ver is not None: msg = ( "Option '{dest}' in {scope} is deprecated and removed in version {removal_version}. {hint}" ).format(dest=dest, scope=self._scope_str(), removal_version=deprecated_ver, hint=kwargs.get('deprecated_hint', '')) if Revision.semver(VERSION) >= Revision.semver(deprecated_ver): # Once we've hit the deprecated_version, raise an error instead of warning. This allows for # more actionable options hinting to continue beyond the deprecation period until removal. raise DeprecatedOptionError(msg) else: # Out of range stacklevel to suppress printing src line. warnings.warn('*** {}'.format(msg), DeprecationWarning, stacklevel=9999)
def test_pre_release(self): self.assertEqual( Revision.semver("1.2.3-pre1.release.1"), Revision.semver("1.2.3-pre1.release.1") ) self.assertComponents( Revision.semver("1.2.3-pre1.release.1"), 1, 2, 3, "pre1", "release", 1, None ) self.assertTrue( Revision.semver("1.2.3-pre1.release.1") < Revision.semver("1.2.3-pre2.release.1") ) self.assertTrue( Revision.semver("1.2.3-pre1.release.2") < Revision.semver("1.2.3-pre1.release.10") ) self.assertTrue(Revision.semver("1.2.3") < Revision.semver("1.2.3-pre2.release.1"))
def _parse_java_version(name, version): # Java version strings have been well defined since release 1.3.1 as defined here: # http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html # These version strings comply with semver except that the traditional pre-release semver # slot (the 4th) can be delimited by an _ in the case of update releases of the jdk. # We accomodate that difference here. if isinstance(version, Compatibility.string): version = Revision.semver(version.replace('_', '-')) if version and not isinstance(version, Revision): raise ValueError('%s must be a string or a Revision object, given: %s' % (name, version)) return version
def _parse_java_version(name, version): # Java version strings have been well defined since release 1.3.1 as defined here: # http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html # These version strings comply with semver except that the traditional pre-release semver # slot (the 4th) can be delimited by an _ in the case of update releases of the jdk. # We accommodate that difference here. if isinstance(version, string_types): version = Revision.semver(version.replace('_', '-')) if version and not isinstance(version, Revision): raise ValueError('%s must be a string or a Revision object, given: %s' % (name, version)) return version
def _check_deprecated(self, dest, kwargs): """Checks option for deprecation and issues a warning/error if necessary.""" deprecated_ver = kwargs.get('deprecated_version', None) if deprecated_ver is not None: msg = ( "Option '{dest}' in {scope} is deprecated and removed in version {removal_version}. {hint}" ).format(dest=dest, scope=self._scope_str(), removal_version=deprecated_ver, hint=kwargs.get('deprecated_hint', '')) if Revision.semver(VERSION) >= Revision.semver(deprecated_ver): # Once we've hit the deprecated_version, raise an error instead of warning. This allows for # more actionable options hinting to continue beyond the deprecation period until removal. raise DeprecatedOptionError(msg) else: # Out of range stacklevel to suppress printing src line. warnings.warn('*** {}'.format(msg), DeprecationWarning, stacklevel=9999)
def test_validate_version(self): with pytest.raises(Distribution.Error): with self.distribution(executables=self.exe("java", "1.7.0_25")) as jdk: Distribution(bin_path=jdk, minimum_version="1.7.0_45").validate() with pytest.raises(Distribution.Error): with self.distribution(executables=self.exe("java", "1.8.0_1")) as jdk: Distribution(bin_path=jdk, maximum_version="1.7.9999").validate() with self.distribution(executables=self.exe("java", "1.7.0_25")) as jdk: Distribution(bin_path=jdk, minimum_version="1.7.0_25").validate() Distribution(bin_path=jdk, minimum_version=Revision.semver("1.6.0")).validate() Distribution(bin_path=jdk, minimum_version="1.7.0_25", maximum_version="1.7.999").validate()
def test_pre_release(self): assert Revision.semver("1.2.3-pre1.release.1") == Revision.semver("1.2.3-pre1.release.1") assert Revision.semver("1.2.3-pre1.release.1").components == [ 1, 2, 3, "pre1", "release", 1, None, ] assert Revision.semver("1.2.3-pre1.release.1") < Revision.semver("1.2.3-pre2.release.1") assert Revision.semver("1.2.3-pre1.release.2") < Revision.semver("1.2.3-pre1.release.10") assert Revision.semver("1.2.3") < Revision.semver("1.2.3-pre2.release.1")
def validate_removal_semver(removal_version): """Validates that removal_version is a valid semver. If so, returns that semver. Raises an error otherwise. :param str removal_version: The pantsbuild.pants version which will remove the deprecated entity. :rtype: `pants.base.Revision` :raises DeprecationApplicationError: if the removal_version parameter is invalid. """ if removal_version is None: raise MissingRemovalVersionError('The removal version must be provided.') if not isinstance(removal_version, six.string_types): raise BadRemovalVersionError('The removal_version must be a semver version string.') try: return Revision.semver(removal_version) except Revision.BadRevision as e: raise BadRemovalVersionError('The given removal version {} is not a valid semver: ' '{}'.format(removal_version, e))
def validate_removal_semver(removal_version): """Validates that removal_version is a valid semver. If so, returns that semver. Raises an error otherwise. :param str removal_version: The pantsbuild.pants version which will remove the deprecated entity. :rtype: `pants.base.Revision` :raises DeprecationApplicationError: if the removal_version parameter is invalid. """ if removal_version is None: raise MissingRemovalVersionError('The removal version must be provided.') if not isinstance(removal_version, six.string_types): raise BadRemovalVersionError('The removal_version must be a semver version string.') try: return Revision.semver(removal_version) except Revision.BadRevision as e: raise BadRemovalVersionError('The given removal version {} is not a valid semver: ' '{}'.format(removal_version, e))
def check_deprecated_semver(removal_version): """Check to see if the removal version is < the current Pants version. :param str removal_version: The pantsbuild.pants version which will remove the deprecated function. :raises DeprecationApplicationError if the removal_version parameter is invalid or the version is not an earlier version than the current release version. """ if not isinstance(removal_version, six.string_types): raise BadRemovalVersionError('The removal_version must be a semver version string.') try: removal_semver = Revision.semver(removal_version) except Revision.BadRevision as e: raise BadRemovalVersionError('The given removal version {} is not a valid semver: ' '{}'.format(removal_version, e)) if removal_semver <= _PANTS_SEMVER: raise PastRemovalVersionError('The removal version must be greater than the current pants ' 'version of {} - given {}'.format(VERSION, removal_version))
def check_deprecated_semver(removal_version, check_expired=True): """Check to see if the removal version is < the current Pants version. :param str removal_version: The pantsbuild.pants version which will remove the deprecated function. :raises DeprecationApplicationError if the removal_version parameter is invalid or the version is not an earlier version than the current release version. """ if not isinstance(removal_version, six.string_types): raise BadRemovalVersionError('The removal_version must be a semver version string.') try: removal_semver = Revision.semver(removal_version) except Revision.BadRevision as e: raise BadRemovalVersionError('The given removal version {} is not a valid semver: ' '{}'.format(removal_version, e)) if check_expired and removal_semver <= _PANTS_SEMVER: raise PastRemovalVersionError('The removal version must be greater than the current pants ' 'version of {} - given {}'.format(VERSION, removal_version))
def test_validate_version(self): with pytest.raises(Distribution.Error): with self.distribution( executables=self.exe('java', '1.7.0_25')) as jdk: Distribution(bin_path=jdk, minimum_version='1.7.0_45').validate() with pytest.raises(Distribution.Error): with self.distribution( executables=self.exe('java', '1.8.0_1')) as jdk: Distribution(bin_path=jdk, maximum_version='1.7.9999').validate() with self.distribution( executables=self.exe('java', '1.7.0_25')) as jdk: Distribution(bin_path=jdk, minimum_version='1.7.0_25').validate() Distribution(bin_path=jdk, minimum_version=Revision.semver('1.6.0')).validate() Distribution(bin_path=jdk, minimum_version='1.7.0_25', maximum_version='1.7.999').validate()
def console_output(self, targets): self._force_option_parsing() if self.is_json(): output_map = {} for scope, options in sorted(self.context.options.tracker.option_history_by_scope.items()): if not self._scope_filter(scope): continue for option, history in sorted(options.items()): if not self._option_filter(option): continue if not self._rank_filter(history.latest.rank): continue if self.get_options().only_overridden and not history.was_overridden: continue # Skip the option if it has already passed the deprecation period. if history.latest.deprecation_version and PANTS_SEMVER >= Revision.semver( history.latest.deprecation_version): continue if self.get_options().skip_inherited: parent_scope, parent_value = self._get_parent_scope_option(scope, option) if parent_scope is not None and parent_value == history.latest.value: continue if self.is_json(): opt_vals = self._format_record(history.latest) scope_key = self._format_scope(scope, option, True) inner_map = dict(value=opt_vals[0], source=opt_vals[1]) output_map[scope_key] = inner_map elif self.is_text(): yield '{} = {}'.format(self._format_scope(scope, option), self._format_record(history.latest)) if self.get_options().show_history: history_list = [] for line in self._show_history(history): if self.is_text(): yield line elif self.is_json(): history_list.append(line.strip()) if self.is_json(): inner_map["history"] = history_list if self.is_json(): yield json.dumps(output_map, indent=2, sort_keys=True)
def test_bad(self): for bad_rev in ('a.b.c', '1.b.c', '1.2.c', '1.2.3;4', '1.2.3;4+5'): with pytest.raises(Revision.BadRevision): Revision.semver(bad_rev)
def test_pre_release_build(self): self.assertEqual(Revision.semver('1.2.3-pre1.release.1+1'), Revision.semver('1.2.3-pre1.release.1+1')) self.assertComponents(Revision.semver('1.2.3-pre1.release.1+1'), 1, 2, 3, 'pre1', 'release', 1, 1) self.assertTrue( Revision.semver('1.2.3-pre1.release.1') < Revision.semver('1.2.3-pre2.release.1+1')) self.assertTrue( Revision.semver('1.2.3-pre1.release.2') > Revision.semver('1.2.3-pre1.release.1+1')) self.assertTrue(Revision.semver('1.2.3') < Revision.semver('1.2.3-pre2.release.2+1.foo')) self.assertTrue( Revision.semver('1.2.3-pre1.release.2+1') < Revision.semver('1.2.3-pre1.release.2+1.foo')) self.assertTrue( Revision.semver('1.2.3-pre1.release.2+1') < Revision.semver('1.2.3-pre1.release.2+2'))
def test_pre_release_build(self): self.assertEqual(Revision.semver("1.2.3-pre1.release.1+1"), Revision.semver("1.2.3-pre1.release.1+1")) self.assertComponents(Revision.semver("1.2.3-pre1.release.1+1"), 1, 2, 3, "pre1", "release", 1, 1) self.assertTrue(Revision.semver("1.2.3-pre1.release.1") < Revision.semver("1.2.3-pre2.release.1+1")) self.assertTrue(Revision.semver("1.2.3-pre1.release.2") > Revision.semver("1.2.3-pre1.release.1+1")) self.assertTrue(Revision.semver("1.2.3") < Revision.semver("1.2.3-pre2.release.2+1.foo")) self.assertTrue(Revision.semver("1.2.3-pre1.release.2+1") < Revision.semver("1.2.3-pre1.release.2+1.foo")) self.assertTrue(Revision.semver("1.2.3-pre1.release.2+1") < Revision.semver("1.2.3-pre1.release.2+2"))
def test_pre_release_build(self): self.assertEqual( Revision.semver("1.2.3-pre1.release.1+1"), Revision.semver("1.2.3-pre1.release.1+1") ) self.assertComponents( Revision.semver("1.2.3-pre1.release.1+1"), 1, 2, 3, "pre1", "release", 1, 1 ) self.assertTrue( Revision.semver("1.2.3-pre1.release.1") < Revision.semver("1.2.3-pre2.release.1+1") ) self.assertTrue( Revision.semver("1.2.3-pre1.release.2") > Revision.semver("1.2.3-pre1.release.1+1") ) self.assertTrue(Revision.semver("1.2.3") < Revision.semver("1.2.3-pre2.release.2+1.foo")) self.assertTrue( Revision.semver("1.2.3-pre1.release.2+1") < Revision.semver("1.2.3-pre1.release.2+1.foo") ) self.assertTrue( Revision.semver("1.2.3-pre1.release.2+1") < Revision.semver("1.2.3-pre1.release.2+2") )
def test_pre_release_build(self): self.assertEqual(Revision.semver('1.2.3-pre1.release.1+1'), Revision.semver('1.2.3-pre1.release.1+1')) self.assertComponents(Revision.semver('1.2.3-pre1.release.1+1'), 1, 2, 3, 'pre1', 'release', 1, 1) self.assertTrue( Revision.semver('1.2.3-pre1.release.1') < Revision.semver('1.2.3-pre2.release.1+1')) self.assertTrue( Revision.semver('1.2.3-pre1.release.2') > Revision.semver('1.2.3-pre1.release.1+1')) self.assertTrue(Revision.semver('1.2.3') < Revision.semver('1.2.3-pre2.release.2+1.foo')) self.assertTrue( Revision.semver('1.2.3-pre1.release.2+1') < Revision.semver('1.2.3-pre1.release.2+1.foo')) self.assertTrue( Revision.semver('1.2.3-pre1.release.2+1') < Revision.semver('1.2.3-pre1.release.2+2'))
def test_bad(self): for bad_rev in ("a.b.c", "1.b.c", "1.2.c", "1.2.3;4", "1.2.3;4+5"): with pytest.raises(Revision.BadRevision): Revision.semver(bad_rev)
def test_simple(self): assert Revision.semver("1.2.3") == Revision.semver("1.2.3") assert Revision.semver("1.2.3").components == [1, 2, 3, None, None] assert Revision.semver("1.2.3") > Revision.semver("1.2.2") assert Revision.semver("1.3.0") > Revision.semver("1.2.2") assert Revision.semver("1.3.10") > Revision.semver("1.3.2") assert Revision.semver("2.0.0") > Revision.semver("1.3.2")
def test_bad(self): for bad_rev in ("a.b.c", "1.b.c", "1.2.c", "1.2.3;4", "1.2.3;4+5"): with self.assertRaises(Revision.BadRevision): Revision.semver(bad_rev)
def _branch_name(revision_str): return PantsReleases._branch_name(Revision.semver(revision_str))
def get_deprecated_tense(removal_version, future_tense='will be', past_tense='was'): """Provides the grammatical tense for a given deprecated version vs the current version.""" return future_tense if (Revision.semver(removal_version) >= PANTS_SEMVER) else past_tense
def test_simple(self): self.assertEqual(Revision.semver('1.2.3'), Revision.semver('1.2.3')) self.assertComponents(Revision.semver('1.2.3'), 1, 2, 3, None, None) self.assertTrue(Revision.semver('1.2.3') > Revision.semver('1.2.2')) self.assertTrue(Revision.semver('1.3.0') > Revision.semver('1.2.2')) self.assertTrue(Revision.semver('1.3.10') > Revision.semver('1.3.2')) self.assertTrue(Revision.semver('2.0.0') > Revision.semver('1.3.2'))
# Copyright 2016 Pants project contributors (see CONTRIBUTORS.md). # Licensed under the Apache License, Version 2.0 (see LICENSE). from __future__ import (absolute_import, division, generators, nested_scopes, print_function, unicode_literals, with_statement) import re from contextlib import contextmanager from pants.base.revision import Revision from pants.scm.git import Git from pants.util.contextutil import environment_as, temporary_dir from pants.util.process_handler import subprocess MIN_REQUIRED_GIT_VERSION = Revision.semver('1.7.10') def git_version(): """Get a Version() based on installed command-line git's version""" process = subprocess.Popen(['git', '--version'], stdout=subprocess.PIPE) (stdout, stderr) = process.communicate() assert process.returncode == 0, "Failed to determine git version." # stdout is like 'git version 1.9.1.598.g9119e8b\n' We want '1.9.1.598' matches = re.search(r'\s(\d+(?:\.\d+)*)[\s\.]', stdout) return Revision.lenient(matches.group(1)) def get_repo_root(): """Return the absolute path to the root directory of the Pants git repo.""" return subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).strip()
def test_simple(self): self.assertEqual(Revision.semver("1.2.3"), Revision.semver("1.2.3")) self.assertComponents(Revision.semver("1.2.3"), 1, 2, 3, None, None) self.assertTrue(Revision.semver("1.2.3") > Revision.semver("1.2.2")) self.assertTrue(Revision.semver("1.3.0") > Revision.semver("1.2.2")) self.assertTrue(Revision.semver("1.3.10") > Revision.semver("1.3.2")) self.assertTrue(Revision.semver("2.0.0") > Revision.semver("1.3.2"))
# coding=utf-8 # Copyright 2014 Pants project contributors (see CONTRIBUTORS.md). # Licensed under the Apache License, Version 2.0 (see LICENSE). from __future__ import (absolute_import, division, generators, nested_scopes, print_function, unicode_literals, with_statement) from pants.base.revision import Revision VERSION = '1.1.0-pre6' PANTS_SEMVER = Revision.semver(VERSION)
def _branch_name(revision_str): return PantsReleases._branch_name(Revision.semver(revision_str))
def _get_deprecated_tense(self, deprecated_version, future_tense='Will be', past_tense='Was'): """Provides the grammatical tense for a given deprecated version vs the current version.""" return future_tense if ( Revision.semver(deprecated_version) >= Revision.semver(VERSION) ) else past_tense
# coding=utf-8 # Copyright 2016 Pants project contributors (see CONTRIBUTORS.md). # Licensed under the Apache License, Version 2.0 (see LICENSE). from __future__ import absolute_import, division, print_function, unicode_literals import re from contextlib import contextmanager from pants.base.revision import Revision from pants.scm.git import Git from pants.util.contextutil import environment_as, temporary_dir from pants.util.process_handler import subprocess MIN_REQUIRED_GIT_VERSION = Revision.semver('1.7.10') def git_version(): """Get a Version() based on installed command-line git's version""" process = subprocess.Popen(['git', '--version'], stdout=subprocess.PIPE) (stdout, stderr) = process.communicate() assert process.returncode == 0, "Failed to determine git version." # stdout is like 'git version 1.9.1.598.g9119e8b\n' We want '1.9.1.598' matches = re.search(r'\s(\d+(?:\.\d+)*)[\s\.]', stdout.decode('utf-8')) return Revision.lenient(matches.group(1)) def get_repo_root(): """Return the absolute path to the root directory of the Pants git repo.""" return subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).strip()
def test_build(self): # TODO in semver 2.0.0, build data has no effect on precedence. assert Revision.semver("1.2.3+pre1.release.1") == Revision.semver("1.2.3+pre1.release.1") assert Revision.semver("1.2.3+pre1.release.1").components == [ 1, 2, 3, None, "pre1", "release", 1, ] assert Revision.semver("1.2.3+pre1.release.1") < Revision.semver("1.2.3+pre2.release.1") assert Revision.semver("1.2.3+pre1.release.2") < Revision.semver("1.2.3+pre1.release.10") assert Revision.semver("1.2.3") < Revision.semver("1.2.3+pre2.release.1") assert Revision.semver("1.2.3+pre1.release.2") < Revision.semver("1.2.3-pre1.release.2")
def test_pre_release_build(self): assert Revision.semver("1.2.3-pre1.release.1+1") == Revision.semver( "1.2.3-pre1.release.1+1" ) assert Revision.semver("1.2.3-pre1.release.1+1").components == [ 1, 2, 3, "pre1", "release", 1, 1, ] assert Revision.semver("1.2.3-pre1.release.1") < Revision.semver("1.2.3-pre2.release.1+1") assert Revision.semver("1.2.3-pre1.release.2") > Revision.semver("1.2.3-pre1.release.1+1") assert Revision.semver("1.2.3") < Revision.semver("1.2.3-pre2.release.2+1.foo") assert Revision.semver("1.2.3-pre1.release.2+1") < Revision.semver( "1.2.3-pre1.release.2+1.foo" ) assert Revision.semver("1.2.3-pre1.release.2+1") < Revision.semver("1.2.3-pre1.release.2+2")
def test_bad(self): for bad_rev in ('a.b.c', '1.b.c', '1.2.c', '1.2.3;4', '1.2.3;4+5'): with self.assertRaises(Revision.BadRevision): Revision.semver(bad_rev)
def get_deprecated_tense(removal_version, future_tense='will be', past_tense='was'): """Provides the grammatical tense for a given deprecated version vs the current version.""" return future_tense if (Revision.semver(removal_version) >= PANTS_SEMVER) else past_tense
def test_simple(self): self.assertEqual(Revision.semver('1.2.3'), Revision.semver('1.2.3')) self.assertComponents(Revision.semver('1.2.3'), 1, 2, 3, None, None) self.assertTrue(Revision.semver('1.2.3') > Revision.semver('1.2.2')) self.assertTrue(Revision.semver('1.3.0') > Revision.semver('1.2.2')) self.assertTrue(Revision.semver('1.3.10') > Revision.semver('1.3.2')) self.assertTrue(Revision.semver('2.0.0') > Revision.semver('1.3.2'))
# coding=utf-8 # Copyright 2014 Pants project contributors (see CONTRIBUTORS.md). # Licensed under the Apache License, Version 2.0 (see LICENSE). from __future__ import (absolute_import, division, generators, nested_scopes, print_function, unicode_literals, with_statement) from pants.base.revision import Revision VERSION = '1.1.0-pre5' PANTS_SEMVER = Revision.semver(VERSION)
def test_simple(self): self.assertEqual(Revision.semver("1.2.3"), Revision.semver("1.2.3")) self.assertComponents(Revision.semver("1.2.3"), 1, 2, 3, None, None) self.assertTrue(Revision.semver("1.2.3") > Revision.semver("1.2.2")) self.assertTrue(Revision.semver("1.3.0") > Revision.semver("1.2.2")) self.assertTrue(Revision.semver("1.3.10") > Revision.semver("1.3.2")) self.assertTrue(Revision.semver("2.0.0") > Revision.semver("1.3.2"))