def test_iter(self):
     set1 = PinnedJarArtifactSet(pinned_coordinates=[
         M2Coordinate("org", "foo", "1.2"),
         M2Coordinate("org", "bar", "7.8"),
     ])
     self.assertEqual(2, len(set1))
     set2 = PinnedJarArtifactSet(set1)
     self.assertEqual(2, len(set2))
     self.assertEqual(set1, set2)
 def test_iter(self):
     set1 = PinnedJarArtifactSet(pinned_coordinates=[
         M2Coordinate('org', 'foo', '1.2'),
         M2Coordinate('org', 'bar', '7.8'),
     ])
     self.assertEquals(2, len(set1))
     set2 = PinnedJarArtifactSet(set1)
     self.assertEquals(2, len(set2))
     self.assertEquals(set1, set2)
 def test_equality(self):
     set1 = PinnedJarArtifactSet(pinned_coordinates=[
         M2Coordinate('org', 'foo', '1.2'),
         M2Coordinate('org', 'bar', '7.8'),
     ])
     set2 = PinnedJarArtifactSet(pinned_coordinates=[
         M2Coordinate('org', 'foo', '1.2'),
         M2Coordinate('org', 'bar', '7.8'),
     ])
     self.assertEquals(set1, set2)
     self.assertEquals(hash(set1), hash(set2))
 def test_equality(self):
     set1 = PinnedJarArtifactSet(pinned_coordinates=[
         M2Coordinate("org", "foo", "1.2"),
         M2Coordinate("org", "bar", "7.8"),
     ])
     set2 = PinnedJarArtifactSet(pinned_coordinates=[
         M2Coordinate("org", "foo", "1.2"),
         M2Coordinate("org", "bar", "7.8"),
     ])
     self.assertEqual(set1, set2)
     self.assertEqual(hash(set1), hash(set2))
Exemple #5
0
    def test_identical_jar_libraries_with_differing_managed_deps_differ(self):
        confs = ()
        strategy = CoursierResolveFingerprintStrategy(confs)

        managed_jar_deps = self.make_target(
            ":managed",
            target_type=ManagedJarDependencies,
            artifacts=[JarDependency("org.some", "name")],
        )
        self.set_artifact_set_for(managed_jar_deps, PinnedJarArtifactSet())

        jar_lib_with_managed_deps = self.make_target(
            ":jar-lib-1",
            target_type=JarLibrary,
            jars=[JarDependency("org.some", "name")],
            managed_dependencies=":managed",
        )

        jar_lib_without_managed_deps = self.make_target(
            ":jar-lib-no-managed-dep",
            target_type=JarLibrary,
            jars=[JarDependency("org.some", "name")],
        )

        self.assertNotEqual(
            strategy.compute_fingerprint(jar_lib_with_managed_deps),
            strategy.compute_fingerprint(jar_lib_without_managed_deps),
        )
Exemple #6
0
    def _compute_jars_to_resolve_and_pin(raw_jars, artifact_set, manager):
        """
    This method provides settled lists of jar dependencies and coordinates
    based on conflict management.

    :param raw_jars: a collection of `JarDependencies`
    :param artifact_set: PinnedJarArtifactSet
    :param manager: JarDependencyManagement
    :return: (list of settled `JarDependency`, set of pinned `M2Coordinate`)
    """
        if artifact_set is None:
            artifact_set = PinnedJarArtifactSet()

        untouched_pinned_artifact = set(
            M2Coordinate.create(x) for x in artifact_set)
        jar_list = list(raw_jars)
        for i, dep in enumerate(jar_list):
            direct_coord = M2Coordinate.create(dep)
            # Portion to manage pinned jars in case of conflict
            if direct_coord in artifact_set:
                managed_coord = artifact_set[direct_coord]
                untouched_pinned_artifact.remove(managed_coord)

                if direct_coord.rev != managed_coord.rev:
                    # It may be necessary to actually change the version number of the jar we want to resolve
                    # here, because overrides do not apply directly (they are exclusively transitive). This is
                    # actually a good thing, because it gives us more control over what happens.
                    coord = manager.resolve_version_conflict(managed_coord,
                                                             direct_coord,
                                                             force=dep.force)

                    # Once a version is settled, we force it anyway
                    jar_list[i] = dep.copy(rev=coord.rev, force=True)

        return jar_list, untouched_pinned_artifact
Exemple #7
0
    def test_identical_jar_libraries_with_same_jar_dep_management_artifacts_match(self):
        confs = ()
        strategy = IvyResolveFingerprintStrategy(confs)

        managed_jar_deps = self.make_target(
            ":managed",
            target_type=ManagedJarDependencies,
            artifacts=[JarDependency("org.some", "name")],
        )
        self.set_artifact_set_for(managed_jar_deps, PinnedJarArtifactSet())

        jar_lib_1 = self.make_target(
            ":jar-lib-1",
            target_type=JarLibrary,
            jars=[JarDependency("org.some", "name")],
            managed_dependencies=":managed",
        )

        jar_lib_2 = self.make_target(
            ":jar-lib-2",
            target_type=JarLibrary,
            jars=[JarDependency("org.some", "name")],
            managed_dependencies=":managed",
        )

        self.assertEqual(
            strategy.compute_fingerprint(jar_lib_1), strategy.compute_fingerprint(jar_lib_2)
        )
