Commit f6db4322 authored by Boris Bügling's avatar Boris Bügling Committed by GitHub

Merge pull request #5572 from maschall/Repo-Push-Url

[repo/push] allow URLs for pushing to private repos
parents 4ab73504 ba041adf
......@@ -28,6 +28,9 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
[Boris Bügling](https://github.com/neonichu)
[#5558](https://github.com/CocoaPods/CocoaPods/issues/5558)
* Accept `pod repo push` with URL instead of only repo name
[Mark Schall](https://github.com/maschall)
[#5572](https://github.com/CocoaPods/CocoaPods/pull/5572)
##### Bug Fixes
......
......@@ -39,7 +39,7 @@ module Pod
@allow_warnings = argv.flag?('allow-warnings')
@local_only = argv.flag?('local-only')
@repo = argv.shift_argument
@source = config.sources_manager.sources([@repo]).first unless @repo.nil?
@source = source_for_repo
@source_urls = argv.option('sources', config.sources_manager.all.map(&:url).join(',')).split(',')
@podspec = argv.shift_argument
@use_frameworks = !argv.flag?('use-libraries')
......@@ -52,8 +52,8 @@ module Pod
def validate!
super
help! 'A spec-repo name is required.' unless @repo
unless @source.repo.directory?
help! 'A spec-repo name or url is required.' unless @repo
unless @source && @source.repo.directory?
raise Informative,
"Unable to find the `#{@repo}` repo. " \
'If it has not yet been cloned, add it via `pod repo add`.'
......@@ -243,6 +243,18 @@ module Pod
podspec_files.count
end
# Returns source for @repo
#
# @note If URL is invalid or repo doesn't exist, validate! will throw the error
#
# @return [Source]
#
def source_for_repo
config.sources_manager.source_with_name_or_url(@repo) unless @repo.nil?
rescue
nil
end
#---------------------------------------------------------------------#
end
end
......
......@@ -17,6 +17,15 @@ module Pod
end
end
it "complains if it can't get repo url" do
Dir.chdir(fixture('banana-lib')) do
Command::Repo::Add.any_instance.stubs(:clone_repo)
cmd = command('repo', 'push', 'https://github.com/foo/bar.git')
e = lambda { cmd.validate! }.should.raise Informative
e.message.should.include('Unable to find the `https://github.com/foo/bar.git` repo')
end
end
it "complains if it can't find a spec" do
repo_make('test_repo')
e = lambda { run_command('repo', 'push', 'test_repo') }.should.raise Pod::Informative
......@@ -79,7 +88,7 @@ module Pod
File.open(temporary_directory + 'BananaLib.podspec', 'w') { |f| f.write(spec_clean) }
end
it 'refuses to push if the repo is not clean' do
it 'refuses to push if the repo is master' do
Dir.chdir(test_repo_path) do
`git remote set-url origin https://github.com/CocoaPods/Specs.git`
end
......@@ -118,6 +127,15 @@ module Pod
(@upstream + 'PushTest/1.4/PushTest.podspec').read.should.include('PushTest')
end
it 'successfully pushes a spec to URL' do
cmd = command('repo', 'push', @upstream)
Dir.chdir(@upstream) { `git checkout -b tmp_for_push -q` }
cmd.expects(:validate_podspec_files).returns(true)
Dir.chdir(temporary_directory) { cmd.run }
Dir.chdir(@upstream) { `git checkout master -q` }
(@upstream + 'PushTest/1.4/PushTest.podspec').read.should.include('PushTest')
end
it 'successfully pushes converted JSON podspec' do
cmd = command('repo', 'push', 'master', '--use-json')
Dir.chdir(@upstream) { `git checkout -b tmp_for_push -q` }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment