cocoapods 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +329 -0
  3. data/lib/cocoapods/command/init.rb +6 -6
  4. data/lib/cocoapods/command/ipc/list.rb +40 -0
  5. data/lib/cocoapods/command/ipc/podfile.rb +31 -0
  6. data/lib/cocoapods/command/ipc/repl.rb +51 -0
  7. data/lib/cocoapods/command/ipc/spec.rb +29 -0
  8. data/lib/cocoapods/command/ipc/update_search_index.rb +24 -0
  9. data/lib/cocoapods/command/ipc.rb +18 -0
  10. data/lib/cocoapods/command/lib/create.rb +105 -0
  11. data/lib/cocoapods/command/lib/lint.rb +111 -0
  12. data/lib/cocoapods/command/lib.rb +3 -207
  13. data/lib/cocoapods/command/repo/push.rb +44 -20
  14. data/lib/cocoapods/command/setup.rb +2 -1
  15. data/lib/cocoapods/command/spec/lint.rb +4 -0
  16. data/lib/cocoapods/command.rb +2 -1
  17. data/lib/cocoapods/config.rb +4 -1
  18. data/lib/cocoapods/downloader/cache.rb +1 -0
  19. data/lib/cocoapods/downloader.rb +20 -0
  20. data/lib/cocoapods/executable.rb +1 -1
  21. data/lib/cocoapods/gem_version.rb +1 -1
  22. data/lib/cocoapods/generator/acknowledgements/plist.rb +4 -1
  23. data/lib/cocoapods/generator/copy_resources_script.rb +4 -10
  24. data/lib/cocoapods/generator/header.rb +2 -1
  25. data/lib/cocoapods/generator/prefix_header.rb +0 -12
  26. data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +38 -5
  27. data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +5 -4
  28. data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +5 -1
  29. data/lib/cocoapods/installer/analyzer/target_inspector.rb +24 -1
  30. data/lib/cocoapods/installer/analyzer.rb +161 -1
  31. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +29 -9
  32. data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +204 -0
  33. data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +314 -0
  34. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +401 -0
  35. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +214 -0
  36. data/lib/cocoapods/installer/xcode/pods_project_generator.rb +265 -0
  37. data/lib/cocoapods/installer/xcode.rb +7 -0
  38. data/lib/cocoapods/installer.rb +50 -214
  39. data/lib/cocoapods/resolver.rb +15 -9
  40. data/lib/cocoapods/sandbox/headers_store.rb +4 -10
  41. data/lib/cocoapods/sandbox/path_list.rb +20 -9
  42. data/lib/cocoapods/sources_manager.rb +7 -10
  43. data/lib/cocoapods/target/aggregate_target.rb +20 -0
  44. data/lib/cocoapods/target/pod_target.rb +37 -7
  45. data/lib/cocoapods/user_interface/error_report.rb +7 -0
  46. data/lib/cocoapods/user_interface/inspector_reporter.rb +109 -0
  47. data/lib/cocoapods/user_interface.rb +7 -5
  48. data/lib/cocoapods/validator.rb +59 -11
  49. metadata +112 -83
  50. data/lib/cocoapods/command/inter_process_communication.rb +0 -177
  51. data/lib/cocoapods/installer/file_references_installer.rb +0 -310
  52. data/lib/cocoapods/installer/migrator.rb +0 -86
  53. data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +0 -191
  54. data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +0 -368
  55. data/lib/cocoapods/installer/target_installer.rb +0 -210