Exemple #8
0
    def test_identical_jar_libraries_with_differing_managed_deps_differ(self):
        confs = ()
        strategy = IvyResolveFingerprintStrategy(
            self.create_task(self.context()), confs)

        managed_jar_deps = self.make_target(
            ':managed',
            target_type=ManagedJarDependencies,
            artifacts=[JarDependency('org.some', 'name')])
        self.set_artifact_set_for(managed_jar_deps, PinnedJarArtifactSet())

        jar_lib_with_managed_deps = self.make_target(
            ':jar-lib-1',
            target_type=JarLibrary,
            jars=[JarDependency('org.some', 'name')],
            managed_dependencies=':managed')

        jar_lib_without_managed_deps = self.make_target(
            ':jar-lib-no-managed-dep',
            target_type=JarLibrary,
            jars=[JarDependency('org.some', 'name')])

        self.assertNotEqual(
            strategy.compute_fingerprint(jar_lib_with_managed_deps),
            strategy.compute_fingerprint(jar_lib_without_managed_deps))
Exemple #9
0
 def test_replace(self):
   set1 = PinnedJarArtifactSet(pinned_coordinates=[
     M2Coordinate('org', 'foo', '1.2'),
     M2Coordinate('org', 'bar', '7.8'),
   ])
   set1.put(M2Coordinate('org', 'hello', '9'))
   self.assertEqual(3, len(set1))
   set1.put(M2Coordinate('org', 'foo', '1.3'))
   self.assertEqual(3, len(set1))
   self.assertEqual(M2Coordinate('org', 'foo', '1.3'), set1[M2Coordinate('org', 'foo')])
Exemple #10
0
  def _generate_resolve_ivy(cls, jars, excludes, ivyxml, confs, resolve_hash_name, pinned_artifacts=None,
                    jar_dep_manager=None):
    org = IvyUtils.INTERNAL_ORG_NAME
    name = resolve_hash_name

    extra_configurations = [conf for conf in confs if conf and conf != 'default']

    jars_by_key = OrderedDict()
    for jar in jars:
      jars = jars_by_key.setdefault((jar.org, jar.name), [])
      jars.append(jar)

    manager = jar_dep_manager or JarDependencyManagement.global_instance()
    artifact_set = PinnedJarArtifactSet(pinned_artifacts) # Copy, because we're modifying it.
    for jars in jars_by_key.values():
      for i, dep in enumerate(jars):
        direct_coord = M2Coordinate.create(dep)
        managed_coord = artifact_set[direct_coord]
        if direct_coord.rev != managed_coord.rev:
          # It may be necessary to actually change the version number of the jar we want to resolve
          # here, because overrides do not apply directly (they are exclusively transitive). This is
          # actually a good thing, because it gives us more control over what happens.
          coord = manager.resolve_version_conflict(managed_coord, direct_coord, force=dep.force)
          jars[i] = dep.copy(rev=coord.rev)
        elif dep.force:
          # If this dependency is marked as 'force' and there is no version conflict, use the normal
          # pants behavior for 'force'.
          artifact_set.put(direct_coord)

    dependencies = [cls._generate_jar_template(jars) for jars in jars_by_key.values()]

    # As it turns out force is not transitive - it only works for dependencies pants knows about
    # directly (declared in BUILD files - present in generated ivy.xml). The user-level ivy docs
    # don't make this clear [1], but the source code docs do (see isForce docs) [2]. I was able to
    # edit the generated ivy.xml and use the override feature [3] though and that does work
    # transitively as you'd hope.
    #
    # [1] http://ant.apache.org/ivy/history/2.3.0/settings/conflict-managers.html
    # [2] https://svn.apache.org/repos/asf/ant/ivy/core/branches/2.3.0/
    #     src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptor.java
    # [3] http://ant.apache.org/ivy/history/2.3.0/ivyfile/override.html
    overrides = [cls._generate_override_template(_coord) for _coord in artifact_set]

    excludes = [cls._generate_exclude_template(exclude) for exclude in excludes]

    template_data = TemplateData(
      org=org,
      module=name,
      extra_configurations=extra_configurations,
      dependencies=dependencies,
      excludes=excludes,
      overrides=overrides)

    template_relpath = os.path.join('templates', 'ivy_utils', 'ivy.mustache')
    cls._write_ivy_xml_file(ivyxml, template_data, template_relpath)
 def test_replace(self):
     set1 = PinnedJarArtifactSet(pinned_coordinates=[
         M2Coordinate("org", "foo", "1.2"),
         M2Coordinate("org", "bar", "7.8"),
     ])
     set1.put(M2Coordinate("org", "hello", "9"))
     self.assertEqual(3, len(set1))
     set1.put(M2Coordinate("org", "foo", "1.3"))
     self.assertEqual(3, len(set1))
     self.assertEqual(M2Coordinate("org", "foo", "1.3"),
                      set1[M2Coordinate("org", "foo")])
