zewo-dev 0.2.12 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zewo.rb +250 -330
  3. data/lib/zewo/version.rb +1 -1
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fcf84a7ce1c49d14b7f7e5f138473f9297c51f1e
4
- data.tar.gz: d66858e5780a3a8633eb66bac888f01340f14ad9
3
+ metadata.gz: fdedf478bcfe70fd88cdc25dbd7152bdb51ae142
4
+ data.tar.gz: c3f9a649da611eede89190e586267f853cdaa189
5
5
  SHA512:
6
- metadata.gz: ceb826a9d91e44089342a55d4723e20d828c3d3a1f7f1d85c70f1343cfb5acac92be19bccf1abb5920379aa6b78458da21c585bbb7e69ff3ead1d1dbd8213658
7
- data.tar.gz: dfc614fcebf3cd0cd313ca13a57f45c156b846500cbb635dfea8efeceae8b4d807a48fa172030accb3a638c07a07b6bfcbbbe9d982972337e5108c9a4be07296
6
+ metadata.gz: 65314404b5bd3c0a4122e86cc265a9243b76e0ef8f0df47d51e9949a60983029bcf5755c3421fa8b592abf480741680baf63edb8ebe50f508eb6b988b9438911
7
+ data.tar.gz: 85087f2bd77c22d72c7919a5cea09558761b3a522837a8e17b236b0909a5437292a8e9249d47079679f64519d22cc1c648f6540f5d475f0e79144cd93ddb1095
@@ -11,126 +11,119 @@ require 'colorize'
11
11
  require 'thread'
12
12
  require 'thwait'
13
13
 
14
- def silent_cmd(cmd)
15
- system("#{cmd} > /dev/null 2>&1")
16
- end
17
-
18
14
  module Zewo
19
15
  class App < Thor
20
16
  class Repo
21
- attr_reader :name
22
- @name = nil
23
- attr_reader :data
24
- @data = nil
17
+ @@repos = {}
18
+
19
+ @@lock_branches = {'CURIParser' => '0.2.0', 'CHTTPParser' => '0.2.0', 'CLibvenice' => '0.2.0'}
20
+
21
+ attr_reader :repo
22
+ @repo
23
+ attr_reader :organization
24
+ @organization
25
25
 
26
- @xcodeproj = nil
26
+ @xcode_project = nil
27
+ @configured = false
27
28
 
28
- def initialize(name, data = nil)
29
- @name = name
30
- @data = data
29
+ def initialize(repo, organization)
30
+ @repo = repo
31
+ @organization = organization
31
32
  end
32
33
 
33
- def framework_target
34
- target_name = name.gsub('-OSX', '').gsub('-', '_')
34
+ def clone
35
+ puts "Cloning #{path}".green
36
+
37
+ flags = ''
35
38
 
36
- if target_name == 'OS'
37
- target_name = 'OperatingSystem'
39
+ if @@lock_branches[@repo]
40
+ flags = "--branch #{@@lock_branches[@repo]}"
38
41
  end
39
- xcode_project.native_targets.find { |t| t.name == target_name } || xcode_project.new_target(:framework, target_name, :osx)
42
+
43
+ `git clone #{flags} https://github.com/#{@organization}/#{@repo} #{path} &> /dev/null`
40
44
  end
41
45
 
42
- def test_target
43
- target_name = "#{framework_target.name}-Test"
44
- xcode_project.native_targets.find { |t| t.name == target_name } || xcode_project.new_target(:bundle, target_name, :osx)
45
- end
46
+ def dependencies
47
+ clone unless File.directory?(path)
46
48
 
47
- def dir(ext = nil)
48
- r = name
49
- r = "#{r}/#{ext}" if ext
50
- r
51
- end
49
+ package_swift_contents = File.read("#{path}/Package.swift")
52
50
 
