xcocoapods 1.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +6303 -0
- data/LICENSE +28 -0
- data/README.md +80 -0
- data/bin/pod +56 -0
- data/bin/sandbox-pod +168 -0
- data/lib/cocoapods.rb +73 -0
- data/lib/cocoapods/command.rb +175 -0
- data/lib/cocoapods/command/cache.rb +28 -0
- data/lib/cocoapods/command/cache/clean.rb +90 -0
- data/lib/cocoapods/command/cache/list.rb +69 -0
- data/lib/cocoapods/command/env.rb +66 -0
- data/lib/cocoapods/command/init.rb +128 -0
- data/lib/cocoapods/command/install.rb +45 -0
- data/lib/cocoapods/command/ipc.rb +19 -0
- data/lib/cocoapods/command/ipc/list.rb +40 -0
- data/lib/cocoapods/command/ipc/podfile.rb +31 -0
- data/lib/cocoapods/command/ipc/podfile_json.rb +30 -0
- data/lib/cocoapods/command/ipc/repl.rb +51 -0
- data/lib/cocoapods/command/ipc/spec.rb +29 -0
- data/lib/cocoapods/command/ipc/update_search_index.rb +24 -0
- data/lib/cocoapods/command/lib.rb +11 -0
- data/lib/cocoapods/command/lib/create.rb +105 -0
- data/lib/cocoapods/command/lib/lint.rb +121 -0
- data/lib/cocoapods/command/list.rb +39 -0
- data/lib/cocoapods/command/options/project_directory.rb +36 -0
- data/lib/cocoapods/command/options/repo_update.rb +34 -0
- data/lib/cocoapods/command/outdated.rb +140 -0
- data/lib/cocoapods/command/repo.rb +29 -0
- data/lib/cocoapods/command/repo/add.rb +103 -0
- data/lib/cocoapods/command/repo/lint.rb +82 -0
- data/lib/cocoapods/command/repo/list.rb +93 -0
- data/lib/cocoapods/command/repo/push.rb +281 -0
- data/lib/cocoapods/command/repo/remove.rb +36 -0
- data/lib/cocoapods/command/repo/update.rb +28 -0
- data/lib/cocoapods/command/setup.rb +103 -0
- data/lib/cocoapods/command/spec.rb +112 -0
- data/lib/cocoapods/command/spec/cat.rb +51 -0
- data/lib/cocoapods/command/spec/create.rb +283 -0
- data/lib/cocoapods/command/spec/edit.rb +87 -0
- data/lib/cocoapods/command/spec/env_spec.rb +53 -0
- data/lib/cocoapods/command/spec/lint.rb +137 -0
- data/lib/cocoapods/command/spec/which.rb +43 -0
- data/lib/cocoapods/command/update.rb +101 -0
- data/lib/cocoapods/config.rb +347 -0
- data/lib/cocoapods/core_overrides.rb +1 -0
- data/lib/cocoapods/downloader.rb +190 -0
- data/lib/cocoapods/downloader/cache.rb +233 -0
- data/lib/cocoapods/downloader/request.rb +86 -0
- data/lib/cocoapods/downloader/response.rb +16 -0
- data/lib/cocoapods/executable.rb +222 -0
- data/lib/cocoapods/external_sources.rb +57 -0
- data/lib/cocoapods/external_sources/abstract_external_source.rb +205 -0
- data/lib/cocoapods/external_sources/downloader_source.rb +30 -0
- data/lib/cocoapods/external_sources/path_source.rb +55 -0
- data/lib/cocoapods/external_sources/podspec_source.rb +54 -0
- data/lib/cocoapods/gem_version.rb +5 -0
- data/lib/cocoapods/generator/acknowledgements.rb +107 -0
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +44 -0
- data/lib/cocoapods/generator/acknowledgements/plist.rb +94 -0
- data/lib/cocoapods/generator/app_target_helper.rb +244 -0
- data/lib/cocoapods/generator/bridge_support.rb +22 -0
- data/lib/cocoapods/generator/constant.rb +19 -0
- data/lib/cocoapods/generator/copy_resources_script.rb +230 -0
- data/lib/cocoapods/generator/dummy_source.rb +31 -0
- data/lib/cocoapods/generator/embed_frameworks_script.rb +215 -0
- data/lib/cocoapods/generator/header.rb +103 -0
- data/lib/cocoapods/generator/info_plist_file.rb +116 -0
- data/lib/cocoapods/generator/module_map.rb +99 -0
- data/lib/cocoapods/generator/prefix_header.rb +60 -0
- data/lib/cocoapods/generator/umbrella_header.rb +46 -0
- data/lib/cocoapods/hooks_manager.rb +132 -0
- data/lib/cocoapods/installer.rb +703 -0
- data/lib/cocoapods/installer/analyzer.rb +972 -0
- data/lib/cocoapods/installer/analyzer/analysis_result.rb +87 -0
- data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +98 -0
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +67 -0
- data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +157 -0
- data/lib/cocoapods/installer/analyzer/podfile_dependency_cache.rb +54 -0
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +240 -0
- data/lib/cocoapods/installer/analyzer/specs_state.rb +84 -0
- data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +53 -0
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +260 -0
- data/lib/cocoapods/installer/installation_options.rb +158 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +202 -0
- data/lib/cocoapods/installer/pod_source_preparer.rb +77 -0
- data/lib/cocoapods/installer/podfile_validator.rb +139 -0
- data/lib/cocoapods/installer/post_install_hooks_context.rb +132 -0
- data/lib/cocoapods/installer/pre_install_hooks_context.rb +51 -0
- data/lib/cocoapods/installer/source_provider_hooks_context.rb +34 -0
- data/lib/cocoapods/installer/user_project_integrator.rb +250 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +463 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +146 -0
- data/lib/cocoapods/installer/xcode.rb +8 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +416 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +181 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +84 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +334 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +777 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +116 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +86 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +256 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +68 -0
- data/lib/cocoapods/installer/xcode/target_validator.rb +147 -0
- data/lib/cocoapods/open-uri.rb +33 -0
- data/lib/cocoapods/project.rb +414 -0
- data/lib/cocoapods/resolver.rb +585 -0
- data/lib/cocoapods/resolver/lazy_specification.rb +79 -0
- data/lib/cocoapods/sandbox.rb +404 -0
- data/lib/cocoapods/sandbox/file_accessor.rb +444 -0
- data/lib/cocoapods/sandbox/headers_store.rb +146 -0
- data/lib/cocoapods/sandbox/path_list.rb +220 -0
- data/lib/cocoapods/sandbox/pod_dir_cleaner.rb +85 -0
- data/lib/cocoapods/sandbox/podspec_finder.rb +23 -0
- data/lib/cocoapods/sources_manager.rb +157 -0
- data/lib/cocoapods/target.rb +261 -0
- data/lib/cocoapods/target/aggregate_target.rb +338 -0
- data/lib/cocoapods/target/build_settings.rb +1075 -0
- data/lib/cocoapods/target/pod_target.rb +559 -0
- data/lib/cocoapods/user_interface.rb +459 -0
- data/lib/cocoapods/user_interface/error_report.rb +187 -0
- data/lib/cocoapods/user_interface/inspector_reporter.rb +109 -0
- data/lib/cocoapods/validator.rb +981 -0
- metadata +533 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class List < Command
|
4
|
+
self.summary = 'List pods'
|
5
|
+
self.description = 'Lists all available pods.'
|
6
|
+
|
7
|
+
def self.options
|
8
|
+
[
|
9
|
+
['--update', 'Run `pod repo update` before listing'],
|
10
|
+
['--stats', 'Show additional stats (like GitHub watchers and forks)'],
|
11
|
+
].concat(super)
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(argv)
|
15
|
+
@update = argv.flag?('update')
|
16
|
+
@stats = argv.flag?('stats')
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def run
|
21
|
+
update_if_necessary!
|
22
|
+
|
23
|
+
sets = config.sources_manager.aggregate.all_sets
|
24
|
+
sets.each { |set| UI.pod(set, :name_and_version) }
|
25
|
+
UI.puts "\n#{sets.count} pods were found"
|
26
|
+
end
|
27
|
+
|
28
|
+
def update_if_necessary!
|
29
|
+
if @update && config.verbose?
|
30
|
+
UI.section("\nUpdating Spec Repositories\n".yellow) do
|
31
|
+
Repo.new(ARGV.new(['update'])).run
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
#-----------------------------------------------------------------------#
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
module Options
|
4
|
+
# Provides support for commands to take a user-specified `project directory`
|
5
|
+
#
|
6
|
+
module ProjectDirectory
|
7
|
+
module Options
|
8
|
+
def options
|
9
|
+
[
|
10
|
+
['--project-directory=/project/dir/', 'The path to the root of the project directory'],
|
11
|
+
].concat(super)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.included(base)
|
16
|
+
base.extend(Options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(argv)
|
20
|
+
if project_directory = argv.option('project-directory')
|
21
|
+
@project_directory = Pathname.new(project_directory).expand_path
|
22
|
+
end
|
23
|
+
config.installation_root = @project_directory
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def validate!
|
28
|
+
super
|
29
|
+
if @project_directory && !@project_directory.directory?
|
30
|
+
raise Informative, "`#{@project_directory}` is not a valid directory."
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
module Options
|
4
|
+
# Provides support for commands to skip updating the spec repositories.
|
5
|
+
#
|
6
|
+
module RepoUpdate
|
7
|
+
module Options
|
8
|
+
def options
|
9
|
+
[
|
10
|
+
['--no-repo-update', 'Skip running `pod repo update` before install'],
|
11
|
+
].concat(super)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.included(base)
|
16
|
+
base.extend(Options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def repo_update?(default: false)
|
20
|
+
if @repo_update.nil?
|
21
|
+
default
|
22
|
+
else
|
23
|
+
@repo_update
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(argv)
|
28
|
+
@repo_update = argv.flag?('repo-update')
|
29
|
+
super
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class Outdated < Command
|
4
|
+
include RepoUpdate
|
5
|
+
include ProjectDirectory
|
6
|
+
|
7
|
+
self.summary = 'Show outdated project dependencies'
|
8
|
+
|
9
|
+
self.description = <<-DESC
|
10
|
+
Shows the outdated pods in the current Podfile.lock, but only those from
|
11
|
+
spec repos, not those from local/external sources.
|
12
|
+
DESC
|
13
|
+
|
14
|
+
# Run the command
|
15
|
+
#
|
16
|
+
def run
|
17
|
+
if updates.empty?
|
18
|
+
UI.puts 'No pod updates are available.'.yellow
|
19
|
+
else
|
20
|
+
UI.section 'The color indicates what happens when you run `pod update`' do
|
21
|
+
UI.puts "#{'<green>'.green}\t - Will be updated to the newest version"
|
22
|
+
UI.puts "#{'<blue>'.blue}\t - Will be updated, but not to the newest version because of specified version in Podfile"
|
23
|
+
UI.puts "#{'<red>'.red}\t - Will not be updated because of specified version in Podfile"
|
24
|
+
UI.puts ''
|
25
|
+
end
|
26
|
+
UI.section 'The following pod updates are available:' do
|
27
|
+
updates.each do |(name, from_version, matching_version, to_version)|
|
28
|
+
color = :blue
|
29
|
+
if matching_version == to_version
|
30
|
+
color = :green
|
31
|
+
elsif from_version == matching_version
|
32
|
+
color = :red
|
33
|
+
end
|
34
|
+
# For the specs, its necessary that to_s is called here even though it is redundant
|
35
|
+
# https://github.com/CocoaPods/CocoaPods/pull/7204#issuecomment-342512015
|
36
|
+
UI.puts "- #{name} #{from_version.to_s.send(color)} -> #{matching_version.to_s.send(color)} " \
|
37
|
+
"(latest version #{to_version.to_s})" # rubocop:disable Lint/StringConversionInInterpolation
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
if deprecated_pods.any?
|
43
|
+
UI.section 'The following pods are deprecated:' do
|
44
|
+
deprecated_pods.each do |spec|
|
45
|
+
if spec.deprecated_in_favor_of
|
46
|
+
UI.puts "- #{spec.name}" \
|
47
|
+
" (in favor of #{spec.deprecated_in_favor_of})"
|
48
|
+
else
|
49
|
+
UI.puts "- #{spec.name}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def analyzer
|
59
|
+
@analyzer ||= begin
|
60
|
+
verify_podfile_exists!
|
61
|
+
Installer::Analyzer.new(config.sandbox, config.podfile, config.lockfile)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def updates
|
66
|
+
@updates ||= begin
|
67
|
+
ensure_external_podspecs_present!
|
68
|
+
spec_sets.map do |set|
|
69
|
+
spec = set.specification
|
70
|
+
source_version = set.versions.first
|
71
|
+
pod_name = spec.root.name
|
72
|
+
lockfile_version = lockfile.version(pod_name)
|
73
|
+
if source_version > lockfile_version
|
74
|
+
matching_spec = unlocked_pods.find { |s| s.name == pod_name }
|
75
|
+
matching_version =
|
76
|
+
matching_spec ? matching_spec.version : '(unused)'
|
77
|
+
[pod_name, lockfile_version, matching_version, source_version]
|
78
|
+
end
|
79
|
+
end.compact.uniq
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def unlocked_pods
|
84
|
+
@unlocked_pods ||= begin
|
85
|
+
pods = []
|
86
|
+
UI.titled_section('Analyzing dependencies') do
|
87
|
+
pods = Installer::Analyzer.new(config.sandbox, config.podfile).
|
88
|
+
analyze(false).
|
89
|
+
specs_by_target.values.flatten.uniq
|
90
|
+
end
|
91
|
+
pods
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def deprecated_pods
|
96
|
+
@deprecated_pods ||= begin
|
97
|
+
spec_sets.map(&:specification).select do |spec|
|
98
|
+
spec.deprecated || spec.deprecated_in_favor_of
|
99
|
+
end.compact.uniq
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def spec_sets
|
104
|
+
@spec_sets ||= begin
|
105
|
+
analyzer.send(:update_repositories) if repo_update?(:default => true)
|
106
|
+
aggregate = Source::Aggregate.new(analyzer.sources)
|
107
|
+
installed_pods.map do |pod_name|
|
108
|
+
aggregate.search(Dependency.new(pod_name))
|
109
|
+
end.compact.uniq
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def installed_pods
|
114
|
+
@installed_pods ||= begin
|
115
|
+
verify_podfile_exists!
|
116
|
+
|
117
|
+
lockfile.pod_names
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def lockfile
|
122
|
+
@lockfile ||= begin
|
123
|
+
verify_lockfile_exists!
|
124
|
+
config.lockfile
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def ensure_external_podspecs_present!
|
129
|
+
return unless config.podfile
|
130
|
+
config.podfile.dependencies.each do |dep|
|
131
|
+
next if dep.external_source.nil?
|
132
|
+
unless config.sandbox.specification(dep.root_name)
|
133
|
+
raise Informative, 'You must run `pod install` first to ensure that the ' \
|
134
|
+
"podspec for `#{dep.root_name}` has been fetched."
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'cocoapods/command/repo/add'
|
3
|
+
require 'cocoapods/command/repo/lint'
|
4
|
+
require 'cocoapods/command/repo/list'
|
5
|
+
require 'cocoapods/command/repo/push'
|
6
|
+
require 'cocoapods/command/repo/remove'
|
7
|
+
require 'cocoapods/command/repo/update'
|
8
|
+
|
9
|
+
module Pod
|
10
|
+
class Command
|
11
|
+
class Repo < Command
|
12
|
+
self.abstract_command = true
|
13
|
+
|
14
|
+
# @todo should not show a usage banner!
|
15
|
+
#
|
16
|
+
self.summary = 'Manage spec-repositories'
|
17
|
+
self.default_subcommand = 'list'
|
18
|
+
|
19
|
+
#-----------------------------------------------------------------------#
|
20
|
+
|
21
|
+
extend Executable
|
22
|
+
executable :git
|
23
|
+
|
24
|
+
def dir
|
25
|
+
config.repos_dir + @name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class Repo < Command
|
4
|
+
class Add < Repo
|
5
|
+
self.summary = 'Add a spec repo'
|
6
|
+
|
7
|
+
self.description = <<-DESC
|
8
|
+
Clones `URL` in the local spec-repos directory at `#{Config.instance.repos_dir}`. The
|
9
|
+
remote can later be referred to by `NAME`.
|
10
|
+
DESC
|
11
|
+
|
12
|
+
self.arguments = [
|
13
|
+
CLAide::Argument.new('NAME', true),
|
14
|
+
CLAide::Argument.new('URL', true),
|
15
|
+
CLAide::Argument.new('BRANCH', false),
|
16
|
+
]
|
17
|
+
|
18
|
+
def self.options
|
19
|
+
[
|
20
|
+
['--progress', 'Show the progress of cloning the spec repository'],
|
21
|
+
].concat(super)
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(argv)
|
25
|
+
@name = argv.shift_argument
|
26
|
+
@url = argv.shift_argument
|
27
|
+
@branch = argv.shift_argument
|
28
|
+
@progress = argv.flag?('progress')
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
def validate!
|
33
|
+
super
|
34
|
+
unless @name && @url
|
35
|
+
help! 'Adding a repo needs a `NAME` and a `URL`.'
|
36
|
+
end
|
37
|
+
if @name == 'master' || @url =~ %r{github.com[:/]+cocoapods/specs}i
|
38
|
+
raise Informative,
|
39
|
+
'To setup the master specs repo, please run `pod setup`.'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def run
|
44
|
+
section = "Cloning spec repo `#{@name}` from `#{@url}`"
|
45
|
+
section << " (branch `#{@branch}`)" if @branch
|
46
|
+
UI.section(section) do
|
47
|
+
create_repos_dir
|
48
|
+
clone_repo
|
49
|
+
checkout_branch
|
50
|
+
config.sources_manager.sources([dir.basename.to_s]).each(&:verify_compatibility!)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
# Creates the repos directory specified in the configuration by
|
57
|
+
# `config.repos_dir`.
|
58
|
+
#
|
59
|
+
# @return [void]
|
60
|
+
#
|
61
|
+
# @raise If the directory cannot be created due to a system error.
|
62
|
+
#
|
63
|
+
def create_repos_dir
|
64
|
+
config.repos_dir.mkpath
|
65
|
+
rescue => e
|
66
|
+
raise Informative, "Could not create '#{config.repos_dir}', the CocoaPods repo cache directory.\n" \
|
67
|
+
"#{e.class.name}: #{e.message}"
|
68
|
+
end
|
69
|
+
|
70
|
+
# Clones the git spec-repo according to parameters passed to the
|
71
|
+
# command.
|
72
|
+
#
|
73
|
+
# @return [void]
|
74
|
+
#
|
75
|
+
def clone_repo
|
76
|
+
changes = if @progress
|
77
|
+
{ :verbose => true }
|
78
|
+
else
|
79
|
+
{}
|
80
|
+
end
|
81
|
+
|
82
|
+
config.with_changes(changes) do
|
83
|
+
Dir.chdir(config.repos_dir) do
|
84
|
+
command = ['clone', @url, @name]
|
85
|
+
if @progress
|
86
|
+
command << '--progress'
|
87
|
+
end
|
88
|
+
git!(command)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Checks out the branch of the git spec-repo if provided.
|
94
|
+
#
|
95
|
+
# @return [void]
|
96
|
+
#
|
97
|
+
def checkout_branch
|
98
|
+
Dir.chdir(dir) { git!('checkout', @branch) } if @branch
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class Repo < Command
|
4
|
+
class Lint < Repo
|
5
|
+
self.summary = 'Validates all specs in a repo'
|
6
|
+
|
7
|
+
self.description = <<-DESC
|
8
|
+
Lints the spec-repo `NAME`. If a directory is provided it is assumed
|
9
|
+
to be the root of a repo. Finally, if `NAME` is not provided this
|
10
|
+
will lint all the spec-repos known to CocoaPods.
|
11
|
+
DESC
|
12
|
+
|
13
|
+
self.arguments = [
|
14
|
+
CLAide::Argument.new(%w(NAME DIRECTORY), false),
|
15
|
+
]
|
16
|
+
|
17
|
+
def self.options
|
18
|
+
[
|
19
|
+
['--only-errors', 'Lint presents only the errors'],
|
20
|
+
].concat(super)
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(argv)
|
24
|
+
@name = argv.shift_argument
|
25
|
+
@only_errors = argv.flag?('only-errors')
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
# Run the command
|
30
|
+
#
|
31
|
+
# @todo Part of this logic needs to be ported to cocoapods-core so web
|
32
|
+
# services can validate the repo.
|
33
|
+
#
|
34
|
+
# @todo add UI.print and enable print statements again.
|
35
|
+
#
|
36
|
+
def run
|
37
|
+
sources = if @name
|
38
|
+
if File.exist?(@name)
|
39
|
+
[Source.new(Pathname(@name))]
|
40
|
+
else
|
41
|
+
config.sources_manager.sources([@name])
|
42
|
+
end
|
43
|
+
else
|
44
|
+
config.sources_manager.all
|
45
|
+
end
|
46
|
+
|
47
|
+
sources.each do |source|
|
48
|
+
source.verify_compatibility!
|
49
|
+
UI.puts "\nLinting spec repo `#{source.name}`\n".yellow
|
50
|
+
|
51
|
+
validator = Source::HealthReporter.new(source.repo)
|
52
|
+
validator.pre_check do |_name, _version|
|
53
|
+
UI.print '.'
|
54
|
+
end
|
55
|
+
report = validator.analyze
|
56
|
+
UI.puts
|
57
|
+
UI.puts
|
58
|
+
|
59
|
+
report.pods_by_warning.each do |message, versions_by_name|
|
60
|
+
UI.puts "-> #{message}".yellow
|
61
|
+
versions_by_name.each { |name, versions| UI.puts " - #{name} (#{versions * ', '})" }
|
62
|
+
UI.puts
|
63
|
+
end
|
64
|
+
|
65
|
+
report.pods_by_error.each do |message, versions_by_name|
|
66
|
+
UI.puts "-> #{message}".red
|
67
|
+
versions_by_name.each { |name, versions| UI.puts " - #{name} (#{versions * ', '})" }
|
68
|
+
UI.puts
|
69
|
+
end
|
70
|
+
|
71
|
+
UI.puts "Analyzed #{report.analyzed_paths.count} podspecs files.\n\n"
|
72
|
+
if report.pods_by_error.count.zero?
|
73
|
+
UI.puts 'All the specs passed validation.'.green << "\n\n"
|
74
|
+
else
|
75
|
+
raise Informative, "#{report.pods_by_error.count} podspecs failed validation."
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|