Skip to content

Commit

Permalink
Merge branch 'master' into local-pod-source
Browse files Browse the repository at this point in the history
* master:
  [#112] Refactoring based on suggestions by @alloy
  [#112] Improved remote url detection for spec repo
  [#132, #183] Fix to make repo update tolerant of stray files ~./cocoapods
  [#112] Introduced --push option for setup command
  • Loading branch information
fabiopelosin committed Mar 21, 2012
2 parents 95f101f + e9b1d40 commit 06ef7f2
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 23 deletions.
16 changes: 3 additions & 13 deletions lib/cocoapods/command/repo.rb
Expand Up @@ -14,19 +14,15 @@ def self.banner
$ pod repo update NAME
Updates the local clone of the spec-repo `NAME'. If `NAME' is omitted
this will update all spec-repos in `~/.cocoapods'.
$ pod repo set-url NAME URL
Updates the remote `URL' of the spec-repo `NAME'.}
this will update all spec-repos in `~/.cocoapods'.}
end

extend Executable
executable :git

def initialize(argv)
case @action = argv.arguments[0]
when 'add', 'set-url'
when 'add'
unless (@name = argv.arguments[1]) && (@url = argv.arguments[2])
raise Informative, "#{@action == 'add' ? 'Adding' : 'Updating the remote of'} a repo needs a `name' and a `url'."
end
Expand All @@ -52,18 +48,12 @@ def add
end

def update
dirs = @name ? [dir] : config.repos_dir.children
dirs = @name ? [dir] : config.repos_dir.children.select {|c| c.directory?}
dirs.each do |dir|
puts "Updating spec repo `#{dir.basename}'" unless config.silent?
Dir.chdir(dir) { git("pull") }
end
end

def set_url
Dir.chdir(dir) do
git("remote set-url origin '#{@url}'")
end
end
end
end
end
Expand Down
53 changes: 46 additions & 7 deletions lib/cocoapods/command/setup.rb
Expand Up @@ -14,29 +14,68 @@ def self.banner
If the clone already exists, it will ensure that it is up-to-date.}
end

def self.options
" --push Use this option to enable push access once granted\n" +
super
end

extend Executable
executable :git

def initialize(argv)
@push_option = argv.option('--push')
super unless argv.empty?
end

def master_repo_url
def dir
config.repos_dir + 'master'
end

def read_only_url
'git://github.com/CocoaPods/Specs.git'
end

def add_master_repo_command
@command ||= Repo.new(ARGV.new(['add', 'master', master_repo_url]))
def read_write_url
'git@github.com:CocoaPods/Specs.git'
end

def url
if push?
read_write_url
else
read_only_url
end
end

def update_master_repo_remote_command
Repo.new(ARGV.new(['set-url', 'master', master_repo_url]))
def origin_url_push?
Dir.chdir(dir) do
origin_url = git('config --get remote.origin.url')
origin_url.chomp == read_write_url
end
end

def push?
@push_option || (dir.exist? && origin_url_push?)
end

def set_master_repo_url
Dir.chdir(dir) do
git("remote set-url origin '#{url}'")
end
end

def add_master_repo_command
@command ||= Repo.new(ARGV.new(['add', 'master', url]))
end

def update_master_repo_command
Repo.new(ARGV.new(['update', 'master']))
end

def run
if (config.repos_dir + 'master').exist?
update_master_repo_remote_command.run
puts "Using push access" if push? && !config.silent
if dir.exist?
set_master_repo_url
update_master_repo_command.run
else
add_master_repo_command.run
Expand Down
12 changes: 11 additions & 1 deletion spec/functional/command_spec.rb
Expand Up @@ -6,11 +6,21 @@

it "creates the local spec-repos directory and creates a clone of the `master' repo" do
command = Pod::Command.parse('setup', '--silent')
def command.master_repo_url; SpecHelper.fixture('spec-repos/master'); end
def command.url; SpecHelper.fixture('spec-repos/master'); end
command.run
git_config('master', 'remote.origin.url').should == fixture('spec-repos/master').to_s
end

it "preserve push access for the `master' repo" do
command = Pod::Command.parse('setup', '--silent')
def command.url; SpecHelper.fixture('spec-repos/master'); end
command.run
command2 = Pod::Command.parse('setup', '--silent')
command2.url.should == 'git://github.com/CocoaPods/Specs.git'
git('master', 'remote set-url origin git@github.com:CocoaPods/Specs.git')
command2.url.should == 'git@github.com:CocoaPods/Specs.git'
end

it "adds a spec-repo" do
add_repo('private', fixture('spec-repos/master'))
git_config('private', 'remote.origin.url').should == fixture('spec-repos/master').to_s
Expand Down
11 changes: 9 additions & 2 deletions spec/unit/command_spec.rb
Expand Up @@ -2,6 +2,7 @@

describe "Pod::Command" do
it "returns the proper command class" do
config.silent.should == true
Pod::Command.parse('setup').should.be.instance_of Pod::Command::Setup
#Pod::Command.parse('spec').should.be.instance_of Pod::Command::Spec
Pod::Command.parse('repo', 'update').should.be.instance_of Pod::Command::Repo
Expand All @@ -13,9 +14,15 @@
lambda { Pod::Command::Setup.new(argv('something')) }.should.raise Pod::Command::Help
end

it "returns the URL of the `master' spec-repo" do
it "returns the read only URL of the `master' spec-repo" do
command = Pod::Command::Setup.new(argv)
command.master_repo_url.should == 'git://github.com/CocoaPods/Specs.git'
command.url.should == 'git://github.com/CocoaPods/Specs.git'
end

it "returns the push URL of the `master' spec-repo" do
config.silent = true
command = Pod::Command::Setup.new(argv('--push'))
command.url.should == 'git@github.com:CocoaPods/Specs.git'
end
end

Expand Down

0 comments on commit 06ef7f2

Please sign in to comment.