cocoapods-meitu-bin 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +56 -0
- data/lib/cocoapods-meitu-bin/command/bin/archive.rb +206 -0
- data/lib/cocoapods-meitu-bin/command/bin/auto.rb +212 -0
- data/lib/cocoapods-meitu-bin/command/bin/build_all.rb +345 -0
- data/lib/cocoapods-meitu-bin/command/bin/header_files_specifications.rb +262 -0
- data/lib/cocoapods-meitu-bin/command/bin/init.rb +72 -0
- data/lib/cocoapods-meitu-bin/command/bin/install.rb +44 -0
- data/lib/cocoapods-meitu-bin/command/bin/lib/lint.rb +67 -0
- data/lib/cocoapods-meitu-bin/command/bin/lock/dependency.rb +89 -0
- data/lib/cocoapods-meitu-bin/command/bin/lock/spec_repo.rb +105 -0
- data/lib/cocoapods-meitu-bin/command/bin/lock/version.rb +68 -0
- data/lib/cocoapods-meitu-bin/command/bin/lock.rb +36 -0
- data/lib/cocoapods-meitu-bin/command/bin/output_source.rb +146 -0
- data/lib/cocoapods-meitu-bin/command/bin/repo/push.rb +88 -0
- data/lib/cocoapods-meitu-bin/command/bin/repo/update.rb +42 -0
- data/lib/cocoapods-meitu-bin/command/bin/repo.rb +14 -0
- data/lib/cocoapods-meitu-bin/command/bin/source/add.rb +148 -0
- data/lib/cocoapods-meitu-bin/command/bin/source/delete.rb +59 -0
- data/lib/cocoapods-meitu-bin/command/bin/source/list.rb +46 -0
- data/lib/cocoapods-meitu-bin/command/bin/source.rb +30 -0
- data/lib/cocoapods-meitu-bin/command/bin/spec/create.rb +73 -0
- data/lib/cocoapods-meitu-bin/command/bin/spec/lint.rb +109 -0
- data/lib/cocoapods-meitu-bin/command/bin/spec.rb +13 -0
- data/lib/cocoapods-meitu-bin/command/bin/update.rb +154 -0
- data/lib/cocoapods-meitu-bin/command/bin/upload.rb +175 -0
- data/lib/cocoapods-meitu-bin/command/bin.rb +69 -0
- data/lib/cocoapods-meitu-bin/command.rb +1 -0
- data/lib/cocoapods-meitu-bin/config/config.rb +149 -0
- data/lib/cocoapods-meitu-bin/config/config_asker.rb +57 -0
- data/lib/cocoapods-meitu-bin/config/config_builder.rb +216 -0
- data/lib/cocoapods-meitu-bin/gem_version.rb +9 -0
- data/lib/cocoapods-meitu-bin/helpers/Info.plist +0 -0
- data/lib/cocoapods-meitu-bin/helpers/buildAll/bin_helper.rb +97 -0
- data/lib/cocoapods-meitu-bin/helpers/buildAll/builder.rb +434 -0
- data/lib/cocoapods-meitu-bin/helpers/buildAll/podspec_util.rb +140 -0
- data/lib/cocoapods-meitu-bin/helpers/buildAll/zip_file_helper.rb +87 -0
- data/lib/cocoapods-meitu-bin/helpers/build_helper.rb +167 -0
- data/lib/cocoapods-meitu-bin/helpers/build_utils.rb +64 -0
- data/lib/cocoapods-meitu-bin/helpers/framework.rb +86 -0
- data/lib/cocoapods-meitu-bin/helpers/framework_builder.rb +551 -0
- data/lib/cocoapods-meitu-bin/helpers/library.rb +54 -0
- data/lib/cocoapods-meitu-bin/helpers/library_builder.rb +90 -0
- data/lib/cocoapods-meitu-bin/helpers/pod_size_helper.rb +54 -0
- data/lib/cocoapods-meitu-bin/helpers/sources_helper.rb +35 -0
- data/lib/cocoapods-meitu-bin/helpers/spec_creator.rb +170 -0
- data/lib/cocoapods-meitu-bin/helpers/spec_files_helper.rb +80 -0
- data/lib/cocoapods-meitu-bin/helpers/spec_source_creator.rb +304 -0
- data/lib/cocoapods-meitu-bin/helpers/upload_helper.rb +104 -0
- data/lib/cocoapods-meitu-bin/helpers.rb +5 -0
- data/lib/cocoapods-meitu-bin/native/acknowledgements.rb +27 -0
- data/lib/cocoapods-meitu-bin/native/analyzer.rb +109 -0
- data/lib/cocoapods-meitu-bin/native/file_accessor.rb +28 -0
- data/lib/cocoapods-meitu-bin/native/gen.rb +79 -0
- data/lib/cocoapods-meitu-bin/native/installation_options.rb +28 -0
- data/lib/cocoapods-meitu-bin/native/installer.rb +259 -0
- data/lib/cocoapods-meitu-bin/native/linter.rb +26 -0
- data/lib/cocoapods-meitu-bin/native/lockfile.rb +85 -0
- data/lib/cocoapods-meitu-bin/native/path_source.rb +33 -0
- data/lib/cocoapods-meitu-bin/native/pod_source_installer.rb +19 -0
- data/lib/cocoapods-meitu-bin/native/pod_target_installer.rb +87 -0
- data/lib/cocoapods-meitu-bin/native/podfile.rb +99 -0
- data/lib/cocoapods-meitu-bin/native/podfile_env.rb +38 -0
- data/lib/cocoapods-meitu-bin/native/podfile_generator.rb +201 -0
- data/lib/cocoapods-meitu-bin/native/podspec_finder.rb +25 -0
- data/lib/cocoapods-meitu-bin/native/resolver.rb +299 -0
- data/lib/cocoapods-meitu-bin/native/sandbox_analyzer.rb +34 -0
- data/lib/cocoapods-meitu-bin/native/source.rb +35 -0
- data/lib/cocoapods-meitu-bin/native/sources_manager.rb +21 -0
- data/lib/cocoapods-meitu-bin/native/specification.rb +31 -0
- data/lib/cocoapods-meitu-bin/native/target_validator.rb +41 -0
- data/lib/cocoapods-meitu-bin/native/validator.rb +40 -0
- data/lib/cocoapods-meitu-bin/native.rb +26 -0
- data/lib/cocoapods-meitu-bin/source_provider_hook.rb +68 -0
- data/lib/cocoapods-meitu-bin.rb +2 -0
- data/lib/cocoapods_plugin.rb +11 -0
- data/spec/command/bin_spec.rb +12 -0
- data/spec/spec_helper.rb +50 -0
- metadata +201 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
require 'cocoapods-meitu-bin/command/bin/update'
|
3
|
+
module Pod
|
4
|
+
class Command
|
5
|
+
class Bin < Command
|
6
|
+
class Install < Bin
|
7
|
+
include Pod
|
8
|
+
|
9
|
+
self.summary = 'pod install 拦截器'
|
10
|
+
|
11
|
+
self.description = <<-DESC
|
12
|
+
pod install 拦截器,会加载本地Podfile_local文件
|
13
|
+
会通过DSL加载到原始Podfile文件中
|
14
|
+
支持 pod 'xxx' 各种写法
|
15
|
+
支持 post_install/pre_install钩子,采用覆盖做法
|
16
|
+
DESC
|
17
|
+
def self.options
|
18
|
+
[
|
19
|
+
['--repo-update', 'Force running `pod repo update` before install'],
|
20
|
+
['--deployment', 'Disallow any changes to the Podfile or the Podfile.lock during installation'],
|
21
|
+
['--clean-install', 'Ignore the contents of the project cache and force a full pod installation. This only ' \
|
22
|
+
'applies to projects that have enabled incremental installation']
|
23
|
+
].concat(super).reject { |(name, _)| name == '--no-repo-update' }
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(argv)
|
27
|
+
@update = argv.flag?('update')
|
28
|
+
super
|
29
|
+
@additional_args = argv.remainder!
|
30
|
+
end
|
31
|
+
|
32
|
+
def run
|
33
|
+
Update.load_local_podfile
|
34
|
+
argvs = [
|
35
|
+
*@additional_args
|
36
|
+
]
|
37
|
+
gen = Pod::Command::Install.new(CLAide::ARGV.new(argvs))
|
38
|
+
gen.validate!
|
39
|
+
gen.run
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'cocoapods-meitu-bin/config/config'
|
2
|
+
require 'cocoapods-meitu-bin/native/podfile'
|
3
|
+
|
4
|
+
module Pod
|
5
|
+
class Command
|
6
|
+
class Bin < Command
|
7
|
+
class Lib < Bin
|
8
|
+
class Lint < Lib
|
9
|
+
self.summary = 'lint 组件.'
|
10
|
+
self.description = <<-DESC
|
11
|
+
lint 二进制组件 / 源码组件
|
12
|
+
DESC
|
13
|
+
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new('NAME.podspec', false)
|
16
|
+
]
|
17
|
+
|
18
|
+
# lib lint 不会下载 source,所以不能进行二进制 lint
|
19
|
+
# 要 lint 二进制版本,需要进行 spec lint,此 lint 会去下载 source
|
20
|
+
def self.options
|
21
|
+
[
|
22
|
+
['--code-dependencies', '使用源码依赖进行 lint'],
|
23
|
+
['--loose-options', '添加宽松的 options, 包括 --use-libraries (可能会造成 entry point (start) undefined)'],
|
24
|
+
['--allow-prerelease', '允许使用 prerelease 的版本 lint']
|
25
|
+
].concat(Pod::Command::Lib::Lint.options).concat(super).uniq
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(argv)
|
29
|
+
@loose_options = argv.flag?('loose-options')
|
30
|
+
@code_dependencies = argv.flag?('code-dependencies')
|
31
|
+
@sources = argv.option('sources') || []
|
32
|
+
@allow_prerelease = argv.flag?('allow-prerelease')
|
33
|
+
@podspec = argv.shift_argument
|
34
|
+
super
|
35
|
+
|
36
|
+
@additional_args = argv.remainder!
|
37
|
+
end
|
38
|
+
|
39
|
+
def run
|
40
|
+
Podfile.execute_with_bin_plugin do
|
41
|
+
Podfile.execute_with_allow_prerelease(@allow_prerelease) do
|
42
|
+
Podfile.execute_with_use_binaries(!@code_dependencies) do
|
43
|
+
argvs = [
|
44
|
+
@podspec || code_spec_files.first,
|
45
|
+
"--sources=#{sources_option(@code_dependencies, @sources)}",
|
46
|
+
*@additional_args
|
47
|
+
]
|
48
|
+
|
49
|
+
if @loose_options
|
50
|
+
argvs << '--allow-warnings'
|
51
|
+
if code_spec&.all_dependencies&.any?
|
52
|
+
argvs << '--use-libraries'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
lint = Pod::Command::Lib::Lint.new(CLAide::ARGV.new(argvs))
|
57
|
+
lint.validate!
|
58
|
+
lint.run
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
|
2
|
+
module Pod
|
3
|
+
class Command
|
4
|
+
class Bin < Command
|
5
|
+
class Lock < Bin
|
6
|
+
class Dependency < Lock
|
7
|
+
include Pod
|
8
|
+
|
9
|
+
self.summary = '分析`POD_NAME`依赖的库'
|
10
|
+
self.description = <<-DESC
|
11
|
+
#{self.summary},如果加上`--reverse`,则分析依赖`POD_NAME`的库
|
12
|
+
DESC
|
13
|
+
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new('POD_NAME', true)
|
16
|
+
]
|
17
|
+
|
18
|
+
def self.options
|
19
|
+
[
|
20
|
+
%w[--reverse 分析依赖`POD_NAME`的库]
|
21
|
+
].concat(super).uniq
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(argv)
|
25
|
+
super
|
26
|
+
@pod_name = argv.shift_argument
|
27
|
+
@reverse = argv.flag?('reverse', false)
|
28
|
+
end
|
29
|
+
|
30
|
+
def run
|
31
|
+
super
|
32
|
+
raise Informative, "请输入Pod库名称,如:AFNetworking" if @pod_name.nil?
|
33
|
+
if @reverse
|
34
|
+
reverse_dependencies
|
35
|
+
else
|
36
|
+
dependencies
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def dependencies
|
41
|
+
deps = []
|
42
|
+
@analyze_result.specifications.map do |spec|
|
43
|
+
if spec.root.name == @pod_name
|
44
|
+
deps.concat(spec.dependencies)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
UI.puts "\n"
|
48
|
+
if deps.empty?
|
49
|
+
UI.puts "`#{@pod_name}`无依赖的库".red
|
50
|
+
else
|
51
|
+
deps.reject! { |dep| dep.root_name == @pod_name }
|
52
|
+
unless deps.nil?
|
53
|
+
deps.uniq!
|
54
|
+
end
|
55
|
+
if deps.nil? or deps.empty?
|
56
|
+
UI.puts "`#{@pod_name}`无依赖的库".red
|
57
|
+
else
|
58
|
+
UI.puts "`#{@pod_name}`依赖的库如下:".yellow
|
59
|
+
deps.map { |dep| UI.puts "- #{dep}" }
|
60
|
+
UI.puts "total #{deps.size} deps".green
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def reverse_dependencies
|
66
|
+
pods = []
|
67
|
+
@analyze_result.specifications.map do |spec|
|
68
|
+
spec.dependencies.map do |dep|
|
69
|
+
if dep.root_name == @pod_name and !spec.root.name.include?(@pod_name)
|
70
|
+
pods << spec.root.name
|
71
|
+
break
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
UI.puts "\n"
|
76
|
+
if pods.empty?
|
77
|
+
UI.puts "没有依赖`#{@pod_name}`的库".red
|
78
|
+
else
|
79
|
+
pods.uniq!
|
80
|
+
UI.puts "依赖`#{@pod_name}`的库如下:".yellow
|
81
|
+
pods.map { |pod| UI.puts "- #{pod}" }
|
82
|
+
UI.puts "total #{pods.size} pods".green
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
|
2
|
+
module Pod
|
3
|
+
class Command
|
4
|
+
class Bin < Command
|
5
|
+
class Lock < Bin
|
6
|
+
class SpecRepo < Lock
|
7
|
+
include Pod
|
8
|
+
|
9
|
+
self.summary = '分析`podspec`源'
|
10
|
+
self.description = <<-DESC
|
11
|
+
#{self.summary},如果加`POD_NAME`,则分析该`POD_NAME`所属的repo仓库;如果不加,则打印项目中用到的repo仓库及每个仓库下Pod个数
|
12
|
+
DESC
|
13
|
+
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new('POD_NAME', false)
|
16
|
+
]
|
17
|
+
|
18
|
+
def initialize(argv)
|
19
|
+
super
|
20
|
+
@pod_name = argv.shift_argument
|
21
|
+
end
|
22
|
+
|
23
|
+
def run
|
24
|
+
super
|
25
|
+
if @pod_name.nil?
|
26
|
+
spec_repo_summary
|
27
|
+
else
|
28
|
+
pod_source
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def spec_repos
|
35
|
+
raise Informative, "依赖分析失败" if @analyze_result.nil?
|
36
|
+
result = Hash.new
|
37
|
+
@analyze_result.specs_by_source.map do |source, specs|
|
38
|
+
next unless source
|
39
|
+
next if specs.empty?
|
40
|
+
key = source.url || source.name
|
41
|
+
|
42
|
+
# save `trunk` as 'trunk' so that the URL itself can be changed without lockfile churn
|
43
|
+
key = Pod::TrunkSource::TRUNK_REPO_NAME if source.name == Pod::TrunkSource::TRUNK_REPO_NAME
|
44
|
+
|
45
|
+
value = specs.map { |s| s.root.name }.uniq
|
46
|
+
# 合并重复的source源,而不是替换
|
47
|
+
if result[key].nil?
|
48
|
+
result[key] = YAMLHelper.sorted_array(value)
|
49
|
+
else
|
50
|
+
result[key] = YAMLHelper.sorted_array(result[key].concat(value))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
result.compact
|
54
|
+
end
|
55
|
+
|
56
|
+
def external_sources
|
57
|
+
deps = config.podfile.dependencies.select(&:external?)
|
58
|
+
deps = deps.sort { |d, other| d.name <=> other.name }
|
59
|
+
sources = {}
|
60
|
+
deps.each { |d| sources[d.root_name] = d.external_source }
|
61
|
+
sources
|
62
|
+
end
|
63
|
+
|
64
|
+
# 打印所有source及其pods个数
|
65
|
+
def spec_repo_summary
|
66
|
+
pod_count = 0
|
67
|
+
UI.puts "\n"
|
68
|
+
spec_repos.map do |source, specs|
|
69
|
+
pod_count += specs.size
|
70
|
+
UI.puts "#{source}".yellow
|
71
|
+
UI.puts "- #{specs.size} pods"
|
72
|
+
end
|
73
|
+
pod_count += external_sources.keys.size
|
74
|
+
UI.puts "External".yellow
|
75
|
+
UI.puts "- #{external_sources.keys.size} pods"
|
76
|
+
|
77
|
+
UI.puts "\n"
|
78
|
+
UI.puts "total #{spec_repos.size + 1} sources, #{pod_count} pods".green
|
79
|
+
end
|
80
|
+
|
81
|
+
# 打印pod所属的source
|
82
|
+
def pod_source
|
83
|
+
sources = []
|
84
|
+
external = false
|
85
|
+
spec_repos.map do |source, specs|
|
86
|
+
if specs.include?(@pod_name)
|
87
|
+
sources << source
|
88
|
+
end
|
89
|
+
end
|
90
|
+
external_sources.map do |pod, ext_source|
|
91
|
+
if pod == @pod_name
|
92
|
+
external = true
|
93
|
+
sources << ext_source
|
94
|
+
end
|
95
|
+
end
|
96
|
+
UI.puts "\n"
|
97
|
+
raise Informative, "未找到`#{@pod_name}`所属的source,请检查`#{@pod_name}`是否拼写错误" if sources.empty?
|
98
|
+
UI.puts "#{@pod_name}#{external ? ' (External Source)' : ''}".yellow
|
99
|
+
sources.map { |source| UI.puts "- #{source}" }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
module Pod
|
3
|
+
class Command
|
4
|
+
class Bin < Command
|
5
|
+
class Lock < Bin
|
6
|
+
class Version < Lock
|
7
|
+
include Pod
|
8
|
+
|
9
|
+
self.summary = '分析项目中使用的`Pod`库版本'
|
10
|
+
|
11
|
+
self.arguments = [
|
12
|
+
CLAide::Argument.new('POD_NAME', true)
|
13
|
+
]
|
14
|
+
|
15
|
+
def self.options
|
16
|
+
[
|
17
|
+
%w[--source 查看二进制对应源码版本]
|
18
|
+
].concat(super).uniq
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(argv)
|
22
|
+
super
|
23
|
+
@pod_name = argv.shift_argument
|
24
|
+
@source = argv.flag?('source', false)
|
25
|
+
end
|
26
|
+
|
27
|
+
def run
|
28
|
+
super
|
29
|
+
raise Informative, "请输入Pod库名称,如:AFNetworking" if @pod_name.nil?
|
30
|
+
versions = []
|
31
|
+
@analyze_result.specifications.map do |spec|
|
32
|
+
if spec.name == @pod_name
|
33
|
+
versions << spec.version
|
34
|
+
end
|
35
|
+
end
|
36
|
+
versions = versions.uniq
|
37
|
+
UI.puts "\n"
|
38
|
+
raise Informative, "未查找到`#{@pod_name}`的版本号,请检查`#{@pod_name}`是否拼写错误" if versions.empty?
|
39
|
+
UI.puts "`#{@pod_name}`版本号如下:".yellow
|
40
|
+
versions.map do |v|
|
41
|
+
if @source
|
42
|
+
UI.puts "- #{get_source_version(v.to_s)}"
|
43
|
+
else
|
44
|
+
UI.puts "- #{v}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
UI.puts "[!] `#{@pod_name}`有`#{versions.size}`个版本,可能会导致意想不到的事情,请确保每个Pod库只有一个依赖版本".yellow if versions.size > 1
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# 获取源码版本号
|
54
|
+
def get_source_version(version)
|
55
|
+
source_version = version
|
56
|
+
version_arr = version.split('.')
|
57
|
+
if version_arr.last.include?('bin')
|
58
|
+
version_arr.delete_at(version_arr.size - 1)
|
59
|
+
source_version = version_arr.join('.')
|
60
|
+
end
|
61
|
+
source_version
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'cocoapods-meitu-bin/command/bin/lock/spec_repo'
|
2
|
+
require 'cocoapods-meitu-bin/command/bin/lock/version'
|
3
|
+
require 'cocoapods-meitu-bin/command/bin/lock/dependency'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
class Command
|
7
|
+
class Bin < Command
|
8
|
+
class Lock < Bin
|
9
|
+
include Pod
|
10
|
+
include Config::Mixin
|
11
|
+
|
12
|
+
self.abstract_command = true
|
13
|
+
self.summary = '分析 Pod 依赖关系'
|
14
|
+
|
15
|
+
def initialize(argv)
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
# 校验Podfile是否存在
|
21
|
+
verify_podfile_exists!
|
22
|
+
# 依赖分析
|
23
|
+
@analyze_result = analyze
|
24
|
+
end
|
25
|
+
|
26
|
+
# 依赖分析
|
27
|
+
def analyze
|
28
|
+
UI.title 'Analyze dependencies'.green do
|
29
|
+
analyzer = Pod::Installer::Analyzer.new(config.sandbox, config.podfile, config.lockfile)
|
30
|
+
analyzer.analyze(true )
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
require 'cocoapods-meitu-bin/helpers/buildAll/builder'
|
2
|
+
require 'cocoapods-meitu-bin/helpers/buildAll/podspec_util'
|
3
|
+
require 'cocoapods-meitu-bin/helpers/buildAll/zip_file_helper'
|
4
|
+
require 'cocoapods-meitu-bin/helpers/buildAll/bin_helper'
|
5
|
+
require 'cocoapods-meitu-bin/config/config'
|
6
|
+
require 'yaml'
|
7
|
+
require 'digest'
|
8
|
+
|
9
|
+
module Pod
|
10
|
+
class Command
|
11
|
+
class Bin < Command
|
12
|
+
class OutputSource < Bin
|
13
|
+
self.summary = '输出各个组件的source源,默认输出全部组件的source'
|
14
|
+
self.description = <<-DESC
|
15
|
+
#{summary}
|
16
|
+
DESC
|
17
|
+
|
18
|
+
def self.options
|
19
|
+
[
|
20
|
+
%w[--error-source 过滤异常的source,比如http的,CI打包只支持SSH认证]
|
21
|
+
].concat(super).uniq
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(argv)
|
25
|
+
@error_source = argv.flag?('error-source', false)
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
def run
|
30
|
+
# 开始时间
|
31
|
+
@start_time = Time.now.to_i
|
32
|
+
# 更新repo仓库
|
33
|
+
repo_update
|
34
|
+
# 分析依赖
|
35
|
+
@analyze_result = analyse
|
36
|
+
# 打印source
|
37
|
+
show_cost_source
|
38
|
+
# 计算耗时
|
39
|
+
show_cost_time
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
# 打印source
|
45
|
+
def show_cost_source
|
46
|
+
all_source_list = []
|
47
|
+
error_source_list = []
|
48
|
+
@analyze_result.specifications.each do |specification|
|
49
|
+
all_source_list << { specification.root.name => specification.root.source }
|
50
|
+
if @error_source && invalid_git_address?(specification)
|
51
|
+
error_source_list << { specification.root.name => specification.root.source }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
if @error_source
|
55
|
+
if error_source_list.uniq.empty?
|
56
|
+
UI.info "没有有问题的组件".green
|
57
|
+
else
|
58
|
+
UI.info '问题组件,source 为http CI打包不支持http认证,应修改为ssh'.red
|
59
|
+
error_source_list.uniq.map do |source|
|
60
|
+
UI.info "- #{source}".red
|
61
|
+
end
|
62
|
+
end
|
63
|
+
else
|
64
|
+
UI.info '输出所有pod组件source'.yellow
|
65
|
+
all_source_list.uniq.map do |source|
|
66
|
+
UI.info "- #{source}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# git clone 地址 是否非法
|
72
|
+
def invalid_git_address?(specification)
|
73
|
+
return false if specification.root.source[:git].nil?
|
74
|
+
git = specification.root.source[:git]
|
75
|
+
git.include?('http://') || git.include?('https://')
|
76
|
+
end
|
77
|
+
|
78
|
+
# 打印耗时
|
79
|
+
def show_cost_time
|
80
|
+
return if @start_time.nil?
|
81
|
+
UI.info "总耗时:#{Time.now.to_i - @start_time}s".green
|
82
|
+
end
|
83
|
+
|
84
|
+
# 更新repo仓库
|
85
|
+
def repo_update
|
86
|
+
if @repo_update
|
87
|
+
UI.title 'Repo update'.green do
|
88
|
+
return if podfile.nil?
|
89
|
+
sources_manager = Pod::Config.instance.sources_manager
|
90
|
+
podfile.sources.uniq.map do |src|
|
91
|
+
UI.message "Update repo: #{src}"
|
92
|
+
source = sources_manager.source_with_name_or_url(src)
|
93
|
+
source.update(false)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# 获取 podfile
|
100
|
+
def podfile
|
101
|
+
@podfile ||= begin
|
102
|
+
podfile_path = File.join(Pathname.pwd, 'Podfile')
|
103
|
+
raise 'Podfile不存在' unless File.exist?(podfile_path)
|
104
|
+
sources_manager = Pod::Config.instance.sources_manager
|
105
|
+
podfile = Podfile.from_file(Pathname.new(podfile_path))
|
106
|
+
podfile_hash = podfile.to_hash
|
107
|
+
podfile_hash['sources'] = (podfile_hash['sources'] || []).concat(sources_manager.code_source_list.map(&:url))
|
108
|
+
podfile_hash['sources'] << sources_manager.binary_source.url
|
109
|
+
podfile_hash['sources'].uniq!
|
110
|
+
Podfile.from_hash(podfile_hash)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# 获取 podfile.lock
|
115
|
+
def lockfile
|
116
|
+
@lockfile ||= begin
|
117
|
+
lock_path = File.join(Pathname.pwd, 'Podfile.lock')
|
118
|
+
raise 'Podfile.lock不存在,请执行pod install' unless File.exist?(lock_path)
|
119
|
+
Lockfile.from_file(Pathname.new(lock_path))
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# 获取 sandbox
|
124
|
+
def sandbox
|
125
|
+
@sandbox ||= begin
|
126
|
+
sandbox_path = File.join(Pathname.pwd, 'Pods')
|
127
|
+
raise 'Pods文件夹不存在,请执行pod install' unless File.exist?(sandbox_path)
|
128
|
+
Pod::Sandbox.new(sandbox_path)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
# 根据podfile和podfile.lock分析依赖
|
133
|
+
def analyse
|
134
|
+
UI.title 'Analyze dependencies'.green do
|
135
|
+
analyzer = Pod::Installer::Analyzer.new(
|
136
|
+
sandbox,
|
137
|
+
podfile,
|
138
|
+
lockfile
|
139
|
+
)
|
140
|
+
analyzer.analyze(true)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
require 'cocoapods-meitu-bin/config/config'
|
3
|
+
require 'cocoapods-meitu-bin/native/podfile'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
class Command
|
7
|
+
class Bin < Command
|
8
|
+
class Repo < Bin
|
9
|
+
class Push < Repo
|
10
|
+
self.summary = '发布组件'
|
11
|
+
self.description = <<-DESC
|
12
|
+
#{self.summary}
|
13
|
+
跳过lint过程
|
14
|
+
DESC
|
15
|
+
|
16
|
+
self.arguments = [
|
17
|
+
CLAide::Argument.new('REPO', true ),
|
18
|
+
CLAide::Argument.new('NAME.podspec', false )
|
19
|
+
]
|
20
|
+
|
21
|
+
def self.options
|
22
|
+
[].concat(Pod::Command::Repo::Push.options).concat(super).uniq
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(argv)
|
26
|
+
@repo = argv.shift_argument
|
27
|
+
@podspec = argv.shift_argument
|
28
|
+
super
|
29
|
+
|
30
|
+
@additional_args = argv.remainder!
|
31
|
+
end
|
32
|
+
|
33
|
+
def run
|
34
|
+
argvs = [
|
35
|
+
@repo,
|
36
|
+
*@additional_args
|
37
|
+
]
|
38
|
+
|
39
|
+
push = Pod::Command::Repo::Push.new(CLAide::ARGV.new(argvs))
|
40
|
+
push.validate!
|
41
|
+
push.run
|
42
|
+
ensure
|
43
|
+
clear_binary_spec_file_if_needed unless @reserve_created_spec
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
# def template_spec_file
|
49
|
+
# @template_spec_file ||= begin
|
50
|
+
# if @template_podspec
|
51
|
+
# find_spec_file(@template_podspec)
|
52
|
+
# else
|
53
|
+
# binary_template_spec_file
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
#
|
58
|
+
# def spec_file
|
59
|
+
# @spec_file ||= begin
|
60
|
+
# if @podspec
|
61
|
+
# find_spec_file(@podspec)
|
62
|
+
# else
|
63
|
+
# if code_spec_files.empty?
|
64
|
+
# raise Informative, '当前目录下没有找到可用源码 podspec.'
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
# spec_file = if @binary
|
68
|
+
# code_spec = Pod::Specification.from_file(code_spec_files.first)
|
69
|
+
# if template_spec_file
|
70
|
+
# template_spec = Pod::Specification.from_file(template_spec_file)
|
71
|
+
# end
|
72
|
+
# create_binary_spec_file(code_spec, template_spec)
|
73
|
+
# else
|
74
|
+
# code_spec_files.first
|
75
|
+
# end
|
76
|
+
# spec_file
|
77
|
+
# end
|
78
|
+
# end
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
# def repo
|
82
|
+
# @binary ? binary_source.name : code_source_list.first.name
|
83
|
+
# end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'parallel'
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
class Command
|
5
|
+
class Bin < Command
|
6
|
+
class Repo < Bin
|
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
|
+
if @all
|
28
|
+
config.sources_manager.update()
|
29
|
+
else
|
30
|
+
valid_sources.map { |source|
|
31
|
+
UI.puts "更新私有源仓库 #{source.to_s}"
|
32
|
+
source.update(false)
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|