cocoapods 0.36.0.beta.1 → 0.36.0.beta.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +67 -5
- data/bin/pod +11 -10
- data/bin/sandbox-pod +1 -1
- data/lib/cocoapods.rb +1 -1
- data/lib/cocoapods/command/lib.rb +0 -1
- data/lib/cocoapods/command/outdated.rb +1 -3
- data/lib/cocoapods/command/repo.rb +5 -267
- data/lib/cocoapods/command/repo/add.rb +53 -0
- data/lib/cocoapods/command/repo/lint.rb +73 -0
- data/lib/cocoapods/command/repo/list.rb +95 -0
- data/lib/cocoapods/command/repo/remove.rb +36 -0
- data/lib/cocoapods/command/repo/update.rb +27 -0
- data/lib/cocoapods/command/setup.rb +1 -1
- data/lib/cocoapods/command/spec.rb +5 -546
- data/lib/cocoapods/command/spec/cat.rb +51 -0
- data/lib/cocoapods/command/spec/create.rb +279 -0
- data/lib/cocoapods/command/spec/edit.rb +87 -0
- data/lib/cocoapods/command/spec/lint.rb +105 -0
- data/lib/cocoapods/command/spec/which.rb +43 -0
- data/lib/cocoapods/downloader.rb +0 -2
- data/lib/cocoapods/external_sources/podspec_source.rb +13 -3
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/copy_resources_script.rb +22 -11
- data/lib/cocoapods/generator/embed_frameworks_script.rb +3 -0
- data/lib/cocoapods/generator/header.rb +3 -3
- data/lib/cocoapods/generator/target_environment_header.rb +1 -1
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +7 -7
- data/lib/cocoapods/generator/xcconfig/public_pod_xcconfig.rb +1 -1
- data/lib/cocoapods/hooks_manager.rb +4 -4
- data/lib/cocoapods/installer.rb +17 -4
- data/lib/cocoapods/installer/analyzer.rb +19 -12
- data/lib/cocoapods/installer/pod_source_installer.rb +1 -1
- data/lib/cocoapods/installer/target_installer.rb +1 -1
- data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +9 -8
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +2 -2
- data/lib/cocoapods/sandbox.rb +0 -2
- data/lib/cocoapods/sandbox/headers_store.rb +1 -1
- data/lib/cocoapods/sources_manager.rb +8 -7
- data/lib/cocoapods/target.rb +1 -1
- data/lib/cocoapods/target/aggregate_target.rb +1 -0
- data/lib/cocoapods/target/pod_target.rb +1 -1
- data/lib/cocoapods/user_interface/error_report.rb +10 -0
- data/lib/cocoapods/validator.rb +15 -4
- metadata +17 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86bf745ff3beb43f547d72bdc3bb5561250836ef
|
4
|
+
data.tar.gz: 527fecbbab8649bf447a7fb6ea5130340a9ffd65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 691fb6ca9b5324b5a1ac63a496e9cb87429941ce7d178b45501649890a5029a9eeb1801850e9a73e655405c016a40da7cfaa53326f63825123939e501f6ad9c5
|
7
|
+
data.tar.gz: bf435ded4cbcaca3b11a79aa9df3aecfcc65b9f54f070f98bf451f98a8dc2b010ce58d2353cb117f7a5488e8bf51b10ff8f9461aac0d7f6b9ec652544d3f64c1
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,69 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
|
|
4
4
|
|
5
5
|
To install release candidates run `[sudo] gem install cocoapods --pre`
|
6
6
|
|
7
|
+
## 0.36.0.beta.2
|
8
|
+
|
9
|
+
[Xcodeproj](https://github.com/CocoaPods/Xcodeproj/compare/0.21.0...0.21.2)
|
10
|
+
|
11
|
+
##### Breaking
|
12
|
+
|
13
|
+
* Changes the default spec repositories used from all configured spec
|
14
|
+
repositories, to the master spec repository when no spec repositories
|
15
|
+
are explicitly configured in a Podfile.
|
16
|
+
[Kyle Fuller](https://github.com/kylef)
|
17
|
+
[#2946](https://github.com/CocoaPods/CocoaPods/issues/2946)
|
18
|
+
|
19
|
+
##### Enhancements
|
20
|
+
|
21
|
+
* Set the APPLICATION_EXTENSION_API_ONLY build setting if integrating with an app extension target.
|
22
|
+
[Boris Bügling](https://github.com/neonichu)
|
23
|
+
[#2980](https://github.com/CocoaPods/CocoaPods/issues/2980)
|
24
|
+
|
25
|
+
* Xcodebuild warnings will now be reported as `warning` during linting
|
26
|
+
instead of `note`.
|
27
|
+
[Hugo Tunius](https://github.com/K0nserv)
|
28
|
+
|
29
|
+
* Copy only the resources required for the current build configuration.
|
30
|
+
[Samuel Giddins](https://github.com/segiddins)
|
31
|
+
[#2391](https://github.com/CocoaPods/CocoaPods/issues/2391)
|
32
|
+
|
33
|
+
##### Bug Fixes
|
34
|
+
|
35
|
+
* Ensure that linting fails if xcodebuild doesn't successfully build your Pod.
|
36
|
+
[Kyle Fuller](https://github.com/kylef)
|
37
|
+
[#2981](https://github.com/CocoaPods/CocoaPods/issues/2981)
|
38
|
+
[cocoapods-trunk#33](https://github.com/CocoaPods/cocoapods-trunk/issues/33)
|
39
|
+
|
40
|
+
* Clone the master spec repository when no spec repositories are explicitly
|
41
|
+
defined in the Podfile. This fixes problems using CocoaPods for the first
|
42
|
+
time without any explicit spec repositories.
|
43
|
+
[Kyle Fuller](https://github.com/kylef)
|
44
|
+
[#2946](https://github.com/CocoaPods/CocoaPods/issues/2946)
|
45
|
+
|
46
|
+
* Xcodebuild warnings with the string `error` in them will no longer be
|
47
|
+
linted as errors if they are in fact warnings.
|
48
|
+
[Hugo Tunius](https://github.com/K0nserv)
|
49
|
+
[#2579](https://github.com/CocoaPods/CocoaPods/issues/2579)
|
50
|
+
|
51
|
+
* Any errors which occur during fetching of external podspecs over HTTP
|
52
|
+
will now be gracefully handled.
|
53
|
+
[Hugo Tunius](https://github.com/K0nserv)
|
54
|
+
[#2823](https://github.com/CocoaPods/CocoaPods/issues/2823)
|
55
|
+
|
56
|
+
* When updating spec repositories only update the git sourced repos.
|
57
|
+
[Dustin Clark](https://github.com/clarkda)
|
58
|
+
[#2558](https://github.com/CocoaPods/CocoaPods/issues/2558)
|
59
|
+
|
60
|
+
* Pods referenced via the `:podspec` option will have their podspecs properly
|
61
|
+
parsed in the local directory if the path points to a local file.
|
62
|
+
[Samuel Giddins](https://github.com/segiddins)
|
63
|
+
|
64
|
+
* Fix an issue where using Swift frameworks in an Objective-C host application
|
65
|
+
causes an error because the Swift frameworks we're not code signed.
|
66
|
+
[Joseph Ross](https://github.com/jrosssavant)
|
67
|
+
[#3008](https://github.com/CocoaPods/CocoaPods/issues/3008)
|
68
|
+
|
69
|
+
|
7
70
|
## 0.36.0.beta.1
|
8
71
|
|
9
72
|
[CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.35.0...0.36.0.beta.1)
|
@@ -76,10 +139,6 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
|
|
76
139
|
|
77
140
|
##### Bug Fixes
|
78
141
|
|
79
|
-
* Fix resource bundles for not build targets.
|
80
|
-
[Boris Bügling](https://github.com/neonichu)
|
81
|
-
[#2934](https://github.com/CocoaPods/CocoaPods/issues/2934)
|
82
|
-
|
83
142
|
* Fix updating a pod that has subspec dependencies.
|
84
143
|
[Samuel Giddins](https://github.com/segiddins)
|
85
144
|
[#2879](https://github.com/CocoaPods/CocoaPods/issues/2879)
|
@@ -99,7 +158,7 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
|
|
99
158
|
[Samuel Giddins](https://github.com/segiddins)
|
100
159
|
[#1919](https://github.com/CocoaPods/CocoaPods/issues/1919)
|
101
160
|
|
102
|
-
* Fix the reading of podspecs that come from the `:git`, `:svn`,
|
161
|
+
* Fix the reading of podspecs that come from the `:git`, `:svn`, `:http`, or
|
103
162
|
`:hg` options in your `Podfile` that used context-dependent ruby code, such as
|
104
163
|
reading a file to determine the specification version.
|
105
164
|
[Samuel Giddins](https://github.com/segiddins)
|
@@ -174,6 +233,9 @@ For more details, see :memo: [CocoaPods 0.35](http://blog.cocoapods.org/CocoaPod
|
|
174
233
|
copying resources to main application bundle.
|
175
234
|
[Yan Rabovik](https://github.com/rabovik)
|
176
235
|
|
236
|
+
* Fix uninitialized constant Class::YAML crash in some cases.
|
237
|
+
[Tim Shadel](https://github.com/timshadel)
|
238
|
+
|
177
239
|
##### Enhancements
|
178
240
|
|
179
241
|
* `pod search`, `pod spec which`, `pod spec cat` and `pod spec edit`
|
data/bin/pod
CHANGED
@@ -26,16 +26,17 @@ require 'cocoapods'
|
|
26
26
|
|
27
27
|
if profile_filename = ENV['PROFILE']
|
28
28
|
require 'ruby-prof'
|
29
|
-
reporter =
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
29
|
+
reporter =
|
30
|
+
case (profile_extname = File.extname(profile_filename))
|
31
|
+
when '.txt'
|
32
|
+
RubyProf::FlatPrinterWithLineNumbers
|
33
|
+
when '.html'
|
34
|
+
RubyProf::GraphHtmlPrinter
|
35
|
+
when '.callgrind'
|
36
|
+
RubyProf::CallTreePrinter
|
37
|
+
else
|
38
|
+
raise "Unknown profiler format indicated by extension: #{profile_extname}"
|
39
|
+
end
|
39
40
|
File.open(profile_filename, 'w') do |io|
|
40
41
|
reporter.new(RubyProf.profile { Pod::Command.run(ARGV) }).print(io)
|
41
42
|
end
|
data/bin/sandbox-pod
CHANGED
@@ -153,7 +153,7 @@ class Profile
|
|
153
153
|
File.expand_path('../..', developer_prefix)
|
154
154
|
end
|
155
155
|
|
156
|
-
# TODO raise SAFE level (0) to 4 if possible.
|
156
|
+
# TODO: raise SAFE level (0) to 4 if possible.
|
157
157
|
def generate
|
158
158
|
ERB.new(PROFILE_ERB_TEMPLATE, 0, '>').result(binding)
|
159
159
|
end
|
data/lib/cocoapods.rb
CHANGED
@@ -7,7 +7,7 @@ require 'xcodeproj'
|
|
7
7
|
require 'active_support/core_ext/string/strip'
|
8
8
|
require 'active_support/core_ext/string/inflections'
|
9
9
|
require 'active_support/core_ext/array/conversions'
|
10
|
-
# TODO check what this actually does by the time we're going to add support for
|
10
|
+
# TODO: check what this actually does by the time we're going to add support for
|
11
11
|
# other locales.
|
12
12
|
require 'i18n'
|
13
13
|
if I18n.respond_to?(:enforce_available_locales=)
|
@@ -67,10 +67,8 @@ module Pod
|
|
67
67
|
if source_version > lockfile_version
|
68
68
|
matching_spec = unlocked_pods.find { |s| s.name == pod_name }
|
69
69
|
matching_version =
|
70
|
-
matching_spec ? matching_spec.version :
|
70
|
+
matching_spec ? matching_spec.version : '(unused)'
|
71
71
|
[pod_name, lockfile_version, matching_version, source_version]
|
72
|
-
else
|
73
|
-
nil
|
74
72
|
end
|
75
73
|
end.compact.uniq
|
76
74
|
end
|
@@ -1,5 +1,10 @@
|
|
1
1
|
require 'fileutils'
|
2
|
+
require 'cocoapods/command/repo/add'
|
3
|
+
require 'cocoapods/command/repo/lint'
|
4
|
+
require 'cocoapods/command/repo/list'
|
2
5
|
require 'cocoapods/command/repo/push'
|
6
|
+
require 'cocoapods/command/repo/remove'
|
7
|
+
require 'cocoapods/command/repo/update'
|
3
8
|
|
4
9
|
module Pod
|
5
10
|
class Command
|
@@ -11,273 +16,6 @@ module Pod
|
|
11
16
|
self.summary = 'Manage spec-repositories'
|
12
17
|
self.default_subcommand = 'list'
|
13
18
|
|
14
|
-
class Add < Repo
|
15
|
-
self.summary = 'Add a spec repo.'
|
16
|
-
|
17
|
-
self.description = <<-DESC
|
18
|
-
Clones `URL` in the local spec-repos directory at `~/.cocoapods/repos/`. The
|
19
|
-
remote can later be referred to by `NAME`.
|
20
|
-
DESC
|
21
|
-
|
22
|
-
self.arguments = [
|
23
|
-
CLAide::Argument.new('NAME', true),
|
24
|
-
CLAide::Argument.new('URL', true),
|
25
|
-
CLAide::Argument.new('BRANCH', false),
|
26
|
-
]
|
27
|
-
|
28
|
-
def self.options
|
29
|
-
[
|
30
|
-
['--shallow', 'Create a shallow clone (fast clone, but no push capabilities)'],
|
31
|
-
].concat(super)
|
32
|
-
end
|
33
|
-
|
34
|
-
def initialize(argv)
|
35
|
-
@shallow = argv.flag?('shallow', false)
|
36
|
-
@name, @url, @branch = argv.shift_argument, argv.shift_argument, argv.shift_argument
|
37
|
-
super
|
38
|
-
end
|
39
|
-
|
40
|
-
def validate!
|
41
|
-
super
|
42
|
-
unless @name && @url
|
43
|
-
help! 'Adding a repo needs a `NAME` and a `URL`.'
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def run
|
48
|
-
prefix = @shallow ? 'Creating shallow clone of' : 'Cloning'
|
49
|
-
UI.section("#{prefix} spec repo `#{@name}` from `#{@url}`#{" (branch `#{@branch}`)" if @branch}") do
|
50
|
-
config.repos_dir.mkpath
|
51
|
-
Dir.chdir(config.repos_dir) do
|
52
|
-
command = "clone '#{@url}' #{@name}"
|
53
|
-
command << ' --depth=1' if @shallow
|
54
|
-
git!(command)
|
55
|
-
end
|
56
|
-
Dir.chdir(dir) { git!("checkout #{@branch}") } if @branch
|
57
|
-
SourcesManager.check_version_information(dir)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
#-----------------------------------------------------------------------#
|
63
|
-
|
64
|
-
class Update < Repo
|
65
|
-
self.summary = 'Update a spec repo.'
|
66
|
-
|
67
|
-
self.description = <<-DESC
|
68
|
-
Updates the local clone of the spec-repo `NAME`. If `NAME` is omitted
|
69
|
-
this will update all spec-repos in `~/.cocoapods/repos`.
|
70
|
-
DESC
|
71
|
-
|
72
|
-
self.arguments = [
|
73
|
-
CLAide::Argument.new('NAME', false),
|
74
|
-
]
|
75
|
-
|
76
|
-
def initialize(argv)
|
77
|
-
@name = argv.shift_argument
|
78
|
-
super
|
79
|
-
end
|
80
|
-
|
81
|
-
def run
|
82
|
-
SourcesManager.update(@name, true)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
#-----------------------------------------------------------------------#
|
87
|
-
|
88
|
-
class Lint < Repo
|
89
|
-
self.summary = 'Validates all specs in a repo.'
|
90
|
-
|
91
|
-
self.description = <<-DESC
|
92
|
-
Lints the spec-repo `NAME`. If a directory is provided it is assumed
|
93
|
-
to be the root of a repo. Finally, if `NAME` is not provided this
|
94
|
-
will lint all the spec-repos known to CocoaPods.
|
95
|
-
DESC
|
96
|
-
|
97
|
-
self.arguments = [
|
98
|
-
CLAide::Argument.new(%w(NAME DIRECTORY), false),
|
99
|
-
]
|
100
|
-
|
101
|
-
def self.options
|
102
|
-
[['--only-errors', 'Lint presents only the errors']].concat(super)
|
103
|
-
end
|
104
|
-
|
105
|
-
def initialize(argv)
|
106
|
-
@name = argv.shift_argument
|
107
|
-
@only_errors = argv.flag?('only-errors')
|
108
|
-
super
|
109
|
-
end
|
110
|
-
|
111
|
-
# @todo Part of this logic needs to be ported to cocoapods-core so web
|
112
|
-
# services can validate the repo.
|
113
|
-
#
|
114
|
-
# @todo add UI.print and enable print statements again.
|
115
|
-
#
|
116
|
-
def run
|
117
|
-
if @name
|
118
|
-
dirs = File.exist?(@name) ? [Pathname.new(@name)] : [dir]
|
119
|
-
else
|
120
|
-
dirs = config.repos_dir.children.select(&:directory?)
|
121
|
-
end
|
122
|
-
dirs.each do |dir|
|
123
|
-
SourcesManager.check_version_information(dir)
|
124
|
-
UI.puts "\nLinting spec repo `#{dir.realpath.basename}`\n".yellow
|
125
|
-
|
126
|
-
validator = Source::HealthReporter.new(dir)
|
127
|
-
validator.pre_check do |_name, _version|
|
128
|
-
UI.print '.'
|
129
|
-
end
|
130
|
-
report = validator.analyze
|
131
|
-
UI.puts
|
132
|
-
UI.puts
|
133
|
-
|
134
|
-
report.pods_by_warning.each do |message, versions_by_name|
|
135
|
-
UI.puts "-> #{message}".yellow
|
136
|
-
versions_by_name.each { |name, versions| UI.puts " - #{name} (#{versions * ', '})" }
|
137
|
-
UI.puts
|
138
|
-
end
|
139
|
-
|
140
|
-
report.pods_by_error.each do |message, versions_by_name|
|
141
|
-
UI.puts "-> #{message}".red
|
142
|
-
versions_by_name.each { |name, versions| UI.puts " - #{name} (#{versions * ', '})" }
|
143
|
-
UI.puts
|
144
|
-
end
|
145
|
-
|
146
|
-
UI.puts "Analyzed #{report.analyzed_paths.count} podspecs files.\n\n"
|
147
|
-
if report.pods_by_error.count.zero?
|
148
|
-
UI.puts 'All the specs passed validation.'.green << "\n\n"
|
149
|
-
else
|
150
|
-
raise Informative, "#{report.pods_by_error.count} podspecs failed validation."
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
#-----------------------------------------------------------------------#
|
157
|
-
|
158
|
-
class Remove < Repo
|
159
|
-
self.summary = 'Remove a spec repo'
|
160
|
-
|
161
|
-
self.description = <<-DESC
|
162
|
-
Deletes the remote named `NAME` from the local spec-repos directory at `~/.cocoapods/repos/.`
|
163
|
-
DESC
|
164
|
-
|
165
|
-
self.arguments = [
|
166
|
-
CLAide::Argument.new('NAME', true),
|
167
|
-
]
|
168
|
-
|
169
|
-
def initialize(argv)
|
170
|
-
@name = argv.shift_argument
|
171
|
-
super
|
172
|
-
end
|
173
|
-
|
174
|
-
def validate!
|
175
|
-
super
|
176
|
-
help! 'Deleting a repo needs a `NAME`.' unless @name
|
177
|
-
help! "repo #{@name} does not exist" unless File.directory?(dir)
|
178
|
-
help! "You do not have permission to delete the #{@name} repository." \
|
179
|
-
'Perhaps try prefixing this command with sudo.' unless File.writable?(dir)
|
180
|
-
end
|
181
|
-
|
182
|
-
def run
|
183
|
-
UI.section("Removing spec repo `#{@name}`") do
|
184
|
-
FileUtils.rm_rf(dir)
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
#-----------------------------------------------------------------------#
|
190
|
-
|
191
|
-
class List < Repo
|
192
|
-
self.summary = 'List repos'
|
193
|
-
|
194
|
-
self.description = <<-DESC
|
195
|
-
List the repos from the local spec-repos directory at `~/.cocoapods/repos/.`
|
196
|
-
DESC
|
197
|
-
|
198
|
-
def self.options
|
199
|
-
[["--count-only", "Show the total number of repos"]].concat(super)
|
200
|
-
end
|
201
|
-
|
202
|
-
def initialize(argv)
|
203
|
-
@count_only = argv.flag?('count-only')
|
204
|
-
super
|
205
|
-
end
|
206
|
-
|
207
|
-
# @output Examples:
|
208
|
-
#
|
209
|
-
# master
|
210
|
-
# - type: git (origin)
|
211
|
-
# - URL: https://github.com/CocoaPods/Specs.git
|
212
|
-
# - path: /Users/lascorbe/.cocoapods/repos/master
|
213
|
-
#
|
214
|
-
# test
|
215
|
-
# - type: local copy
|
216
|
-
# - path: /Users/lascorbe/.cocoapods/repos/test
|
217
|
-
#
|
218
|
-
def run
|
219
|
-
sources = SourcesManager.all
|
220
|
-
print_sources(sources) unless @count_only
|
221
|
-
print_count_of_sources(sources)
|
222
|
-
end
|
223
|
-
|
224
|
-
private
|
225
|
-
|
226
|
-
# Pretty-prints the source at the given path.
|
227
|
-
#
|
228
|
-
# @param [String,Pathname] path
|
229
|
-
# The path of the source to be printed.
|
230
|
-
#
|
231
|
-
# @return [void]
|
232
|
-
#
|
233
|
-
def print_source_at_path(path)
|
234
|
-
Dir.chdir(path) do
|
235
|
-
if SourcesManager.git_repo?(path)
|
236
|
-
remote_name = branch_remote_name(branch_name)
|
237
|
-
if remote_name
|
238
|
-
UI.puts "- Type: git (#{remote_name})"
|
239
|
-
url = url_of_git_repo(remote_name)
|
240
|
-
UI.puts "- URL: #{url}"
|
241
|
-
else
|
242
|
-
UI.puts "- Type: git (no remote information available)"
|
243
|
-
end
|
244
|
-
else
|
245
|
-
UI.puts "- Type: local copy"
|
246
|
-
end
|
247
|
-
UI.puts "- Path: #{path}"
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
# Pretty-prints the given sources.
|
252
|
-
#
|
253
|
-
# @param [Array<Source>] sources
|
254
|
-
# The sources that should be printed.
|
255
|
-
#
|
256
|
-
# @return [void]
|
257
|
-
#
|
258
|
-
def print_sources(sources)
|
259
|
-
sources.each do |source|
|
260
|
-
UI.title source.name do
|
261
|
-
print_source_at_path source.repo
|
262
|
-
end
|
263
|
-
end
|
264
|
-
UI.puts "\n"
|
265
|
-
end
|
266
|
-
|
267
|
-
# Pretty-prints the number of sources.
|
268
|
-
#
|
269
|
-
# @param [Array<Source>] sources
|
270
|
-
# The sources whose count should be printed.
|
271
|
-
#
|
272
|
-
# @return [void]
|
273
|
-
#
|
274
|
-
def print_count_of_sources(sources)
|
275
|
-
number_of_repos = sources.length
|
276
|
-
repo_string = number_of_repos != 1 ? 'repos' : 'repo'
|
277
|
-
UI.puts "#{number_of_repos} #{repo_string}".green
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
19
|
#-----------------------------------------------------------------------#
|
282
20
|
|
283
21
|
extend Executable
|