cocoapods-jxedt 0.0.12 → 0.0.14

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 (32) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cocoapods-jxedt/binary/Intergation.rb +18 -13
  3. data/lib/cocoapods-jxedt/binary/config.rb +72 -0
  4. data/lib/cocoapods-jxedt/binary/helper/podfile_post_install_hook.rb +29 -0
  5. data/lib/cocoapods-jxedt/binary/helper/prebuild_installer.rb +11 -0
  6. data/lib/cocoapods-jxedt/binary/helper/prebuild_sandbox.rb +58 -53
  7. data/lib/cocoapods-jxedt/binary/hooks/CocoapodsJxedtHook.rb +6 -9
  8. data/lib/cocoapods-jxedt/binary/hooks/post_install.rb +4 -4
  9. data/lib/cocoapods-jxedt/binary/hooks/pre_install.rb +32 -12
  10. data/lib/cocoapods-jxedt/binary/main.rb +1 -0
  11. data/lib/cocoapods-jxedt/binary/pod-room/framework.rb +40 -0
  12. data/lib/cocoapods-jxedt/binary/pod-room/xcodebuild_command.rb +83 -1
  13. data/lib/cocoapods-jxedt/binary/pod-room/xcodebuild_raw.rb +1 -1
  14. data/lib/cocoapods-jxedt/binary/prebuild.rb +94 -16
  15. data/lib/cocoapods-jxedt/command/binary/binary.rb +38 -0
  16. data/lib/cocoapods-jxedt/command/binary/command/build.rb +84 -0
  17. data/lib/cocoapods-jxedt/command/binary/command/clean.rb +101 -0
  18. data/lib/cocoapods-jxedt/command/binary/command/code.rb +66 -0
  19. data/lib/cocoapods-jxedt/command/binary/command/fetch.rb +36 -0
  20. data/lib/cocoapods-jxedt/command/binary/command/push.rb +41 -0
  21. data/lib/cocoapods-jxedt/command/binary/command/source_project.rb +51 -0
  22. data/lib/cocoapods-jxedt/command/binary/command/statistics.rb +104 -0
  23. data/lib/cocoapods-jxedt/command/jxedt.rb +2 -1
  24. data/lib/cocoapods-jxedt/command/options/options.rb +85 -2
  25. data/lib/cocoapods-jxedt/command/user/user.rb +57 -0
  26. data/lib/cocoapods-jxedt/gem_version.rb +1 -1
  27. data/lib/cocoapods-jxedt/git_helper/cache_fetcher.rb +34 -0
  28. data/lib/cocoapods-jxedt/git_helper/cache_pucher.rb +42 -0
  29. data/lib/cocoapods-jxedt/git_helper/git_command.rb +48 -0
  30. data/lib/cocoapods-jxedt/git_helper/zip.rb +22 -0
  31. metadata +18 -3
  32. data/lib/cocoapods-jxedt/command/statistics/statistics.rb +0 -98
