You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildr.apache.org by to...@apache.org on 2010/06/05 08:53:22 UTC
svn commit: r951662 - in /buildr/trunk: CHANGELOG
lib/buildr/packaging/artifact.rb spec/packaging/packaging_spec.rb
Author: toulmean
Date: Sat Jun 5 06:53:21 2010
New Revision: 951662
URL: http://svn.apache.org/viewvc?rev=951662&view=rev
Log:
BUILDR-374 upload tasks can attempt to upload artifacts multiple times (Pepijn Van Eeckhoudt)
Modified:
buildr/trunk/CHANGELOG
buildr/trunk/lib/buildr/packaging/artifact.rb
buildr/trunk/spec/packaging/packaging_spec.rb
Modified: buildr/trunk/CHANGELOG
URL: http://svn.apache.org/viewvc/buildr/trunk/CHANGELOG?rev=951662&r1=951661&r2=951662&view=diff
==============================================================================
--- buildr/trunk/CHANGELOG (original)
+++ buildr/trunk/CHANGELOG Sat Jun 5 06:53:21 2010
@@ -95,6 +95,7 @@
Java.classpath
* Fixed: BUILDR-373 Package type specific implementations of install,
uninstall and upload are not invoked (Antoine Toulme)
+* Fixed: BUILDR-374 upload tasks can attempt to upload artifacts multiple times (Pepijn Van Eeckhoudt)
* Fixed: BUILDR-379 Ant sql task abruptly terminates buildr
* Fixed: BUILDR-380 GitRelease: recursive search for root '/' does not work
under Windows (Antoine Toulme)
Modified: buildr/trunk/lib/buildr/packaging/artifact.rb
URL: http://svn.apache.org/viewvc/buildr/trunk/lib/buildr/packaging/artifact.rb?rev=951662&r1=951661&r2=951662&view=diff
==============================================================================
--- buildr/trunk/lib/buildr/packaging/artifact.rb (original)
+++ buildr/trunk/lib/buildr/packaging/artifact.rb Sat Jun 5 06:53:21 2010
@@ -171,14 +171,13 @@ module Buildr
# In the third form, uses a hash with the options :url, :username, :password,
# and :permissions. All but :url are optional.
def upload(upload_to = nil)
- # Where do we release to?
+ upload_task(upload_to).invoke
+ end
+
+ def upload_task(upload_to = nil)
upload_to ||= Buildr.repositories.release_to
upload_to = { :url=>upload_to } unless Hash === upload_to
raise ArgumentError, 'Don\'t know where to upload, perhaps you forgot to set repositories.release_to' unless upload_to[:url]
- invoke # Make sure we exist.
-
- # Upload POM ahead of package, so we don't fail and find POM-less package (the horror!)
- pom.upload(upload_to) if pom && pom != self
# Set the upload URI, including mandatory slash (we expect it to be the base directory).
# Username/password may be part of URI, or separate entities.
@@ -187,10 +186,19 @@ module Buildr
uri.user = upload_to[:username] if upload_to[:username]
uri.password = upload_to[:password] if upload_to[:password]
- # Upload artifact relative to base URL, need to create path before uploading.
- info "Deploying #{to_spec}"
path = group.gsub('.', '/') + "/#{id}/#{version}/#{File.basename(name)}"
- URI.upload uri + path, name, :permissions=>upload_to[:permissions]
+
+ unless task = Buildr.application.lookup(uri+path)
+ deps = [self]
+ deps << pom.upload_task( upload_to ) if pom && pom != self
+
+ task = Rake::Task.define_task uri + path => deps do
+ # Upload artifact relative to base URL, need to create path before uploading.
+ info "Deploying #{to_spec}"
+ URI.upload uri + path, name, :permissions=>upload_to[:permissions]
+ end
+ end
+ task
end
protected
@@ -770,11 +778,10 @@ module Buildr
def upload(*args, &block)
artifacts = artifacts(args)
raise ArgumentError, 'This method can only upload artifacts' unless artifacts.all? { |f| f.respond_to?(:to_spec) }
+ upload_artifacts_tasks = artifacts.map { |artifact| artifact.upload_task }
task('upload').tap do |task|
task.enhance &block if block
- task.enhance artifacts do
- artifacts.each { |artifact| artifact.upload }
- end
+ task.enhance upload_artifacts_tasks
end
end
Modified: buildr/trunk/spec/packaging/packaging_spec.rb
URL: http://svn.apache.org/viewvc/buildr/trunk/spec/packaging/packaging_spec.rb?rev=951662&r1=951661&r2=951662&view=diff
==============================================================================
--- buildr/trunk/spec/packaging/packaging_spec.rb (original)
+++ buildr/trunk/spec/packaging/packaging_spec.rb Sat Jun 5 06:53:21 2010
@@ -654,6 +654,24 @@ describe Rake::Task, ' upload' do
read(upload).should eql(read(package))
end
end
+
+ it 'should not upload twice the pom when artifacts are uploaded from a project' do
+ write 'src/main/java/Foo.java', 'public class Foo {}'
+ repositories.release_to = 'sftp://example.com/base'
+ define 'foo' do
+ project.group = "attached"
+ project.version = "1.0"
+ package(:jar)
+ package(:sources)
+ end
+ URI.should_receive(:upload).exactly(:once).
+ with(URI.parse('sftp://example.com/base/attached/foo/1.0/foo-1.0-sources.jar'), project("foo").package(:sources).to_s, anything)
+ URI.should_receive(:upload).exactly(:once).
+ with(URI.parse('sftp://example.com/base/attached/foo/1.0/foo-1.0.jar'), project("foo").package(:jar).to_s, anything)
+ URI.should_receive(:upload).exactly(:once).
+ with(URI.parse('sftp://example.com/base/attached/foo/1.0/foo-1.0.pom'), project("foo").package(:jar).pom.to_s, anything)
+ verbose(false) { project("foo").upload.invoke }
+ end
it 'should upload signatures for artifact and POM' do
define('foo', :version=>'1.0') { package :jar }