podsorz 0.0.2 → 0.0.7

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 (31) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +16 -13
  3. data/lib/podsorz.rb +12 -2
  4. data/lib/podsorz/command/binary.rb +150 -0
  5. data/lib/podsorz/command/commit.rb +2 -2
  6. data/lib/podsorz/command/install.rb +9 -3
  7. data/lib/podsorz/command/publish.rb +7 -3
  8. data/lib/podsorz/command/setup.rb +1 -1
  9. data/lib/podsorz/command/switch.rb +2 -2
  10. data/lib/podsorz/command/sync.rb +2 -2
  11. data/lib/podsorz/core/Binary/binary_builder.rb +312 -0
  12. data/lib/podsorz/core/Binary/binary_manager.rb +173 -0
  13. data/lib/podsorz/core/Binary/binary_repo.rb +178 -0
  14. data/lib/podsorz/core/Binary/binary_server.rb +21 -0
  15. data/lib/podsorz/core/Config/orz_config_templet.rb +31 -0
  16. data/lib/podsorz/core/{orz_env_detector.rb → Config/orz_env_detector.rb} +1 -1
  17. data/lib/podsorz/core/{pod_orzconfig_parse.rb → Config/pod_orzconfig_parse.rb} +15 -1
  18. data/lib/podsorz/core/{podfile_io.rb → PodFile/podfile_io.rb} +143 -4
  19. data/lib/podsorz/core/{podfile_model.rb → PodFile/podfile_model.rb} +26 -1
  20. data/lib/podsorz/core/{pods_detector.rb → PodsOrz/pods_detector.rb} +1 -1
  21. data/lib/podsorz/core/{pods_git_manager.rb → PodsOrz/pods_git_manager.rb} +22 -12
  22. data/lib/podsorz/core/{pods_git_operator.rb → PodsOrz/pods_git_operator.rb} +134 -37
  23. data/lib/podsorz/core/{pods_repo.rb → PodsOrz/pods_repo.rb} +44 -11
  24. data/lib/podsorz/core/{pods_version.rb → PodsOrz/pods_version.rb} +4 -1
  25. data/lib/podsorz/core/Specs/podspec_model.rb +45 -0
  26. data/lib/podsorz/util/git_operator.rb +47 -0
  27. data/lib/podsorz/version.rb +1 -1
  28. data/podsorz.gemspec +11 -1
  29. metadata +35 -15
  30. data/Note +0 -3
  31. data/lib/podsorz/core/orz_config_templet.rb +0 -13
@@ -0,0 +1,173 @@
1
+ require "podsorz/core/Config/pod_orzconfig_parse"
2
+ require "podsorz/core/Binary/binary_repo"
3
+ require "podsorz/core/Binary/binary_builder"
4
+
5
+ module PodsOrz
6
+ class BinaryManager
7
+ attr_accessor :main_path, :orzconfig_parse, :podfile_io, :binary_repo, :binary_builder
8
+
9
+ def initialize(main_path)
10
+ @main_path = main_path
11
+ @orzconfig_parse = PodsOrz::PodOrzconfigParse.new(main_path)
12
+ @podfile_io = PodsOrz::PodfileIO.new(main_path)
13
+
14
+ @binary_repo = PodsOrz::BinaryRepo.new()
15
+ @binary_repo.check_binary_repo_exist()
16
+
17
+ @binary_builder = PodsOrz::BinaryBuilder.new(main_path, @podfile_io)
18
+ end
19
+
20
+ #Package Command
21
+ def package(package_list)
22
+
23
+ #1.检测打包Pod是否项目中正在使用
24
+ has_fault = check_podfile_exist_pods_list(package_list)
25
+ exit() if has_fault
26
+
27
+ #2 若源码Repo 未发布,则不进行二进制制作
28
+ has_pod_repo = package_check_remote_exist_pod_repo(package_list)
29
+ exit() unless has_pod_repo
30
+
31
+ #3.检测打包Pod是否已经存在当前版本version的二进制静态库
32
+ has_remote_binary = package_check_remote_exist_binary(package_list)
33
+ exit() if has_remote_binary
34
+
35
+ #4.开始进行源码打包工作
36
+ start_build(package_list)
37
+ end
38
+
39
+ def check_podfile_exist_pods_list(pods_list)
40
+ has_fault = false
41
+
42
+ if pods_list.empty?
43
+ Logger.error("check pods_list is empty")
44
+ has_fault = true
45
+ return has_fault
46
+ end
47
+
48
+ fault_pods_list = []
49
+
50
+ pods_list.each do |pod|
51
+ total_pod_models = @podfile_io.total_pod_models
52
+
53
+ find_result = false
54
+ total_pod_models.each do |model|
55
+ if model.name.include? pod
56
+ find_result = true
57
+ break
58
+ end
59
+ end
60
+
61
+ fault_pods_list << pod unless find_result
62
+ end
63
+
64
+ unless fault_pods_list.empty?
65
+ Logger.error("project do not exist pod: \n")
66
+ fault_pods_list.each do |pod|
67
+ puts("#{pod} \n")
68
+ end
69
+ end
70
+
71
+ has_fault
72
+ end
73
+
74
+ def package_check_remote_exist_pod_repo(pods_list)
75
+ result = true
76
+
77
+ pods_list.each do |pod|
78
+ pod_version = @podfile_io.get_podfile_pod_version(pod)
79
+
80
+ if pod_version.empty?
81
+ Logger.error("#{pod} donot have 'source code' publish version, package action has been stop")
82
+ result = false
83
+ break
84
+ end
85
+ end
86
+
87
+ result
88
+ end
89
+
90
+ def package_check_remote_exist_binary(pods_list)
91
+ result = false
92
+
93
+ pods_list.each do |pod|
94
+ pod_version = @podfile_io.get_podfile_pod_version(pod)
95
+
96
+ unless pod_version.nil?
97
+ has_remote = @binary_repo.check_binary_pod_exist(pod, pod_version)
98
+
99
+ if has_remote
100
+ Logger.error("#{pod}:#{pod_version} exist remote binary static library, package action has been stop")
101
+ result = true
102
+ break
103
+ end
104
+ end
105
+ end
106
+
107
+ result
108
+ end
109
+
110
+ def start_build(pods_list)
111
+ is_build_success = true
112
+
113
+ pods_list.each {|pod|
114
+ Logger.separator
115
+ Logger.default("【#{pod}】 start build binary...")
116
+ Logger.separator
117
+
118
+ command = Thread.new do
119
+ each_result = @binary_builder.start_package_pod(pod)
120
+ unless each_result
121
+ is_build_success = false
122
+ Logger.error("【#{pod}】package failure!")
123
+ else
124
+ Logger.highlight("【#{pod}】package success")
125
+ end
126
+ end
127
+
128
+ command.join
129
+ }
130
+
131
+ exit() unless is_build_success
132
+
133
+ is_build_success
134
+ end
135
+
136
+ #Publish Command
137
+ def publish(pods_list)
138
+ is_publish_success = true
139
+
140
+ if pods_list.empty?
141
+ Logger.error("publish pods_list is empty")
142
+ is_publish_success = false
143
+ exit() unless is_publish_success
144
+ end
145
+
146
+ pods_list.each {|pod|
147
+ command = Thread.new do
148
+ pod_version = @podfile_io.get_podfile_pod_version(pod)
149
+
150
+ dest_dir = @binary_builder.detect_version_directory(pod, pod_version)
151
+
152
+ each_result = @binary_repo.push_binary_remote(pod, dest_dir, pod_version, false)
153
+ is_publish_success = false unless each_result
154
+ end
155
+
156
+ command.join
157
+ }
158
+
159
+ exit() unless is_publish_success
160
+
161
+ is_publish_success
162
+ end
163
+
164
+
165
+
166
+ #Show Command
167
+ def show()
168
+
169
+ end
170
+
171
+ end
172
+
173
+ end
@@ -0,0 +1,178 @@
1
+ require "podsorz/util/logger"
2
+ require 'open3'
3
+
4
+ module PodsOrz
5
+ class BinaryRepo
6
+ attr_accessor :repo_name, :repo_url
7
+
8
+ def initialize()
9
+ @repo_name = "kuxiu_binary_specs"
10
+ @repo_url = "git@gitlab.91banban.com:ios_pods/binary-specs.git"
11
+ @source_code_repo_url = "git@gitlab.91banban.com:ios_pods/Specs.git"
12
+ end
13
+
14
+ def check_binary_repo_exist()
15
+ command = Thread.new do
16
+ has_repo = false
17
+ Open3.popen3("pod repo list") do |stdin , stdout , stderr, wait_thr|
18
+ while line = stdout.gets
19
+ has_repo = true if line.include? @repo_name
20
+ end
21
+ end
22
+
23
+ unless has_repo
24
+ Open3.popen3("pod repo add #{@repo_name} #{@repo_url}") do |stdin , stdout , stderr, wait_thr|
25
+ while line = stdout.gets
26
+ puts line
27
+ end
28
+ end
29
+ end
30
+
31
+ Open3.popen3("pod repo update #{@repo_name}") do |stdin , stdout , stderr, wait_thr|
32
+ while line = stdout.gets
33
+ puts line
34
+ end
35
+ end
36
+
37
+ Logger.default("#{@repo_name} is update to latest.")
38
+ end
39
+
40
+ command.join
41
+ end
42
+
43
+ def check_binary_pod_exist(pod, pod_version)
44
+ result = false
45
+
46
+ remote_version_list = fetch_remote_binary_pod_version(pod)
47
+
48
+ remote_version_list.each do |version|
49
+ if version.include? pod_version
50
+ result = true
51
+ end
52
+
53
+ end
54
+
55
+ result
56
+ end
57
+
58
+ def fetch_remote_binary_pod_version(pod)
59
+ version_list = []
60
+
61
+ dir_kuxiu_specs = "#{Dir.home}/.cocoapods/repos/#{@repo_name}"
62
+ dir_pod_path = File.expand_path("#{pod}", dir_kuxiu_specs)
63
+ is_dir_exit = File.directory?(dir_pod_path)
64
+
65
+ unless is_dir_exit
66
+ version_list << "0.0.0"
67
+ return version_list
68
+ end
69
+
70
+ filter_list = []
71
+ files_list = Dir.entries(dir_pod_path)
72
+ files_list.each { |e|
73
+ if /^\d{1,3}\.\d{1,3}/ =~ e.to_s
74
+ filter_list << e
75
+ end
76
+ }
77
+
78
+ if filter_list.empty?
79
+ version_list << "0.0.0"
80
+ return version_list
81
+ end
82
+
83
+ return filter_list
84
+ end
85
+
86
+ def compare_version(pod_version, git_tag)
87
+ #0 => same , -1 => less , 1 => more
88
+ result = 0
89
+
90
+ pod_version = pod_version.strip.chomp
91
+ git_tag = git_tag.strip.chomp
92
+
93
+ version_parts = pod_version.split('.')
94
+ tag_parts = git_tag.split('.')
95
+
96
+ loop_count = 0
97
+ if version_parts.size >= tag_parts.size
98
+ loop_count = version_parts.size - tag_parts.size
99
+ while loop_count > 0 do
100
+ tag_parts << "0"
101
+ loop_count = loop_count - 1
102
+ end
103
+ else
104
+ loop_count = tag_parts.size - version_parts.size
105
+ while loop_count > 0 do
106
+ version_parts << "0"
107
+ loop_count = loop_count - 1
108
+ end
109
+ end
110
+
111
+ loop_count = tag_parts.size
112
+ while loop_count > 0 do
113
+ v = version_parts.shift
114
+ t = tag_parts.shift
115
+
116
+ if v.to_i > t.to_i
117
+ result = 1
118
+ return result
119
+ elsif v.to_i < t.to_i
120
+ result = -1
121
+ return result
122
+ else
123
+ loop_count = loop_count -1
124
+ end
125
+ end
126
+
127
+ return result
128
+
129
+ end
130
+
131
+
132
+ def push_binary_remote(pod, file_path, pod_version, is_swift)
133
+ is_push_success = false
134
+
135
+ command = Thread.new do
136
+ repo_push_cmd = []
137
+ repo_push_cmd << "cd #{file_path}"
138
+ if is_swift
139
+ repo_push_cmd << "pod repo push #{@repo_name} #{pod}.podspec --sources=#{@source_code_repo_url} --allow-warnings --use-libraries --skip-import-validation --use-modular-headers --swift-version=5.0 --skip-tests"
140
+ else
141
+ repo_push_cmd << "pod repo push #{@repo_name} #{pod}.podspec --sources=#{@source_code_repo_url} --allow-warnings --use-libraries --skip-import-validation --skip-tests"
142
+ end
143
+
144
+
145
+ error_info = []
146
+
147
+ Logger.separator()
148
+ Logger.default("【#{pod}】:#{pod_version} start push binary repo remote...")
149
+ Logger.separator()
150
+
151
+ IO.popen(repo_push_cmd.join(";")) do |io|
152
+ io.each do |line|
153
+ error_info.push(line)
154
+ is_push_success = true if line.include? "Pushing the `#{@repo_name}' repo"
155
+ end
156
+ end
157
+
158
+ unless is_push_success
159
+ puts error_info
160
+ Logger.error("Fail: \'#{pod}\':#{pod_version} push binary repo remote fail")
161
+ else
162
+ Logger.highlight(%Q(#{pod}:#{pod_version} push repo success))
163
+ end
164
+ end
165
+
166
+ command.join
167
+
168
+ is_push_success
169
+ end
170
+
171
+
172
+
173
+
174
+ #Class End
175
+
176
+ end
177
+
178
+ end
@@ -0,0 +1,21 @@
1
+ require "podsorz/util/logger"
2
+
3
+
4
+ module PodsOrz
5
+ class BinaryServer
6
+ attr_accessor :remote_host
7
+
8
+ def initialize()
9
+ @remote_host = "http://192.168.6.23:8080"
10
+ end
11
+
12
+
13
+ def has_remote_source(pod, version)
14
+
15
+
16
+ end
17
+
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,31 @@
1
+ module GitConfig
2
+ #App 当前版本
3
+ APP_RELEASE_VERSION = "2.0.12"
4
+
5
+ #作者姓名xiangqi简写
6
+ BRANCH_AUTHOR_SUFFIX = "xq"
7
+ end
8
+
9
+ #想要开发修改的的Pod
10
+ $FIX_POD_LIST = [
11
+ # "KXModuleOrz",
12
+ # "KXModuleQuestionRepo",
13
+ ]
14
+
15
+
16
+
17
+ #------Binary Static library------#
18
+ #是否全部Pod以二进制静态库加载,false代表以源码显示【打包机】请用源码
19
+ $is_all_binary = false
20
+ #当is_all_binary = false 所有pod即将显示源码时,仍然希望部分Pod二进制静态库加载
21
+ $static_lib_list = [
22
+ # "AFNetworking",
23
+ ]
24
+
25
+ #------Package Action------#
26
+ #当is_all_binary = false 并不是针对所有pod 打binary包,仍然希望部分pod打包成二进制静态库的Pod
27
+ $will_package_list = [
28
+ # "AFNetworking",
29
+ ]
30
+
31
+ #
@@ -41,7 +41,7 @@ module PodsOrz
41
41
  file_name = File.basename(file_path)
42
42
  directory = File.dirname(file_path)
43
43
  IO.popen("cd #{directory};touch #{file_name}") { |io|
44
- templet_config_path = File.expand_path("../core/orz_config_templet.rb", File.dirname(__FILE__))
44
+ templet_config_path = File.expand_path("./orz_config_templet.rb", File.dirname(__FILE__))
45
45
  File.open(templet_config_path, "r") { |templet_file|
46
46
  File.open(file_path, "w+") { |file|
47
47
  templet_file.readlines.each {|line|
@@ -3,7 +3,7 @@ require "podsorz/util/logger"
3
3
 
4
4
  module PodsOrz
5
5
  class PodOrzconfigParse
6
- attr_accessor :app_release_version, :branch_author_suffix, :fix_pod_list
6
+ attr_accessor :app_release_version, :branch_author_suffix, :fix_pod_list, :is_all_binary, :static_lib_list, :will_package_list
7
7
 
8
8
  def initialize(main_path)
9
9
  orzconfig_path = File.expand_path("PodsOrzConfig.rb", main_path)
@@ -17,8 +17,22 @@ module PodsOrz
17
17
  require orzconfig_path
18
18
 
19
19
  @app_release_version = GitConfig::APP_RELEASE_VERSION
20
+ @app_release_version = "" if @app_release_version.nil?
21
+
20
22
  @branch_author_suffix = GitConfig::BRANCH_AUTHOR_SUFFIX
23
+ @branch_author_suffix = "" if @branch_author_suffix.nil?
24
+
21
25
  @fix_pod_list = $FIX_POD_LIST
26
+ @fix_pod_list = [] if @fix_pod_list.nil?
27
+
28
+ @is_all_binary = $is_all_binary
29
+ @is_all_binary = false if @is_all_binary.nil?
30
+
31
+ @static_lib_list = $static_lib_list
32
+ @static_lib_list = [] if @static_lib_list.nil?
33
+
34
+ @will_package_list = $will_package_list
35
+ @will_package_list = [] if @will_package_list.nil?
22
36
  end
23
37
  end
24
38
  end