@@ -0,0 +1,104 @@
1
+ module Pod
2
+ class Command
3
+ class JxedtCommand < Command
4
+ class Binary < JxedtCommand
5
+ class Statistics < Binary
6
+ self.summary = '统计二进制使用情况'
7
+ self.description = <<-DESC
8
+ 统计二进制使用详情
9
+ DESC
10
+ self.command = 'statistics'
11
+ self.arguments = [
12
+ ]
13
+ def self.options
14
+ [
15
+ ['--failed', '统计校验失败的二进制'],
16
+ ]
17
+ end
18
+ def initialize(argv)
19
+ @check_failed = argv.flag?('failed')
20
+ super
21
+ end
22
+
23
+ def validate!
24
+ super
25
+ end
26
+
27
+ def run
28
+ podfile = Pod::Config.instance.podfile
29
+ lockfile = Pod::Config.instance.lockfile
30
+ help! '请检查命令执行路径,需要在Podfile文件所在目录执行' if podfile.nil? || lockfile.nil?
31
+
32
+ require 'cocoapods-jxedt/binary/config'
33
+ require 'cocoapods-jxedt/binary/helper/podfile_options'
34
+
35
+ pods_root = Pathname.new(File.dirname(podfile.defined_in_file)) + "Pods"
36
+ binary_dir = pods_root + Jxedt.config.binary_dir
37
+
38
+ used_binary = []
39
+ Dir.glob("#{pods_root}/*/_Prebuild") do |file_path|
40
+ next unless File.directory?(file_path)
41
+ dir_name = File.dirname(file_path)
42
+ name = File.basename(dir_name).to_s
43
+ target_path = binary_dir + name
44
+ next unless target_path.exist? # 路径不存在,跳过
45
+
46
+ new_hash = {}
47
+ # name
48
+ new_hash[:name] = name
49
+
50
+ # multiple_configuration
51
+ configuration_enable = target_path.children().select { |path| "#{path.basename}" == 'Debug' || "#{path.basename}" == 'Release' }.count == 2
52
+ new_hash[:multiple_configuration] = configuration_enable
53
+
54
+ # checksum validation
55
+ checksum_files = target_path.children().select { |path| path.extname == '.checksum' }
56
+ checksum_file = checksum_files.first
57
+ new_hash[:checksum] = checksum_file.basename.to_s.gsub('.checksum', '') unless checksum_file.nil?
58
+ new_hash[:checksum_count] = checksum_files.count
59
+
60
+ used_binary << new_hash
61
+ end
62
+
63
+ # print
64
+ index, failed = 0, []
65
+ used_binary.sort_by {|hash| hash[:name].capitalize }.each do |hash|
66
+ name = hash[:name]
67
+
68
+ checksum = lockfile.spec_checksums_hash_key(name)
69
+ validation_passed = checksum && checksum == hash[:checksum] && hash[:checksum_count] == 1
70
+ failed << name unless validation_passed
71
+
72
+ # 校验和是否用的 git commitid
73
+ checkout_options = lockfile.internal_data["CHECKOUT OPTIONS"] || {}
74
+ is_git_commitid = checkout_options[name] && checkout_options[name][:commit]
75
+
76
+ if validation_passed
77
+ next if @check_failed
78
+ index += 1
79
+ log = <<~LOG
80
+ #{index}). #{name}:
81
+ multiple configuration: #{hash[:multiple_configuration]}
82
+ checksum#{"(git commitid)" if is_git_commitid}: #{hash[:checksum]}
83
+ LOG
84
+ Pod::UI.puts log
85
+ else
86
+ index += 1
87
+ log = <<~LOG
88
+ #{index}). #{name}:
89
+ multiple configuration: #{hash[:multiple_configuration]}
90
+ checksum: #{hash[:checksum]}
91
+ checksum in lockfile#{"(git commitid)" if is_git_commitid}: #{checksum}
92
+ checksum file count: #{hash[:checksum_count]}
93
+ LOG
94
+ Pod::UI.puts log.red
95
+ end
96
+ end
97
+ Pod::UI.puts "checksum校验失败的组件: #{failed}".red if failed.size > 0
98
+ Pod::UI.puts "建议使用命令清除prebuild缓存,再重新pod install或使用pod jxedt binary build。clean命令:`pod jxedt binary clean --name=#{failed.join(',')}`".red if failed.size > 0
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,6 +1,7 @@
1
1
  require_relative 'options/options'
2
2
  require_relative 'header/header'
3
- require_relative 'statistics/statistics'
3
+ require_relative 'binary/binary'
4
+ require_relative 'user/user'
4
5
 
5
6
  module Pod
6
7
  class Command
@@ -10,9 +10,14 @@ module Pod
10
10
  self.arguments = [
11
11
  ]
12
12
  def self.options
13
- []
13
+ [
14
+ ['--more-config', '获取cocoapods-jxedt插件的完整配置'],
15
+ ['--config', '获取cocoapods-jxedt插件的基础配置']
16
+ ]
14
17
  end
15
18
  def initialize(argv)
19
+ @config = argv.flag?('config', false)
20
+ @more_config = argv.flag?('more-config', false)
16
21
  super
17
22
  end
18
23
 
@@ -22,10 +27,88 @@ module Pod
22
27
 
23
28
  def run
24
29
  require 'cocoapods-jxedt/binary/config'
30
+
31
+ return print_options_config if @more_config
32
+ return print_base_options_config if @config
33
+
25
34
  require 'json'
26
35
 
36
+ log_section "🌹 APPLICABLE_DSL_CONFIG"
27
37
  dsl_config = Jxedt::Config::APPLICABLE_DSL_CONFIG
28
- puts JSON.pretty_generate(dsl_config)
38
+ Pod::UI.puts JSON.pretty_generate(dsl_config)
39
+
40
+ log_section "🌹 GIT_CACHE_CONFIG"
41
+ git_config = Jxedt::Config::GIT_CACHE_CONFIG
42
+ Pod::UI.puts JSON.pretty_generate(git_config)
43
+ end
44
+
45
+ def print_base_options_config
46
+ config = <<CONFIG
47
+ use_frameworks! :linkage => :static
48
+ # use_modular_headers!
49
+
50
+ plugin 'cocoapods-jxedt'
51
+ options = {
52
+ 'all_binary': true, # 所有组件开启binary
53
+ 'keep_source_project': true, # 保留源码pod工程,所在目录`Pods-Source`
54
+ 'excluded_pods': [], # 排除binary的组件名称
55
+ 'framework_header_search_enabled': true, # 兼容头文件引用`#import "xxx.h"`
56
+ 'configurations': ['Release'], # 支持的configurations ['Release', 'Debug']
57
+ 'device_build_enabled': true, # 真机
58
+ 'simulator_build_enabled': false # 模拟器
59
+ }
60
+ cocoapods_jxedt_config(options)
61
+ CONFIG
62
+ Pod::UI.puts config
63
+ end
64
+
65
+ def print_options_config
66
+ dsl_config = Jxedt::Config::APPLICABLE_DSL_CONFIG
67
+ git_config = Jxedt::Config::GIT_CACHE_CONFIG
68
+
69
+ config = <<CONFIG
70
+ use_frameworks! :linkage => :static # 插件是支持使用library的,插件会把编译后的.a生成framework。如果你的工程不支持module,可以删掉或者注释掉这一行。不影响使用
71
+ # use_modular_headers!
72
+
73
+ plugin 'cocoapods-jxedt'
74
+
75
+ # 这里默认配置了大部分常用的配置参数,只需要简单修改就可以使用了
76
+ options = {
77
+ 'all_binary': true, # #{dsl_config[:all_binary]}
78
+ 'binary_dir': '../_Prebuild', # #{dsl_config[:binary_dir]}
79
+ 'binary_switch': true, # #{dsl_config[:binary_switch]}
80
+ 'prebuild_job': true, # #{dsl_config[:prebuild_job]}
81
+ 'keep_source_project': false, # #{dsl_config[:keep_source_project]}
82
+ 'excluded_pods': [], # #{dsl_config[:excluded_pods]}
83
+ 'framework_header_search_enabled': false, # #{dsl_config[:framework_header_search_enabled]}
84
+ 'configurations': ['Release'], # #{dsl_config[:configurations]}
85
+ 'xcframework': false, # #{dsl_config[:xcframework]}
86
+ 'clean_build': true, # #{dsl_config[:clean_build]}
87
+ 'device_build_enabled': true, # #{dsl_config[:device_build_enabled]}
88
+ 'simulator_build_enabled': false, # #{dsl_config[:simulator_build_enabled]}
89
+ 'disable_resource_compilable_pods': false, # #{dsl_config[:disable_resource_compilable_pods]}
90
+ 'build_args': { # 下面是默认的配置,如果没有改动可删除节点
91
+ 'default': ["ONLY_ACTIVE_ARCH=NO", "BUILD_LIBRARY_FOR_DISTRIBUTION=YES"],
92
+ 'device': ["ARCHS='arm64'"],
93
+ 'simulator': ["ARCHS='x86_64'"]
94
+ },
95
+ 'git_cache': { # 如果不需要git缓存,直接删掉这个节点即可
96
+ 'repo': '', # #{git_config[:repo]}
97
+ 'branch': 'develop', # #{git_config[:branch]}
98
+ 'auto_fetch': true, # #{git_config[:auto_fetch]}
99
+ 'auto_push': false # #{git_config[:auto_push]}
100
+ }
101
+ }
102
+ cocoapods_jxedt_config(options)
103
+ CONFIG
104
+
105
+ Pod::UI.puts config
106
+ end
107
+
108
+ def log_section(message)
109
+ Pod::UI.puts "-----------------------------------------"
110
+ Pod::UI.puts message
111
+ Pod::UI.puts "-----------------------------------------"
29
112
  end
30
113
  end
31
114
  end
@@ -0,0 +1,57 @@
1
+ module Pod
2
+ class Command
3
+ class JxedtCommand < Command
4
+ class User < JxedtCommand
5
+ self.summary = '用户操作,添加和删除用户目录,用来统一路径,方便做源码和二进制的link.'
6
+ self.description = <<-DESC
7
+ 用户操作,添加和删除用户目录,用来统一路径,方便做源码和二进制的link.
8
+ DESC
9
+ self.command = 'user'
10
+ self.arguments = [
11
+ ]
12
+ def self.options
13
+ [
14
+ ['--add', '添加用户目录,/Users/cocoapods-jxedt'],
15
+ ['--delete', '删除用户目录,/Users/cocoapods-jxedt']
16
+ ]
17
+ end
18
+ def initialize(argv)
19
+ @add = argv.flag?('add', false)
20
+ @delete = argv.flag?('delete', false)
21
+ @name = 'cocoapods-jxedt'
22
+ super
23
+ end
24
+
25
+ def validate!
26
+ help! '请指定要操作的命令, add or delete' unless @add || @delete
27
+ help! '输入的目录不正确!' if @name.length == 0
28
+ super
29
+ end
30
+
31
+ def run
32
+ if @add
33
+ make_dir
34
+ else
35
+ delete_dir
36
+ end
37
+ end
38
+
39
+ def make_dir
40
+ dirname = "/Users/#{@name}"
41
+ help! "目录已存在!" if File.exist?(dirname)
42
+
43
+ `sudo mkdir #{dirname} && sudo chmod -R 777 #{dirname}`
44
+ end
45
+
46
+ def delete_dir
47
+ help! '因删除操作存在风险,暂不支持删除,请自行删除!' if @name != 'cocoapods-jxedt'
48
+
49
+ dirname = "/Users/#{@name}"
50
+ help! "目录不存在!" unless File.exist?(dirname)
51
+
52
+ `sudo rm -rf #{dirname}`
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,3 +1,3 @@
1
1
  module CocoapodsJxedt
2
- VERSION = "0.0.12"
2
+ VERSION = "0.0.14"
3
3
  end
