# File lib/bundler/source.rb, line 476 476: def self.from_lock(options) 477: new(options.merge("uri" => options.delete("remote"))) 478: end
# File lib/bundler/source.rb, line 463 463: def initialize(options) 464: super 465: 466: # stringify options that could be set as symbols 467: %(ref branch tag revision).each{|k| options[k] = options[k].to_s if options[k] } 468: 469: @uri = options["uri"] 470: @ref = options["ref"] || options["branch"] || options["tag"] || 'master' 471: @revision = options["revision"] 472: @submodules = options["submodules"] 473: @update = false 474: end
# File lib/bundler/source.rb, line 491 491: def eql?(o) 492: Git === o && 493: uri == o.uri && 494: ref == o.ref && 495: name == o.name && 496: version == o.version && 497: submodules == o.submodules 498: end
# File lib/bundler/source.rb, line 538 538: def install(spec) 539: Bundler.ui.info "Using #{spec.name} (#{spec.version}) from #{to_s} " 540: 541: unless @installed 542: Bundler.ui.debug " * Checking out revision: #{ref}" 543: checkout if allow_git_ops? 544: @installed = true 545: end 546: generate_bin(spec) 547: end
# File lib/bundler/source.rb, line 549 549: def load_spec_files 550: super 551: rescue PathError, GitError 552: raise GitError, "#{to_s} is not checked out. Please run `bundle install`" 553: end
# File lib/bundler/source.rb, line 507 507: def name 508: File.basename(@uri, '.git') 509: end
# File lib/bundler/source.rb, line 511 511: def path 512: @install_path ||= begin 513: git_scope = "#{base_name}-#{shortref_for_path(revision)}" 514: 515: if Bundler.requires_sudo? 516: Bundler.user_bundle_path.join(Bundler.ruby_scope).join(git_scope) 517: else 518: Bundler.install_path.join(git_scope) 519: end 520: end 521: end
TODO: actually cache git specs
# File lib/bundler/source.rb, line 528 528: def specs 529: if allow_git_ops? && !@update 530: # Start by making sure the git cache is up to date 531: cache 532: checkout 533: @update = true 534: end 535: local_specs 536: end
# File lib/bundler/source.rb, line 480 480: def to_lock 481: out = "GIT\n" 482: out << " remote: #{@uri}\n" 483: out << " revision: #{revision}\n" 484: %(ref branch tag submodules).each do |opt| 485: out << " #{opt}: #{options[opt]}\n" if options[opt] 486: end 487: out << " glob: #{@glob}\n" unless @glob == DEFAULT_GLOB 488: out << " specs:\n" 489: end
# File lib/bundler/source.rb, line 647 647: def allow_git_ops? 648: @allow_remote || @allow_cached 649: end
# File lib/bundler/source.rb, line 572 572: def base_name 573: File.basename(uri.sub(%{^(\w+://)?([^/:]+:)},''), ".git") 574: end
# File lib/bundler/source.rb, line 608 608: def cache 609: if cached? 610: return if has_revision_cached? 611: Bundler.ui.info "Updating #{uri}" 612: in_cache do 613: git %fetch --force --quiet --tags "#{uri}" refs/heads/*:refs/heads/*| 614: end 615: else 616: Bundler.ui.info "Fetching #{uri}" 617: FileUtils.mkdir_p(cache_path.dirname) 618: git %clone "#{uri}" "#{cache_path}" --bare --no-hardlinks| 619: end 620: end
# File lib/bundler/source.rb, line 596 596: def cache_path 597: @cache_path ||= begin 598: git_scope = "#{base_name}-#{uri_hash}" 599: 600: if Bundler.requires_sudo? 601: Bundler.user_bundle_path.join("cache/git", git_scope) 602: else 603: Bundler.cache.join("git", git_scope) 604: end 605: end 606: end
# File lib/bundler/source.rb, line 661 661: def cached? 662: cache_path.exist? 663: end
# File lib/bundler/source.rb, line 622 622: def checkout 623: unless File.exist?(path.join(".git")) 624: FileUtils.mkdir_p(path.dirname) 625: FileUtils.rm_rf(path) 626: git %clone --no-checkout "#{cache_path}" "#{path}"| 627: end 628: Dir.chdir(path) do 629: git %fetch --force --quiet --tags "#{cache_path}"| 630: git "reset --hard #{revision}" 631: 632: if @submodules 633: git "submodule init" 634: git "submodule update" 635: end 636: end 637: end
# File lib/bundler/source.rb, line 557 557: def git(command) 558: if allow_git_ops? 559: out = %{git #{command}} 560: 561: if $? != 0 562: raise GitError, "An error has occurred in git when running `git #{command}`. Cannot complete bundling." 563: end 564: out 565: else 566: raise GitError, "Bundler is trying to run a `git #{command}` at runtime. You probably need to run `bundle install`. However, " "this error message could probably be more useful. Please submit a ticket at http://github.com/carlhuda/bundler/issues " "with steps to reproduce as well as the following\n\nCALLER: #{caller.join("\n")}" 567: end 568: end
# File lib/bundler/source.rb, line 639 639: def has_revision_cached? 640: return unless @revision 641: in_cache { git %cat-file -e #{@revision}| } 642: true 643: rescue GitError 644: false 645: end
# File lib/bundler/source.rb, line 665 665: def in_cache(&blk) 666: cache unless cached? 667: Dir.chdir(cache_path, &blk) 668: end
# File lib/bundler/source.rb, line 651 651: def revision 652: @revision ||= begin 653: if allow_git_ops? 654: in_cache { git("rev-parse #{ref}").strip } 655: else 656: raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application" 657: end 658: end 659: end
# File lib/bundler/source.rb, line 576 576: def shortref_for_display(ref) 577: ref[0..6] 578: end
# File lib/bundler/source.rb, line 580 580: def shortref_for_path(ref) 581: ref[0..11] 582: end
# File lib/bundler/source.rb, line 584 584: def uri_hash 585: if uri =~ %{^\w+://(\w+@)?} 586: # Downcase the domain component of the URI 587: # and strip off a trailing slash, if one is present 588: input = URI.parse(uri).normalize.to_s.sub(%{/$},'') 589: else 590: # If there is no URI scheme, assume it is an ssh/git URI 591: input = uri 592: end 593: Digest::SHA1.hexdigest(input) 594: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.