Exemple #12
0
 def test_id(self):
   set1 = PinnedJarArtifactSet(pinned_coordinates=[
     M2Coordinate('org', 'foo', '1.2'),
     M2Coordinate('org', 'bar', '7.8'),
     M2Coordinate('org', 'foo', '1.8', ext='tar')
   ])
   self.assertFalse(set1.id is None)
   self.assertFalse(set1._id is None)
   set1.put(M2Coordinate('hello', 'there', '9'))
   self.assertTrue(set1._id is None)
   self.assertFalse(set1.id is None)
   set1.put(M2Coordinate('org', 'foo', '1.2'))
   self.assertFalse(set1._id is None) # Should be no change, because version was already there.
Exemple #13
0
 def test_lookup(self):
   set1 = PinnedJarArtifactSet(pinned_coordinates=[
     M2Coordinate('org', 'foo', '1.2'),
     M2Coordinate('org', 'bar', '7.8'),
     M2Coordinate('org', 'foo', '1.8', ext='tar')
   ])
   self.assertEqual('1.2', set1[M2Coordinate('org', 'foo')].rev)
   self.assertEqual('7.8', set1[M2Coordinate('org', 'bar')].rev)
   self.assertEqual('1.8', set1[M2Coordinate('org', 'foo', ext='tar')].rev)
   self.assertEqual({coord.rev for coord in set1}, {'1.2', '7.8', '1.8'})
   self.assertIn(M2Coordinate('org', 'foo'), set1)
   self.assertIn(M2Coordinate('org', 'foo', '27'), set1)
   self.assertNotIn(M2Coordinate('hello', 'there'), set1)
 def test_lookup(self):
     set1 = PinnedJarArtifactSet(pinned_coordinates=[
         M2Coordinate("org", "foo", "1.2"),
         M2Coordinate("org", "bar", "7.8"),
         M2Coordinate("org", "foo", "1.8", ext="tar"),
     ])
     self.assertEqual("1.2", set1[M2Coordinate("org", "foo")].rev)
     self.assertEqual("7.8", set1[M2Coordinate("org", "bar")].rev)
     self.assertEqual("1.8", set1[M2Coordinate("org", "foo",
                                               ext="tar")].rev)
     self.assertEqual({coord.rev for coord in set1}, {"1.2", "7.8", "1.8"})
     self.assertIn(M2Coordinate("org", "foo"), set1)
     self.assertIn(M2Coordinate("org", "foo", "27"), set1)
     self.assertNotIn(M2Coordinate("hello", "there"), set1)
 def test_id(self):
     set1 = PinnedJarArtifactSet(pinned_coordinates=[
         M2Coordinate("org", "foo", "1.2"),
         M2Coordinate("org", "bar", "7.8"),
         M2Coordinate("org", "foo", "1.8", ext="tar"),
     ])
     self.assertFalse(set1.id is None)
     self.assertFalse(set1._id is None)
     set1.put(M2Coordinate("hello", "there", "9"))
     self.assertTrue(set1._id is None)
     self.assertFalse(set1.id is None)
     set1.put(M2Coordinate("org", "foo", "1.2"))
     self.assertFalse(
         set1._id is
         None)  # Should be no change, because version was already there.
Exemple #16
0
  def test_identical_jar_libraries_with_same_jar_dep_management_artifacts_match(self):
    confs = ()
    strategy = CoursierResolveFingerprintStrategy(confs)

    managed_jar_deps = self.make_target(':managed', target_type=ManagedJarDependencies,
                               artifacts=[JarDependency('org.some', 'name')])
    self.set_artifact_set_for(managed_jar_deps, PinnedJarArtifactSet())

    jar_lib_1 = self.make_target(':jar-lib-1', target_type=JarLibrary,
                                   jars=[JarDependency('org.some', 'name')],
                                   managed_dependencies=':managed')


    jar_lib_2 = self.make_target(':jar-lib-2', target_type=JarLibrary,
                              jars=[JarDependency('org.some', 'name')],
                              managed_dependencies=':managed')

    self.assertEqual(strategy.compute_fingerprint(jar_lib_1),
                     strategy.compute_fingerprint(jar_lib_2))
 def test_lookup_noop(self):
     self.assertEquals(
         M2Coordinate('org', 'foo', '1.2'),
         PinnedJarArtifactSet()[M2Coordinate('org', 'foo', '1.2')])
 def test_put_failure(self):
     set1 = PinnedJarArtifactSet()
     with self.assertRaises(PinnedJarArtifactSet.MissingVersion):
         set1.put(M2Coordinate('hello', 'there'))
 def test_lookup_noop(self):
     self.assertEqual(
         M2Coordinate("org", "foo", "1.2"),
         PinnedJarArtifactSet()[M2Coordinate("org", "foo", "1.2")],
     )