@@ -0,0 +1,34 @@
1
+ module Jxedt
2
+ module CacheFetcher
3
+ def self.fetch
4
+ require_relative 'git_command'
5
+ repo = Jxedt.config.git_remote_repo
6
+ cache_path = Jxedt.config.git_cache_path
7
+ branch = Jxedt.config.cache_branch
8
+
9
+ commander = Jxedt::GitCommand.new(cache_path)
10
+ commander.git_fetch(repo, branch)
11
+ end
12
+
13
+ def self.sync(binary_hash, to_dir)
14
+ # fetch
15
+ fetch
16
+
17
+ require_relative 'zip'
18
+
19
+ cache_dir = Pathname.new(Jxedt.config.git_cache_path) + "GeneratedFrameworks"
20
+ to_dir = Pathname.new(to_dir)
21
+ binary_hash.each do |name, checksum|
22
+ zip_file = cache_dir + name + "#{checksum}.zip"
23
+ next unless zip_file.exist?
24
+
25
+ file_path = to_dir + name + "#{checksum}.checksum"
26
+ next if file_path.exist? # 存在同校验和的文件,跳过
27
+ file_path.parent.rmtree if file_path.parent.exist?
28
+
29
+ Jxedt::ZipUtils.unzip(zip_file, :to_dir => to_dir)
30
+ Pod::UI.puts "✅ 已从缓存下载组件#{name}, 校验和:#{checksum}".yellow
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,42 @@
1
+ module Jxedt
2
+ module CachePucher
3
+ def self.push(output_dir, targets=nil, force_push=false)
4
+ require_relative 'git_command'
5
+ require_relative 'zip'
6
+
7
+ repo = Jxedt.config.git_remote_repo
8
+ cache_path = Jxedt.config.git_cache_path
9
+ branch = Jxedt.config.cache_branch
10
+ commander = Jxedt::GitCommand.new(cache_path)
11
+ # fetch
12
+ commander.git_fetch(repo, branch)
13
+
14
+ output_dir = Pathname.new(output_dir)
15
+ approve, refuse = [], []
16
+ output_dir.children.each do |child|
17
+ next unless child.directory?
18
+ pod_name = child.basename.to_s
19
+ next if targets && targets.is_a?(Array) && !(targets.include?(pod_name))
20
+
21
+ pod_checksum = child.children.select { |ch| ch.extname == '.checksum' }.first
22
+ pod_checksum = pod_checksum.basename.sub_ext('').to_s unless pod_checksum.nil?
23
+ next if pod_checksum.nil?
24
+
25
+ to_dir = Pathname.new(cache_path) + "GeneratedFrameworks" + pod_name
26
+ to_dir.mkpath unless to_dir.exist?
27
+ zip_file = to_dir + "#{pod_checksum}.zip"
28
+ skip = zip_file.exist? && !force_push
29
+ next refuse << pod_name if skip
30
+
31
+ approve << pod_name
32
+ Jxedt::ZipUtils.zip(child.to_s, :zip_name => pod_checksum, :to_dir => to_dir)
33
+ end
34
+
35
+ # push
36
+ commander.git_commit_and_push(branch) if approve.size > 0
37
+
38
+ Pod::UI.puts "🎉 组件已缓存成功: #{approve}".yellow if approve.size > 0
39
+ Pod::UI.puts "👻 组件缓存失败,存在相同的校验和: #{refuse}".red if refuse.size > 0
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,48 @@
1
+ module Jxedt
2
+ class GitCommand
3
+ def initialize(cache_path)
4
+ @cache_path = File.expand_path(cache_path)
5
+ prepare_cache_dir
6
+ end
7
+
8
+ def prepare_cache_dir
9
+ FileUtils.mkdir_p(@cache_path) if @cache_path
10
+ end
11
+
12
+ def git(cmd, ignore_output: false, can_fail: false, git_dir: true)
13
+ comps = ["git"]
14
+ comps << "-C" << @cache_path if git_dir
15
+ comps << cmd
16
+ comps << "&> /dev/null" if ignore_output
17
+ comps << "|| true" if can_fail
18
+ cmd = comps.join(" ")
19
+ raise "Fail to run command '#{cmd}'" unless system(cmd)
20
+ end
21
+
22
+ def git_clone(cmd, options = {})
23
+ git("clone #{cmd}", :git_dir => false)
24
+ end
25
+
26
+ def git_fetch(repo, branch)
27
+ Pod::UI.puts "Fetching cache from #{repo} (branch: #{branch})".green
28
+ dest_dir = @cache_path
29
+ if Dir.exist?(dest_dir + "/.git")
30
+ git("fetch origin #{branch}")
31
+ git("checkout -f FETCH_HEAD", ignore_output: true)
32
+ git("branch -D #{branch}", ignore_output: true, can_fail: true)
33
+ git("checkout -b #{branch}")
34
+ else
35
+ FileUtils.rm_rf(dest_dir)
36
+ git_clone("--depth=1 --branch=#{branch} #{repo} #{dest_dir}")
37
+ end
38
+ end
39
+
40
+ def git_commit_and_push(branch)
41
+ commit_message = "Update prebuilt cache"
42
+ git("add .")
43
+ git("commit -m '#{commit_message}'")
44
+ git("push origin #{branch}")
45
+ end
46
+ end
47
+ end
48
+
@@ -0,0 +1,22 @@
1
+ module Jxedt
2
+ module ZipUtils
3
+ def self.zip(path, zip_name: nil, to_dir: nil)
4
+ basename = File.basename(path)
5
+ zip_name = basename if zip_name.nil?
6
+ out_path = to_dir.nil? ? "#{zip_name}.zip" : "#{to_dir}/#{zip_name}.zip"
7
+ cmd = []
8
+ cmd << "cd" << File.dirname(path)
9
+ cmd << "&& zip -r --symlinks" << out_path << basename
10
+ cmd << "&& cd -"
11
+ `#{cmd.join(" ")}`
12
+ end
13
+
14
+ def self.unzip(path, to_dir: nil)
15
+ cmd = []
16
+ cmd << "unzip -nq" << path
17
+ cmd << "-d" << to_dir unless to_dir.nil?
18
+ `#{cmd.join(" ")}`
19
+ end
20
+ end
21
+ end
22
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-jxedt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - guojiashuang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-23 00:00:00.000000000 Z
11
+ date: 2023-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods
@@ -75,23 +75,38 @@ files:
75
75
  - lib/cocoapods-jxedt/binary/config.rb
