cocoapods 0.34.1 → 0.34.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 174371936987af5ebf634f8938b27a6e7a1cae0a
4
- data.tar.gz: e8cd374fd60fae5c74abadcaf57a42dd55f56d39
3
+ metadata.gz: 03befb1a6d0cf06ee2e98b1481e48b0bb52a51bf
4
+ data.tar.gz: ab7cf2b6bae37b12bebca53f6fb40075d3d9c4c1
5
5
  SHA512:
6
- metadata.gz: 6cbeb3597d3f77e5805a9effaf094c84d49907db8d2584b98ca57bd93af8a271a06ad4bd6f26d410c2fbd38211df33cf012e83a0eae8300e08d565f97033ec3e
7
- data.tar.gz: 7e47cd82d59b7fbf5a784ebfedd44148f54c0d2eb6ce787161c97a027bcbf61b260a7c4bd421c58dec06453690fc3e013ec335d896c1d178f32757e52a74ac48
6
+ metadata.gz: f3ab1e18fa19d113c2e6dad3e550da01e79fe806de57b7cf193e579b8cf11d68cccafb209af289f2f69705413652c504d6acd890e974387d31a64893e6879fb2
7
+ data.tar.gz: 00fc7c1ee370f63d52433411419640b26f32b69c2f98dafad30ae982d685048f72d6d4cd7631cb1dbf8cc8e04be8f042fbbae5cc16040255b0aff37ce769d536
@@ -2,6 +2,74 @@
2
2
 
3
3
  To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides/installing_cocoapods.html).
4
4
 