@@ -0,0 +1,105 @@
1
+ module Pod
2
+ class Command
3
+ class Lib < Command
4
+ class Create < Lib
5
+ self.summary = 'Creates a new Pod'
6
+
7
+ self.description = <<-DESC
8
+ Creates a scaffold for the development of a new Pod named `NAME`
9
+ according to the CocoaPods best practices.
10
+ If a `TEMPLATE_URL`, pointing to a git repo containing a compatible
11
+ template, is specified, it will be used in place of the default one.
12
+ DESC
13
+
14
+ self.arguments = [
15
+ CLAide::Argument.new('NAME', true),
16
+ ]
17
+
18
+ def self.options
19
+ [
20
+ ['--template-url=URL', 'The URL of the git repo containing a ' \
21
+ 'compatible template'],
22
+ ].concat(super)
23
+ end
24
+
25
+ def initialize(argv)
26
+ @name = argv.shift_argument
27
+ @template_url = argv.option('template-url', TEMPLATE_REPO)
28
+ super
29
+ @additional_args = argv.remainder!
30
+ end
31
+
32
+ def validate!
33
+ super
34
+ help! 'A name for the Pod is required.' unless @name
35
+ help! 'The Pod name cannot contain spaces.' if @name =~ /\s/
36
+ help! 'The Pod name cannot contain plusses.' if @name =~ /\+/
37
+ help! "The Pod name cannot begin with a '.'" if @name[0, 1] == '.'
38
+ end
39
+
40
+ def run
41
+ clone_template
42
+ configure_template
43
+ print_info
44
+ end
45
+
46
+ private
47
+
48
+ #----------------------------------------#
49
+
50
+ # !@group Private helpers
51
+
52
+ extend Executable
53
+ executable :git
54
+
55
+ TEMPLATE_REPO = 'https://github.com/CocoaPods/pod-template.git'.freeze
56
+ TEMPLATE_INFO_URL = 'https://github.com/CocoaPods/pod-template'.freeze
57
+ CREATE_NEW_POD_INFO_URL = 'http://guides.cocoapods.org/making/making-a-cocoapod'.freeze
58
+
59
+ # Clones the template from the remote in the working directory using
60
+ # the name of the Pod.
61
+ #
62
+ # @return [void]
63
+ #
64
+ def clone_template
65
+ UI.section("Cloning `#{template_repo_url}` into `#{@name}`.") do
66
+ git! ['clone', template_repo_url, @name]
67
+ end
68
+ end
69
+
70
+ # Runs the template configuration utilities.
71
+ #
72
+ # @return [void]
73
+ #
74
+ def configure_template
75
+ UI.section("Configuring #{@name} template.") do
76
+ Dir.chdir(@name) do
77
+ if File.exist?('configure')
78
+ system({ 'COCOAPODS_VERSION' => Pod::VERSION }, './configure', @name, *@additional_args)
79
+ else
80
+ UI.warn 'Template does not have a configure file.'
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ # Runs the template configuration utilities.
87
+ #
88
+ # @return [void]
89
+ #
90
+ def print_info
91
+ UI.puts "\nTo learn more about the template see `#{template_repo_url}`."
92
+ UI.puts "To learn more about creating a new pod, see `#{CREATE_NEW_POD_INFO_URL}`."
93
+ end
94
+
95
+ # Checks if a template URL is given else returns the TEMPLATE_REPO URL
96
+ #
97
+ # @return String
98
+ #
99
+ def template_repo_url
100
+ @template_url || TEMPLATE_REPO
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,111 @@
1
+ module Pod
2
+ class Command
3
+ class Lib < Command
4
+ class Lint < Lib
5
+ self.summary = 'Validates a Pod'
6
+
7
+ self.description = <<-DESC
8
+ Validates the Pod using the files in the working directory.
9
+ DESC
10
+
11
+ def self.options
12
+ [
13
+ ['--quick', 'Lint skips checks that would require to download and build the spec'],
14
+ ['--allow-warnings', 'Lint validates even if warnings are present'],
15
+ ['--subspec=NAME', 'Lint validates only the given subspec'],
16
+ ['--no-subspecs', 'Lint skips validation of subspecs'],
17
+ ['--no-clean', 'Lint leaves the build directory intact for inspection'],
18
+ ['--fail-fast', 'Lint stops on the first failing platform or subspec'],
19
+ ['--use-libraries', 'Lint uses static libraries to install the spec'],
20
+ ['--sources=https://github.com/artsy/Specs,master', 'The sources from which to pull dependent pods ' \
21
+ '(defaults to https://github.com/CocoaPods/Specs.git). ' \
22
+ 'Multiple sources must be comma-delimited.'],
23
+ ['--private', 'Lint skips checks that apply only to public specs'],
24
+ ['--swift-version=VERSION', 'The SWIFT_VERSION that should be used to lint the spec. ' \
25
+ 'This takes precedence over a .swift-version file.'],
26
+ ].concat(super)
27
+ end
28
+
29
+ def initialize(argv)
30
+ @quick = argv.flag?('quick')
31
+ @allow_warnings = argv.flag?('allow-warnings')
32
+ @clean = argv.flag?('clean', true)
33
+ @fail_fast = argv.flag?('fail-fast', false)
34
+ @subspecs = argv.flag?('subspecs', true)
35
+ @only_subspec = argv.option('subspec')
36
+ @use_frameworks = !argv.flag?('use-libraries')
37
+ @source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
38
+ @private = argv.flag?('private', false)
39
+ @swift_version = argv.option('swift-version', nil)
40
+ @podspecs_paths = argv.arguments!
41
+ super
42
+ end
43
+
44
+ def validate!
45
+ super
46
+ end
47
+
48
+ def run
49
+ UI.puts
50
+ podspecs_to_lint.each do |podspec|
51
+ validator = Validator.new(podspec, @source_urls)
52
+ validator.local = true
53
+ validator.quick = @quick
54
+ validator.no_clean = !@clean
55
+ validator.fail_fast = @fail_fast
56
+ validator.allow_warnings = @allow_warnings
57
+ validator.no_subspecs = !@subspecs || @only_subspec
58
+ validator.only_subspec = @only_subspec
59
+ validator.use_frameworks = @use_frameworks
60
+ validator.ignore_public_only_results = @private
61
+ validator.swift_version = @swift_version
62
+ validator.validate
63
+
64
+ unless @clean
65
+ UI.puts "Pods workspace available at `#{validator.validation_dir}/App.xcworkspace` for inspection."
66
+ UI.puts
67
+ end
68
+ if validator.validated?
69
+ UI.puts "#{validator.spec.name} passed validation.".green
70
+ else
71
+ spec_name = podspec
72
+ spec_name = validator.spec.name if validator.spec
73
+ message = "#{spec_name} did not pass validation, due to #{validator.failure_reason}."
74
+
75
+ if @clean
76
+ message << "\nYou can use the `--no-clean` option to inspect " \
77
+ 'any issue.'
78
+ end
79
+ raise Informative, message
80
+ end
81
+ end
82
+ end
83
+
84
+ private
85
+
86
+ #----------------------------------------#
87
+
88
+ # !@group Private helpers
89
+
90
+ # @return [Pathname] The path of the podspec found in the current
91
+ # working directory.
92
+ #
93
+ # @raise If no podspec is found.
94
+ # @raise If multiple podspecs are found.
95
+ #
96
+ def podspecs_to_lint
97
+ if !@podspecs_paths.empty?
98
+ Array(@podspecs_paths)
99
+ else
100
+ podspecs = Pathname.glob(Pathname.pwd + '*.podspec{.json,}')
101
+ if podspecs.count.zero?
102
+ raise Informative, 'Unable to find a podspec in the working ' \
103
+ 'directory'
104
+ end
105
+ podspecs
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -1,215 +1,11 @@
1
+ require 'cocoapods/command/lib/create'
2
+ require 'cocoapods/command/lib/lint'
3
+
1
4
  module Pod
2
5
  class Command
3
6
  class Lib < Command
4
7
  self.abstract_command = true
5
8
  self.summary = 'Develop pods'
6
-
7
- #-----------------------------------------------------------------------#
8
-
9
- class Create < Lib
10
- self.summary = 'Creates a new Pod'
11
-
12
- self.description = <<-DESC
13
- Creates a scaffold for the development of a new Pod named `NAME`
14
- according to the CocoaPods best practices.
15
- If a `TEMPLATE_URL`, pointing to a git repo containing a compatible
16
- template, is specified, it will be used in place of the default one.
17
- DESC
18
-
19
- self.arguments = [
20
- CLAide::Argument.new('NAME', true),
21
- ]
22
-
23
- def self.options
24
- [
25
- ['--template-url=URL', 'The URL of the git repo containing a ' \
26
- 'compatible template'],
27
- ].concat(super)
28
- end
29
-
30
- def initialize(argv)
31
- @name = argv.shift_argument
32
- @template_url = argv.option('template-url', TEMPLATE_REPO)
33
- super
34
- @additional_args = argv.remainder!
35
- end
36
-
37
- def validate!
38
- super
39
- help! 'A name for the Pod is required.' unless @name
40
- help! 'The Pod name cannot contain spaces.' if @name =~ /\s/
41
- help! "The Pod name cannot begin with a '.'" if @name[0, 1] == '.'
42
- end
43
-
44
- def run
45
- clone_template
46
- configure_template
47
- print_info
48
- end
49
-
50
- private
51
-
52
- #----------------------------------------#
53
-
54
- # !@group Private helpers
55
-
56
- extend Executable
57
- executable :git
58
-
59
- TEMPLATE_REPO = 'https://github.com/CocoaPods/pod-template.git'
60
- TEMPLATE_INFO_URL = 'https://github.com/CocoaPods/pod-template'
61
- CREATE_NEW_POD_INFO_URL = 'http://guides.cocoapods.org/making/making-a-cocoapod'
62
-
63
- # Clones the template from the remote in the working directory using
64
- # the name of the Pod.
65
- #
66
- # @return [void]
67
- #
68
- def clone_template
69
- UI.section("Cloning `#{template_repo_url}` into `#{@name}`.") do
70
- git! ['clone', template_repo_url, @name]
71
- end
72
- end
73
-
74
- # Runs the template configuration utilities.
75
- #
76
- # @return [void]
77
- #
78
- def configure_template
79
- UI.section("Configuring #{@name} template.") do
80
- Dir.chdir(@name) do
81
- if File.exist?('configure')
82
- system('./configure', @name, *@additional_args)
83
- else
84
- UI.warn 'Template does not have a configure file.'
85
- end
86
- end
87
- end
88
- end
89
-
90
- # Runs the template configuration utilities.
91
- #
92
- # @return [void]
93
- #
94
- def print_info
95
- UI.puts "\nTo learn more about the template see `#{template_repo_url}`."
96
- UI.puts "To learn more about creating a new pod, see `#{CREATE_NEW_POD_INFO_URL}`."
97
- end
98
-
99
- # Checks if a template URL is given else returns the TEMPLATE_REPO URL
100
- #
101
- # @return String
102
- #
103
- def template_repo_url
104
- @template_url || TEMPLATE_REPO
105
- end
106
- end
107
-
108
- #-----------------------------------------------------------------------#
109
-
110
- class Lint < Lib
111
- self.summary = 'Validates a Pod'
112
-
113
- self.description = <<-DESC
114
- Validates the Pod using the files in the working directory.
115
- DESC
116
-
117
- def self.options
118
- [
119
- ['--quick', 'Lint skips checks that would require to download and build the spec'],
120
- ['--allow-warnings', 'Lint validates even if warnings are present'],
121
- ['--subspec=NAME', 'Lint validates only the given subspec'],
122
- ['--no-subspecs', 'Lint skips validation of subspecs'],
123
- ['--no-clean', 'Lint leaves the build directory intact for inspection'],
124
- ['--fail-fast', 'Lint stops on the first failing platform or subspec'],
125
- ['--use-libraries', 'Lint uses static libraries to install the spec'],
126
- ['--sources=https://github.com/artsy/Specs,master', 'The sources from which to pull dependent pods ' \
127
- '(defaults to https://github.com/CocoaPods/Specs.git). ' \
128
- 'Multiple sources must be comma-delimited.'],
129
- ['--private', 'Lint skips checks that apply only to public specs'],
130
- ].concat(super)
131
- end
132
-
133
- def initialize(argv)
134
- @quick = argv.flag?('quick')
135
- @allow_warnings = argv.flag?('allow-warnings')
136
- @clean = argv.flag?('clean', true)
137
- @fail_fast = argv.flag?('fail-fast', false)
138
- @subspecs = argv.flag?('subspecs', true)
139
- @only_subspec = argv.option('subspec')
140
- @use_frameworks = !argv.flag?('use-libraries')
141
- @source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
142
- @private = argv.flag?('private', false)
143
- @podspecs_paths = argv.arguments!
144
- super
145
- end
146
-
147
- def validate!
148
- super
149
- end
150
-
151
- def run
152
- UI.puts
153
- podspecs_to_lint.each do |podspec|
154
- validator = Validator.new(podspec, @source_urls)
155
- validator.local = true
156
- validator.quick = @quick
157
- validator.no_clean = !@clean
158
- validator.fail_fast = @fail_fast
159
- validator.allow_warnings = @allow_warnings
160
- validator.no_subspecs = !@subspecs || @only_subspec
161
- validator.only_subspec = @only_subspec
162
- validator.use_frameworks = @use_frameworks
163
- validator.ignore_public_only_results = @private
164
- validator.validate
165
-
166
- unless @clean
167
- UI.puts "Pods workspace available at `#{validator.validation_dir}/App.xcworkspace` for inspection."
168
- UI.puts
169
- end
170
- if validator.validated?
171
- UI.puts "#{validator.spec.name} passed validation.".green
172
- else
173
- spec_name = podspec
174
- spec_name = validator.spec.name if validator.spec
175
- message = "#{spec_name} did not pass validation, due to #{validator.failure_reason}."
176
-
177
- if @clean
178
- message << "\nYou can use the `--no-clean` option to inspect " \
179
- 'any issue.'
180
- end
181
- raise Informative, message
182
- end
183
- end
184
- end
185
-
186
- private
187
-
188
- #----------------------------------------#
189
-
190
- # !@group Private helpers
191
-
192
- # @return [Pathname] The path of the podspec found in the current
193
- # working directory.
194
- #
195
- # @raise If no podspec is found.
196
- # @raise If multiple podspecs are found.
197
- #
198
- def podspecs_to_lint
199
- if !@podspecs_paths.empty?
200
- Array(@podspecs_paths)
201
- else
202
- podspecs = Pathname.glob(Pathname.pwd + '*.podspec{.json,}')
203
- if podspecs.count.zero?
204
- raise Informative, 'Unable to find a podspec in the working ' \
205
- 'directory'
206
- end
207
- podspecs
208
- end
209
- end
210
- end
211
-
212
- #-----------------------------------------------------------------------#
213
9
  end