76
76
  - lib/cocoapods-jxedt/binary/helper/names.rb
77
77
  - lib/cocoapods-jxedt/binary/helper/podfile_options.rb
78
+ - lib/cocoapods-jxedt/binary/helper/podfile_post_install_hook.rb
79
+ - lib/cocoapods-jxedt/binary/helper/prebuild_installer.rb
78
80
  - lib/cocoapods-jxedt/binary/helper/prebuild_sandbox.rb
79
81
  - lib/cocoapods-jxedt/binary/helper/target_definition.rb
80
82
  - lib/cocoapods-jxedt/binary/hooks/CocoapodsJxedtHook.rb
81
83
  - lib/cocoapods-jxedt/binary/hooks/post_install.rb
82
84
  - lib/cocoapods-jxedt/binary/hooks/pre_install.rb
83
85
  - lib/cocoapods-jxedt/binary/main.rb
86
+ - lib/cocoapods-jxedt/binary/pod-room/framework.rb
84
87
  - lib/cocoapods-jxedt/binary/pod-room/xcodebuild_command.rb
85
88
  - lib/cocoapods-jxedt/binary/pod-room/xcodebuild_raw.rb
86
89
  - lib/cocoapods-jxedt/binary/podfile_dsl.rb
87
90
  - lib/cocoapods-jxedt/binary/prebuild.rb
88
91
  - lib/cocoapods-jxedt/binary/targets/pod_target.rb
89
92
  - lib/cocoapods-jxedt/command.rb
93
+ - lib/cocoapods-jxedt/command/binary/binary.rb
94
+ - lib/cocoapods-jxedt/command/binary/command/build.rb
95
+ - lib/cocoapods-jxedt/command/binary/command/clean.rb
96
+ - lib/cocoapods-jxedt/command/binary/command/code.rb
97
+ - lib/cocoapods-jxedt/command/binary/command/fetch.rb
98
+ - lib/cocoapods-jxedt/command/binary/command/push.rb
99
+ - lib/cocoapods-jxedt/command/binary/command/source_project.rb
100
+ - lib/cocoapods-jxedt/command/binary/command/statistics.rb
90
101
  - lib/cocoapods-jxedt/command/header/header.rb
91
102
  - lib/cocoapods-jxedt/command/jxedt.rb
92
103
  - lib/cocoapods-jxedt/command/options/options.rb
93
- - lib/cocoapods-jxedt/command/statistics/statistics.rb
104
+ - lib/cocoapods-jxedt/command/user/user.rb
94
105
  - lib/cocoapods-jxedt/gem_version.rb
106
+ - lib/cocoapods-jxedt/git_helper/cache_fetcher.rb
107
+ - lib/cocoapods-jxedt/git_helper/cache_pucher.rb
108
+ - lib/cocoapods-jxedt/git_helper/git_command.rb
109
+ - lib/cocoapods-jxedt/git_helper/zip.rb
95
110
  - lib/cocoapods-jxedt/tool.rb
