Class: Buildr::Repositories
- Includes:
- Singleton
- Defined in:
- lib/buildr/packaging/artifact.rb
Overview
Holds the path to the local repository, URLs for remote repositories, and settings for release server.
You can access this object from the #repositories method. For example:
puts repositories.local
repositories.remote << 'http://example.com/repo'
repositories.release_to = 'sftp://example.com/var/www/public/repo'
Instance Method Summary collapse
-
#local ⇒ Object
:call-seq: local => path.
-
#local=(dir) ⇒ Object
:call-seq: local = path.
-
#locate(spec) ⇒ Object
:call-seq: locate(spec) => path.
-
#release_to ⇒ Object
:call-seq: release_to => hash.
-
#release_to=(options) ⇒ Object
:call-seq: release_to = url release_to = hash.
-
#remote ⇒ Object
:call-seq: remote => Array.
-
#remote=(urls) ⇒ Object
:call-seq: remote = Array remote = url remote = nil.
Instance Method Details
#local ⇒ Object
:call-seq:
local => path
Returns the path to the local repository.
The default path is .m2/repository relative to the home directory. You can set this using the M2_REPO environment variable or the repositories/local value in your settings.yaml file.
591 592 593 594 595 |
# File 'lib/buildr/packaging/artifact.rb', line 591 def local @local ||= File.(ENV['M2_REPO'] || ENV['local_repo'] || (Buildr.settings.user['repositories'] && Buildr.settings.user['repositories']['local']) || File.join(ENV['HOME'], '.m2/repository')) end |
#local=(dir) ⇒ Object
:call-seq:
local = path
Sets the path to the local repository.
The best place to set the local repository path is from a buildr.rb file located in the .buildr directory under your home directory. That way all your projects will share the same path, without affecting other developers collaborating on these projects.
606 607 608 |
# File 'lib/buildr/packaging/artifact.rb', line 606 def local=(dir) @local = dir ? File.(dir) : nil end |
#locate(spec) ⇒ Object
:call-seq:
locate(spec) => path
Locates an artifact in the local repository based on its specification, and returns a file path.
For example:
locate :group=>'log4j', :id=>'log4j', :version=>'1.1'
=> ~/.m2/repository/log4j/log4j/1.1/log4j-1.1.jar
619 620 621 622 |
# File 'lib/buildr/packaging/artifact.rb', line 619 def locate(spec) spec = Artifact.to_hash(spec) File.join(local, spec[:group].split('.'), spec[:id], spec[:version], Artifact.hash_to_file_name(spec)) end |
#release_to ⇒ Object
:call-seq:
release_to => hash
Returns the current release server setting as a Hash. This is a more convenient way to configure the settings, as it allows you to specify the settings progressively.
For example, the Buildfile will contain the repository URL used by all developers:
repositories.release_to[:url] ||= 'sftp://example.com/var/www/repo'
Your private buildr.rb will contain your credentials:
repositories.release_to[:username] = 'john'
repositories.release_to[:password] = 'secret'
708 709 710 711 712 713 714 715 |
# File 'lib/buildr/packaging/artifact.rb', line 708 def release_to unless @release_to value = (Buildr.settings.user['repositories'] && Buildr.settings.user['repositories']['release_to']) \ || (Buildr.settings.build['repositories'] && Buildr.settings.build['repositories']['release_to']) @release_to = Hash === value ? value.inject({}) { |hash, (key, value)| hash.update(key.to_sym=>value) } : { :url=>Array(value).first } end @release_to end |
#release_to=(options) ⇒ Object
:call-seq:
release_to = url
release_to = hash
Specifies the release server. Accepts a Hash with different repository settings (e.g. url, username, password), or a String to only set the repository URL.
Besides the URL, all other settings depend on the transport protocol in use.
For example:
repositories.release_to = 'sftp://john:[email protected]/var/www/repo/'
repositories.release_to = { :url=>'sftp://example.com/var/www/repo/',
:username='john', :password=>'secret' }
Or in the settings.yaml file:
repositories:
release_to: sftp://john:[email protected]/var/www/repo/
repositories:
release_to:
url: sftp://example.com/var/www/repo/
username: john
password: secret
692 693 694 695 |
# File 'lib/buildr/packaging/artifact.rb', line 692 def release_to=() = { :url=> } unless Hash === @release_to = end |
#remote ⇒ Object
:call-seq:
remote => Array
Returns an array of all the remote repository URLs.
When downloading artifacts, repositories are accessed in the order in which they appear here. The best way is to add repositories individually, for example:
repositories.remote << 'http://example.com/repo'
You can also specify remote repositories in the settings.yaml (per user) and build.yaml (per build) files. Both sets of URLs are loaded by default into this array, URLs from the personal setting showing first.
For example:
repositories:
remote:
- http://example.com/repo
- http://elsewhere.com/repo
642 643 644 645 646 647 648 649 |
# File 'lib/buildr/packaging/artifact.rb', line 642 def remote unless @remote self.remote= [Buildr.settings.user, Buildr.settings.build].inject([]) { |repos, hash| repos | Array(hash['repositories'] && hash['repositories']['remote']) } end @remote end |
#remote=(urls) ⇒ Object
:call-seq:
remote = Array
remote = url
remote = nil
With a String argument, clears the array and set it to that single URL.
With an Array argument, clears the array and set it to these specific URLs.
With nil, clears the array.
661 662 663 664 665 666 667 |
# File 'lib/buildr/packaging/artifact.rb', line 661 def remote=(urls) case urls when nil then @remote = nil when Array then @remote = RepositoryArray.new(urls.dup) else @remote = RepositoryArray.new([urls]) end end |