214
10
  end
215
11
  end
@@ -31,6 +31,7 @@ module Pod
31
31
  ['--no-private', 'Lint includes checks that apply only to public repos'],
32
32
  ['--commit-message="Fix bug in pod"', 'Add custom commit message. ' \
33
33
  'Opens default editor if no commit message is specified.'],
34
+ ['--use-json', 'Push JSON spec to repo'],
34
35
  ].concat(super)
35
36
  end
36
37
 
@@ -38,25 +39,25 @@ module Pod
38
39
  @allow_warnings = argv.flag?('allow-warnings')
39
40
  @local_only = argv.flag?('local-only')
40
41
  @repo = argv.shift_argument
41
- @source = config.sources_manager.sources([@repo]).first unless @repo.nil?
42
+ @source = source_for_repo
42
43
  @source_urls = argv.option('sources', config.sources_manager.all.map(&:url).join(',')).split(',')
43
44
  @podspec = argv.shift_argument
44
45
  @use_frameworks = !argv.flag?('use-libraries')
45
46
  @private = argv.flag?('private', true)
46
47
  @message = argv.option('commit-message')
47
48
  @commit_message = argv.flag?('commit-message', false)
49
+ @use_json = argv.flag?('use-json')
48
50
  super
49
51
  end
50
52
 