96
111
  - lib/cocoapods_plugin.rb
97
112
  homepage: http://igit.58corp.com/com.wuba.jxedt.ios/cocoapods-jxedt
@@ -1,98 +0,0 @@
1
- module Pod
2
- class Command
3
- class JxedtCommand < Command
4
- class Statistics < JxedtCommand
5
- self.summary = '统计二进制使用情况'
6
- self.description = <<-DESC
7
- 统计二进制使用详情
8
- DESC
9
- self.command = 'statistics'
10
- self.arguments = [
11
- ]
12
- def self.options
13
- [
14
- ['--failed', '统计校验失败的二进制'],
15
- ]
16
- end
17
- def initialize(argv)
18
- @check_failed = argv.flag?('failed')
19
- super
20
- end
21
-
22
- def validate!
23
- super
24
- end
25
-
26
- def run
27
- podfile = Pod::Config.instance.podfile
28
- lockfile = Pod::Config.instance.lockfile
29
- help! '请检查命令执行路径,需要在Podfile文件所在目录执行' if podfile.nil? || lockfile.nil?
30
-
31
- require 'cocoapods-jxedt/binary/config'
32
- require 'cocoapods-jxedt/binary/helper/podfile_options'
33
-
34
- pods_root = Pathname.new(File.dirname(podfile.defined_in_file)) + "Pods"
35
- binary_dir = pods_root + Jxedt.config.binary_dir
36
-
37
- used_binary = []
38
- Dir.glob("#{pods_root}/*/_Prebuild") do |file_path|
39
- next unless File.directory?(file_path)
40
- dir_name = File.dirname(file_path)
41
- name = File.basename(dir_name).to_s
42
- target_path = binary_dir + name
43
- next unless target_path.exist? # 路径不存在,跳过
44
-
45
- new_hash = {}
46
- # name
47
- new_hash[:name] = name
48
-
49
- # multiple_configuration
50
- configuration_enable = target_path.children().select { |path| "#{path.basename}" == 'Debug' || "#{path.basename}" == 'Release' }.count == 2
51
- new_hash[:multiple_configuration] = configuration_enable
52
-
53
- # checksum validation
54
- checksum_file = target_path.children().select { |path| path.extname == '.checksum' }.first
55
- new_hash[:checksum] = checksum_file.basename.to_s.gsub('.checksum', '') unless checksum_file.nil?
56
-
57
- used_binary << new_hash
58
- end
59
-
60
- # print
61
- index, failed = 0, []
62
- used_binary.sort_by {|hash| hash[:name].capitalize }.each do |hash|
63
- name = hash[:name]
64
-
65
- checksum = lockfile.spec_checksums_hash_key(name)
66
- validation_passed = checksum && checksum == hash[:checksum]
67
- failed << name unless validation_passed
68
-
69
- # 校验和是否用的 git commitid
70
- checkout_options = lockfile.internal_data["CHECKOUT OPTIONS"] || {}
71
- is_git_commitid = checkout_options[name] && checkout_options[name][:commit]
72
-
73
- if validation_passed
74
- next if @check_failed
75
- index += 1
76
- log = <<~LOG
77
- #{index}). #{name}:
78
- multiple configuration: #{hash[:multiple_configuration]}
79
- checksum#{"(git commitid)" if is_git_commitid}: #{hash[:checksum]}
80
- LOG
81
- Pod::UI.puts log
82
- else
83
- index += 1
84
- log = <<~LOG
85
- #{index}). #{name}:
86
- multiple configuration: #{hash[:multiple_configuration]}
87
- checksum: #{hash[:checksum]}
88
- checksum in lockfile#{"(git commitid)" if is_git_commitid}: #{checksum}
89
- LOG
90
- Pod::UI.puts log.red
91
- end
92
- end
93
- Pod::UI.puts "checksum校验失败的组件: #{failed}".red if failed.size > 0
94
- end
95
- end
96
- end
97
- end
98
- end