Example #1
0
 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
Example #2
0
 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))
Example #3
0
 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))
Example #4
0
    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"))
Example #5
0
  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'))
Example #6
0
  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'))
Example #7
0
 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('_', '-'))
Example #8
0
 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
Example #9
0
 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
Example #10
0
  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()
Example #11
0
  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)
Example #12
0
    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"))
Example #13
0
 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
Example #14
0
 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
Example #15
0
    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)
Example #16
0
    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()
Example #17
0
    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")
Example #18
0
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))
Example #19
0
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))
Example #20
0
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))
Example #21
0
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))
Example #22
0
    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()
Example #23
0
 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)
Example #24
0
 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)
Example #25
0
  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'))
Example #26
0
    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"))
Example #27
0
    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")
        )
Example #28
0
  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'))
Example #29
0
 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)
Example #30
0
    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")
Example #31
0
 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)
Example #32
0
def _branch_name(revision_str):
  return PantsReleases._branch_name(Revision.semver(revision_str))
Example #33
0
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
Example #34
0
  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'))
Example #35
0
# 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()
Example #36
0
    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"))
Example #37
0
# 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)
Example #38
0
def _branch_name(revision_str):
  return PantsReleases._branch_name(Revision.semver(revision_str))
Example #39
0
 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
Example #40
0
# 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()
Example #41
0
    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")
Example #42
0
    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")
Example #43
0
 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)
Example #44
0
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
Example #45
0
  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'))
Example #46
0
# 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)
Example #47
0
    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"))