51
53
  def validate!
52
- help! 'A spec-repo name is required.' unless @repo
53
- unless @source.repo.directory?
54
+ super
55
+ help! 'A spec-repo name or url is required.' unless @repo
56
+ unless @source && @source.repo.directory?
54
57
  raise Informative,
55
58
  "Unable to find the `#{@repo}` repo. " \
56
59
  'If it has not yet been cloned, add it via `pod repo add`.'
57
60
  end
58
-
59
- super
60
61
  end
61
62
 
62
63
  def run
@@ -95,7 +96,7 @@ module Pod
95
96
  # specs to the master repo.
96
97
  #
97
98
  def check_if_master_repo
98
- remotes = Dir.chdir(repo_dir) { `git remote -v 2>&1` }
99
+ remotes = `git -C "#{repo_dir}" remote -v 2>&1`
99
100
  master_repo_urls = [
100
101
  'git@github.com:CocoaPods/Specs.git',
101
102
  'https://github.com/CocoaPods/Specs.git',
@@ -144,7 +145,7 @@ module Pod
144
145
  # @return [void]
145
146
  #
146
147
  def check_repo_status
147
- clean = Dir.chdir(repo_dir) { `git status --porcelain 2>&1` } == ''
148
+ clean = `git -C "#{repo_dir}" status --porcelain 2>&1` == ''
148
149
  raise Informative, "The repo `#{@repo}` at #{UI.path repo_dir} is not clean" unless clean
149
150
  end
150
151
 
@@ -154,7 +155,7 @@ module Pod
154
155
  #
155
156
  def update_repo
156
157
  UI.puts "Updating the `#{@repo}' repo\n".yellow
157
- Dir.chdir(repo_dir) { UI.puts `git pull 2>&1` }
158
+ UI.puts `git -C "#{repo_dir}" pull 2>&1`
158
159
  end
159
160
 
160
161
  # Commits the podspecs to the source, which should be a git repo.
@@ -178,18 +179,23 @@ module Pod
178
179
  else
179
180
  message = "[Add] #{spec}"
180
181
  end
181
-
182
182
  FileUtils.mkdir_p(output_path)
183
- FileUtils.cp(spec_file, output_path)
184
- Dir.chdir(repo_dir) do
185
- # only commit if modified
186
- if git!('status', '--porcelain').include?(spec.name)
187
- UI.puts " - #{message}"
188
- git!('add', spec.name)
189
- git!('commit', '--no-verify', '-m', message)
190
- else
191
- UI.puts " - [No change] #{spec}"
192
- end
183
+
184
+ if @use_json
185
+ json_file_name = "#{spec.name}.podspec.json"
186
+ json_file = File.join(output_path, json_file_name)
187
+ File.open(json_file, 'w') { |file| file.write(spec.to_pretty_json) }
188
+ else
189
+ FileUtils.cp(spec_file, output_path)
190
+ end
191
+
192
+ # only commit if modified
193
+ if repo_git('status', '--porcelain').include?(spec.name)
194
+ UI.puts " - #{message}"
195
+ repo_git('add', spec.name)
196
+ repo_git('commit', '--no-verify', '-m', message)
197
+ else
198
+ UI.puts " - [No change] #{spec}"
193
199
  end
194
200
  end
195
201
  end
@@ -200,7 +206,7 @@ module Pod
200
206
  #
201
207
  def push_repo
202
208
  UI.puts "\nPushing the `#{@repo}' repo\n".yellow
203
- Dir.chdir(repo_dir) { UI.puts `git push origin master 2>&1` }
209
+ UI.puts `git -C "#{repo_dir}" push origin master 2>&1`
204
210
  end
205
211
 
206
212
  #---------------------------------------------------------------------#
@@ -209,6 +215,12 @@ module Pod
209
215
 
210
216
  # @!group Private helpers
211
217
 
218
+ # @return result of calling the git! with args in repo_dir
219
+ #
220
+ def repo_git(*args)
221
+ git!(['-C', repo_dir] + args)
222
+ end
223
+
212
224
  # @return [Pathname] The directory of the repository.
213
225
  #
214
226
  def repo_dir
@@ -235,6 +247,18 @@ module Pod
235
247
  podspec_files.count
236
248
  end
237
249
 
250
+ # Returns source for @repo
251
+ #
252
+ # @note If URL is invalid or repo doesn't exist, validate! will throw the error
253
+ #
254
+ # @return [Source]
255
+ #
256
+ def source_for_repo
257
+ config.sources_manager.source_with_name_or_url(@repo) unless @repo.nil?
258
+ rescue
259
+ nil
260
+ end
261
+
238
262
  #---------------------------------------------------------------------#
239
263
  end
240
264
  end
@@ -59,7 +59,8 @@ module Pod
59
59
  # @return [void]
60
60
  #
61
61
  def update_master_repo
62
- config.sources_manager.update('master', true)
62
+ show_output = !config.silent?
63
+ config.sources_manager.update('master', show_output)
63
64
  end
64
65
 
65
66
  # Sets the repo to the master branch.
@@ -27,6 +27,8 @@ module Pod
27
27
  '(defaults to https://github.com/CocoaPods/Specs.git). ' \
28
28
  'Multiple sources must be comma-delimited.'],
