cocoapods-swordfish 0.1.6

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 (55) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +35 -0
  3. data/lib/cocoapods_plugin.rb +86 -0
  4. data/lib/gem_version.rb +11 -0
  5. data/lib/swordfish/command/archive.rb +187 -0
  6. data/lib/swordfish/command/auto.rb +192 -0
  7. data/lib/swordfish/command/config.rb +70 -0
  8. data/lib/swordfish/command/repo/update.rb +42 -0
  9. data/lib/swordfish/command/spec/create.rb +78 -0
  10. data/lib/swordfish/command/spec/push.rb +114 -0
  11. data/lib/swordfish/command/swordfish.rb +41 -0
  12. data/lib/swordfish/command.rb +2 -0
  13. data/lib/swordfish/config/config.rb +137 -0
  14. data/lib/swordfish/config/config_asker.rb +57 -0
  15. data/lib/swordfish/config/config_builder.rb +216 -0
  16. data/lib/swordfish/helpers/build_helper.rb +160 -0
  17. data/lib/swordfish/helpers/build_utils.rb +94 -0
  18. data/lib/swordfish/helpers/framework.rb +85 -0
  19. data/lib/swordfish/helpers/framework_builder.rb +451 -0
  20. data/lib/swordfish/helpers/library.rb +54 -0
  21. data/lib/swordfish/helpers/library_builder.rb +90 -0
  22. data/lib/swordfish/helpers/sources_helper.rb +38 -0
  23. data/lib/swordfish/helpers/spec_creator.rb +167 -0
  24. data/lib/swordfish/helpers/spec_files_helper.rb +76 -0
  25. data/lib/swordfish/helpers/spec_source_creator.rb +266 -0
  26. data/lib/swordfish/helpers/upload_helper.rb +94 -0
  27. data/lib/swordfish/hmap/hmap_generator.rb +59 -0
  28. data/lib/swordfish/hmap/pod_target.rb +92 -0
  29. data/lib/swordfish/hmap/podfile_dsl.rb +36 -0
  30. data/lib/swordfish/hmap/post_install_hook_context.rb +41 -0
  31. data/lib/swordfish/hmap/xcconfig.rb +99 -0
  32. data/lib/swordfish/hmap.rb +4 -0
  33. data/lib/swordfish/native/acknowledgements.rb +27 -0
  34. data/lib/swordfish/native/analyzer.rb +55 -0
  35. data/lib/swordfish/native/file_accessor.rb +28 -0
  36. data/lib/swordfish/native/installation_options.rb +25 -0
  37. data/lib/swordfish/native/installer.rb +135 -0
  38. data/lib/swordfish/native/linter.rb +25 -0
  39. data/lib/swordfish/native/path_source.rb +33 -0
  40. data/lib/swordfish/native/pod_source_installer.rb +19 -0
  41. data/lib/swordfish/native/pod_target_installer.rb +94 -0
  42. data/lib/swordfish/native/podfile.rb +105 -0
  43. data/lib/swordfish/native/podfile_env.rb +36 -0
  44. data/lib/swordfish/native/podfile_generator.rb +195 -0
  45. data/lib/swordfish/native/podspec_finder.rb +24 -0
  46. data/lib/swordfish/native/resolver.rb +223 -0
  47. data/lib/swordfish/native/source.rb +35 -0
  48. data/lib/swordfish/native/sources_manager.rb +19 -0
  49. data/lib/swordfish/native/specification.rb +31 -0
  50. data/lib/swordfish/native/target_architectures.rb +79 -0
  51. data/lib/swordfish/native/target_validator.rb +41 -0
  52. data/lib/swordfish/native/validator.rb +39 -0
  53. data/lib/swordfish/native.rb +16 -0
  54. data/lib/swordfish.rb +2 -0
  55. metadata +167 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 57b12c066f1f8c611833c661a0e4d26337683fcd4180246778ff89fcd8ef4810
4
+ data.tar.gz: ed0062fba56cb0793344b55c2e444b708ac29d4ac5178977bc2a37d342ab48f1
5
+ SHA512:
6
+ metadata.gz: a54b2de10e9013e6c6054b16ccae2e5a490d649a2470e06ea71e59f8d9b716b907b0f0918c987c7726381fe4fa578261dc606ce34a7bc45aa7a2a3fc0bd2ff6e
7
+ data.tar.gz: 6aa3061312ccf2794eb3d28e0a7102ca587e9bd1c8338567cc305745eb30ca8e5bb1e5d7b7aa9544b2a538a0936e2d62d9f8f2a230630e2175c41ac12505a92c
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # Cocoapods::Swordfish
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/cocoapods/swordfish`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'cocoapods-swordfish'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle install
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install cocoapods-swordfish
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/cocoapods-swordfish.
@@ -0,0 +1,86 @@
1
+
2
+ require 'swordfish/command'
3
+ require 'swordfish/hmap'
4
+ require 'swordfish/native/target_architectures'
5
+
6
+ module Ocean
7
+ Pod::HooksManager.register('cocoapods-swordfish', :post_install) do |post_context, user_options|
8
+ if $hmap_enable
9
+ generate_type = $strict_mode ? HmapGenerator::ANGLE_BRACKET : HmapGenerator::BOTH
10
+ post_context.aggregate_targets.each do |one|
11
+ pods_hmap = HmapGenerator.new
12
+ Pod::UI.message "- hanlding headers of aggregate target :#{one.name}"
13
+ one.pod_targets.each do |target|
14
+ target.generate_hmap(pods_hmap, generate_type, true, false)
15
+ target_hmap = HmapGenerator.new
16
+ target.generate_hmap(target_hmap, HmapGenerator::BOTH, false, true)
17
+ target.save_hmap(target_hmap)
18
+ one.concat_prebuilt_hmap_targets(target.prebuilt_hmap_target_names)
19
+ end
20
+ one.save_hmap(pods_hmap)
21
+ end
22
+ # arm64
23
+ Xcodeproj::Project.set_archs_arm64(post_context, $archs_only_arm64)
24
+ # m1 EXCLUDED_ARCHS
25
+ Pod::Target.excluded_archs_simulator(post_context, $excluded_archs_simulator)
26
+ else
27
+ # arm64
28
+ Xcodeproj::Project.set_archs_arm64(post_context, $archs_only_arm64)
29
+ # m1 EXCLUDED_ARCHS
30
+ Pod::Target.excluded_archs_simulator(post_context, $excluded_archs_simulator)
31
+ end
32
+ end
33
+
34
+ Pod::HooksManager.register('cocoapods-swordfish', :pre_install) do |_context, _|
35
+ require 'swordfish/native'
36
+
37
+ # pod bin repo update 更新二进制私有源
38
+ Pod::Command::Swordfish::Repo::Update.new(CLAide::ARGV.new([])).run
39
+
40
+ # 有插件/本地库 且是dev环境下,默认进入源码白名单 过滤 archive命令
41
+ if _context.podfile.plugins.keys.include?('cocoapods-swordfish') && _context.podfile.configuration_env == 'dev'
42
+ dependencies = _context.podfile.dependencies
43
+ dependencies.each do |d|
44
+ next unless d.respond_to?(:external_source) &&
45
+ d.external_source.is_a?(Hash) &&
46
+ !d.external_source[:path].nil? &&
47
+ $ARGV[1] != 'archive'
48
+ _context.podfile.set_use_source_pods d.name
49
+ end
50
+ end
51
+
52
+ # 同步 BinPodfile 文件
53
+ project_root = Pod::Config.instance.project_root
54
+ path = File.join(project_root.to_s, 'BinPodfile')
55
+
56
+ next unless File.exist?(path)
57
+
58
+ contents = File.open(path, 'r:utf-8', &:read)
59
+ podfile = Pod::Config.instance.podfile
60
+ podfile.instance_eval do
61
+ begin
62
+ eval(contents, nil, path)
63
+ rescue Exception => e
64
+ message = "Invalid `#{path}` file: #{e.message}"
65
+ raise Pod::DSLError.new(message, path, e, contents)
66
+ end
67
+ end
68
+ end
69
+
70
+ Pod::HooksManager.register('cocoapods-swordfish', :source_provider) do |context, _|
71
+ sources_manager = Pod::Config.instance.sources_manager
72
+ podfile = Pod::Config.instance.podfile
73
+
74
+ if podfile
75
+ # 添加源码私有源 && 二进制私有源
76
+ # added_sources = [sources_manager.code_source]
77
+ added_sources = []
78
+ if podfile.use_binaries? || podfile.use_binaries_selector
79
+ added_sources << sources_manager.binary_source
80
+ added_sources.reverse!
81
+ end
82
+ added_sources.each { |source| context.add_source(source) }
83
+ end
84
+ end
85
+
86
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ocean
4
+ VERSION = "0.1.6"
5
+ end
6
+
7
+ module Pod
8
+ def self.match_version?(*version)
9
+ Gem::Dependency.new('', *version).match?('', Pod::VERSION)
10
+ end
11
+ end
@@ -0,0 +1,187 @@
1
+
2
+ require 'cocoapods/generate'
3
+ require 'cocoapods/command/gen'
4
+
5
+ require 'swordfish/command/swordfish'
6
+ require 'swordfish/config/config_builder'
7
+ require 'swordfish/helpers/build_helper'
8
+
9
+ module Pod
10
+ class Command
11
+ class Swordfish < Command
12
+ class Archive < Swordfish
13
+
14
+ @@missing_binary_specs = []
15
+
16
+ self.summary = '将组件归档为静态库 .a.'
17
+ self.description = <<-DESC
18
+ 将组件归档为静态库 framework,仅支持 iOS 平台
19
+ 此静态 framework 不包含依赖组件的 symbol
20
+ DESC
21
+
22
+ def self.options
23
+ [
24
+ ['--all-make', '对该组件的依赖库,全部制作为二进制组件'],
25
+ ['--sources', '私有源地址,多个用分号区分'],
26
+ ['--framework-output', '输出framework文件'],
27
+ ['--configuration', 'Build the specified configuration (e.g. Debug). Defaults to Release'],
28
+ ['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
29
+ ].concat(Pod::Command::Gen.options).concat(super).uniq
30
+ end
31
+
32
+ self.arguments = [
33
+ CLAide::Argument.new('NAME.podspec', false)
34
+ ]
35
+
36
+ def initialize(argv)
37
+ @env = argv.option('env') || 'dev'
38
+ Ocean.config.set_configuration_env(@env)
39
+ UI.warn "====== cocoapods-swordfish #{Ocean::VERSION} 版本 ======== "
40
+ UI.warn "====== #{@env} 环境 ======== "
41
+
42
+ @code_dependencies = argv.flag?('code-dependencies')
43
+ @framework_output = argv.flag?('framework-output', false )
44
+ @all_make = argv.flag?('all-make', false )
45
+ @sources = argv.option('sources') || []
46
+ @platform = Platform.new(:ios)
47
+ @config = argv.option('configuration', 'Release')
48
+
49
+ super
50
+
51
+ @additional_args = argv.remainder!
52
+ @build_finshed = false
53
+ end
54
+
55
+ def run
56
+ #清除之前的缓存
57
+ zip_dir = Ocean::Config::Builder.instance.zip_dir
58
+ FileUtils.rm_rf(zip_dir) if File.exist?(zip_dir)
59
+
60
+ @spec = Specification.from_file(spec_file)
61
+ generate_project
62
+
63
+ source_specs = []
64
+ source_specs.concat(build_root_spec)
65
+ source_specs.concat(build_dependencies) if @all_make
66
+
67
+ source_specs
68
+ end
69
+
70
+ def build_root_spec
71
+ source_specs = []
72
+ builder = Ocean::Build::Helper.new(@spec,
73
+ @platform,
74
+ @framework_output,
75
+ @zip,
76
+ @spec,
77
+ Ocean::Config::Builder.instance.white_pod_list.include?(@spec.name),
78
+ @config)
79
+ builder.build
80
+ builder.clean_workspace if @clean && !@all_make
81
+ source_specs << @spec unless Ocean::Config::Builder.instance.white_pod_list.include?(@spec.name)
82
+
83
+ source_specs
84
+ end
85
+
86
+ def build_dependencies
87
+ @build_finshed = true
88
+ #如果没要求,就清空依赖库数据
89
+ source_specs = []
90
+ @@missing_binary_specs.uniq.each do |spec|
91
+ next if spec.name.include?('/')
92
+ next if spec.name == @spec.name
93
+ #过滤白名单
94
+ next if Ocean::Config::Builder.instance.white_pod_list.include?(spec.name)
95
+ # #过滤 git (没有,dependency不支持git和path)
96
+ # if spec.source[:git] && spec.source[:git]
97
+ # spec_git = spec.source[:git]
98
+ # spec_git_res = false
99
+ # Ocean::Config::Builder.instance.ignore_git_list.each do |ignore_git|
100
+ # spec_git_res = spec_git.include?(ignore_git)
101
+ # break if spec_git_res
102
+ # end
103
+ # next if spec_git_res
104
+ # end
105
+ UI.warn "#{spec.name}.podspec 带有 vendored_frameworks 字段,请检查是否有效!!!" if spec.attributes_hash['vendored_frameworks']
106
+ next if spec.attributes_hash['vendored_frameworks'] && @spec.name != spec.name #过滤带有vendored_frameworks的
107
+ next if spec.attributes_hash['ios.vendored_frameworks'] && @spec.name != spec.name #过滤带有vendored_frameworks的
108
+ #获取没有制作二进制版本的spec集合
109
+ source_specs << spec
110
+ end
111
+
112
+ fail_build_specs = []
113
+ source_specs.uniq.each do |spec|
114
+ begin
115
+ builder = Ocean::Build::Helper.new(spec,
116
+ @platform,
117
+ @framework_output,
118
+ @zip,
119
+ @spec,
120
+ false ,
121
+ @config)
122
+ builder.build
123
+ rescue Object => exception
124
+ UI.puts exception
125
+ fail_build_specs << spec
126
+ end
127
+ end
128
+
129
+ if fail_build_specs.any?
130
+ fail_build_specs.uniq.each do |spec|
131
+ UI.warn "【#{spec.name} | #{spec.version}】组件二进制版本编译失败 ."
132
+ end
133
+ end
134
+ source_specs - fail_build_specs
135
+ end
136
+
137
+ # 解析器传过来的
138
+ def self.missing_binary_specs(missing_binary_specs)
139
+ @@missing_binary_specs = missing_binary_specs unless @build_finshed
140
+ end
141
+
142
+ private
143
+
144
+ def generate_project
145
+ Podfile.execute_with_bin_plugin do
146
+ Podfile.execute_with_use_binaries(!@code_dependencies) do
147
+ argvs = [
148
+ "--sources=#{@sources}",
149
+ "--gen-directory=#{Ocean::Config::Builder.instance.gen_dir}",
150
+ '--clean',
151
+ *@additional_args
152
+ ]
153
+
154
+ podfile= File.join(Pathname.pwd, "Podfile")
155
+ if File.exist?(podfile)
156
+ argvs += ['--use-podfile']
157
+ end
158
+
159
+ argvs << spec_file if spec_file
160
+
161
+ gen = Pod::Command::Gen.new(CLAide::ARGV.new(argvs))
162
+ gen.validate!
163
+ gen.run
164
+ end
165
+ end
166
+ end
167
+
168
+
169
+ def spec_file
170
+ @spec_file ||= begin
171
+ if @podspec
172
+ find_spec_file(@podspec)
173
+ else
174
+ if code_spec_files.empty?
175
+ raise Informative, '当前目录下没有找到可用源码 podspec.'
176
+ end
177
+
178
+ spec_file = code_spec_files.first
179
+ spec_file
180
+ end
181
+ end
182
+ end
183
+
184
+ end
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,192 @@
1
+
2
+ require 'swordfish/command/swordfish'
3
+ require 'swordfish/helpers/upload_helper'
4
+
5
+ module Pod
6
+ class Command
7
+ class Swordfish < Command
8
+ class Auto < Swordfish
9
+ self.summary = '打开 workspace 工程.'
10
+
11
+ self.arguments = [
12
+ CLAide::Argument.new('NAME.podspec', false)
13
+ ]
14
+ def self.options
15
+ [
16
+ ['--framework-output', "输出framework文件"],
17
+ ['--all-make', "对该组件的依赖库,全部制作为二进制组件"],
18
+ ['--configuration', "Build the specified configuration (e.g. Release ). Defaults to Debug"],
19
+ ['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
20
+ ].concat(Pod::Command::Gen.options).concat(super).uniq
21
+ end
22
+
23
+ def initialize(argv)
24
+ @env = argv.option('env') || 'dev'
25
+ Ocean.config.set_configuration_env(@env)
26
+
27
+ @podspec = argv.shift_argument || find_podspec
28
+
29
+ @specification = Specification.from_file(@podspec)
30
+
31
+ @framework_output = argv.flag?('framework-output', false )
32
+
33
+ @all_make = argv.flag?('all-make', false )
34
+
35
+ @verbose = argv.flag?('verbose',true)
36
+
37
+ @config = argv.option('configuration', 'Debug')
38
+
39
+ @additional_args = argv.remainder!
40
+
41
+ super
42
+ end
43
+
44
+ def validate!
45
+ super
46
+ help! "未找到 podspec文件" unless @podspec
47
+ end
48
+
49
+ def run
50
+ @specification = Specification.from_file(@podspec)
51
+
52
+ source_specs = run_archive
53
+
54
+ fail_push_specs = []
55
+ source_specs.uniq.each do |spec|
56
+ begin
57
+ fail_push_specs << spec unless Ocean::Upload::Helper.new(spec,@code_dependencies,@sources).upload(@framework_output)
58
+ rescue Object => exception
59
+ UI.puts exception
60
+ fail_push_specs << spec
61
+ end
62
+ end
63
+
64
+ if fail_push_specs.any?
65
+ fail_push_specs.uniq.each do |spec|
66
+ UI.warn "【#{spec.name} | #{spec.version}】组件spec push失败 ."
67
+ end
68
+ end
69
+
70
+ success_specs = source_specs - fail_push_specs
71
+ if success_specs.any?
72
+ auto_success = ""
73
+ success_specs.uniq.each do |spec|
74
+ auto_success += "#{spec.name} | #{spec.version}\n"
75
+ UI.warn "===【 #{spec.name} | #{spec.version} 】二进制组件制作完成 !!! "
76
+ end
77
+ puts "============== auto_success"
78
+ puts auto_success
79
+ ENV['auto_success'] = auto_success
80
+ end
81
+ #pod repo update
82
+ UI.section("\nUpdating Spec Repositories\n".yellow) do
83
+ Pod::Command::Swordfish::Repo::Update.new(CLAide::ARGV.new([])).run
84
+ end
85
+
86
+ end
87
+
88
+ #制作二进制包
89
+ def run_archive
90
+ _sources = Ocean::Config::Builder.instance.pod_source_list
91
+
92
+ argvs = [
93
+ "--sources=#{sources_option(@code_dependencies, _sources)}",
94
+ @additional_args
95
+ ]
96
+
97
+ argvs << spec_file if spec_file
98
+ argvs.delete(Array.new)
99
+
100
+ if @code_dependencies
101
+ argvs += ['--code-dependencies']
102
+ end
103
+
104
+ if @verbose
105
+ argvs += ['--verbose']
106
+ end
107
+
108
+ if @framework_output
109
+ argvs += ['--framework-output']
110
+ end
111
+
112
+ if @all_make
113
+ argvs += ['--all-make']
114
+ end
115
+
116
+ if @env
117
+ argvs += ["--env=#{@env}"]
118
+ end
119
+ argvs += ["--configuration=#{@config}"]
120
+
121
+ archive = Pod::Command::Swordfish::Archive.new(CLAide::ARGV.new(argvs))
122
+ archive.validate!
123
+ source_specs = archive.run
124
+ source_specs
125
+ end
126
+
127
+
128
+ def code_podsepc_extname
129
+ '.podsepc'
130
+ end
131
+
132
+ def binary_podsepc_json
133
+ "#{@specification.name}.binary.podspec.json"
134
+ end
135
+
136
+ def binary_template_podsepc
137
+ "#{@specification.name}.binary-template.podspec"
138
+ end
139
+
140
+ def template_spec_file
141
+ @template_spec_file ||= begin
142
+ if @template_podspec
143
+ find_spec_file(@template_podspec)
144
+ else
145
+ binary_template_spec_file
146
+ end
147
+ end
148
+ end
149
+
150
+ def spec_file
151
+ @spec_file ||= begin
152
+ if @podspec
153
+ find_spec_file(@podspec) || @podspec
154
+ else
155
+ if code_spec_files.empty?
156
+ raise Informative, '当前目录下没有找到可用源码 podspec.'
157
+ end
158
+
159
+ spec_file = if @binary
160
+ code_spec = Pod::Specification.from_file(code_spec_files.first)
161
+ if template_spec_file
162
+ template_spec = Pod::Specification.from_file(template_spec_file)
163
+ end
164
+ create_binary_spec_file(code_spec, template_spec)
165
+ else
166
+ code_spec_files.first
167
+ end
168
+ spec_file
169
+ end
170
+ end
171
+ end
172
+
173
+ #Dir.glob 可替代
174
+ def find_podspec
175
+ name = nil
176
+ Pathname.pwd.children.each do |child|
177
+ puts child
178
+ if File.file?(child)
179
+ if child.extname == '.podspec'
180
+ name = File.basename(child)
181
+ unless name.include?("binary-template")
182
+ return name
183
+ end
184
+ end
185
+ end
186
+ end
187
+ return name
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,70 @@
1
+
2
+ require 'swordfish/command/swordfish'
3
+ require 'swordfish/config/config_asker'
4
+
5
+ module Pod
6
+ class Command
7
+ class Swordfish < Command
8
+ class Config < Swordfish
9
+ self.summary = '插件初始化.'
10
+ self.description = <<-DESC
11
+ 配置信息
12
+ DESC
13
+
14
+ def self.options
15
+ [
16
+ ['--config-url=URL', '配置文件地址,直接从此地址下载配置文件']
17
+ ].concat(super)
18
+ end
19
+
20
+ def initialize(argv)
21
+ @config_url = argv.option('config-url')
22
+ super
23
+ end
24
+
25
+ def run
26
+ if @config_url.nil?
27
+ config_with_asker
28
+ else
29
+ config_with_url(@config_url)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def config_with_url(url)
36
+ require 'open-uri'
37
+
38
+ UI.puts "开始下载配置文件...\n"
39
+ file = open(url)
40
+ contents = YAML.safe_load(file.read)
41
+
42
+ UI.puts "开始同步配置文件...\n"
43
+ Ocean.config.sync_config(contents.to_hash)
44
+ UI.puts "设置完成.\n".green
45
+ rescue Errno::ENOENT => e
46
+ raise Informative, "配置文件路径 #{url} 无效,请确认后重试."
47
+ end
48
+
49
+ def config_with_asker
50
+ asker = Ocean::Config::Asker.new
51
+ asker.wellcome_message
52
+
53
+ config = {}
54
+ template_hash = Ocean.config.template_hash
55
+ template_hash.each do |k, v|
56
+ default = begin
57
+ Ocean.config.send(k)
58
+ rescue StandardError
59
+ nil
60
+ end
61
+ config[k] = asker.ask_with_answer(v[:description], default, v[:selection])
62
+ end
63
+
64
+ Ocean.config.sync_config(config)
65
+ asker.done_message
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,42 @@
1
+ require 'parallel'
2
+
3
+ module Pod
4
+ class Command
5
+ class Swordfish < Command
6
+ class Repo < Swordfish
7
+ class Update < Repo
8
+ self.summary = '更新私有源'
9
+
10
+ self.arguments = [
11
+ CLAide::Argument.new('NAME', false)
12
+ ]
13
+
14
+ def self.options
15
+ [
16
+ ['--all', '更新所有私有源,默认只更新二进制相关私有源']
17
+ ].concat(super)
18
+ end
19
+
20
+ def initialize(argv)
21
+ @all = argv.flag?('all')
22
+ @name = argv.shift_argument
23
+ super
24
+ end
25
+
26
+ def run
27
+ show_output = !config.silent?
28
+ if @name || @all
29
+ config.sources_manager.update(@name, show_output)
30
+ else
31
+ Parallel.each(valid_sources, in_threads: 4) do |source|
32
+ UI.puts "更新私有源仓库 #{source.to_s}".yellow
33
+ source.update(show_output)
34
+ end
35
+ end
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end