diff --git a/lib/bundler/source/git.rb b/lib/bundler/source/git.rb index 0ee9e4d..234392d 100644 --- a/lib/bundler/source/git.rb +++ b/lib/bundler/source/git.rb @@ -187,7 +187,6 @@ module Bundler rescue PathError => e Bundler.ui.trace e raise GitError, "#{to_s} is not yet checked out. Run `bundle install` first." - git_proxy.checkout end # This is the path which is going to contain a cache diff --git a/lib/bundler/source/git/git_proxy.rb b/lib/bundler/source/git/git_proxy.rb index ec72fcb..67618fc 100644 --- a/lib/bundler/source/git/git_proxy.rb +++ b/lib/bundler/source/git/git_proxy.rb @@ -75,36 +75,49 @@ module Bundler Bundler.ui.confirm "Updating #{uri}" FileUtils.cd(path) git_retry %|fetch --force --quiet --tags #{uri_escaped} "refs/heads/*:refs/heads/*"| - @commit_num = `git log -1 --pretty=format:"%H"`[0..11] - @new_path = path.dirname - @old_folder_name = path.basename.to_s + '/' - @fold_name ='' - @fold_name = path.basename.to_s - @fold_name = @fold_name.split('-')[0..-2].join('-') - @new_path += (@fold_name + '-' + @commit_num) - path = @new_path - FileUtils.cd('..') - FileUtils.mv( @old_folder_name , path.basename.to_s+'/') if (Dir.exist? (path.basename.to_s+'/')) == false - FileUtils.cd(@new_path.to_s) - @path_destination = Pathname.new(path.dirname) - @path_destination= @path_destination.parent.parent.parent + Pathname.new("bundler/gems/#{path.basename}") - if (Dir.exist?(@path_destination.to_s)) == false - begin - FileUtils.cd(@path_destination.dirname) - rescue - FileUtils.mkdir_p(@path_destination.dirname) - FileUtils.cd(@path_destination.dirname) + if path.to_s.include?("cache") + @commit_num = `git log -1 --pretty=format:"%H"`[0..11] if revision.nil? + @commit_num = revision[0..11] if !revision.nil? + @new_path = path.dirname + @old_folder_name = path.basename.to_s + '/' + @fold_name ='' + @fold_name = path.basename.to_s + @fold_name = @fold_name.split('-')[0..-2].join('-') + @new_path += (@fold_name + '-' + @commit_num) + path = @new_path + FileUtils.cd('..') + FileUtils.mv( @old_folder_name , path.basename.to_s+'/') if ( Dir.exist?(path.basename.to_s+'/')) == false + FileUtils.rmdir @old_folder_name.to_s if ( Dir.exist?(@old_folder_name.to_s+'/') && (@old_folder_name.to_s != path.basename.to_s)) + FileUtils.cd(@new_path.to_s) + @path_destination = Pathname.new(path.dirname) + @path_destination= @path_destination.parent.parent.parent + Pathname.new("bundler/gems/#{path.basename}") + if (Dir.exist?(@path_destination.to_s)) == false + begin + FileUtils.cd(@path_destination.dirname) + rescue + FileUtils.mkdir_p(@path_destination.dirname) + FileUtils.cd(@path_destination.dirname) + end + FileUtils.mkdir(@path_destination.basename) + `cp -r "#{path}"/. "#{@path_destination}"/.git/` + FileUtils.cd(@path_destination.basename) + `git init` + `git checkout "#{ref}"` + end + @gemspec_name = '' + FileUtils.cd(@path_destination.to_s) + `ls`.split.each{|name| (@gemspec_name = name.to_s and break) if (name.include? '.gemspec') == true} + Dir.chdir(Bundler.root.to_s) do + Bundler::load_gemspec("#{@path_destination}/#{@gemspec_name}") rescue puts "you don't have .gemspec file at #{@path_destination}" + end + else + @gemspec_name = '' + FileUtils.cd(path.to_s) + `ls`.split.each{|name| (@gemspec_name = name.to_s and break) if (name.include? '.gemspec') == true} + Dir.chdir(Bundler.root.to_s) do + Bundler::load_gemspec("#{path}/#{@gemspec_name}") rescue puts "you don't have .gemspec file at #{path}" end - FileUtils.mkdir(@path_destination.basename) - `cp -r "#{path}"/. "#{@path_destination}"/.git/` - FileUtils.cd(@path_destination.basename) - `git init` - `git checkout "#{ref}"` end - @gemspec_name = '' - FileUtils.cd(@path_destination.to_s) - `ls`.split.each{|name| (@gemspec_name = name.to_s and break) if (name.include? '.gemspec') == true} - Bundler::load_gemspec("#{@path_destination}/#{@gemspec_name}") rescue puts "you don't have .gemspec file at #{@path_destination}" FileUtils.cd(@old_pwd) end else @@ -112,38 +125,55 @@ module Bundler if path != nil FileUtils.mkdir_p(path.dirname) git_retry %|clone #{uri_escaped} "#{path}" --bare --no-hardlinks --quiet| - FileUtils.cd(path) - git_retry %|fetch --all| - @commit_num = `git log -1 --pretty=format:"%H"`[0..11] - @new_path = path.dirname - @old_folder_name = path.basename.to_s + '/' - @fold_name ='' - @fold_name = path.basename.to_s - @fold_name = @fold_name.split('-')[0..-2].join('-') - @new_path += (@fold_name + '-' + @commit_num) - path = @new_path - FileUtils.cd('..') - FileUtils.mv( @old_folder_name , path.basename.to_s+'/') if (Dir.exist? (path.basename.to_s+'/')) == false - FileUtils.cd(@new_path.to_s) - @path_destination = Pathname.new(path.dirname) - @path_destination= @path_destination.parent.parent.parent + Pathname.new("bundler/gems/#{path.basename}") - if (Dir.exist?(@path_destination.to_s)) == false - begin - FileUtils.cd(@path_destination.dirname) - rescue - FileUtils.mkdir_p(@path_destination.dirname) - FileUtils.cd(@path_destination.dirname) + if path.to_s.include?("cache") + FileUtils.cd(path) + git_retry %|fetch --all| + @commit_num = `git log -1 --pretty=format:"%H"`[0..11] if revision.nil? + @commit_num = revision[0..11] if !revision.nil? + @new_path = path.dirname + @old_folder_name = path.basename.to_s + '/' + @fold_name ='' + @fold_name = path.basename.to_s + @fold_name = @fold_name.split('-')[0..-2].join('-') + @new_path += (@fold_name + '-' + @commit_num) + path = @new_path + FileUtils.cd('..') + FileUtils.mv( @old_folder_name , path.basename.to_s+'/') if (Dir.exist? (path.basename.to_s+'/')) == false + FileUtils.rmdir @old_folder_name.to_s if ( Dir.exist?(@old_folder_name.to_s+'/') && (@old_folder_name.to_s != path.basename.to_s)) + FileUtils.cd(@new_path.to_s) + @path_destination = Pathname.new(path.dirname) + @path_destination= @path_destination.parent.parent.parent + Pathname.new("bundler/gems/#{path.basename}") + if (Dir.exist?(@path_destination.to_s)) == false + begin + FileUtils.cd(@path_destination.dirname) + rescue + FileUtils.mkdir_p(@path_destination.dirname) + FileUtils.cd(@path_destination.dirname) + end + FileUtils.mkdir(@path_destination.basename) + `cp -r "#{path}"/. "#{@path_destination}"/.git/` + FileUtils.cd(@path_destination.basename) + `git init` + `git checkout "#{ref}"` + end + @gemspec_name = '' + FileUtils.cd(@path_destination.to_s) + `ls`.split.each{|name| (@gemspec_name = name.to_s and break) if (name.include? '.gemspec') == true} + @EXT_LOCK.synchronize do + Dir.chdir(Bundler.root.to_s) do + Bundler::load_gemspec("#{@path_destination}/#{@gemspec_name}") rescue puts "you don't have .gemspec file at #{@path_destination}" + end + end + else + @gemspec_name = '' + FileUtils.cd(path.to_s) + `ls`.split.each{|name| (@gemspec_name = name.to_s and break) if (name.include? '.gemspec') == true} + @EXT_LOCK.synchronize do + Dir.chdir(Bundler.root.to_s) do + Bundler::load_gemspec("#{path}/#{@gemspec_name}") rescue puts "you don't have .gemspec file at #{path}" + end end - FileUtils.mkdir(@path_destination.basename) - `cp -r "#{path}"/. "#{@path_destination}"/.git/` - FileUtils.cd(@path_destination.basename) - `git init` - `git checkout "#{ref}"` end - @gemspec_name = '' - FileUtils.cd(@path_destination.to_s) - `ls`.split.each{|name| (@gemspec_name = name.to_s and break) if (name.include? '.gemspec') == true} - Bundler::load_gemspec("#{@path_destination}/#{@gemspec_name}") rescue puts "you don't have .gemspec file at #{@path_destination}" end end FileUtils.cd(@org_pwd)