29
29
  ['--private', 'Lint skips checks that apply only to public specs'],
30
+ ['--swift-version=VERSION', 'The SWIFT_VERSION that should be used to lint the spec. ' \
31
+ 'This takes precedence over a .swift-version file.'],
30
32
  ].concat(super)
31
33
  end
32
34
 
@@ -40,6 +42,7 @@ module Pod
40
42
  @use_frameworks = !argv.flag?('use-libraries')
41
43
  @source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
42
44
  @private = argv.flag?('private', false)
45
+ @swift_version = argv.option('swift-version', nil)
43
46
  @podspecs_paths = argv.arguments!
44
47
  super
45
48
  end
@@ -57,6 +60,7 @@ module Pod
57
60
  validator.only_subspec = @only_subspec
58
61
  validator.use_frameworks = @use_frameworks
59
62
  validator.ignore_public_only_results = @private
63
+ validator.swift_version = @swift_version
60
64
  validator.validate
61
65
  failure_reasons << validator.failure_reason
62
66
 
@@ -22,7 +22,7 @@ module Pod
22
22
  require 'cocoapods/command/env'
23
23
  require 'cocoapods/command/init'
24
24
  require 'cocoapods/command/install'
25
- require 'cocoapods/command/inter_process_communication'
25
+ require 'cocoapods/command/ipc'
26
26
  require 'cocoapods/command/lib'