53
- def tests_dirname
54
- 'Tests'
55
- end
51
+ # matches the packages like `VeniceX/Venice`
52
+ regex = /https:\/\/github.com\/(.*\/*)"/
53
+ matches = package_swift_contents.scan(regex).map(&:first).map { |e| e = e.chomp('.git') if e.end_with?('.git'); e }
54
+
55
+ # splits VeniceX/Venice into ['VeniceX', 'Venice']
56
+ splits = matches.map { |e| e.split('/', 2) }
57
+
58
+ # creates a Repo using VeniceX as organization and Venice as repo
59
+ repos = splits.map { |s| Repo.new(s[1], s[0]) }
60
+
61
+ cached = repos.map do |m|
62
+ # add it to global list of repositories if it isnt already in there
63
+ @@repos["#{m.organization}/#{m.repo}"] = m unless @@repos["#{m.organization}/#{m.repo}"]
64
+ @@repos["#{m.organization}/#{m.repo}"]
65
+ end
56
66
 
57
- def xcode_dirname
58
- 'XcodeDevelopment'
67
+ cached
59
68
  end
60
69
 
61
- def xcode_project_path
62
- dir("#{xcode_dirname}/#{name}.xcodeproj")
70
+ def clone_dependencies
71
+ # clone all dependencies that don't exist yet
72
+ dependencies.each(&:clone_dependencies)
63
73
  end
64
74
 
65
- def sources_dirname
66
- return 'Sources' if File.directory?(dir('Sources'))
67
- return 'Source' if File.directory?(dir('Source'))
75
+ def setup_xcode_projects
76
+ # create xcode project
77
+ setup_xcode_project
78
+
79
+ # recursively do the same for all dependencies
80
+ dependencies.each(&:setup_xcode_projects)
68
81
  end
69
82
 
70
- def xcode_project
71
- return @xcodeproj if @xcodeproj
72
- if File.exist?(xcode_project_path)
73
- @xcodeproj = Xcodeproj::Project.open(xcode_project_path)
74
- else
75
- @xcodeproj = Xcodeproj::Project.new(xcode_project_path)
76
- end
77
- @xcodeproj
83
+ def configure_xcode_projects
84
+ # configure xcode project
85
+ configure_xcode_project
86
+
87
+ # recursively do the same for all dependencies
88
+ dependencies.each(&:configure_xcode_projects)
78
89
  end
79
90
 
80
- def add_files(direc, current_group, main_target)
81
- Dir.glob(direc) do |item|
82
- next if item == '.' || item == '.DS_Store'
91
+ def flat_dependencies
92
+ result = dependencies
83
93
 
84
- if File.directory?(item)
85
- new_folder = File.basename(item)
86
- created_group = current_group.new_group(new_folder)
87
- add_files("#{item}/*", created_group, main_target)
88
- else
89
- item = item.split('/')[1..-1].unshift('..') * '/'
90
- i = current_group.new_file(item)
91
- main_target.add_file_references([i]) if item.include? '.swift'
92
- end
94
+ dependencies.each do |dep|
95
+ result += dep.flat_dependencies
93
96
  end
97
+
98
+ result.uniq
94
99
  end
95
100
 
96
- def build_dependencies
97
- puts "Configuring dependencies for #{name}".green
98
- dependency_repos = File.read(dir('Package.swift')).scan(/(?<=Zewo\/|SwiftX\/|VeniceX\/|paulofaria\/)(.*?)(?=\.git)/).map(&:first)
99
- group = xcode_project.new_group('Subprojects')
100
- dependency_repos.each do |repo_name|
101
- next if repo_name.end_with?('-OSX')
102
101
 
103
- repo = Repo.new(repo_name)
104
- project_reference = group.new_file(repo.xcode_project_path.to_s)
105
- project_reference.path = "../../#{project_reference.path}"
106
- framework_target.add_dependency(repo.framework_target) if framework_target
107
- end
108
- xcode_project.save
102
+ def headers
103
+ @headers ||= Dir.glob("#{path}/*.h")
109
104
  end
110
105
 
111
- def configure_xcode_project
112
- @xcodeproj = nil
113
- silent_cmd("rm -rf #{dir(xcode_dirname)}")
106
+ def setup_xcode_project
107
+ return if @xcode_project
108
+
109
+ puts "Creating Xcode project for #{@organization}/#{@repo}".green
114
110
 
115
- puts "Creating Xcode project #{name}".green
111
+ @xcode_project = Xcodeproj::Project.new("#{xcode_project_path}")
112
+ @xcode_project.initialize_from_scratch
116
113
 
117
114
  framework_target.build_configurations.each do |configuration|
118
115
  framework_target.build_settings(configuration.name)['HEADER_SEARCH_PATHS'] = '/usr/local/include'
119
116
  framework_target.build_settings(configuration.name)['LIBRARY_SEARCH_PATHS'] = '/usr/local/lib'
120
117
  framework_target.build_settings(configuration.name)['ENABLE_TESTABILITY'] = 'YES'
121
118
 
122
- if File.exist?(dir('module.modulemap'))
119
+ if File.exist?("#{path}/module.modulemap")
123
120
  framework_target.build_settings(configuration.name)['MODULEMAP_FILE'] = '../module.modulemap'
124
121
  end
125
122
  end
126
123
 
127
- framework_target.frameworks_build_phase.clear
128
-
129
- xcode_project.new_file('../module.modulemap') if File.exist?(dir('module.modulemap'))
130
-
131
- if sources_dirname
132
- group = xcode_project.new_group(sources_dirname)
133
- add_files(dir("#{sources_dirname}/*"), group, framework_target)
124
+ if sources_path
125
+ group = @xcode_project.new_group('Sources')
126
+ add_files("#{path}/#{sources_path}/*", group, framework_target)
134
127
  end
135
128
 
136
129
  test_target.resources_build_phase
@@ -143,322 +136,249 @@ module Zewo
143
136
  test_target.build_settings(configuration.name)['LIBRARY_SEARCH_PATHS'] = '/usr/local/lib'
144
137
  end
145
138
 
146
- group = xcode_project.new_group(tests_dirname)
147
- add_files(dir("#{tests_dirname}/*"), group, test_target)
139
+ group = @xcode_project.new_group('Tests')
140
+ add_files("#{path}/Tests/*", group, test_target)
148
141
 
149
- xcode_project.save
142
+ @xcode_project.save
150
143
 
151
144
  scheme = Xcodeproj::XCScheme.new
152
145
  scheme.configure_with_targets(framework_target, test_target)
153
- scheme.test_action.code_coverage_enabled = true
154
- scheme.save_as(xcode_project.path, framework_target.name, true)
146
+ # scheme.test_action.code_coverage_enabled = true
147
+ scheme.save_as(@xcode_project.path, framework_target.name, true)
148
+
149
+ framework_target.frameworks_build_phase.clear
155
150
  end
156
- end
157
151
 
158
- no_commands do
159
- def each_repo
160
- uri = URI.parse('https://api.github.com/orgs/Zewo/repos?per_page=200')
152
+ def configure_xcode_project
153
+ return if @configured
154
+
155
+ puts "Configuring Xcode project for #{path}".green
156
+
157
+ group = @xcode_project.new_group('Subprojects')
158
+
159
+ # This next block will move through the flattened dependencies of a project
160
+ # to determine whether any of them have headers associated with their module maps.
161
+ # If they do, each header must be added to the header search paths configuration
162
+ flat_dependencies.select { |d| d.headers.count > 0 }.each do |header_dep|
163
+ header_search_path = "../../../#{header_dep.path}"
164
+
165
+ [framework_target, test_target].each do |target|
166
+ target.build_configurations.each do |configuration|
167
+ existing = target.build_settings(configuration.name)['HEADER_SEARCH_PATHS']
168
+ unless existing.include? header_search_path
169
+ existing += " #{header_search_path}"
170
+ target.build_settings(configuration.name)['HEADER_SEARCH_PATHS'] = existing
171
+ end
172
+ end
173
+ end
174
+ end
161
175
 
162
- http = Net::HTTP.new(uri.host, uri.port)
163
- http.use_ssl = true
164
- request = Net::HTTP::Get.new(uri.request_uri)
176
+ dependencies.each do |repo|
177
+ next if repo.repo.end_with?('-OSX')
165
178
 
166
- blacklist = ['ZeroMQ']
179
+ project_reference = group.new_file(repo.xcode_project_path.to_s)
180
+ project_reference.path = "../../../#{project_reference.path}"
181
+ framework_target.add_dependency(repo.framework_target) if framework_target
182
+ end
183
+ @xcode_project.save
184
+ @configured = true
185
+ end
167
186
 
168
- response = http.request(request)
169
- if response.code == '200'
170
- result = JSON.parse(response.body).sort_by { |hsh| hsh['name'] }
187
+ def add_files(direc, current_group, main_target)
188
+ Dir.glob(direc) do |item|
189
+ next if item.start_with?('.')
171
190
 
172
- result.each do |doc|
173
- next if blacklist.include?(doc['name'])
174
- repo = Repo.new(doc['name'], doc)
175
- yield repo
191
+ if File.directory?(item)
192
+ new_folder = File.basename(item)
193
+ created_group = current_group.new_group(new_folder)
194
+ add_files("#{item}/*", created_group, main_target)
195
+ else
196
+ # Basically means "Remove Zewo from path and prepend '../'"
197
+ item = item.split('/')[1..-1].unshift('..', '..') * '/'
198
+ i = current_group.new_file(item)
199
+ main_target.add_file_references([i]) if item.include? '.swift'
176
200
  end
177
- else
178
- puts 'Error loading repositories'.red
179
201
  end
180
202
  end
181
203
 
182
- def each_repo_async
183
- threads = []
184
- each_repo do |repo|
185
- threads << Thread.new do
186
- yield(repo)
187
- end
188
- end
189
- ThreadsWait.all_waits(*threads)
204
+ def xcode_project_path
205
+ "#{path}/XcodeDevelopment/#{@repo}.xcodeproj"
190
206
  end
191
207
 
192
- def each_code_repo
193
- each_repo do |repo|
194
- next unless File.exist?(repo.dir('Package.swift'))
195
- yield repo
196
- end
208
+ def path
209
+ "#{@organization}/#{@repo}"
197
210
  end
198
211
 
199
- def each_code_repo_async
200
- threads = []
201
- each_code_repo do |repo|
202
- threads << Thread.new do
203
- yield(repo)
204
- end
205
- end
206
- ThreadsWait.all_waits(*threads)
212
+ def status
213
+ `cd #{path}; git status`
207
214
  end
208
215
 
209
- def verify_branches
210
- last_branch_name = nil
211
- each_repo do |repo|
212
- branch_name = `cd #{repo.dir}; git rev-parse --abbrev-ref HEAD`.delete("\n")
213
- if !last_branch_name.nil? && branch_name != last_branch_name
214
- puts "Branch mismatch. Branch of #{repo.name} does not match previous branch #{branch_name}".red
215
- return false
216
- end
217
- last_branch_name = branch_name
216
+ def call(str)
217
+ output = `cd #{path}; #{str} 2>&1`.chomp
218
+ raise output unless $?.success?
219
+ output
220
+ end
221
+
222
+ def uncommited_changes?
223
+ begin
224
+ call('git diff --quiet HEAD')
225
+ return false
226
+ rescue
227
+ return true
218
228
  end
219
- true
220
229
  end
221
230
 
222
- def prompt(question)
223
- printf "#{question} - y/N: "
224
- p = STDIN.gets.chomp
225
- p == 'y'
231
+ def master_branch?
232
+ call('git rev-parse --abbrev-ref HEAD')
226
233
  end
227
234
 
228
- def uncommited_changes?(repo_name)
229
- !system("cd #{repo_name}; git diff --quiet HEAD")
235
+ def tag
236
+ return call('git describe --abbrev=0 --tags')
237
+ rescue
238
+ return 'No tags'
230
239
  end
231
240
 
232
- def master_branch?(repo_name)
233
- `cd #{repo_name}; git rev-parse --abbrev-ref HEAD`
241
+ def branch
242
+ call('git rev-parse --abbrev-ref HEAD')
234
243
  end
235
244
 
236
- def each_osx_whitelisted_repo
237
- Zewo::OSX_CODE_REPO_WHITELIST.each do |repo_name|
245
+ def pull
246
+ call('git pull')
247
+ end
238
248
 
239
- name = repo_name.split('/').last
240
- if name.end_with?('-OSX')
241
- name = name[0...-4]
242
- end
249
+ def sources_path
250
+ return 'Sources' if File.directory?("#{path}/Sources")
251
+ return 'Source' if File.directory?("#{path}/Source")
252
+ end
243
253
 
244
- # rename OS and OperatingSystem to System - workaround
245
- if name == 'OS' || name == 'OperatingSystem' && File.directory?('System')
246
- name = 'System'
247
- end
254
+ def framework_target
255
+ target_name = repo.gsub('-OSX', '').gsub('-', '_')
256
+ target_name = 'OperatingSystem' if target_name == 'OS'
257
+ @xcode_project.native_targets.find { |t| t.name == target_name } || @xcode_project.new_target(:framework, target_name, :osx)
258
+ end
248
259
 
249
- repo_data = Hash[
250
- 'name', name,
251
- 'organization', repo_name.split('/').first,
252
- 'clone_url', "https://github.com/#{repo_name}"
253
- ]
260
+ def test_target
261
+ target_name = "#{framework_target.name}-Test"
262
+ @xcode_project.native_targets.find { |t| t.name == target_name } || @xcode_project.new_target(:bundle, target_name, :osx)
263
+ end
254
264
 
255
- yield Repo.new(repo_data['name'], repo_data)
256
- end
265
+ def tag_lock
266
+ @tag_lock ||= @@lock_branches[@repo]
257
267
  end
258
268
 
259
- def each_osx_whitelisted_repo_async
260
- threads = []
261
- each_osx_whitelisted_repo do |repo|
262
- threads << Thread.new do
263
- yield(repo)
264
- end
265
- end
266
- ThreadsWait.all_waits(*threads)
269
+ def self::lock_branches
270
+ @@lock_branches
267
271
  end
268
272
 
269
- def checkout_modulemap_versions
270
- repos = ['CLibvenice', 'CURIParser', 'CHTTPParser']
271
- repos.each do |repo|
272
- silent_cmd("cd #{repo} && git checkout 0.2.0")
273
- puts "Checked out #{repo} at 0.2.0".green
274
- end
273
+ # getter/setter for class variable
274
+ def self::repos
275
+ @@repos
275
276
  end
276
- end
277
277
 
278
- desc :status, 'Get status of all repos'
279
- def status
280
- each_code_repo do |repo|
281
- str = repo.name
282
- str = uncommited_changes?(repo.name) ? str.red : str.green
283
- tag = `cd #{repo.name}; git describe --abbrev=0 --tags` || 'No tag'
284
- str += " (#{tag})"
285
- puts str.delete("\n")
278
+ def self::repos=(value)
279
+ puts @@repos
280
+ @@repos = value
286
281
  end
287
282
  end
288
283
 
289
- desc :tag, 'Tags all code repositories with the given tag. Asks to confirm for each repository'
290
- def tag(tag)
291
- each_code_repo do |repo|
292
- should_tag = prompt("create tag #{tag} in #{repo.name}?")
293
- if should_tag
294
- silent_cmd("cd #{repo.name} && git tag #{tag}")
295
- puts repo.name.green
284
+ no_commands do
285
+ def each_repo(include_lock_branches = true)
286
+ Repo.repos.each_pair do |key, repo|
287
+ next if !include_lock_branches && Repo::lock_branches.has_key?(repo.repo)
288
+ yield key, repo
296
289
  end
297
290
  end
298
- end
299
291
 
300
- desc :checkout, 'Checks out all code repositories to the latest patch release for the given tag/branch'
301
- option :branch
302
- option :tag
303
- def checkout
304
- if !options[:branch] && !options[:tag]
305
- puts 'Need to specify either --tag or --branch'.red
306
- return
307
- end
308
-
309
- Dir['*/'].each do |folder_name|
310
- folder_name = folder_name[0...-1]
311
- matched = `cd #{folder_name} && git tag`
312
- .split("\n")
313
- .select { |t| t.start_with?(options[:tag]) }
314
- .last if options[:tag]
315
- matched = options[:branch] if options[:branch]
316
-
317
- if matched
318
- silent_cmd("cd #{folder_name} && git checkout #{matched}")
319
- puts "Checked out #{folder_name} at #{matched}".green
320
- else
321
- puts "No matching specifiers for #{folder_name}".red
292
+ def each_repo_async(include_lock_branches = true)
293
+ threads = []
294
+ Repo.repos.each_pair do |key, repo|
295
+ next if !include_lock_branches && Repo::lock_branches.has_key?(repo.repo)
296
+ threads << Thread.new do
297
+ yield(key, repo)
298
+ end
322
299
  end
300
+ threads.each { |thr| thr.join }
323
301
  end
324
- end
325
302
 
326
- desc :pull, 'git pull on all repos'
327
- def pull
328
- print "Updating all repositories...\n"
329
- each_code_repo_async do |repo|
330
- if uncommited_changes?(repo.name)
331
- print "Uncommitted changes in #{repo.name}. Not updating.".red + "\n"
332
- next
333
- end
334
- system("cd #{repo.name}; git pull")
303
+ def create_dotfile
304
+ FileUtils.touch('.zewodev')
335
305
  end
336
- puts 'Done!'
337
- end
338
306
 
339
- desc :make_projects, 'Makes Xcode projects for all modules'
340
- def make_projects
341
- each_code_repo(&:configure_xcode_project)
342
- each_code_repo(&:build_dependencies)
307
+ def has_dotfile
308
+ File.exist?('.zewodev')
309
+ end
310
+
343
311
  end
344
312
 
345
- desc :init, 'Clones all Zewo repositories'
346
- def init
347
- use_ssh = prompt('Clone using SSH?')
313
+ attr_reader :top_node
314
+
315
+ def initialize(*args)
316
+ super
317
+ @top_node = Repo.new('Flux', 'Zewo')
318
+ Repo.repos['Zewo/Flux'] = @top_node
319
+
320
+ command_name = nil
321
+
322
+ args.each do |a|
323
+ next unless a.is_a? Hash
348
324
 
349
- each_repo_async do |repo|
350
- print "Checking #{repo.name}..." + "\n"
351
- unless File.directory?(repo.name)
352
- print "Cloning #{repo.name}...".green + "\n"
353
- silent_cmd("git clone #{repo.data[use_ssh ? 'clone_url' : 'ssh_url']}")
325
+ if a.key? :current_command
326
+ command_name = a[:current_command].name
327
+ break
354
328
  end
355
329
  end
356
- puts 'Done!'
357
- end
358
330
 
359
- desc :clone_osx_dev, 'Clones repositories for OSX development'
360
- def clone_osx_dev
361
- puts 'Cloning repositories...'
362
- each_osx_whitelisted_repo_async do |repo|
363
- unless File.directory?(repo.name)
364
- print "Cloning #{repo.data['organization']}/#{repo.name}...".green + "\n"
365
- silent_cmd("git clone #{repo.data['clone_url']}")
366
-
367
- cloned_name = repo.data['clone_url'].split('/').last
368
- if cloned_name.end_with?('-OSX')
369
- FileUtils.mv cloned_name, cloned_name[0...-4]
370
- end
331
+ if !command_name.nil? && command_name.to_sym != :init
332
+ unless has_dotfile
333
+ puts 'zewodev has not been initialized in this directory. Run `zewodev init` do to so.'.red
334
+ exit
371
335
  end
372
336
  end
337
+
338
+ top_node.clone_dependencies
373
339
  end
374
340
 
375
- desc :make_osx_dev_projects, 'Makes Xcode projects for OSX development repositories'
376
- def make_osx_dev_projects
377
- each_osx_whitelisted_repo(&:configure_xcode_project)
378
- each_osx_whitelisted_repo(&:build_dependencies)
341
+ desc :init, 'Initializes the current directory as a Zewo development directory'
342
+ def init
343
+ create_dotfile
344
+ invoke :rebuild_projects
379
345
  end
380
346
 
381
- desc :setup_osx_dev, 'Sets up OSX development environment (clone, checkout, create xcode projects)'
382
- option :version, :required => true
383
- def setup_osx_dev()
384
- clone_osx_dev()
347
+ desc :rebuild_projects, 'Rebuilds Xcode projects'
348
+ def rebuild_projects
349
+ top_node.setup_xcode_projects
350
+ top_node.configure_xcode_projects
351
+ end
385
352
 
386
- if options[:version] == '0.3'
387
- `mv OS System`
388
- end
353
+ desc :status, 'Checks status of all repositories'
354
+ def status
355
+ each_repo do |key, repo|
356
+ str = key
357
+ branch = repo.branch
358
+ str += " (#{repo.tag}) - #{repo.uncommited_changes? ? branch.red : branch.green}"
389
359
 
390
- invoke 'checkout', [], :tag => options[:version]
360
+ if repo.tag_lock
361
+ str += " Locked to #{repo.tag_lock}".yellow
362
+ end
391
363
 
392
- checkout_modulemap_versions()
364
+ puts str
365
+ end
366
+ end
393
367
 
394
- make_osx_dev_projects()
368
+ desc :pull, 'Pulls recent changes from all repositories'
369
+ def pull
370
+ puts "Pulling changes for all repositories..."
371
+ each_repo_async(false) do |key, repo|
372
+ begin
373
+ output = repo.pull
374
+ str = "#{key}:\n".green
375
+ str += output
376
+ str += "\n\n"
377
+ puts str
378
+ rescue Exception => e
379
+ puts "#{key}: #{e.message.red}"
380
+ end
381
+ end
395
382
  end
396
383
  end
397
-
398
- OSX_CODE_REPO_WHITELIST = [
399
-
400
- # Zewo stuff
401
- 'zewo/Base64',
402
- 'zewo/BasicAuthMiddleware',
403
- 'zewo/ContentNegotiationMiddleware',
404
- 'zewo/Data',
405
- 'zewo/Event',
406
- 'zewo/HTTP',
407
- 'zewo/HTTPJSON',
408
- 'zewo/HTTPParser',
409
- 'zewo/HTTPSerializer',
410
- 'zewo/InterchangeData',
411
- 'zewo/JSON',
412
- 'zewo/JSONMediaType',
413
- 'zewo/Log',
414
- 'zewo/LogMiddleware',
415
- 'zewo/MediaType',
416
- 'zewo/Mustache',
417
- 'zewo/MySQL',
418
- 'zewo/OS',
419
- 'zewo/OpenSSL', 'paulofaria/stream', #just for OpenSSL
420
- 'zewo/POSIXRegex',
421
- 'zewo/PathParameterMiddleware',
422
- 'zewo/PostgreSQL',
423
- 'zewo/RecoveryMiddleware',
424
- 'zewo/RegexRouteMatcher',
425
- 'zewo/Router',
426
- 'zewo/SQL',
427
- 'zewo/Sideburns',
428
- 'zewo/String',
429
- 'zewo/TrieRouteMatcher',
430
- 'zewo/URI',
431
- 'zewo/URLEncodedForm',
432
- 'zewo/URLEncodedFormMediaType',
433
- 'zewo/WebSocket',
434
- 'zewo/ZeroMQ',
435
- 'zewo/Zewo',
436
-
437
- # C stuff
438
- 'zewo/CHTTPParser',
439
- 'zewo/CLibpq-OSX',
440
- 'zewo/CMySQL-OSX',
441
- 'zewo/COpenSSL-OSX',
442
- 'zewo/CURIParser',
443
- 'zewo/CZeroMQ',
444
-
445
- # VeniceX stuff
446
- 'venicex/CLibvenice',
447
- 'venicex/Venice',
448
- 'venicex/IP',
449
- 'venicex/TCP',
450
- 'venicex/UDP',
451
- 'venicex/HTTPServer',
452
- 'venicex/HTTPClient',
453
- 'venicex/TCPSSL',
454
- 'venicex/HTTPSServer',
455
- 'venicex/HTTPSClient',
456
- 'venicex/File',
457
- 'venicex/HTTPFile',
458
- 'venicex/ChannelStream',
459
-
460
- # SwiftX stuff
461
- 'swiftx/S4',
462
- 'swiftx/C7'
463
- ]
464
384
  end
@@ -1,3 +1,3 @@
1
1
  module Zewo
2
- VERSION = "0.2.12".freeze
2
+ VERSION = "0.3".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zewo-dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.12
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Ask
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-05 00:00:00.000000000 Z
11
+ date: 2016-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj
@@ -137,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
137
  version: '0'
138
138
  requirements: []
139
139
  rubyforge_project:
140
- rubygems_version: 2.0.14.1
140
+ rubygems_version: 2.4.8
141
141
  signing_key:
142
142
  specification_version: 4
143
143
  summary: zewo-dev is a tool to make developing Zewo modules and tracking their status