cocoapods-repo-svn 2.0.1 → 3.0.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.
- checksums.yaml +4 -4
- data/{repo_svn_ext.gemspec → cocoapods_repo_svn.gemspec} +4 -4
- data/lib/cocoapods_plugin.rb +1 -1
- data/lib/cocoapods_repo_svn.rb +7 -0
- data/lib/pod/command/repo_svn.rb +11 -385
- data/lib/pod/command/repo_svn/add.rb +44 -0
- data/lib/pod/command/repo_svn/lint.rb +76 -0
- data/lib/pod/command/repo_svn/push.rb +108 -0
- data/lib/pod/command/repo_svn/remove.rb +0 -0
- data/lib/pod/command/repo_svn/update.rb +119 -0
- data/spec/command/repo-svn/add_spec.rb +1 -1
- metadata +11 -7
- data/lib/repo_svn_ext.rb +0 -5
- data/lib/repo_svn_ext/version.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae3208e23c0883f8836e35c873cc8c9f71263a14
|
4
|
+
data.tar.gz: cb48f2f1178cfd4d135e43c5c42c7c69b7cf89d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b8443ae4b2b499226fb2765010f5476667fb7eb908cf762c8cd04e37e916d50ed68d6fb93cbe5b0d41c6099c56e93ed2e184f6888f531d85e4ed1dd030a7f7c
|
7
|
+
data.tar.gz: 8906269fd77f922309a6c52d971a10b0f8f4ee64b882540bb26507cb5f4aa1d2946598dbbc0f3ba4ca2377ef5c1c9fa41f79673f5bec45f93bfa03e94cd7ae41
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require '
|
4
|
+
require 'cocoapods_repo_svn'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'cocoapods-repo-svn'
|
8
|
-
spec.version =
|
8
|
+
spec.version = CocoapodsRepoSvn::VERSION
|
9
9
|
spec.authors = ['Dustin Clark']
|
10
|
-
spec.email = ['dusty@
|
10
|
+
spec.email = ['dusty@isperldead.net']
|
11
11
|
spec.description = %q{CocoaPod plugin to add subversion support for spec repositories}
|
12
12
|
spec.summary = %q{Subversion support for spec repository}
|
13
13
|
spec.homepage = 'https://github.com/clarkda/cocoapods-repo-svn'
|
@@ -20,4 +20,4 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
|
-
end
|
23
|
+
end
|
data/lib/cocoapods_plugin.rb
CHANGED
data/lib/pod/command/repo_svn.rb
CHANGED
@@ -1,393 +1,19 @@
|
|
1
1
|
require 'fileutils'
|
2
|
+
require 'cocoapods_repo_svn'
|
2
3
|
|
3
4
|
module Pod
|
4
5
|
class Command
|
5
6
|
class RepoSvn < Command
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
self.summary = 'Add a spec-repo using svn.'
|
12
|
-
|
13
|
-
self.description = <<-DESC
|
14
|
-
Check out `URL` in the local spec-repos directory at `~/.cocoapods/repos/`. The
|
15
|
-
remote can later be referred to by `NAME`.
|
16
|
-
DESC
|
17
|
-
|
18
|
-
self.arguments = [
|
19
|
-
CLAide::Argument.new('NAME', true),
|
20
|
-
CLAide::Argument.new('URL', true)
|
21
|
-
]
|
22
|
-
|
23
|
-
def initialize(argv)
|
24
|
-
@name, @url = argv.shift_argument, argv.shift_argument
|
25
|
-
super
|
26
|
-
end
|
27
|
-
|
28
|
-
def validate!
|
29
|
-
super
|
30
|
-
unless @name && @url
|
31
|
-
help! "Adding a spec-repo needs a `NAME` and a `URL`."
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def run
|
36
|
-
UI.section("Checking out spec-repo `#{@name}` from `#{@url}` using svn") do
|
37
|
-
config.repos_dir.mkpath
|
38
|
-
Dir.chdir(config.repos_dir) do
|
39
|
-
command = "checkout --non-interactive --trust-server-cert '#{@url}' #{@name}"
|
40
|
-
#!svn(command)
|
41
|
-
`svn #{command}`
|
42
|
-
end
|
43
|
-
SourcesManager.check_version_information(dir) #todo: TEST ME
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
#-----------------------------------------------------------------------#
|
49
|
-
|
50
|
-
class Update < RepoSvn
|
51
|
-
self.summary = 'Update a svn spec-repo.'
|
52
|
-
|
53
|
-
self.description = <<-DESC
|
54
|
-
Updates the checked out spec-repo `NAME`.
|
55
|
-
DESC
|
56
|
-
|
57
|
-
self.arguments = [
|
58
|
-
CLAide::Argument.new('NAME', true)
|
59
|
-
]
|
60
|
-
|
61
|
-
def initialize(argv)
|
62
|
-
@name = argv.shift_argument
|
63
|
-
super
|
64
|
-
end
|
65
|
-
|
66
|
-
def validate!
|
67
|
-
super
|
68
|
-
unless @name
|
69
|
-
help! "Updating a spec-repo needs a `NAME`."
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def run
|
74
|
-
update(@name, true) #todo: dusty
|
75
|
-
end
|
76
|
-
|
77
|
-
#@!group Update helpers
|
78
|
-
#-----------------------------------------------------------------------#
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
# Slightly modified SourcesManager->update to deal with subversion updates.
|
83
|
-
#
|
84
|
-
# Original contributors:
|
85
|
-
#
|
86
|
-
# Fabio Pelosin http://github.com/irrationalfab
|
87
|
-
# Boris Bügling http://githun.com/neonichu
|
88
|
-
#
|
89
|
-
|
90
|
-
# Updates the local copy of the spec-repo with the given name
|
91
|
-
#
|
92
|
-
# @param [String] source_name name
|
93
|
-
#
|
94
|
-
# @return [void]
|
95
|
-
#
|
96
|
-
def update(source_name = nil, show_output = false)
|
97
|
-
if source_name
|
98
|
-
sources = [svn_source_named(source_name)]
|
99
|
-
else
|
100
|
-
sources = svn_sources
|
101
|
-
end
|
102
|
-
|
103
|
-
sources.each do |source|
|
104
|
-
UI.section "Updating spec repo `#{source.name}`" do
|
105
|
-
Dir.chdir(source.repo) do
|
106
|
-
begin
|
107
|
-
#output = svn('up --non-interactive --trust-server-cert')
|
108
|
-
output = `svn up --non-interactive --trust-server-cert`
|
109
|
-
UI.puts output if show_output && !config.verbose?
|
110
|
-
rescue Informative => e
|
111
|
-
UI.warn 'CocoaPods was not able to update the ' \
|
112
|
-
"`#{source.name}` repo. If this is an unexpected issue " \
|
113
|
-
'and persists you can inspect it running ' \
|
114
|
-
'`pod repo-svn update --verbose`'
|
115
|
-
end
|
116
|
-
end
|
117
|
-
SourcesManager.check_version_information(source.repo)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
# @return [Source] The svn source with the given name. If no svn source
|
123
|
-
# with given name is found it raises.
|
124
|
-
#
|
125
|
-
# @param [String] name
|
126
|
-
# The name of the source.
|
127
|
-
#
|
128
|
-
def svn_source_named(name)
|
129
|
-
specified_source = SourcesManager.aggregate.sources.find { |s| s.name == name }
|
130
|
-
unless specified_source
|
131
|
-
raise Informative, "Unable to find the `#{name}` repo."
|
132
|
-
end
|
133
|
-
unless svn_repo?(specified_source.repo)
|
134
|
-
raise Informative, "The `#{name}` repo is not a svn repo."
|
135
|
-
end
|
136
|
-
specified_source
|
137
|
-
end
|
138
|
-
|
139
|
-
# @return [Source] The list of the svn sources.
|
140
|
-
#
|
141
|
-
def svn_sources
|
142
|
-
SourcesManager.all.select do |source|
|
143
|
-
svn_repo?(source.repo)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
# Returns whether a source is a SVN repo.
|
148
|
-
#
|
149
|
-
# @param [Pathname] dir
|
150
|
-
# The directory where the source is stored.
|
151
|
-
#
|
152
|
-
# @return [Bool] Whether the given source is a SVN repo.
|
153
|
-
#
|
154
|
-
def svn_repo?(dir)
|
155
|
-
Dir.chdir(dir) { `svn info > /dev/null` }
|
156
|
-
$?.success?
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
#-----------------------------------------------------------------------#
|
161
|
-
|
162
|
-
# ~Verbatim Repo->Lint
|
163
|
-
#
|
164
|
-
# Original contributors:
|
165
|
-
#
|
166
|
-
# Fabio Pelosin http://github.com/irrationalfab
|
167
|
-
# Eloy Durán http://githun.com/alloy
|
168
|
-
|
169
|
-
# Repo validation can probably be pulled out and stuck into core, pretty generic
|
170
|
-
|
171
|
-
#todo: lint is blowing up, fix it - dusty
|
172
|
-
|
173
|
-
class Lint < RepoSvn
|
174
|
-
self.summary = 'Validates all specs in a repo.'
|
175
|
-
|
176
|
-
self.description = <<-DESC
|
177
|
-
Lints the spec-repo `NAME`. If a directory is provided it is assumed
|
178
|
-
to be the root of a repo. Finally, if `NAME` is not provided this
|
179
|
-
will lint all the spec-repos known to CocoaPods.
|
180
|
-
DESC
|
181
|
-
|
182
|
-
self.arguments = [
|
183
|
-
CLAide::Argument.new(%w(NAME DIRECTORY), true)
|
184
|
-
]
|
7
|
+
require 'pod/command/repo_svn/add'
|
8
|
+
require 'pod/command/repo_svn/lint'
|
9
|
+
require 'pod/command/repo_svn/push'
|
10
|
+
require 'pod/command/repo_svn/remove'
|
11
|
+
require 'pod/command/repo_svn/update'
|
185
12
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
def initialize(argv)
|
191
|
-
@name = argv.shift_argument
|
192
|
-
@only_errors = argv.flag?('only-errors')
|
193
|
-
super
|
194
|
-
end
|
195
|
-
|
196
|
-
# @todo Part of this logic needs to be ported to cocoapods-core so web
|
197
|
-
# services can validate the repo.
|
198
|
-
#
|
199
|
-
# @todo add UI.print and enable print statements again.
|
200
|
-
#
|
201
|
-
def run
|
202
|
-
if @name
|
203
|
-
dirs = File.exists?(@name) ? [ Pathname.new(@name) ] : [ dir ]
|
204
|
-
else
|
205
|
-
dirs = config.repos_dir.children.select {|c| c.directory?}
|
206
|
-
end
|
207
|
-
dirs.each do |dir|
|
208
|
-
SourcesManager.check_version_information(dir) #todo: test me
|
209
|
-
UI.puts "\nLinting spec repo `#{dir.realpath.basename}`\n".yellow
|
210
|
-
|
211
|
-
validator = Source::HealthReporter.new(dir)
|
212
|
-
validator.pre_check do |name, version|
|
213
|
-
UI.print '.'
|
214
|
-
end
|
215
|
-
report = validator.analyze
|
216
|
-
UI.puts
|
217
|
-
UI.puts
|
218
|
-
|
219
|
-
report.pods_by_warning.each do |message, versions_by_name|
|
220
|
-
UI.puts "-> #{message}".yellow
|
221
|
-
versions_by_name.each { |name, versions| UI.puts " - #{name} (#{versions * ', '})" }
|
222
|
-
UI.puts
|
223
|
-
end
|
224
|
-
|
225
|
-
report.pods_by_error.each do |message, versions_by_name|
|
226
|
-
UI.puts "-> #{message}".red
|
227
|
-
versions_by_name.each { |name, versions| UI.puts " - #{name} (#{versions * ', '})" }
|
228
|
-
UI.puts
|
229
|
-
end
|
230
|
-
|
231
|
-
UI.puts "Analyzed #{report.analyzed_paths.count} podspecs files.\n\n"
|
232
|
-
if report.pods_by_error.count.zero?
|
233
|
-
UI.puts "All the specs passed validation.".green << "\n\n"
|
234
|
-
else
|
235
|
-
raise Informative, "#{report.pods_by_error.count} podspecs failed validation."
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
#-----------------------------------------------------------------------#
|
242
|
-
|
243
|
-
# ~Verbatim Repo->Remove
|
244
|
-
#
|
245
|
-
# Original contributors:
|
246
|
-
#
|
247
|
-
# Joshua Kalpin https://github.com/Kapin
|
248
|
-
# Kyle Fuller https://github.com/kylef
|
249
|
-
|
250
|
-
# Repo removal should probably be pulled out, also pretty generic
|
251
|
-
|
252
|
-
class Remove < RepoSvn
|
253
|
-
self.summary = 'Remove a spec repo'
|
254
|
-
|
255
|
-
self.description = <<-DESC
|
256
|
-
Deletes the checked out copy named `NAME` from the local spec-repos directory at `~/.cocoapods/repos/.`
|
257
|
-
DESC
|
258
|
-
|
259
|
-
self.arguments = [
|
260
|
-
CLAide::Argument.new('NAME', true)
|
261
|
-
]
|
262
|
-
|
263
|
-
def initialize(argv)
|
264
|
-
@name = argv.shift_argument
|
265
|
-
super
|
266
|
-
end
|
267
|
-
|
268
|
-
def validate!
|
269
|
-
super
|
270
|
-
help! 'Deleting a repo needs a `NAME`.' unless @name
|
271
|
-
help! "repo #{@name} does not exist" unless File.directory?(dir)
|
272
|
-
help! "You do not have permission to delete the #{@name} repository." \
|
273
|
-
"Perhaps try prefixing this command with sudo." unless File.writable?(dir)
|
274
|
-
end
|
275
|
-
|
276
|
-
def run
|
277
|
-
UI.section("Removing spec repo `#{@name}`") do
|
278
|
-
FileUtils.rm_rf(dir)
|
279
|
-
end
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
#-----------------------------------------------------------------------#
|
284
|
-
#
|
285
|
-
# Pushes a podspec to the specified repo
|
286
|
-
#
|
287
|
-
# Most of this was taken directly from the CocoaPods `push` command
|
288
|
-
|
289
|
-
class Push < RepoSvn
|
290
|
-
self.summary = 'Push a podspec'
|
291
|
-
|
292
|
-
self.description = <<-DESC
|
293
|
-
Validates `NAME.podspec` or `*.podspec` in the current working dir, creates a
|
294
|
-
directory and version folder for the pod in the local copy of `REPO`
|
295
|
-
(~/.cocoapods/repos/[REPO]), copies the podspec file into the version directory,
|
296
|
-
and finally it commits the changes to `REPO`
|
297
|
-
DESC
|
298
|
-
|
299
|
-
self.arguments = [
|
300
|
-
CLAide::Argument.new('REPO', true),
|
301
|
-
CLAide::Argument.new('NAME.podspec', false)
|
302
|
-
]
|
303
|
-
|
304
|
-
def self.options
|
305
|
-
[['--local-only', 'Does not perform the step of committing changes to REPO']].concat(super)
|
306
|
-
end
|
307
|
-
|
308
|
-
def initialize(argv)
|
309
|
-
@local_only = argv.flag?('local-only')
|
310
|
-
@repo = argv.shift_argument
|
311
|
-
@podspec = argv.shift_argument
|
312
|
-
super
|
313
|
-
end
|
314
|
-
|
315
|
-
def validate!
|
316
|
-
super
|
317
|
-
help! 'A spec-repo name is required.' unless @repo
|
318
|
-
end
|
319
|
-
|
320
|
-
def run
|
321
|
-
update_repo
|
322
|
-
add_specs_to_repo
|
323
|
-
end
|
324
|
-
|
325
|
-
# Updates the git repo against the remote.
|
326
|
-
#
|
327
|
-
# @return [void]
|
328
|
-
#
|
329
|
-
def update_repo
|
330
|
-
UI.puts "Updating the `#{@repo}' repo\n".yellow
|
331
|
-
Dir.chdir(repo_dir) { UI.puts `svn update .` }
|
332
|
-
end
|
333
|
-
|
334
|
-
def add_specs_to_repo
|
335
|
-
UI.puts "\nAdding the #{'spec'.pluralize(podspec_files.count)} to the `#{@repo}' repo\n".yellow
|
336
|
-
podspec_files.each do |spec_file|
|
337
|
-
spec = Pod::Specification.from_file(spec_file)
|
338
|
-
output_path = File.join(repo_dir, spec.name, spec.version.to_s)
|
339
|
-
if Pathname.new(output_path).exist?
|
340
|
-
message = "[Fix] #{spec}"
|
341
|
-
elsif Pathname.new(File.join(repo_dir, spec.name)).exist?
|
342
|
-
message = "[Update] #{spec}"
|
343
|
-
else
|
344
|
-
message = "[Add] #{spec}"
|
345
|
-
end
|
346
|
-
|
347
|
-
FileUtils.mkdir_p(output_path)
|
348
|
-
FileUtils.cp(spec_file, output_path)
|
349
|
-
if !@local_only
|
350
|
-
Dir.chdir(repo_dir) do
|
351
|
-
# only commit if modified
|
352
|
-
UI.puts "Committing changes"
|
353
|
-
UI.puts `svn add #{spec.name} --force 2> /dev/null`
|
354
|
-
UI.puts `svn commit -m "#{message}"`
|
355
|
-
end
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
private
|
361
|
-
|
362
|
-
# @return [Array<Pathname>] The path of the specifications to push.
|
363
|
-
#
|
364
|
-
def podspec_files
|
365
|
-
if @podspec
|
366
|
-
path = Pathname(@podspec)
|
367
|
-
raise Informative, "Couldn't find #{@podspec}" unless path.exist?
|
368
|
-
[path]
|
369
|
-
else
|
370
|
-
files = Pathname.glob('*.podspec{,.json}')
|
371
|
-
raise Informative, "Couldn't find any podspec files in current directory" if files.empty?
|
372
|
-
files
|
373
|
-
end
|
374
|
-
end
|
375
|
-
|
376
|
-
# @return [Pathname] The directory of the repository.
|
377
|
-
#
|
378
|
-
def repo_dir
|
379
|
-
specs_dir = Pathname.new(File.join(config.repos_dir, @repo, 'Specs'))
|
380
|
-
dir = config.repos_dir + @repo
|
381
|
-
if specs_dir.exist?
|
382
|
-
dir = specs_dir
|
383
|
-
elsif dir.exist?
|
384
|
-
dir
|
385
|
-
else
|
386
|
-
raise Informative, "`#{@repo}` repo not found either in #{specs_dir} or #{dir}"
|
387
|
-
end
|
388
|
-
dir
|
389
|
-
end
|
390
|
-
end
|
13
|
+
self.abstract_command = true
|
14
|
+
self.summary = <<-SUMMARY
|
15
|
+
Manage your Cocoapod spec repositories using subversion - v#{CocoapodsRepoSvn::VERSION}_#{CocoapodsRepoSvn::GITHASH}
|
16
|
+
SUMMARY
|
391
17
|
|
392
18
|
extend Executable
|
393
19
|
executable :svn
|
@@ -397,4 +23,4 @@ module Pod
|
|
397
23
|
end
|
398
24
|
end
|
399
25
|
end
|
400
|
-
end
|
26
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class RepoSvn
|
4
|
+
class Add < RepoSvn
|
5
|
+
self.summary = 'Add a spec-repo using svn.'
|
6
|
+
|
7
|
+
self.description = <<-DESC
|
8
|
+
Check out `URL` in the local spec-repos directory at `~/.cocoapods/repos/`. The
|
9
|
+
remote can later be referred to by `NAME`.
|
10
|
+
DESC
|
11
|
+
|
12
|
+
self.arguments = [
|
13
|
+
CLAide::Argument.new('NAME', true),
|
14
|
+
CLAide::Argument.new('URL', true)
|
15
|
+
]
|
16
|
+
|
17
|
+
def initialize(argv)
|
18
|
+
@name, @url = argv.shift_argument, argv.shift_argument
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def validate!
|
23
|
+
super
|
24
|
+
unless @name && @url
|
25
|
+
help! "Adding a spec-repo needs a `NAME` and a `URL`."
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def run
|
30
|
+
UI.section("Checking out spec-repo `#{@name}` from `#{@url}` using svn") do
|
31
|
+
config.repos_dir.mkpath
|
32
|
+
Dir.chdir(config.repos_dir) do
|
33
|
+
command = "checkout --non-interactive --trust-server-cert '#{@url}' #{@name}"
|
34
|
+
#!svn(command)
|
35
|
+
`svn #{command}`
|
36
|
+
end
|
37
|
+
# SourcesManager.check_version_information(dir) #todo: TEST ME
|
38
|
+
Config.instance.sources_manager.sources([dir.basename.to_s]).each(&:verify_compatibility!) #todo: TEST ME
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class RepoSvn
|
4
|
+
class Lint < RepoSvn
|
5
|
+
self.summary = 'Validates all specs in a repo.'
|
6
|
+
|
7
|
+
self.description = <<-DESC
|
8
|
+
Lints the spec-repo `NAME`. If a directory is provided it is assumed
|
9
|
+
to be the root of a repo. Finally, if `NAME` is not provided this
|
10
|
+
will lint all the spec-repos known to CocoaPods.
|
11
|
+
DESC
|
12
|
+
|
13
|
+
self.arguments = [
|
14
|
+
CLAide::Argument.new(%w(NAME DIRECTORY), true)
|
15
|
+
]
|
16
|
+
|
17
|
+
def self.options
|
18
|
+
[["--only-errors", "Lint presents only the errors"]].concat(super)
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(argv)
|
22
|
+
@name = argv.shift_argument
|
23
|
+
@only_errors = argv.flag?('only-errors')
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
# @todo Part of this logic needs to be ported to cocoapods-core so web
|
28
|
+
# services can validate the repo.
|
29
|
+
#
|
30
|
+
# @todo add UI.print and enable print statements again.
|
31
|
+
#
|
32
|
+
def run
|
33
|
+
if @name
|
34
|
+
dirs = File.exists?(@name) ? [ Pathname.new(@name) ] : [ dir ]
|
35
|
+
else
|
36
|
+
dirs = config.repos_dir.children.select {|c| c.directory?}
|
37
|
+
end
|
38
|
+
dirs.each do |dir|
|
39
|
+
# SourcesManager.check_version_information(dir) #todo: test me
|
40
|
+
Config.instance.sources_manager.sources([dir.basename.to_s]).each(&:verify_compatibility!) #todo: TEST ME
|
41
|
+
UI.puts "\nLinting spec repo `#{dir.realpath.basename}`\n".yellow
|
42
|
+
|
43
|
+
validator = Source::HealthReporter.new(dir)
|
44
|
+
validator.pre_check do |name, version|
|
45
|
+
UI.print '.'
|
46
|
+
end
|
47
|
+
report = validator.analyze
|
48
|
+
UI.puts
|
49
|
+
UI.puts
|
50
|
+
|
51
|
+
report.pods_by_warning.each do |message, versions_by_name|
|
52
|
+
UI.puts "-> #{message}".yellow
|
53
|
+
versions_by_name.each { |name, versions| UI.puts " - #{name} (#{versions * ', '})" }
|
54
|
+
UI.puts
|
55
|
+
end
|
56
|
+
|
57
|
+
report.pods_by_error.each do |message, versions_by_name|
|
58
|
+
UI.puts "-> #{message}".red
|
59
|
+
versions_by_name.each { |name, versions| UI.puts " - #{name} (#{versions * ', '})" }
|
60
|
+
UI.puts
|
61
|
+
end
|
62
|
+
|
63
|
+
UI.puts "Analyzed #{report.analyzed_paths.count} podspecs files.\n\n"
|
64
|
+
if report.pods_by_error.count.zero?
|
65
|
+
UI.puts "All the specs passed validation.".green << "\n\n"
|
66
|
+
else
|
67
|
+
raise Informative, "#{report.pods_by_error.count} podspecs failed validation."
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
#----------------------
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class RepoSvn
|
4
|
+
class Push < RepoSvn
|
5
|
+
self.summary = 'Push a podspec'
|
6
|
+
|
7
|
+
self.description = <<-DESC
|
8
|
+
Validates `NAME.podspec` or `*.podspec` in the current working dir, creates a
|
9
|
+
directory and version folder for the pod in the local copy of `REPO`
|
10
|
+
(~/.cocoapods/repos/[REPO]), copies the podspec file into the version directory,
|
11
|
+
and finally it commits the changes to `REPO`
|
12
|
+
DESC
|
13
|
+
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new('REPO', true),
|
16
|
+
CLAide::Argument.new('NAME.podspec', false)
|
17
|
+
]
|
18
|
+
|
19
|
+
def self.options
|
20
|
+
[['--local-only', 'Does not perform the step of committing changes to REPO']].concat(super)
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(argv)
|
24
|
+
@local_only = argv.flag?('local-only')
|
25
|
+
@repo = argv.shift_argument
|
26
|
+
@podspec = argv.shift_argument
|
27
|
+
super
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate!
|
31
|
+
super
|
32
|
+
help! 'A spec-repo name is required.' unless @repo
|
33
|
+
end
|
34
|
+
|
35
|
+
def run
|
36
|
+
update_repo
|
37
|
+
add_specs_to_repo
|
38
|
+
end
|
39
|
+
|
40
|
+
# Updates the git repo against the remote.
|
41
|
+
#
|
42
|
+
# @return [void]
|
43
|
+
#
|
44
|
+
def update_repo
|
45
|
+
UI.puts "Updating the `#{@repo}' repo\n".yellow
|
46
|
+
Dir.chdir(repo_dir) { UI.puts `svn update .` }
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_specs_to_repo
|
50
|
+
UI.puts "\nAdding the #{'spec'.pluralize(podspec_files.count)} to the `#{@repo}' repo\n".yellow
|
51
|
+
podspec_files.each do |spec_file|
|
52
|
+
spec = Pod::Specification.from_file(spec_file)
|
53
|
+
output_path = File.join(repo_dir, spec.name, spec.version.to_s)
|
54
|
+
if Pathname.new(output_path).exist?
|
55
|
+
message = "[Fix] #{spec}"
|
56
|
+
elsif Pathname.new(File.join(repo_dir, spec.name)).exist?
|
57
|
+
message = "[Update] #{spec}"
|
58
|
+
else
|
59
|
+
message = "[Add] #{spec}"
|
60
|
+
end
|
61
|
+
|
62
|
+
FileUtils.mkdir_p(output_path)
|
63
|
+
FileUtils.cp(spec_file, output_path)
|
64
|
+
if !@local_only
|
65
|
+
Dir.chdir(repo_dir) do
|
66
|
+
# only commit if modified
|
67
|
+
UI.puts "Committing changes"
|
68
|
+
UI.puts `svn add #{spec.name} --force 2> /dev/null`
|
69
|
+
UI.puts `svn commit -m "#{message}"`
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
# @return [Array<Pathname>] The path of the specifications to push.
|
78
|
+
#
|
79
|
+
def podspec_files
|
80
|
+
if @podspec
|
81
|
+
path = Pathname(@podspec)
|
82
|
+
raise Informative, "Couldn't find #{@podspec}" unless path.exist?
|
83
|
+
[path]
|
84
|
+
else
|
85
|
+
files = Pathname.glob('*.podspec{,.json}')
|
86
|
+
raise Informative, "Couldn't find any podspec files in current directory" if files.empty?
|
87
|
+
files
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# @return [Pathname] The directory of the repository.
|
92
|
+
#
|
93
|
+
def repo_dir
|
94
|
+
specs_dir = Pathname.new(File.join(config.repos_dir, @repo, 'Specs'))
|
95
|
+
dir = config.repos_dir + @repo
|
96
|
+
if specs_dir.exist?
|
97
|
+
dir = specs_dir
|
98
|
+
elsif dir.exist?
|
99
|
+
dir
|
100
|
+
else
|
101
|
+
raise Informative, "`#{@repo}` repo not found either in #{specs_dir} or #{dir}"
|
102
|
+
end
|
103
|
+
dir
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
File without changes
|
@@ -0,0 +1,119 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class RepoSvn
|
4
|
+
class Update < RepoSvn
|
5
|
+
self.summary = 'Update a svn spec-repo.'
|
6
|
+
|
7
|
+
self.description = <<-DESC
|
8
|
+
Updates the checked out spec-repo `NAME`.
|
9
|
+
DESC
|
10
|
+
|
11
|
+
self.arguments = [
|
12
|
+
CLAide::Argument.new('NAME', true)
|
13
|
+
]
|
14
|
+
|
15
|
+
def initialize(argv)
|
16
|
+
@name = argv.shift_argument
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def validate!
|
21
|
+
super
|
22
|
+
unless @name
|
23
|
+
help! "Updating a spec-repo needs a `NAME`."
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def run
|
28
|
+
update(@name, true) #todo: dusty
|
29
|
+
end
|
30
|
+
|
31
|
+
#@!group Update helpers
|
32
|
+
#-----------------------------------------------------------------------#
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Slightly modified SourcesManager->update to deal with subversion updates.
|
37
|
+
#
|
38
|
+
# Original contributors:
|
39
|
+
#
|
40
|
+
# Fabio Pelosin http://github.com/irrationalfab
|
41
|
+
# Boris Bügling http://githun.com/neonichu
|
42
|
+
#
|
43
|
+
|
44
|
+
# Updates the local copy of the spec-repo with the given name
|
45
|
+
#
|
46
|
+
# @param [String] source_name name
|
47
|
+
#
|
48
|
+
# @return [void]
|
49
|
+
#
|
50
|
+
def update(source_name = nil, show_output = false)
|
51
|
+
if source_name
|
52
|
+
sources = [svn_source_named(source_name)]
|
53
|
+
else
|
54
|
+
sources = svn_sources
|
55
|
+
end
|
56
|
+
|
57
|
+
sources.each do |source|
|
58
|
+
UI.section "Updating spec repo `#{source.name}`" do
|
59
|
+
Dir.chdir(source.repo) do
|
60
|
+
begin
|
61
|
+
#output = svn('up --non-interactive --trust-server-cert')
|
62
|
+
output = `svn up --non-interactive --trust-server-cert`
|
63
|
+
UI.puts output if show_output && !config.verbose?
|
64
|
+
rescue Informative => e
|
65
|
+
UI.warn 'CocoaPods was not able to update the ' \
|
66
|
+
"`#{source.name}` repo. If this is an unexpected issue " \
|
67
|
+
'and persists you can inspect it running ' \
|
68
|
+
'`pod repo-svn update --verbose`'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
# SourcesManager.check_version_information(source.repo)
|
72
|
+
Config.instance.sources_manager.sources([source.repo.basename.to_s]).each(&:verify_compatibility!) #todo: TEST ME
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# @return [Source] The svn source with the given name. If no svn source
|
78
|
+
# with given name is found it raises.
|
79
|
+
#
|
80
|
+
# @param [String] name
|
81
|
+
# The name of the source.
|
82
|
+
#
|
83
|
+
def svn_source_named(name)
|
84
|
+
specified_source = Config.instance.sources_manager.aggregate.sources.find { |s| s.name == name }
|
85
|
+
unless specified_source
|
86
|
+
raise Informative, "Unable to find the `#{name}` repo."
|
87
|
+
end
|
88
|
+
unless svn_repo?(specified_source.repo)
|
89
|
+
raise Informative, "The `#{name}` repo is not a svn repo."
|
90
|
+
end
|
91
|
+
specified_source
|
92
|
+
end
|
93
|
+
|
94
|
+
# @return [Source] The list of the svn sources.
|
95
|
+
#
|
96
|
+
def svn_sources
|
97
|
+
# SourcesManager.all.select do |source|
|
98
|
+
# svn_repo?(source.repo)
|
99
|
+
# end
|
100
|
+
Config.instance.sources_manager.all.select do |source|
|
101
|
+
svn_repo?(source.repo)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# Returns whether a source is a SVN repo.
|
106
|
+
#
|
107
|
+
# @param [Pathname] dir
|
108
|
+
# The directory where the source is stored.
|
109
|
+
#
|
110
|
+
# @return [Bool] Whether the given source is a SVN repo.
|
111
|
+
#
|
112
|
+
def svn_repo?(dir)
|
113
|
+
Dir.chdir(dir) { `svn info > /dev/null` }
|
114
|
+
$?.success?
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-repo-svn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dustin Clark
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version: '0'
|
41
41
|
description: CocoaPod plugin to add subversion support for spec repositories
|
42
42
|
email:
|
43
|
-
- dusty@
|
43
|
+
- dusty@isperldead.net
|
44
44
|
executables: []
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
@@ -51,12 +51,16 @@ files:
|
|
51
51
|
- LICENSE
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
|
+
- cocoapods_repo_svn.gemspec
|
54
55
|
- lib/cocoapods_plugin.rb
|
56
|
+
- lib/cocoapods_repo_svn.rb
|
55
57
|
- lib/pod/command/repo_svn.rb
|
56
|
-
- lib/
|
57
|
-
- lib/
|
58
|
+
- lib/pod/command/repo_svn/add.rb
|
59
|
+
- lib/pod/command/repo_svn/lint.rb
|
60
|
+
- lib/pod/command/repo_svn/push.rb
|
61
|
+
- lib/pod/command/repo_svn/remove.rb
|
62
|
+
- lib/pod/command/repo_svn/update.rb
|
58
63
|
- lib/svn_source.rb
|
59
|
-
- repo_svn_ext.gemspec
|
60
64
|
- spec/command/repo-svn/add_spec.rb
|
61
65
|
- spec/command/repo-svn/remove_spec.rb
|
62
66
|
- spec/command/repo-svn/update_spec.rb
|
@@ -88,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
92
|
version: '0'
|
89
93
|
requirements: []
|
90
94
|
rubyforge_project:
|
91
|
-
rubygems_version: 2.
|
95
|
+
rubygems_version: 2.5.1
|
92
96
|
signing_key:
|
93
97
|
specification_version: 4
|
94
98
|
summary: Subversion support for spec repository
|
data/lib/repo_svn_ext.rb
DELETED
data/lib/repo_svn_ext/version.rb
DELETED