27
27
  require 'cocoapods/command/list'
28
28
  require 'cocoapods/command/outdated'
@@ -62,6 +62,7 @@ module Pod
62
62
  else
63
63
  if ENV['COCOA_PODS_ENV'] != 'development'
64
64
  puts UI::ErrorReport.report(exception)
65
+ UI::ErrorReport.search_for_exceptions(exception)
65
66
  exit 1
66
67
  else
67
68
  raise exception
@@ -1,3 +1,5 @@
1
+ require 'active_support/multibyte/unicode'
2
+
1
3
  module Pod
2
4
  # Stores the global configuration of CocoaPods.
3
5
  #
@@ -145,7 +147,8 @@ module Pod
145
147
  # Podfile is located.
146
148
  #
147
149
  def installation_root
148
- current_path = Pathname.pwd
150
+ current_dir = ActiveSupport::Multibyte::Unicode.normalize(Dir.pwd)
151
+ current_path = Pathname.new(current_dir)
149
152
  unless @installation_root
150
153
  until current_path.root?
151
154
  if podfile_path_in_dir(current_path)
@@ -124,6 +124,7 @@ module Pod
124
124
  def cached_pod(request)
125
125
  cached_spec = cached_spec(request)
126
126
  path = path_for_pod(request)
127
+
127
128
  return unless cached_spec && path.directory?
128
129
  spec = request.spec || cached_spec
129
130
  Response.new(path, spec, request.params)