cocoapods 0.5.1 → 0.6.0.rc1

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 (44) hide show
  1. data/CHANGELOG.md +229 -2
  2. data/README.md +50 -20
  3. data/bin/pod +3 -2
  4. data/lib/cocoapods.rb +23 -9
  5. data/lib/cocoapods/command.rb +71 -30
  6. data/lib/cocoapods/command/error_report.rb +102 -0
  7. data/lib/cocoapods/command/install.rb +27 -19
  8. data/lib/cocoapods/command/list.rb +51 -8
  9. data/lib/cocoapods/command/presenter.rb +61 -0
  10. data/lib/cocoapods/command/presenter/cocoa_pod.rb +123 -0
  11. data/lib/cocoapods/command/push.rb +102 -0
  12. data/lib/cocoapods/command/repo.rb +70 -14
  13. data/lib/cocoapods/command/search.rb +7 -10
  14. data/lib/cocoapods/command/setup.rb +76 -15
  15. data/lib/cocoapods/command/spec.rb +581 -97
  16. data/lib/cocoapods/config.rb +23 -26
  17. data/lib/cocoapods/dependency.rb +86 -40
  18. data/lib/cocoapods/downloader.rb +30 -18
  19. data/lib/cocoapods/downloader/git.rb +125 -15
  20. data/lib/cocoapods/downloader/http.rb +73 -0
  21. data/lib/cocoapods/downloader/mercurial.rb +3 -9
  22. data/lib/cocoapods/downloader/subversion.rb +3 -9
  23. data/lib/cocoapods/executable.rb +26 -3
  24. data/lib/cocoapods/generator/acknowledgements.rb +37 -0
  25. data/lib/cocoapods/generator/acknowledgements/markdown.rb +38 -0
  26. data/lib/cocoapods/generator/acknowledgements/plist.rb +63 -0
  27. data/lib/cocoapods/generator/copy_resources_script.rb +8 -4
  28. data/lib/cocoapods/generator/documentation.rb +99 -0
  29. data/lib/cocoapods/generator/dummy_source.rb +14 -0
  30. data/lib/cocoapods/installer.rb +140 -109
  31. data/lib/cocoapods/installer/target_installer.rb +78 -83
  32. data/lib/cocoapods/installer/user_project_integrator.rb +162 -0
  33. data/lib/cocoapods/local_pod.rb +240 -0
  34. data/lib/cocoapods/platform.rb +41 -18
  35. data/lib/cocoapods/podfile.rb +234 -21
  36. data/lib/cocoapods/project.rb +67 -0
  37. data/lib/cocoapods/resolver.rb +62 -32
  38. data/lib/cocoapods/sandbox.rb +63 -0
  39. data/lib/cocoapods/source.rb +42 -20
  40. data/lib/cocoapods/specification.rb +294 -271
  41. data/lib/cocoapods/specification/set.rb +10 -28
  42. data/lib/cocoapods/specification/statistics.rb +112 -0
  43. metadata +124 -11
  44. data/lib/cocoapods/xcodeproj_pods.rb +0 -111