5
+ ## 0.34.2
6
+
7
+ ##### Enhancements
8
+
9
+ * Make the output of `pod outdated` show what running `pod update` will do.
10
+ Takes into account the sources specified in the `Podfile`.
11
+ [Samuel Giddins](https://github.com/segiddins)
12
+ [#2470](https://github.com/CocoaPods/CocoaPods/issues/2470)
13
+
14
+ * Allows the use of the `GCC_PREPROCESSOR_DEFINITION` flag `${inherited}`
15
+ without emitting a warning.
16
+ [Samuel Giddins](https://github.com/segiddins)
17
+ [#2577](https://github.com/CocoaPods/CocoaPods/issues/2577)
18
+
19
+ * Integration with user project will no longer replace an existing
20
+ base build configuration.
21
+ [Robert Jones](https://github.com/redshirtrob)
22
+ [#1736](https://github.com/CocoaPods/CocoaPods/issues/1736)
23
+
24
+ ##### Bug Fixes
25
+
26
+ * Improved sanitizing of configuration names to avoid generating invalid
27
+ preprocessor definitions.
28
+ [Boris Bügling](https://github.com/neonichu)
29
+ [#2542](https://github.com/CocoaPods/CocoaPods/issues/2542)
30
+
31
+ * More robust generation of source names from URLs.
32
+ [Samuel Giddins](https://github.com/segiddins)
33
+ [#2534](https://github.com/CocoaPods/CocoaPods/issues/2534)
34
+
35
+ * Allow the `Validator` to only use specific sources.
36
+ Allows customizable source for `pod spec lint` and `pod lib lint`,
37
+ with both defaulting to `master`.
38
+ [Samuel Giddins](https://github.com/segiddins)
39
+ [#2543](https://github.com/CocoaPods/CocoaPods/issues/2543)
40
+ [cocoapods-trunk#28](https://github.com/CocoaPods/cocoapods-trunk/issues/28)
41
+
42
+ * Takes into account the sources specified in `Podfile` running
43
+ `pod outdated`.
44
+ [Samuel Giddins](https://github.com/segiddins)
45
+ [#2553](https://github.com/CocoaPods/CocoaPods/issues/2553)
46
+
47
+ * Ensures that the master repo is shallow cloned when added via a Podfile
48
+ `source` directive.
49
+ [Samuel Giddins](https://github.com/segiddins)
50
+ [#3586](https://github.com/CocoaPods/CocoaPods/issues/2586)
51
+
52
+ * Ensures that the user project is not saved when there are no
53
+ user targets integrated.
54
+ [Samuel Giddins](https://github.com/segiddins)
55
+ [#2561](https://github.com/CocoaPods/CocoaPods/issues/2561)
56
+ [#2593](https://github.com/CocoaPods/CocoaPods/issues/2593)
57
+
58
+ * Fix a crash when running `pod install` with an empty target that inherits a
59
+ pod from a parent target.
60
+ [Kyle Fuller](https://github.com/kylef)
61
+ [#2591](https://github.com/CocoaPods/CocoaPods/issues/2591)
62
+
63
+ * Take into account versions of a Pod from all specified sources when
64
+ resolving dependencies.
65
+ [Thomas Visser](https://github.com/Thomvis)
66
+ [#2556](https://github.com/CocoaPods/CocoaPods/issues/2556)
67
+
68
+ * Sanitize build configuration names in target environment header macros.
69
+ [Kra Larivain](https://github.com/olarivain)
70
+ [#2532](https://github.com/CocoaPods/CocoaPods/pull/2532)
71
+
72
+
5
73
  ## 0.34.1
6
74
 
7
75
  ##### Bug Fixes
@@ -57,7 +57,7 @@ module Pod
57
57
  podfile << "xcodeproj '#{@project_path}'\n\n" if @project_path
58
58
  podfile << <<-PLATFORM.strip_heredoc
59
59
  # Uncomment this line to define a global platform for your project
60
- # platform :ios, "6.0"
60
+ # platform :ios, '6.0'
61
61
 
62
62
  source '#{Command::Setup.read_only_url}'
63
63
  PLATFORM
@@ -74,7 +74,7 @@ module Pod
74
74
  # @return [String] the text for the target module
75
75
  #
76
76
  def target_module(target)
77
- target_module = "\ntarget \"#{target.name}\" do\n"
77
+ target_module = "\ntarget '#{target.name}' do\n"
78
78
 
79
79
  if target.name =~ /tests?/i
80
80
  target_module << template_contents(config.default_test_podfile_path)
@@ -77,7 +77,7 @@ module Pod
77
77
  DESC
78
78
 
79
79
  def run
80
- sets = SourcesManager.all_sets
80
+ sets = SourcesManager.aggregate.all_sets
81
81
  result = {}
82
82
  sets.each do |set|
83
83
  begin
@@ -112,7 +112,9 @@ module Pod
112
112
  ['--only-errors', 'Lint validates even if warnings are present'],
113
113
  ['--subspec=NAME', 'Lint validates only the given subspec'],
114
114
  ['--no-subspecs', 'Lint skips validation of subspecs'],
115
- ['--no-clean', 'Lint leaves the build directory intact for inspection']].concat(super)
115
+ ['--no-clean', 'Lint leaves the build directory intact for inspection'],
116
+ ['--sources=https://github.com/artsy/Specs', 'The sources to pull dependant pods from ' \
117
+ '(defaults to https://github.com/CocoaPods/Specs.git)']].concat(super)
116
118
  end
117
119
 
118
120
  def initialize(argv)
@@ -121,6 +123,7 @@ module Pod
121
123
  @clean = argv.flag?('clean', true)
122
124
  @subspecs = argv.flag?('subspecs', true)
123
125
  @only_subspec = argv.option('subspec')
126
+ @source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
124
127
  @podspecs_paths = argv.arguments!
125
128
  super
126
129
  end
@@ -133,7 +136,7 @@ module Pod
133
136
  UI.puts
134
137
  podspecs_to_lint.each do |podspec|
135
138
 
136
- validator = Validator.new(podspec)
139
+ validator = Validator.new(podspec, @source_urls)
137
140
  validator.local = true
138
141
  validator.quick = @quick
139
142
  validator.no_clean = !@clean
@@ -27,8 +27,9 @@ module Pod
27
27
  UI.puts 'No updates are available.'.yellow
28
28
  else
29
29
  UI.section 'The following updates are available:' do
30
- updates.each do |(name, from_version, to_version)|
31
- UI.puts "- #{name} #{from_version} -> #{to_version}"
30
+ updates.each do |(name, from_version, matching_version, to_version)|
31
+ UI.puts "- #{name} #{from_version} -> #{matching_version} " \
32
+ "(latest version #{to_version})"
32
33
  end
33
34
  end
34
35
  end
@@ -49,6 +50,13 @@ module Pod
49
50
 
50
51
  private
51
52
 
53
+ def analyzer
54
+ @analyzer ||= begin
55
+ verify_podfile_exists!
56
+ Installer::Analyzer.new(config.sandbox, config.podfile, config.lockfile)
57
+ end
58
+ end
59
+
52
60
  def updates
53
61
  @updates ||= begin
54
62
  spec_sets.map do |set|
@@ -57,7 +65,10 @@ module Pod
57
65
  pod_name = spec.root.name
58
66
  lockfile_version = lockfile.version(pod_name)
59
67
  if source_version > lockfile_version
60
- [pod_name, lockfile_version, source_version]
68
+ matching_spec = unlocked_pods.find { |s| s.name == pod_name }
69
+ matching_version =
70
+ matching_spec ? matching_spec.version : "(unused)"
71
+ [pod_name, lockfile_version, matching_version, source_version]
61
72
  else
62
73
  nil
63
74
  end
@@ -65,6 +76,18 @@ module Pod
65
76
  end
66
77
  end
67
78
 
79
+ def unlocked_pods
80
+ @unlocked_pods ||= begin
81
+ pods = []
82
+ UI.titled_section('Analyzing dependencies') do
83
+ pods = Installer::Analyzer.new(config.sandbox, config.podfile).
84
+ analyze(false).
85
+ specs_by_target.values.flatten.uniq
86
+ end
87
+ pods
88
+ end
89
+ end
90
+
68
91
  def deprecated_pods
69
92
  @deprecated_pods ||= begin
70
93
  spec_sets.map(&:specification).select do |spec|
@@ -75,8 +98,9 @@ module Pod
75
98
 
76
99
  def spec_sets
77
100
  @spec_sets ||= begin
101
+ aggregate = Source::Aggregate.new(analyzer.sources)
78
102
  installed_pods.map do |pod_name|
79
- SourcesManager.search(Dependency.new(pod_name))
103
+ aggregate.search(Dependency.new(pod_name))
80
104
  end.compact.uniq
81
105
  end
82
106
  end
@@ -258,7 +258,7 @@ module Pod
258
258
  def print_sources(sources)
259
259
  sources.each do |source|
260
260
  UI.title source.name do
261
- print_source_at_path source.data_provider.repo
261
+ print_source_at_path source.repo
262
262
  end
263
263
  end
264
264
  UI.puts "\n"
@@ -82,7 +82,7 @@ module Pod
82
82
  def validate_podspec_files
83
83
  UI.puts "\nValidating #{'spec'.pluralize(count)}".yellow
84
84
  podspec_files.each do |podspec|
85
- validator = Validator.new(podspec)
85
+ validator = Validator.new(podspec, SourcesManager.all.map(&:url))
86
86
  validator.only_errors = @allow_warnings
87
87
  begin
88
88
  validator.validate
@@ -67,7 +67,9 @@ module Pod
67
67
  ['--only-errors', 'Lint validates even if warnings are present'],
68
68
  ['--subspec=NAME', 'Lint validates only the given subspec'],
69
69
  ['--no-subspecs', 'Lint skips validation of subspecs'],
70
- ['--no-clean', 'Lint leaves the build directory intact for inspection']].concat(super)
70
+ ['--no-clean', 'Lint leaves the build directory intact for inspection'],
71
+ ['--sources=https://github.com/artsy/Specs', 'The sources to pull dependant pods from ' \
72
+ '(defaults to https://github.com/CocoaPods/Specs.git)']].concat(super)
71
73
  end
72
74
 
73
75
  def initialize(argv)
@@ -76,6 +78,7 @@ module Pod
76
78
  @clean = argv.flag?('clean', true)
77
79
  @subspecs = argv.flag?('subspecs', true)
78
80
  @only_subspec = argv.option('subspec')
81
+ @source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
79
82
  @podspecs_paths = argv.arguments!
80
83
  super
81
84
  end
@@ -84,7 +87,7 @@ module Pod
84
87
  UI.puts
85
88
  invalid_count = 0
86
89
  podspecs_to_lint.each do |podspec|
87
- validator = Validator.new(podspec)
90
+ validator = Validator.new(podspec, @source_urls)
88
91
  validator.quick = @quick
89
92
  validator.no_clean = !@clean
90
93
  validator.only_errors = @only_errors
@@ -1,12 +1,17 @@
1
1
  require 'cocoapods-downloader'
2
+ require 'claide/informative_error'
2
3
 
3
4
  module Pod
4
5
  module Downloader
6
+ class DownloaderError; include CLAide::InformativeError; end
7
+
5
8
  class Base
6
9
  override_api do
7
10
 
8
11
  def execute_command(executable, command, raise_on_failure = false)
9
12
  Executable.execute_command(executable, command, raise_on_failure)
13
+ rescue CLAide::InformativeError => e
14
+ raise DownloaderError, e.message
10
15
  end
11
16
 
12
17
  # Indicates that an action will be performed. The action is passed as a
@@ -1,5 +1,5 @@
1
1
  module Pod
2
2
  # The version of the cocoapods command line tool.
3
3
  #
4
- VERSION = '0.34.1' unless defined? Pod::VERSION
4
+ VERSION = '0.34.2' unless defined? Pod::VERSION
5
5
  end
@@ -49,7 +49,7 @@ module Pod
49
49
  specs_by_config = specs_scoped_by_configuration(common_specs, specs_by_configuration)
50
50
  specs_by_config.each do |config, specs|
51
51
  result << "// #{config} build configuration\n"
52
- result << "#ifdef #{config.gsub(' ', '_').upcase}\n\n"
52
+ result << "#ifdef #{config.gsub(/[^a-zA-Z0-9_]/, '_').upcase}\n\n"
53
53
  specs.each { |spec| result << spec_defines(spec, 1) }
54
54
  result << "#endif\n"
55
55
  end
@@ -402,13 +402,13 @@ module Pod
402
402
  def install_libraries
403
403
  UI.message '- Installing targets' do
404
404
  pod_targets.sort_by(&:name).each do |pod_target|
405
- next if pod_target.target_definition.empty?
405
+ next if pod_target.target_definition.dependencies.empty?
406
406
  target_installer = PodTargetInstaller.new(sandbox, pod_target)
407
407
  target_installer.install!
408
408
  end
409
409
 
410
410
  aggregate_targets.sort_by(&:name).each do |target|
411
- next if target.target_definition.empty?
411
+ next if target.target_definition.dependencies.empty?
412
412
  target_installer = AggregateTargetInstaller.new(sandbox, target)
413
413
  target_installer.install!
414
414
  end
@@ -359,7 +359,7 @@ module Pod
359
359
 
360
360
  #-----------------------------------------------------------------------#
361
361
 
362
- private
362
+ public
363
363
 
364
364
  # Returns the sources used to query for specifications
365
365
  #
@@ -388,6 +388,10 @@ module Pod
388
388
  end
389
389
  end
390
390
 
391
+ #-----------------------------------------------------------------------#
392
+
393
+ private
394
+
391
395
  # @!group Analysis sub-steps
392
396
 
393
397
  # Returns the path of the user project that the {TargetDefinition}
@@ -40,6 +40,8 @@ module Pod
40
40
  #
41
41
  attr_reader :update_mode
42
42
 
43
+ alias_method :update_mode?, :update_mode
44
+
43
45
  # @return [Lockfile] The lockfile of the installation as a fall-back if
44
46
  # there is no sandbox manifest. This is indented as a temporary
45
47
  # solution to prevent the full re-installation from users which
@@ -132,6 +132,8 @@ module Pod
132
132
  end
133
133
  end
134
134
 
135
+ INHERITED_FLAGS = ['$(inherited)', '${inherited}']
136
+
135
137
  # Checks whether the settings of the CocoaPods generated xcconfig are
136
138
  # overridden by the build configuration of a target and prints a
137
139
  # warning to inform the user if needed.
@@ -143,8 +145,9 @@ module Pod
143
145
  xcconfig = aggregate_target.xcconfigs[config.name]
144
146
  if xcconfig
145
147
  xcconfig.to_hash.keys.each do |key|
146
- target_value = config.build_settings[key]
147
- if target_value && !target_value.include?('$(inherited)')
148
+ target_values = config.build_settings[key]
149
+ if target_values &&
150
+ !INHERITED_FLAGS.any? { |flag| target_values.include?(flag) }
148
151
  print_override_warning(aggregate_target, user_target, config, key)
149
152
  end
150
153
  end
@@ -27,15 +27,15 @@ module Pod
27
27
  #
28
28
  def integrate!
29
29
  UI.section(integration_message) do
30
- XCConfigIntegrator.integrate(target, native_targets)
31
- update_to_cocoapods_0_34
30
+ user_project.save if XCConfigIntegrator.integrate(target, native_targets)
31
+ user_project.save if update_to_cocoapods_0_34
32
32
 
33
33
  unless native_targets_to_integrate.empty?
34
34
  add_pods_library
35
35
  add_copy_resources_script_phase
36
36
  add_check_manifest_lock_script_phase
37
+ user_project.save
37
38
  end
38
- user_project.save
39
39
  end
40
40
  end
41
41
 
@@ -52,6 +52,8 @@ module Pod
52
52
 
53
53
  # Fixes the paths of the copy resource scripts.
54
54
  #
55
+ # @return [Bool] whether any changes to the project were made.
56
+ #
55
57
  # @todo This can be removed for CocoaPods 1.0
56
58
  #
57
59
  def update_to_cocoapods_0_34
@@ -62,9 +64,15 @@ module Pod
62
64
  end.flatten
63
65
 
64
66
  script_path = target.copy_resources_script_relative_path
67
+ shell_script = %("#{script_path}"\n)
68
+ changes = false
65
69
  phases.each do |phase|
66
- phase.shell_script = %("#{script_path}"\n)
70
+ unless phase.shell_script == shell_script
71
+ phase.shell_script = shell_script
72
+ changes = true
73
+ end
67
74
  end
75
+ changes
68
76
  end
69
77
 
70
78
  # Adds spec libraries to the frameworks build phase of the
@@ -15,13 +15,17 @@ module Pod
15
15
  # The native targets associated which should be integrated
16
16
  # with the Pod bundle.
17
17
  #
18
+ # @return [Bool] whether any changes to the project were made.
19
+ #
18
20
  def self.integrate(pod_bundle, targets)
21
+ changes = false
19
22
  targets.each do |target|
20
23
  target.build_configurations.each do |config|
21
- update_to_cocoapods_0_34(pod_bundle, targets)
22
- set_target_xcconfig(pod_bundle, config)
24
+ changes = true if update_to_cocoapods_0_34(pod_bundle, targets)
25
+ changes = true if set_target_xcconfig(pod_bundle, target, config)
23
26
  end
24
27
  end
28
+ changes
25
29
  end
26
30
 
27
31
  private
@@ -35,13 +39,16 @@ module Pod
35
39
  # @param [Target::AggregateTarget] pod_bundle
36
40
  # The Pods bundle.
37
41
  #
38
- # @param [XcodeProj::PBXNativeTarget] target
42
+ # @param [Array<XcodeProj::PBXNativeTarget>] targets
39
43
  # The native targets.
40
44
  #
45
+ # @return [Bool] whether any changes to the project were made.
46
+ #
41
47
  # @todo This can be removed for CocoaPods 1.0
42
48
  #
43
49
  def self.update_to_cocoapods_0_34(pod_bundle, targets)
44
50
  sandbox = pod_bundle.sandbox
51
+ changes = false
45
52
  targets.map(&:project).uniq.each do |project|
46
53
  file_refs = project.files.select do |file_ref|
47
54
  path = file_ref.path.to_s
@@ -57,7 +64,10 @@ module Pod
57
64
  file_ref.remove_from_project
58
65
  end
59
66
  end
67
+
68
+ changes = true unless file_refs.empty?
60
69
  end
70
+ changes
61
71
  end
62
72
 
63
73
  # Creates a file reference to the xcconfig generated by
@@ -67,15 +77,28 @@ module Pod
67
77
  # @param [Target::AggregateTarget] pod_bundle
68
78
  # The Pods bundle.
69
79
  #
70
- # @param [[Xcodeproj::XCBuildConfiguration] config
80
+ # @param [PBXNativeTarget] target
81
+ # The native target.
82
+ #
83
+ # @param [Xcodeproj::XCBuildConfiguration] config
71
84
  # The build configuration.
72
85
  #
73
- def self.set_target_xcconfig(pod_bundle, config)
86
+ def self.set_target_xcconfig(pod_bundle, target, config)
74
87
  path = pod_bundle.xcconfig_relative_path(config.name)
75
88
  group = config.project['Pods'] || config.project.new_group('Pods')
76
89
  file_ref = group.files.find { |f| f.path == path }
77
- file_ref ||= group.new_file(path)
78
- config.base_configuration_reference = file_ref
90
+ if config.base_configuration_reference != file_ref
91
+ UI.warn 'CocoaPods did not set the base configuration of your ' \
92
+ 'project because because your project already has a custom ' \
93
+ 'config set. In order for CocoaPods integration to work at ' \
94
+ 'all, please either set the base configurations of the target ' \
95
+ "#{target.name}` to `#{path}` or include the `#{path}` in your " \
96
+ 'build configuration.'
97
+ false
98
+ elsif !file_ref
99
+ file_ref ||= group.new_file(path)
100
+ config.base_configuration_reference = file_ref
101
+ end
79
102
  end
80
103
 
81
104
  private
@@ -209,7 +209,7 @@ module Pod
209
209
  #
210
210
  def add_build_configuration(name, type)
211
211
  build_configuration = super
212
- values = ["#{name.gsub(' ', '_').upcase}=1"]
212
+ values = ["#{name.gsub(/[^a-zA-Z0-9_]/, '_').upcase}=1"]
213
213
  settings = build_configuration.build_settings
214
214
  definitions = Array(settings['GCC_PREPROCESSOR_DEFINITIONS'])
215
215
  values.each do |value|
@@ -150,6 +150,11 @@ module Pod
150
150
  set = find_cached_set(dependency, dependent_spec)
151
151
  set.required_by(dependency, dependent_spec.to_s)
152
152
 
153
+ if (paths = set.specification_paths_for_version(set.required_version)).length > 1
154
+ UI.warn "Found multiple specifications for #{dependency}:\n" \
155
+ "- #{paths.join("\n")}"
156
+ end
157
+
153
158
  unless @loaded_specs.include?(dependency.name)
154
159
  spec = set.specification.subspec_by_name(dependency.name)
155
160
  @loaded_specs << spec.name
@@ -190,7 +195,7 @@ module Pod
190
195
  end
191
196
  set = Specification::Set::External.new(spec)
192
197
  else
193
- set = find_set_from_sources(dependency)
198
+ set = create_set_from_sources(dependency)
194
199
  end
195
200
  cached_sets[name] = set
196
201
  unless set
@@ -201,19 +206,21 @@ module Pod
201
206
  cached_sets[name]
202
207
  end
203
208
 
204
- # @return [Set] Loads a set for the Pod of the given dependency from the
205
- # sources. The set will be limited to the versions of the first
206
- # source which includes the Pod.
209
+ # @return [Set] Creates a set for the Pod of the given dependency from the
210
+ # sources. The set will contain all versions from all sources that
211
+ # include the Pod.
207
212
  #
208
213
  # @param [Dependency] dependency
209
214
  # The dependency for which the set is needed.
210
215
  #
211
- def find_set_from_sources(dependency)
212
- sources.each do |source|
213
- set = source.search(dependency)
214
- return set if set
215
- end
216
- nil
216
+ def create_set_from_sources(dependency)
217
+ aggregate.search(dependency)
218
+ end
219
+
220
+ # @return [Source::Aggregate] The aggregate of the {#sources}.
221
+ #
222
+ def aggregate
223
+ @aggregate ||= Source::Aggregate.new(sources.map(&:repo))
217
224
  end
218
225
 
219
226
  # Ensures that a specification is compatible with the platform of a target.
@@ -40,7 +40,9 @@ module Pod
40
40
  previous_title_level = UI.title_level
41
41
  UI.title_level = 0
42
42
  begin
43
- Command::Repo::Add.new(CLAide::ARGV.new([name, url])).run
43
+ argv = [name, url]
44
+ argv << '--shallow' if name =~ /^master(-\d+)?$/
45
+ Command::Repo::Add.new(CLAide::ARGV.new(argv)).run
44
46
  rescue Informative => e
45
47
  raise Informative, "Unable to add a source with url `#{url}` " \
46
48
  "named `#{name}`.\nYou can try adding it manually in " \
@@ -189,7 +191,7 @@ module Pod
189
191
 
190
192
  sources.each do |source|
191
193
  UI.section "Updating spec repo `#{source.name}`" do
192
- Dir.chdir(source.data_provider.repo) do
194
+ Dir.chdir(source.repo) do
193
195
  begin
194
196
  output = git!('pull --ff-only')
195
197
  UI.puts output if show_output && !config.verbose?
@@ -200,7 +202,7 @@ module Pod
200
202
  '`pod repo update --verbose`'
201
203
  end
202
204
  end
203
- check_version_information(source.data_provider.repo)
205
+ check_version_information(source.repo)
204
206
  end
205
207
  end
206
208
  end
@@ -242,11 +244,20 @@ module Pod
242
244
 
243
245
  if config.new_version_message? && cocoapods_update?(versions)
244
246
  last = versions['last']
247
+ rc = Gem::Version.new(last).prerelease?
245
248
  install_message = needs_sudo ? 'sudo ' : ''
246
249
  install_message << 'gem install cocoapods'
247
- install_message << ' --pre' if Gem::Version.new(last).prerelease?
248
- UI.puts "\nCocoaPods #{versions['last']} is available.\n" \
249
- "To update use: `#{install_message}`".green + "\n"
250
+ install_message << ' --pre' if rc
251
+ message = [
252
+ "CocoaPods #{versions['last']} is available.".green,
253
+ "To update use: `#{install_message}`".green,
254
+ ("[!] This is a test version we'd love you to try.".yellow if rc),
255
+ '',
256
+ 'For more information see http://blog.cocoapods.org'.green,
257
+ 'and the CHANGELOG for this version http://git.io/BaH8pQ.'.green,
258
+ '',
259
+ ].compact.join("\n")
260
+ UI.puts("\n#{message}\n")
250
261
  end
251
262
  end
252
263
 
@@ -348,7 +359,7 @@ module Pod
348
359
  unless specified_source
349
360
  raise Informative, "Unable to find the `#{name}` repo."
350
361
  end
351
- unless git_repo?(specified_source.data_provider.repo)
362
+ unless git_repo?(specified_source.repo)
352
363
  raise Informative, "The `#{name}` repo is not a git repo."
353
364
  end
354
365
  specified_source
@@ -358,7 +369,7 @@ module Pod
358
369
  #
359
370
  def git_sources
360
371
  all.select do |source|
361
- git_repo?(source.data_provider.repo)
372
+ git_repo?(source.repo)
362
373
  end
363
374
  end
364
375
 
@@ -405,18 +416,27 @@ module Pod
405
416
  # @return [String] A suitable repository name for `url`.
406
417
  #
407
418
  def name_for_url(url)
408
- case url.downcase
419
+ base_from_host_and_path = lambda do |host, path|
420
+ base = host.split('.')[-2] || host
421
+ base += '-' + path.gsub(/.git$/, '').gsub(/^\//, '').
422
+ split('/').join('-')
423
+ end
424
+
425
+ case url.to_s.downcase
409
426
  when %r{github.com(:|/)cocoapods/specs}
410
427
  base = 'master'
411
428
  when %r{github.com(:|/)(.+)/(.+)}
412
429
  base = Regexp.last_match[2]
413
- else
414
- raise Informative,
415
- "`#{url}` is not a valid URL." unless url =~ URI.regexp
430
+ when URI.regexp
416
431
  url = URI(url.downcase)
417
- base = url.host.split('.')[-2] +
418
- url.path.gsub(/.git$/, '').split('/').join('-')
432
+ base = base_from_host_and_path[url.host, url.path]
433
+ when %r{^\S+@(\S+)[:/](.+)$}
434
+ host, path = Regexp.last_match.captures
435
+ base = base_from_host_and_path[host, path]
436
+ else
437
+ base = url.to_s.downcase
419
438
  end
439
+
420
440
  name = base
421
441
  infinity = 1.0 / 0
422
442
  (1..infinity).each do |i|
@@ -121,7 +121,7 @@ EOS
121
121
  def repo_information
122
122
  SourcesManager.all.map do |source|
123
123
  next unless source.type == 'file system'
124
- repo = source.data_provider.repo
124
+ repo = source.repo
125
125
  Dir.chdir(repo) do
126
126
  url = `git config --get remote.origin.url 2>&1`.strip
127
127
  sha = `git rev-parse HEAD 2>&1`.strip
@@ -19,7 +19,11 @@ module Pod
19
19
  # @param [Specification, Pathname, String] spec_or_path
20
20
  # the Specification or the path of the `podspec` file to lint.
21
21
  #
22
- def initialize(spec_or_path)
22
+ # @param [Array<String>] source_urls
23
+ # the Source URLs to use in creating a {Podfile}.
24
+ #
25
+ def initialize(spec_or_path, source_urls)
26
+ @source_urls = source_urls
23
27
  @linter = Specification::Linter.new(spec_or_path)
24
28
  end
25
29
 
@@ -332,7 +336,11 @@ module Pod
332
336
  #
333
337
  # For more details see https://github.com/CocoaPods/CocoaPods/issues/2394#issuecomment-56658587
334
338
  #
335
- if message.include?('error: ') && !message.include?("'InputFile' should have")
339
+ if message.include?("'InputFile' should have")
340
+ next
341
+ end
342
+
343
+ if message.include?('error: ')
336
344
  error "[xcodebuild] #{message}"
337
345
  else
338
346
  note "[xcodebuild] #{message}"
@@ -408,6 +416,11 @@ module Pod
408
416
 
409
417
  # !@group Helpers
410
418
 
419
+ # @return [Array<String>] an array of source URLs used to create the
420
+ # {Podfile} used in the linting process
421
+ #
422
+ attr_reader :source_urls
423
+
411
424
  # @return [Podfile] a podfile that requires the specification on the
412
425
  # current platform.
413
426
  #
@@ -418,7 +431,9 @@ module Pod
418
431
  name = subspec_name ? subspec_name : spec.name
419
432
  podspec = file.realpath
420
433
  local = local?
434
+ urls = source_urls
421
435
  podfile = Pod::Podfile.new do
436
+ urls.each { |u| source(u) }
422
437
  platform(platform_name, deployment_target)
423
438
  if local
424
439
  pod name, :path => podspec.dirname.to_s
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.34.1
4
+ version: 0.34.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eloy Duran
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-26 00:00:00.000000000 Z
12
+ date: 2014-10-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cocoapods-core
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 0.34.1
20
+ version: 0.34.2
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 0.34.1
27
+ version: 0.34.2
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: claide
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -59,14 +59,14 @@ dependencies:
59
59
  requirements:
60
60
  - - ~>
61
61
  - !ruby/object:Gem::Version
62
- version: 0.7.1
62
+ version: 0.7.2
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 0.7.1
69
+ version: 0.7.2
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: cocoapods-plugins
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -101,14 +101,14 @@ dependencies:
101
101
  requirements:
102
102
  - - ~>
103
103
  - !ruby/object:Gem::Version
104
- version: 0.2.0
104
+ version: 0.3.0
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - ~>
110
110
  - !ruby/object:Gem::Version
111
- version: 0.2.0
111
+ version: 0.3.0
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: colored
114
114
  requirement: !ruby/object:Gem::Requirement