buildr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ittay Dror <ittay.d...@gmail.com>
Subject transitive project dependencies
Date Fri, 18 Jul 2008 03:50:09 GMT
Hi,

I see this in the 'transitive' method:
      when /([^:]+:){2,4}/ # A spec as opposed to a file name.
        artifact = artifact(spec)
        set |= [artifact] unless artifact.type == :pom
        set |= POM.load(artifact.pom).dependencies.map { |spec| 
artifact(spec) }
      ....
      when Project
        set |= transitive(spec.packages)
      when Rake::Task
        set |= spec.respond_to?(:to_spec) ? transitive(spec.to_spec) : 
[spec]

so if I write compile.with(project('foo')), the method is recursively 
called with the packages tasks, each is then turned to a spec which then 
acts as if the artifact is in the repository, which means the previous 
project should be installed, which is an unnecessary overhead and I'm 
not sure will work as I'm not sure that a dependency on 'install' is 
created anywhere.

also, what if i pass an Artifact ? it is a Rake::Task and supports the 
to_spec, so again buildr will look in the repository, and also will turn 
the Artifact to a spec, even though it is good as is.

am i wrong?

if not, why not add something like:
   when Rake::Task
      if(spec.respond_to?(:dependencies)) then
        set |= [spec]           
        set |= transitive(spec.dependencies)
      else
        set |= spec.respond_to?(:to_spec) ? transitive(spec.to_spec) : 
[spec]
      end

also maybe add a 'when Artifact' before the 'when Rake::Task' clause, 
and if the artifact is a repository artifact, try to read is pom, 
otherwise, warn (to the user) that he should pass the project/task that 
created the artifact.

ittay

-- 
--
Ittay Dror <ittay.dror@gmail.com>



Mime
View raw message