@@ -1,3 +1,227 @@
1
+ ## 0.6.0
2
+
3
+ A full list of all the changes since 0.5.1 can be found [here][6].
4
+
5
+
6
+ ### Link with specific targets
7
+
8
+ CocoaPods can now integrate all the targets specified in your `Podfile`.
9
+
10
+ To specify which target, in your Xcode project, a Pods target should be linked
11
+ with, use the `link_with` method like so:
12
+
13
+ ```ruby
14
+ platform :ios
15
+
16
+ workspace 'MyWorkspace'
17
+
18
+ link_with ['MyAppTarget', 'MyOtherAppTarget']
19
+ dependency 'JSONKit'
20
+
21
+ target :test, :exclusive => true do
22
+ xcodeproj 'TestProject', 'Test' => :debug
23
+ link_with 'TestRunnerTarget'
24
+ dependency 'Kiwi'
25
+ end
26
+ ```
27
+
28
+ _NOTE: As you can see it can take either one target name, or an array of names._
29
+
30
+ * If no explicit Xcode workspace is specified and only **one** project exists in
31
+ the same directory as the Podfile, then the name of that project is used as the
32
+ workspace’s name.
33
+
34
+ * If no explicit Xcode project is specified for a target, it will use the Xcode
35
+ project of the parent target. If no target specifies an expicit Xcode project
36
+ and there is only **one** project in the same directory as the Podfile then that
37
+ project will be used.
38
+
39
+ * If no explicit target is specified, then the Pods target will be linked with
40
+ the first target in your project. So if you only have one target you do not
41
+ need to specify the target to link with.
42
+
43
+ See [#76](https://github.com/CocoaPods/CocoaPods/issues/76) for more info.
44
+
45
+ Finally, CocoaPods will add build configurations to the Pods project for all
46
+ configurations in the other projects in the workspace. By default the
47
+ configurations are based on the `Release` configuration, to base them on the
48
+ `Debug` configuration you will have to explicitely specify them as can be seen
49
+ above in the following line:
50
+
51
+ ```ruby
52
+ xcodeproj 'TestProject', 'Test' => :debug
53
+ ```
54
+
55
+
56
+ ### Documentation
57
+
58
+ CocoaPods will now generate documentation for every library with the
59
+ [`appledoc`][5] tool and install it into Xcode’s documentation viewer.
60
+
61
+ You can customize the settings used like so:
62
+
63
+ ```ruby
64
+ s.documentation = { :appledoc => ['--product-name', 'My awesome project!'] }
65
+ ```
66
+
67
+ Alternatively, you can specify a URL where an HTML version of the documentation
68
+ can be found:
69
+
70
+ ```ruby
71
+ s.documentation = { :html => 'http://example.com/docs/index.html' }
72
+ ```
73
+
74
+ See [#149](https://github.com/CocoaPods/CocoaPods/issues/149) and
75
+ [#151](https://github.com/CocoaPods/CocoaPods/issues/151) for more info.
76
+
77
+
78
+ ### Licenses & Documentation
79
+
80
+ CocoaPods will now generate two 'Acknowledgements' files for each target specified
81
+ in your Podfile which contain the License details for each Pod used in that target
82
+ (assuming details have been specified in the Pod spec).
83
+
84
+ There is a markdown file, for general consumption, as well as a property list file
85
+ that can be added to a settings bundle for an iOS application.
86
+
87
+ You don't need to do anything for this to happen, it should just work.
88
+
89
+ If you're not happy with the default boilerplate text generated for the title, header
90
+ and footnotes in the files, it's possible to customise these by overriding the methods
91
+ that generate the text in your `Podfile` like this:
92
+
93
+ ```ruby
94
+ class ::Pod::Generator::Acknowledgements
95
+ def header_text
96
+ "My custom header text"
97
+ end
98
+ end
99
+ ```
100
+
101
+ You can even go one step further and customise the text on a per target basis by
102
+ checking against the target name, like this:
103
+
104
+ ```ruby
105
+ class ::Pod::Generator::Acknowledgements
106
+ def header_text
107
+ if @target_definition.label.end_with?("MyTargetName")
108
+ "Custom header text for MyTargetName"
109
+ else
110
+ "Custom header text for other targets"
111
+ end
112
+ end
113
+ end
114
+ ```
115
+
116
+ Finally, here's a list of the methods that are available to override:
117
+
118
+ ```ruby
119
+ header_title
120
+ header_text
121
+ footnote_title
122
+ footnote_text
123
+ ```
124
+
125
+
126
+ ### Introduced two new classes: LocalPod and Sandbox.
127
+
128
+ The Sandbox represents the entire contents of the `POD_ROOT` (normally
129
+ `SOURCE_ROOT/Pods`). A LocalPod represents a pod that has been installed within
130
+ the Sandbox.
131
+
132
+ These two classes can be used as better homes for various pieces of logic
133
+ currently spread throughout the installation process and provide a better API
134
+ for working with the contents of this directory.
135
+
136
+
137
+ ### Xcodeproj API
138
+
139
+ All Xcodeproj APIs are now in `snake_case`, instead of `camelCase`. If you are
140
+ manipulating the project from your Podfile's `post_install` hook, or from a
141
+ podspec, then update these method calls.
142
+
143
+
144
+ ### Enhancements
145
+
146
+ * [#188](https://github.com/CocoaPods/CocoaPods/pull/188): `list` command now
147
+ displays the specifications introduced in the master repo if it is given as an
148
+ option the number of days to take into account.
149
+
150
+ * [#188](https://github.com/CocoaPods/CocoaPods/pull/188): Transferred search
151
+ layout improvements and options to `list` command.
152
+
153
+ * [#166](https://github.com/CocoaPods/CocoaPods/issues/166): Added printing
154
+ of homepage and source to search results.
155
+
156
+ * [#177](https://github.com/CocoaPods/CocoaPods/issues/177): Added `--stat`
157
+ option to display watchers and forks for pods hosted on GitHub.
158
+
159
+ * [#177](https://github.com/CocoaPods/CocoaPods/issues/177): Introduced colors
160
+ and tuned layout of search.
161
+
162
+ * [#112](https://github.com/CocoaPods/CocoaPods/issues/112): Introduced `--push`
163
+ option to `$ pod setup`. It configures the master spec repository to use the private
164
+ push URL. The change is preserved in future calls to `$ pod setup`.
165
+
166
+ * [#153](https://github.com/CocoaPods/CocoaPods/issues/153): It is no longer
167
+ required to call `$ pod setup`.
168
+
169
+ * [#163](https://github.com/CocoaPods/CocoaPods/issues/163): Print a template
170
+ for a new ticket when an error occurs.
171
+
172
+ * Added a new Github-specific downloader that can download repositories as a
173
+ gzipped tarball.
174
+
175
+ * No more global state is kept during resolving of dependencies.
176
+
177
+ * Updated Xcodeproj to have a friendlier API.
178
+
179
+
180
+ ### Fixes
181
+
182
+ * [#142](https://github.com/CocoaPods/CocoaPods/issues/142): Xcode 4.3.2 no longer
183
+ supports passing the -fobj-arc flag to the linker and will fail to build. The
184
+ addition of this flag was a workaround for a compiler bug in previous versions.
185
+ This flag is no longer included by default - to keep using this flag, you need to
186
+ add `set_arc_compatibility_flag!` to your Podfile.
187
+
188
+ * [#183](https://github.com/CocoaPods/CocoaPods/issues/183): Fix for
189
+ `.DS_Store` file in `~/.cocoapods` prevents `$ pod install` from running.
190
+
191
+ * [#134](https://github.com/CocoaPods/CocoaPods/issues/134): Match
192
+ `IPHONEOS_DEPLOYMENT_TARGET` build setting with `deployment_target` option in
193
+ generated Pods project file.
194
+
195
+ * [#142](https://github.com/CocoaPods/CocoaPods/issues/): Add `-fobjc-arc` to
196
+ `OTHER_LD_FLAGS` if _any_ pods require ARC.
197
+
198
+ * [#148](https://github.com/CocoaPods/CocoaPods/issues/148): External encoding
199
+ set to UTF-8 on Ruby 1.9 to fix crash caused by non-ascii characters in pod
200
+ description.
201
+
202
+ * Ensure all header search paths are quoted in the xcconfig file.
203
+
204
+ * Added weak quoting to `ibtool` input paths.
205
+
206
+
207
+ ---------------------------------------
208
+
209
+ ## 0.5.0
210
+
211
+ No longer requires MacRuby. Runs on MRI 1.8.7 (OS X system version) and 1.9.3.
212
+
213
+ A full list of all the changes since 0.3.0 can be found [here][7].
214
+
215
+
216
+ ---------------------------------------
217
+
218
+ ## 0.4.0
219
+
220
+ Oops, accidentally skipped this version.
221
+
222
+
223
+ ---------------------------------------
224
+
1
225
  ## 0.3.0
2
226
 
3
227
  ### Multiple targets
@@ -78,8 +302,8 @@ _before_ it’s written to disk. [[docs][3]]
78
302
  # Enable garbage collection support for MacRuby applications.
79
303
  post_install do |installer|
80
304
  installer.project.targets.each do |target|
81
- target.buildConfigurations.each do |config|
82
- config.buildSettings['GCC_ENABLE_OBJC_GC'] = 'supported'
305
+ target.build_configurations.each do |config|
306
+ config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
83
307
  end
84
308
  end
85
309
  end
@@ -127,3 +351,6 @@ allowing you to automate Xcode related tasks.
127
351
  [2]: https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/podfile.rb#L82
128
352
  [3]: https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/podfile.rb#L185
129
353
  [4]: https://github.com/CocoaPods/Xcodeproj
354
+ [5]: https://github.com/tomaz/appledoc
355
+ [6]: https://github.com/CocoaPods/CocoaPods/compare/0.5.1...HEAD
356
+ [7]: https://github.com/CocoaPods/CocoaPods/compare/0.3.10...0.5.0
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # CocoaPods – an Objective-C library manager
2
2
 
3
- [![Build Status](https://secure.travis-ci.org/CocoaPods/CocoaPods.png)](https://secure.travis-ci.org/CocoaPods/CocoaPods)
3
+ [![Build Status](https://secure.travis-ci.org/CocoaPods/CocoaPods.png?branch=master)](https://secure.travis-ci.org/CocoaPods/CocoaPods)
4
4
 
5
5
  CocoaPods manages library dependencies for your Xcode project.
6
6
 
@@ -12,7 +12,7 @@ You specify the dependencies for your project in one easy text file. CocoaPods r
12
12
 
13
13
  Ultimately, the goal is to improve discoverability of, and engagement in, third party open-source libraries, by creating a more centralized ecosystem.
14
14
 
15
- See [the wiki](https://github.com/CocoaPods/CocoaPods/wiki) for more in depth information on several topics.
15
+ See the [NSScreencast episode about CocoaPods](http://nsscreencast.com/episodes/5-cocoapods) for a quick overview on how to get started, or [the wiki](https://github.com/CocoaPods/CocoaPods/wiki) for more in depth information on several topics.
16
16
 
17
17
 
18
18
  ## Installation
@@ -21,50 +21,80 @@ Downloading and installing CocoaPods only takes a few minutes.
21
21
 
22
22
  CocoaPods runs on [Ruby](http://www.ruby-lang.org/en/). To install it run the following commands:
23
23
 
24
- $ sudo gem install cocoapods
25
- $ pod setup
24
+ ```
25
+ $ sudo gem install cocoapods
26
+ $ pod setup
27
+ ```
28
+
29
+ If you want to have CocoaPods generate documentation for each library, then install the [appledoc](http://gentlebytes.com/appledoc/) tool:
30
+
31
+ ```
32
+ $ brew install appledoc --HEAD
33
+ $ ln -sf "`brew --prefix`/Cellar/appledoc/HEAD/Templates" ~/Library/Application\ Support/appledoc
34
+ ```
26
35
 
27
36
  Now that you've got CocoaPods installed you can easily add it to your project.
28
37
 
38
+ **NOTES**
39
+
40
+ 1. If you're using a fresh out of the box Mac with Lion using Xcode from the Mac App Store, you will need to install the Command Line Tools for Xcode first: [here](https://developer.apple.com/downloads/index.action)
41
+
42
+ 2. CocoaPods re-uses some of the RubyGems 1.3.6 classes. If you have an older version (pre OS X 10.7), you will have to update RubyGems: `$ gem update --system`.
43
+
29
44
 
30
45
  ## Adding it to your project
31
46
 
32
47
  Search for Pods by name or description.
33
48
 
34
- $ pod search asi
35
- ==> ASIHTTPRequest (1.8.1)
36
- Easy to use CFNetwork wrapper for HTTP requests, Objective-C, Mac OS X and iPhone
49
+ ```
50
+ $ pod search asi
51
+ ==> ASIHTTPRequest (1.8.1)
52
+ Easy to use CFNetwork wrapper for HTTP requests, Objective-C, Mac OS X and iPhone
37
53
 
38
- ==> ASIWebPageRequest (1.8.1)
39
- The ASIWebPageRequest class included with ASIHTTPRequest lets you download
40
- complete webpages, including external resources like images and stylesheets.
54
+ ==> ASIWebPageRequest (1.8.1)
55
+ The ASIWebPageRequest class included with ASIHTTPRequest lets you download
56
+ complete webpages, including external resources like images and stylesheets.
57
+ ```
41
58
 
42
59
  After you've found your favorite dependencies you add them to your [Podfile](https://github.com/CocoaPods/CocoaPods/wiki/A-Podfile).
43
60
 
44
- $ edit Podfile
45
- platform :ios
46
- dependency 'JSONKit', '~> 1.4'
47
- dependency 'Reachability', '~> 2.0.4'
61
+ ```
62
+ $ edit Podfile
63
+ ```
64
+
65
+ ```ruby
66
+ platform :ios
67
+ dependency 'JSONKit', '~> 1.4'
68
+ dependency 'Reachability', '~> 2.0.4'
69
+ ```
48
70
 
49
71
  And then you [install the dependencies](https://github.com/CocoaPods/CocoaPods/wiki/Creating-a-project-that-uses-CocoaPods) in your project.
50
72
 
51
- $ pod install App.xcodeproj
73
+ ```
74
+ $ pod install App.xcodeproj
75
+ ```
52
76
 
53
77
  _Where ‘App.xcodeproj’ is the name of your actual application project._
54
78
 
55
79
  The next time you change your Podfile, you can update your project by simply running:
56
80
 
57
- $ pod install
81
+ ```
82
+ $ pod install
83
+ ```
58
84
 
59
85
  Remember to always open the Xcode workspace instead of the project file when you're building.
60
86
 
61
- $ open App.xcworkspace
87
+ ```
88
+ $ open App.xcworkspace
89
+ ```
62
90
 
63
91
  Sometimes CocoaPods doesn't have a Pod for one of your dependencies yet. Fortunately [creating a Pod](https://github.com/CocoaPods/CocoaPods/wiki/A-pod-specification) is really easy.
64
92
 
65
- $ pod spec create Peanuts
66
- $ edit Peanuts.podspec
67
- $ pod spec lint Peanuts.podspec
93
+ ```
94
+ $ pod spec create Peanuts
95
+ $ edit Peanuts.podspec
96
+ $ pod spec lint Peanuts.podspec
97
+ ```
68
98
 
69
99
  Once you've got it running [create a ticket](https://github.com/CocoaPods/CocoaPods/issues) and upload the Pod. If you're familiar with Git you can also fork the [CocoaPods specs](https://github.com/CocoaPods/Specs) repository and send a pull request. We really love contributions!
70
100
 
data/bin/pod CHANGED
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  if $0 == __FILE__
4
- $:.unshift File.expand_path('../../external/xcodeproj/ext', __FILE__)
5
- $:.unshift File.expand_path('../../external/xcodeproj/lib', __FILE__)
4
+ ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
5
+ require "rubygems"
6
+ require "bundler/setup"
6
7
  $:.unshift File.expand_path('../../lib', __FILE__)
7
8
  end
8
9
 
@@ -1,19 +1,30 @@
1
+ Encoding.default_external = Encoding::UTF_8 if RUBY_VERSION > '1.8.7'
2
+
1
3
  module Pod
2
- VERSION = '0.5.1'
4
+ VERSION = '0.6.0.rc1'
5
+
6
+ class PlainInformative < StandardError
7
+ end
3
8
 
4
- class Informative < StandardError
9
+ class Informative < PlainInformative
10
+ def message
11
+ #TODO: remove formatting from raise calls and remove conditional
12
+ super !~ /\[!\]/ ? "[!] #{super}\n".red : super
13
+ end
5
14
  end
6
15
 
7
- autoload :BridgeSupportGenerator, 'cocoapods/bridge_support_generator'
8
16
  autoload :Command, 'cocoapods/command'
9
17
  autoload :Config, 'cocoapods/config'
10
18
  autoload :Dependency, 'cocoapods/dependency'
11
19
  autoload :Downloader, 'cocoapods/downloader'
12
20
  autoload :Executable, 'cocoapods/executable'
13
21
  autoload :Installer, 'cocoapods/installer'
22
+ autoload :LocalPod, 'cocoapods/local_pod'
14
23
  autoload :Platform, 'cocoapods/platform'
15
24
  autoload :Podfile, 'cocoapods/podfile'
25
+ autoload :Project, 'cocoapods/project'
16
26
  autoload :Resolver, 'cocoapods/resolver'
27
+ autoload :Sandbox, 'cocoapods/sandbox'
17
28
  autoload :Source, 'cocoapods/source'
18
29
  autoload :Spec, 'cocoapods/specification'
19
30
  autoload :Specification, 'cocoapods/specification'
@@ -25,18 +36,21 @@ module Pod
25
36
  module Generator
26
37
  autoload :BridgeSupport, 'cocoapods/generator/bridge_support'
27
38
  autoload :CopyResourcesScript, 'cocoapods/generator/copy_resources_script'
39
+ autoload :Documentation, 'cocoapods/generator/documentation'
40
+ autoload :Acknowledgements, 'cocoapods/generator/acknowledgements'
41
+ autoload :Plist, 'cocoapods/generator/acknowledgements/plist'
42
+ autoload :Markdown, 'cocoapods/generator/acknowledgements/markdown'
43
+ autoload :DummySource, 'cocoapods/generator/dummy_source'
28
44
  end
29
45
  end
30
46
 
31
- module Xcodeproj
32
- autoload :Config, 'xcodeproj/config'
33
- autoload :Project, 'cocoapods/xcodeproj_pods'
34
- autoload :Workspace, 'xcodeproj/workspace'
35
- end
36
-
37
47
  class Pathname
38
48
  def glob(pattern = '')
39
49
  Dir.glob((self + pattern).to_s).map { |f| Pathname.new(f) }
40
50
  end
41
51
  end
42
52
 
53
+ if ENV['COCOA_PODS_ENV'] == 'development'
54
+ require 'pry'
55
+ require 'awesome_print'
56
+ end
@@ -1,11 +1,16 @@
1
+ require 'colored'
2
+
1
3
  module Pod
2
4
  class Command
3
- autoload :Install, 'cocoapods/command/install'
4
- autoload :Repo, 'cocoapods/command/repo'
5
- autoload :Search, 'cocoapods/command/search'
6
- autoload :List, 'cocoapods/command/list'
7
- autoload :Setup, 'cocoapods/command/setup'
8
- autoload :Spec, 'cocoapods/command/spec'
5
+ autoload :ErrorReport, 'cocoapods/command/error_report'
6
+ autoload :Install, 'cocoapods/command/install'
7
+ autoload :List, 'cocoapods/command/list'
8
+ autoload :Presenter, 'cocoapods/command/presenter'
9
+ autoload :Push, 'cocoapods/command/push'
10
+ autoload :Repo, 'cocoapods/command/repo'
11
+ autoload :Search, 'cocoapods/command/search'
12
+ autoload :Setup, 'cocoapods/command/setup'
13
+ autoload :Spec, 'cocoapods/command/spec'
9
14
 
10
15
  class Help < Informative
11
16
  def initialize(command_class, argv)
@@ -14,14 +19,24 @@ module Pod
14
19
 
15
20
  def message
16
21
  [
17
- @command_class.banner,
18
22
  '',
19
- 'Options',
20
- '-------',
23
+ @command_class.banner.gsub(/\$ pod (.*)/, '$ pod \1'.green),
24
+ '',
25
+ 'Options:',
21
26
  '',
22
- @command_class.options
27
+ options,
28
+ "\n",
23
29
  ].join("\n")
24
30
  end
31
+
32
+ private
33
+
34
+ def options
35
+ options = @command_class.options
36
+ keys = options.map(&:first)
37
+ key_size = keys.inject(0) { |size, key| key.size > size ? key.size : size }
38
+ options.map { |key, desc| " #{key.ljust(key_size)} #{desc}" }.join("\n")
39
+ end
25
40
  end
26
41
 
27
42
  class ARGV < Array
@@ -32,44 +47,51 @@ module Pod
32
47
  end
33
48
 
34
49
  def self.banner
35
- "To see help for the available commands run:\n" \
36
- "\n" \
37
- " * $ pod setup --help\n" \
38
- " * $ pod search --help\n" \
39
- " * $ pod list --help\n" \
40
- " * $ pod install --help\n" \
41
- " * $ pod repo --help\n" \
42
- " * $ pod spec --help"
50
+ commands = ['install', 'list', 'push', 'repo', 'search', 'setup', 'spec'].sort
51
+ banner = "\nTo see help for the available commands run:\n\n"
52
+ commands.each {|cmd| banner << " * $ pod #{cmd.green} --help\n"}
53
+ banner
43
54
  end
44
55
 
45
56
  def self.options
46
- " --help Show help information\n" \
47
- " --silent Print nothing\n" \
48
- " --verbose Print more information while working\n" \
49
- " --version Prints the version of CocoaPods"
57
+ [
58
+ ['--help', 'Show help information'],
59
+ ['--silent', 'Print nothing'],
60
+ ['--no-color', 'Print output without color'],
61
+ ['--verbose', 'Print more information while working'],
62
+ ['--version', 'Prints the version of CocoaPods'],
63
+ ]
50
64
  end
51
65
 
52
66
  def self.run(*argv)
53
- parse(*argv).run
67
+ sub_command = parse(*argv)
68
+ Setup.new(ARGV.new).run_if_needed
69
+ sub_command.run
70
+
71
+ rescue Interrupt
72
+ puts "[!] Cancelled".red
73
+ Config.instance.verbose? ? raise : exit(1)
74
+
54
75
  rescue Exception => e
55
- unless e.is_a?(Informative)
56
- puts "Oh no, an error occurred. Please run with `--verbose' and report " \
57
- "on https://github.com/CocoaPods/CocoaPods/issues."
58
- puts ""
76
+ if e.is_a?(PlainInformative) # also catches Informative
77
+ puts e.message
78
+ puts *e.backtrace if Config.instance.verbose?
79
+ else
80
+ puts ErrorReport.report(e)
59
81
  end
60
- puts e.message
61
- puts *e.backtrace if Config.instance.verbose
62
82
  exit 1
63
83
  end
64
84
 
65
85
  def self.parse(*argv)
66
86
  argv = ARGV.new(argv)
67
- raise Informative, VERSION if argv.option('--version')
87
+ raise PlainInformative, VERSION if argv.option('--version')
68
88
 
69
89
  show_help = argv.option('--help')
70
90
  Config.instance.silent = argv.option('--silent')
71
91
  Config.instance.verbose = argv.option('--verbose')
72
92
 
93
+ String.send(:define_method, :colorize) { |string , _| string } if argv.option( '--no-color' )
94
+
73
95
  command_class = case argv.shift_argument
74
96
  when 'install' then Install
75
97
  when 'repo' then Repo
@@ -77,6 +99,7 @@ module Pod
77
99
  when 'list' then List
78
100
  when 'setup' then Setup
79
101
  when 'spec' then Spec
102
+ when 'push' then Push
80
103
  end
81
104
 
82
105
  if show_help || command_class.nil?
@@ -91,6 +114,24 @@ module Pod
91
114
  def initialize(argv)
92
115
  raise Help.new(self.class, argv)
93
116
  end
117
+
118
+ private
119
+
120
+ def print_title(title, only_verbose = true)
121
+ if config.verbose?
122
+ puts "\n" + title.yellow
123
+ elsif !config.silent? && !only_verbose
124
+ puts title
125
+ end
126
+ end
127
+
128
+ def print_subtitle(title, only_verbose = false)
129
+ if config.verbose?
130
+ puts "\n" + title.green
131
+ elsif !config.silent? && !only_verbose
132
+ puts title
133
+ end
134
+ end
94
135
  end
95
136
  end
96
137