cocoapods-bb-PodAssistant 0.1.5.1 → 0.1.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 (22) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cocoapods-bb-PodAssistant/command/stable/init.rb +37 -0
  3. data/lib/cocoapods-bb-PodAssistant/command/stable/install.rb +38 -0
  4. data/lib/cocoapods-bb-PodAssistant/command/stable/sync.rb +57 -0
  5. data/lib/cocoapods-bb-PodAssistant/command/stable/update.rb +50 -0
  6. data/lib/cocoapods-bb-PodAssistant/command/stable.rb +51 -0
  7. data/lib/cocoapods-bb-PodAssistant/command.rb +6 -7
  8. data/lib/cocoapods-bb-PodAssistant/config/source_manager.rb +26 -32
  9. data/lib/cocoapods-bb-PodAssistant/gem_version.rb +1 -1
  10. data/lib/cocoapods-bb-PodAssistant/helpers/git_cmd_helper.rb +5 -1
  11. data/lib/cocoapods-bb-PodAssistant/helpers/pod_module_helper.rb +103 -41
  12. data/lib/cocoapods-bb-PodAssistant/helpers/stable_env_helper.rb +59 -16
  13. data/lib/cocoapods-bb-PodAssistant/podfile.rb +16 -4
  14. data/lib/cocoapods-bb-PodAssistant/source_provider_hook.rb +5 -1
  15. metadata +12 -9
  16. data/lib/cocoapods-bb-PodAssistant/command/PodAssistant.rb +0 -44
  17. data/lib/cocoapods-bb-PodAssistant/command/stable/stable.rb +0 -168
  18. /data/lib/cocoapods-bb-PodAssistant/{command → babybus}/linkline/target-linkline.rb +0 -0
  19. /data/lib/cocoapods-bb-PodAssistant/{command → babybus}/linkline/targetValidator-linkline.rb +0 -0
  20. /data/lib/cocoapods-bb-PodAssistant/{command → babybus}/linkline/targetdefinition-linkline.rb +0 -0
  21. /data/lib/cocoapods-bb-PodAssistant/{command → babybus}/stable/podfile-linkline.rb +0 -0
  22. /data/lib/cocoapods-bb-PodAssistant/command/{linkline/linkline.rb → linkline.rb} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f28225f78453b91584c65af22176c0a36c55679bc6aa8ce273a6248c18a5602
4
- data.tar.gz: 3e8130c32e18020f89f660a581e50d1d152fd73c41dfa1c37d5cc95d3ffdfa28
3
+ metadata.gz: 7a9981c561f8eb760349f20d77d0afd544602a810472cb9f8ecd02d6e2779664
4
+ data.tar.gz: da2528d18dfe9a93eafd8c18de120ba5212663c845bce0473f3c5fbbb056a8ba
5
5
  SHA512:
6
- metadata.gz: dd13a647bdd0906b30f4d4640614ba33cf8ac014b378bac59a1ba562feb1af73d9ee85c9596c165eee906f010de5b599c41b3fadb5ddf6acfa6a5a5032f8fbf0
7
- data.tar.gz: 5d277674798ae013dec5330a42a282dbcfd2a705238774fb288c54fd75bed95876b7ea2d1d42db1f652522f0765f5fd7c32936f97a69fc56bcdee4a762833175
6
+ metadata.gz: 8adc406969d02c2cb60393ff1afbba8a3e909acee63b85643183e72e58e3f087b156022037059a90a2ebe348c1ec832720ff7d5b66a637c42cc64ab0ff9925e8
7
+ data.tar.gz: a02261b3e1006d4d8164646843bc02414442ede74086dc763b66a41fe560610730797fc167f1662e4229f96d84cb867ab664c6f209fe5160108b06b63d56eea8
@@ -0,0 +1,37 @@
1
+ require 'cocoapods-bb-PodAssistant/config/source_manager'
2
+ require 'cocoapods-bb-PodAssistant/helpers/stable_env_helper'
3
+
4
+ module Pod
5
+ class Command
6
+ class Stable < Command
7
+ class Init < Stable
8
+
9
+ self.summary = '[初始化项目yml配置] Generate a Stable yml config file from a Podfile.lock'
10
+
11
+ self.description = <<-DESC
12
+ 通过项目`Podfile.lock`文件,生成`stable_specs_lock.yml`配置文件
13
+ DESC
14
+
15
+ def initialize(argv)
16
+ super
17
+ end
18
+
19
+ def run
20
+ # verify_podfile_exists!
21
+ env = BB::StableEnv.new()
22
+ if env.verify_stable_env_exists == true
23
+ env.system_clone_stable_git # 自动拉取远端git仓库数据
24
+ source_manager = BB::SourceManager.new()
25
+ puts "[PodAssistant] 开始配置生成当前项目yml文件".yellow
26
+ # 生成本地yml配置
27
+ source_manager.generate_localStable
28
+ puts "[PodAssistant] `pod stable init` complete!".green
29
+ else
30
+ puts "[PodAssistant] ❌工程没有配置stable环境".red
31
+ end
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,38 @@
1
+ require 'cocoapods-bb-PodAssistant/config/source_manager'
2
+
3
+ module Pod
4
+ class Command
5
+ class Stable < Command
6
+ class Install < Stable
7
+ self.summary = '[命令同执行`pod install操作`] Install project dependencies according to versions from a Podfile.lock'
8
+
9
+ self.description = <<-DESC
10
+ Downloads all dependencies defined in `Podfile` and creates an Xcode
11
+ Pods library project in `./Pods`.
12
+
13
+ The Xcode project file should be specified in your `Podfile` like this:
14
+
15
+ project 'path/to/XcodeProject.xcodeproj'
16
+
17
+ If no project is specified, then a search for an Xcode project will
18
+ be made. If more than one Xcode project is found, the command will
19
+ raise an error.
20
+
21
+ This will configure the project to reference the Pods static library,
22
+ add a build configuration file, and add a post build script to copy
23
+ Pod resources.
24
+
25
+ This may return one of several error codes if it encounters problems.
26
+ * `1` Generic error code
27
+ * `31` Spec not found (i.e out-of-date source repos, mistyped Pod name etc...)
28
+ DESC
29
+
30
+ def run
31
+ puts "[PodAssistant] 开始执行 $ pod stable install".yellow
32
+ system "pod install"
33
+ puts "[PodAssistant] `pod stable install` complete!".green
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,57 @@
1
+ require 'cocoapods-bb-PodAssistant/config/source_manager'
2
+ require 'cocoapods-bb-PodAssistant/helpers/git_cmd_helper'
3
+ require 'cocoapods-bb-PodAssistant/helpers/stable_env_helper'
4
+ require 'cocoapods'
5
+
6
+ module Pod
7
+ class Command
8
+ class Stable < Command
9
+ class Sync < Stable
10
+ require 'fileutils'
11
+ require 'cocoapods/executable.rb'
12
+ extend Executable
13
+ executable :git
14
+
15
+ self.summary = '[同步远端yml配置] sync a Stable yml config file'
16
+
17
+ self.description = <<-DESC
18
+ 同步远端stable yml配置文件,并对本地文件进行合并操作
19
+ DESC
20
+
21
+ def initialize(argv)
22
+ super
23
+ end
24
+
25
+ def run
26
+ puts "开始合并远端stable yml数据".yellow
27
+ # 数据合并
28
+ source_manager = BB::SourceManager.new()
29
+ fetch_stale_git
30
+ source_manager.merge_stable_data
31
+ puts "[PodAssistant] `pod stable sync` complete! Please execute the [pod install/ pod update] command".green
32
+ end
33
+
34
+ # 拉取stable仓库代码 ruby脚本内部调用
35
+ def clone_stable_git
36
+ cache = BB::Cache.new()
37
+ cachePath = cache.cachePath
38
+ configGitPath(cachePath)
39
+ unless Dir.exist?(File.join(cachePath))
40
+ clonePath = File.dirname(cachePath)
41
+ FileUtils.mkdir_p clonePath
42
+ git_clone(@stable_source,clonePath)
43
+ end
44
+ end
45
+
46
+ def fetch_stale_git
47
+ clone_stable_git
48
+ # git操作
49
+ git_reset
50
+ git_fetch
51
+ git_checkout_and_pull(@stable_source, @stable_branch, @stable_tag)
52
+ end
53
+
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,50 @@
1
+ require 'cocoapods-bb-PodAssistant/config/source_manager'
2
+
3
+ module Pod
4
+ class Command
5
+ class Stable < Command
6
+ class Update < Stable
7
+ self.summary = '[命令同执行`pod update操作`] Update outdated project dependencies and create new ' \
8
+ 'Podfile.lock'
9
+
10
+ self.description = <<-DESC
11
+ Updates the Pods identified by the specified `POD_NAMES`, which is a
12
+ space-delimited list of pod names. If no `POD_NAMES` are specified, it
13
+ updates all the Pods, ignoring the contents of the Podfile.lock. This
14
+ command is reserved for the update of dependencies; pod install should
15
+ be used to install changes to the Podfile.
16
+ DESC
17
+
18
+ self.arguments = [
19
+ CLAide::Argument.new('POD_NAMES', false, true),
20
+ ]
21
+
22
+ def self.options
23
+ [
24
+ # ['--business-spec=specName', '业务线公共stable spec名称'],
25
+ ].concat(super)
26
+ end
27
+
28
+ def initialize(argv)
29
+ @pods = argv.arguments!
30
+ super
31
+
32
+ end
33
+
34
+ def run
35
+ puts "[PodAssistant] 开始执行 $ pod stable update".yellow
36
+ # verify_podfile_exists! # 系统提供api验证podfile是否ok
37
+ if @pods.any?
38
+ pods_str = @pods.join(" ")
39
+ system "pod update #{pods_str}"
40
+ else
41
+ system "pod update"
42
+ end
43
+ source_manager = BB::SourceManager.new()
44
+ source_manager.update_local_stable_from_podmodules(@pods)
45
+ puts "[PodAssistant] `pod stable update` complete!".green
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,51 @@
1
+ require 'cocoapods-bb-PodAssistant/config/source_manager'
2
+ require 'cocoapods-bb-PodAssistant/config/cache_path'
3
+ require 'cocoapods-bb-PodAssistant/helpers'
4
+
5
+ require 'cocoapods-bb-PodAssistant/command/stable/init'
6
+ require 'cocoapods-bb-PodAssistant/command/stable/install'
7
+ require 'cocoapods-bb-PodAssistant/command/stable/update'
8
+ require 'cocoapods-bb-PodAssistant/command/stable/sync'
9
+
10
+ module Pod
11
+
12
+ # class StableOptions
13
+ # # define business specs,defalut is stable_specs
14
+ # option :business_specs, "stable_specs"
15
+
16
+ # # define custom lockSpecs tag
17
+ # option :tag, ""
18
+
19
+ # # define custom lockSpecs branch
20
+ # option :branch, ""
21
+ # end
22
+
23
+ class Command
24
+ class Stable < Command
25
+ self.abstract_command = true
26
+
27
+ self.summary = '拉取稳定Podfile.lock配置'
28
+ self.description = <<-DESC
29
+ 拉取稳定lock配置插件。利用版本比对进行更新配置实现对组件版本控制管理。
30
+ DESC
31
+
32
+ self.default_subcommand = 'init'
33
+
34
+ #-----------------------------------------------------------------------#
35
+
36
+ extend Executable
37
+ executable :git
38
+
39
+ def validate!
40
+ super
41
+ banner! if @help
42
+ end
43
+
44
+ def run
45
+ puts "[PodAssistant] `pod stable` 帮助文档请查看�".yellow
46
+ # banner!
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -1,9 +1,8 @@
1
- require 'cocoapods-bb-PodAssistant/command/PodAssistant'
2
1
  #stable
3
- require 'cocoapods-bb-PodAssistant/command/stable/stable'
4
- require 'cocoapods-bb-PodAssistant/command/stable/podfile-linkline'
2
+ require 'cocoapods-bb-PodAssistant/command/stable'
3
+ require 'cocoapods-bb-PodAssistant/babybus/stable/podfile-linkline'
5
4
  #linkline
6
- require 'cocoapods-bb-PodAssistant/command/linkline/linkline'
7
- require 'cocoapods-bb-PodAssistant/command/linkline/target-linkline'
8
- require 'cocoapods-bb-PodAssistant/command/linkline/targetdefinition-linkline'
9
- require 'cocoapods-bb-PodAssistant/command/linkline/targetValidator-linkline'
5
+ require 'cocoapods-bb-PodAssistant/command/linkline'
6
+ require 'cocoapods-bb-PodAssistant/babybus/linkline/target-linkline'
7
+ require 'cocoapods-bb-PodAssistant/babybus/linkline/targetdefinition-linkline'
8
+ require 'cocoapods-bb-PodAssistant/babybus/linkline/targetValidator-linkline'
@@ -2,12 +2,14 @@ require 'cocoapods-bb-PodAssistant/helpers'
2
2
  require 'cocoapods-bb-PodAssistant/config/stable_specs'
3
3
  require 'cocoapods-bb-PodAssistant/helpers/stable_manager_helper'
4
4
  require 'cocoapods-core'
5
+ require 'cocoapods-bb-PodAssistant/helpers/stable_env_helper'
5
6
 
6
7
  # 数据源管理
7
8
  module BB
8
9
  class SourceManager
9
- def initialize(businessSpecName = nil)
10
- @businessSpecName = businessSpecName
10
+ def initialize()
11
+ env = BB::StableEnv.new()
12
+ @businessSpecName = env.business_stable
11
13
  @stableMgr = BB::StableManager.new()
12
14
  end
13
15
 
@@ -29,7 +31,12 @@ module BB
29
31
  # 产品线本地lock数据
30
32
  def fetch_local_stable_datas
31
33
  localSpec = BB::StableSpecs.new()
32
- return localSpec.readData(local_stable_yaml)
34
+ yml = local_stable_yaml
35
+ if !File.file?(yml)
36
+ puts "yml配置文件不存在,执行自动初始化项目yml配置文件".green
37
+ generate_localStable
38
+ end
39
+ return localSpec.readData(yml)
33
40
  end
34
41
 
35
42
  # 远端公共lock数据
@@ -231,51 +238,38 @@ module BB
231
238
  return lockfile
232
239
  end
233
240
 
241
+ # 生成项目stable配置文件
242
+ # 策略:根据podfile.lock dependencies依赖记录pod core标签/分支数据,不存储subspec数据
234
243
  def generate_localStable
235
244
  lockfile = podfile_lock
236
245
  local_specs = {}
237
- # step.1 获取分支指向信息
238
246
  dependencies = lockfile.dependencies
239
247
  dependencies.each do | dependency |
248
+ pod_name = dependency.name
249
+ if has_include_subspec(pod_name)
250
+ podCoreName = subspec_podname(pod_name)
251
+ else
252
+ podCoreName = pod_name
253
+ end
240
254
  if dependency.external_source.is_a? Hash
241
- name = dependency.name
255
+ # 指向分支
242
256
  external_source = dependency.external_source
243
- podCoreName = subspec_podname(name)
244
257
  # checkout_options = lockfile.checkout_options_for_pod_named(podCoreName)
245
258
  # if checkout_options.is_a? Hash
246
259
  # commit = checkout_options[:commit]
247
260
  # external_source[:commit] = commit
248
261
  # puts "name:#{podCoreName} checkout_options:#{checkout_options} commit:#{commit}"
249
262
  # end
250
- if podCoreName != name
251
- # local_specs.delete(podCoreName)
263
+ if !local_specs.has_key?(podCoreName)
252
264
  local_specs[podCoreName] = external_source
253
- if (!has_include_core_subspec(name)) # 过滤core数据
254
- local_specs[name] = external_source
255
- Pod::UI.puts "[分支] #{name} => (#{external_source})"
256
- end
257
- else
258
- local_specs[name] = external_source
259
- Pod::UI.puts "[分支] #{name} => (#{external_source})"
260
- end
261
- end
262
- end
263
- # step.2 获取pods标签信息,如果存在分支优先使用分支信息
264
- lockfile.pod_names.each do |pod_name|
265
- version = lockfile.version(pod_name)
266
- podCoreName = subspec_podname(pod_name)
267
- if local_specs.has_key?(podCoreName)
268
- if podCoreName != pod_name
269
- if (!has_include_core_subspec(pod_name)) # 过滤core数据
270
- # Pod::UI.puts "step.2 #{pod_name} => (#{local_specs[podCoreName]})"
271
- local_specs[pod_name] = local_specs[podCoreName]
272
- end
265
+ # puts "[分支] #{podCoreName} => (#{external_source})".yellow
273
266
  end
274
267
  else
275
- if (!has_include_core_subspec(pod_name)) # 过滤core数据
276
- ver = version.to_s
277
- local_specs[pod_name] = ver
278
- Pod::UI.puts "[标签] #{pod_name} => (#{ver})"
268
+ # 指向标签版本
269
+ version = lockfile.version(pod_name).to_s
270
+ if !version.empty? && !local_specs.has_key?(podCoreName)
271
+ local_specs[podCoreName] = version
272
+ # puts "[标签] #{podCoreName} => (#{version})".yellow
279
273
  end
280
274
  end
281
275
  end
@@ -1,3 +1,3 @@
1
1
  module CocoapodsBbPodassistant
2
- VERSION = "0.1.5.1"
2
+ VERSION = "0.1.7"
3
3
  end
@@ -1,4 +1,5 @@
1
1
  # cache stable
2
+ require 'cocoapods'
2
3
 
3
4
  ######################################## Git Command ########################################
4
5
  def configGitPath(gitPath)
@@ -66,7 +67,10 @@ def git_branch_exists?(branch)
66
67
  end
67
68
 
68
69
  def git_clone(source, path)
69
- puts "git clone source:#{source} path:#{path}"
70
+ puts "git clone source:#{source} path:#{path}".yellow
71
+ if !File.directory?(path)
72
+ Dir.mkdir(path)
73
+ end
70
74
  UI.section("Cloning `#{source}` into `#{path}`.") do
71
75
  Dir.chdir(path) { git! ['clone', source] } #origin git command
72
76
  end
@@ -14,7 +14,14 @@ module BB
14
14
  @@member_configs = [
15
15
  ]
16
16
 
17
- def initialize(all_modules, member_modules, member_configs, ignore_local_stable = false, skip_stable_check = false)
17
+ # pod组件合并
18
+ # 参数说明
19
+ # all_modules 业务使用组件
20
+ # member_modules 项目成员模块,一般用于切本地开发使用
21
+ # member_configs 项目成员工程配置
22
+ # ignore_local_stable 是否忽略本地stable配置,true 适合pod子组件
23
+ # skip_stable_check 是否跳过stable检测,true 采用标准pod合并操作
24
+ def initialize(all_modules, member_modules = {}, member_configs = [], ignore_local_stable = false, skip_stable_check = false)
18
25
  @source_manager = BB::SourceManager.new()
19
26
  #加载远程稳定仓库 和本地podfile 指定的仓库进行合并
20
27
  if skip_stable_check == true
@@ -24,7 +31,6 @@ module BB
24
31
  end
25
32
  @@member_modules = member_modules
26
33
  @@member_configs = member_configs
27
- # puts "member_modules:#{member_modules}"
28
34
  end
29
35
 
30
36
  def current_member
@@ -142,39 +148,101 @@ module BB
142
148
  }
143
149
  return podfile_hash
144
150
  end
151
+ # 合并组建数据
152
+ # 策略:本地stable作为基础数据,遍历podfile组件进行替换,变化以本地为主,标签以stable为主
145
153
  def merge_module_data(podfile_specs, local_stable_data)
146
154
  # puts "podfile_specs: #{podfile_specs}".green
147
155
  podfile_hash = convert_podfile_specs_data(podfile_specs)
148
156
  # puts "podfile_hash: #{podfile_hash}".red
149
157
  # puts "local_stable_data: #{local_stable_data}".red
150
158
  need_update_pod_data={}
151
- podfile_hash.each do |podName,pod|
152
- local_pod_data = local_stable_data[podName]
153
- if pod != local_pod_data
154
- branch = pod[:branch]
155
- git_format = pod[:git_format]
156
- version = pod[:version]
157
- podCoreName = @source_manager.subspec_podname(podName)
158
- # puts "podName:#{podName} pod:#{pod} branch:#{branch} git_format:#{git_format} version:#{version} local_pod_data:#{local_pod_data}".green
159
- if (branch && !branch.empty?) || (git_format && !git_format.empty?)
160
- # 项目配置指向分支数据,以本项目为主
161
- puts "[PodAssistant] #{podName} 指向分支数据 => #{pod}"
162
- need_update_pod_data[podCoreName] = pod
163
- end
164
- # succ = (version && !version.empty? && (local_pod_data.is_a? String) && (version != local_pod_data) && !version.include?(local_pod_data))
165
- # puts "podName:#{podName} version:#{version} succ=#{succ}".red
166
- if (version && !version.empty? && (local_pod_data.is_a? String) && (version != local_pod_data) && !version.include?(local_pod_data))
167
- version = version.lstrip # 去除首字母空格
168
- initial_str = version[0..0] # 第一个字母
169
- # 项目配置固定版本,以本项目为主
170
- is_fixed_version = initial_str.include?('=') ? true : false # 固定版本 pod 'A','= x.x.x'
171
- is_lessthan_version = version.include?('<') ? true : false # 限制《最高》组件版本 pod 'A','< x.x.x' 或者 pod 'A','<= x.x.x'
172
- is_greaterthan_version = version.include?('>') ? true : false # 限制《最低》组件版本 pod 'A','> x.x.x' 或者 pod 'A','>= x.x.x'
173
- is_fuzzy_version = version.include?('~>') ? true : false # 固定版本 pod 'A','~> x.x.x'
174
- is_fuzzy_versionV2 = (!is_fixed_version && !is_lessthan_version && !is_greaterthan_version && !is_fuzzy_version) ? true : false # 固定版本 pod 'A','x.x.x'
175
- if (is_fixed_version == true) || (is_lessthan_version == true) || (is_fuzzy_version == true) || (is_fuzzy_versionV2 == true)
176
- puts "[PodAssistant] ⚠️ 限制组件版本 '#{podName}', '#{version}' 以项目配置为主. (最新版本=> #{local_pod_data.send(:red)})"
177
- need_update_pod_data[podCoreName] = version
159
+ stable_hash = local_stable_data
160
+ podfile_hash.each do |podName,podfile_pod|
161
+ podCoreName = @source_manager.subspec_podname(podName)
162
+ if (podName == podCoreName) || @source_manager.has_pod_subspec(podName, podCoreName)
163
+ pod = stable_hash[podCoreName]
164
+ if pod.nil? # stbale没有受版本控制
165
+ need_update_pod_data[podName] = podfile_pod
166
+ else
167
+ # if podCoreName == 'BBGameModule'
168
+ # puts "[stable]podCoreName:#{podCoreName}(#{pod}) VS [podfile] podName:#{podName}(#{podfile_pod})".green
169
+ # end
170
+ if pod == podfile_pod
171
+ if podName != podCoreName
172
+ need_update_pod_data[podName] = podfile_pod
173
+ end
174
+ else
175
+ branch = podfile_pod[:branch]
176
+ git = podfile_pod[:git]
177
+ if git.nil?
178
+ git = podfile_pod[:git_format]
179
+ end
180
+ version = podfile_pod[:version]
181
+ if (branch && !branch.empty?) || (git && !git.empty?)
182
+ # 项目配置指向分支数据,以本项目为主
183
+ puts "[PodAssistant] #{podName} 指向分支数据 => #{podfile_pod}"
184
+ stable_hash[podCoreName] = podfile_pod
185
+ if podName != podCoreName
186
+ need_update_pod_data[podName] = podfile_pod
187
+ end
188
+ elsif (version && !version.empty? && (pod.is_a? String) && (version != pod))
189
+ version = version.lstrip # 去除首字母空格
190
+ initial_str = version[0..0] # 第一个字母
191
+ # 项目配置固定版本,以本项目为主
192
+ is_fixed_version = initial_str.include?('=') ? true : false # 固定版本 pod 'A','= x.x.x'
193
+ is_lessthan_version = version.include?('<') ? true : false # 限制《最高》组件版本 pod 'A','< x.x.x' 或者 pod 'A','<= x.x.x'
194
+ is_greaterthan_version = version.include?('>') ? true : false # 限制《最低》组件版本 pod 'A','> x.x.x' 或者 pod 'A','>= x.x.x'
195
+ is_fuzzy_version = version.include?('~>') ? true : false # 固定版本 pod 'A','~> x.x.x'
196
+ is_fuzzy_versionV2 = (!is_fixed_version && !is_lessthan_version && !is_greaterthan_version && !is_fuzzy_version) ? true : false # 固定版本 pod 'A','x.x.x'
197
+ if (is_fixed_version == true) || (is_lessthan_version == true) || (is_fuzzy_versionV2 == true)
198
+ puts "[PodAssistant] ⚠️ 限制组件版本 '#{podName}', '#{version}' 以项目配置为主. (最新版本=> #{pod.send(:red)})"
199
+ stable_hash[podCoreName] = version
200
+ if podName != podCoreName
201
+ need_update_pod_data[podName] = version
202
+ end
203
+ elsif (is_greaterthan_version == true) || (is_fuzzy_version == true)
204
+ # puts "[PodAssistant] '#{podName}', '#{pod.send(:red)}' 以stable配置为主."
205
+ need_update_pod_data[podName] = pod
206
+ end
207
+ else
208
+ is_podfile_data = false
209
+ newPod = nil
210
+ if pod.is_a? (Hash)
211
+ stable_branch = pod[:branch]
212
+ stable_git = pod[:git]
213
+ if stable_git.nil?
214
+ stable_git = pod[:git_format]
215
+ end
216
+ if (stable_branch && !stable_branch.empty?) || (stable_git && !stable_git.empty?)
217
+ puts "[PodAssistant] '#{podName}', '#{podfile_pod}' 以podfile配置为主[分支=>标签]."
218
+ newPod = podfile_pod
219
+ is_podfile_data = true
220
+ else
221
+ newPod = pod
222
+ end
223
+ elsif pod.is_a? (String)
224
+ if pod.include?(':branch') || pod.include?(':git') || pod.include?(':git_format')
225
+ puts "[PodAssistant] '#{podName}', '#{podfile_pod}' 以podfile配置为主[分支=>标签]."
226
+ newPod = podfile_pod
227
+ is_podfile_data = true
228
+ else
229
+ newPod = pod
230
+ end
231
+ else
232
+ newPod = podfile_pod
233
+ is_podfile_data = true
234
+ end
235
+ if is_podfile_data == true
236
+ need_update_pod_data[podCoreName] = newPod
237
+ if podName != podCoreName
238
+ need_update_pod_data[podName] = newPod
239
+ end
240
+ else
241
+ if podName != podCoreName
242
+ need_update_pod_data[podName] = newPod
243
+ end
244
+ end
245
+ end
178
246
  end
179
247
  end
180
248
  end
@@ -182,22 +250,16 @@ module BB
182
250
  if need_update_pod_data.count > 0
183
251
  # puts "need_update_pod_data:#{need_update_pod_data}".green
184
252
  # 规避指向分支/远端版本替换yml配置所有组件,避免pod指向指向多个源
185
- need_update_pod_data.each do |podCoreName,pod|
186
- local_stable_data.keys.each do |podName|
187
- if (podName == podCoreName) || @source_manager.has_pod_subspec(podName, podCoreName)
188
- local_stable_data[podName] = pod
189
- puts "[PodAssistant] 合并组件 #{podName} #{pod} 以项目为主".yellow
190
- end
191
- end
253
+ need_update_pod_data.each do |podName,pod|
254
+ stable_hash[podName] = pod
255
+ puts "[PodAssistant] merge pod #{podName} #{pod}"
192
256
  end
193
- puts "[PodAssistant] 重新保存本地stable数据".yellow
194
- @source_manager.update_localstable_datas(local_stable_data)
195
257
  else
196
258
  puts "[PodAssistant] 本地stable数据无变化<===完成".yellow
197
259
  end
198
- # puts "local_stable_data: #{local_stable_data}".red
260
+ # puts "[PodAssistant] stable_hash:#{stable_hash}".red
199
261
  stable_specs = []
200
- local_stable_data.each do |name,pod|
262
+ stable_hash.each do |name,pod|
201
263
  if pod.is_a? Hash
202
264
  branch = pod[:branch]
203
265
  git = pod[:git]
@@ -239,7 +301,7 @@ module BB
239
301
  elsif pod.is_a? String
240
302
  stable_specs.push({ names: [name], version: pod, method: REMOTE_TAG })
241
303
  else
242
- puts "unknow type data:#{pod}".red
304
+ puts "unknow type [#{name}] data:#{pod}".red
243
305
  end
244
306
  end
245
307
  return stable_specs
@@ -1,36 +1,79 @@
1
- require 'cocoapods-bb-PodAssistant/helpers/git_cmd_helper'
2
1
  require 'cocoapods-bb-PodAssistant/config/stable_source'
3
2
 
4
3
  module BB
5
- class StableEnv
6
- def initialize(stable_source = nil, stable_branch = nil, stable_tag = nil)
7
- if stable_source.nil?
8
- stable_source = StableSource.stable_default_source
9
- end
10
- @stable_source = stable_source
11
- @stable_branch = stable_branch
12
- @stable_tag = stable_tag
13
-
4
+ class StableEnv
5
+ def initialize()
14
6
  @cache = BB::Cache.new()
15
7
  configGitPath(@cache.cachePath)
8
+ # 自动加载stable环境
9
+ loadStaleEnv
16
10
  end
17
11
 
18
12
  # stable 环境,执行pod stable
19
13
  def loadStaleEnv
20
-
14
+ unless File.exist?(File.join(Pathname.pwd, "Podfile"))
15
+ err_msg = "- Error: #{File.join(Pathname.pwd, "Podfile")} is not exit"
16
+ Pod::UI.puts "#{err_msg}".send(:red)
17
+ exit -9001
18
+ end
19
+
20
+ #获取podfile 内容
21
+ #1、删除所有注释行,避免干扰
22
+ #2、正则匹配,筛选出stable 方法
23
+ #3、执行stable 方法,获取配置
24
+ podfileContent = File.read(File.join(Pathname.pwd, "Podfile"))
25
+ podfileContent_vaild = podfileContent.lines.reject { |line| line.strip.start_with?("#") }.join
26
+ stableCommand = podfileContent_vaild.match(/^\s*stable!\s*'([^']+)'(?:,\s*(\w+):\s*'([^']+)')*/m)
27
+ unless stableCommand
28
+ puts "- Error: not stable define in the podfile! you can define to podfile:".red
29
+ puts "stable! 'https://git.babybus.co/babybus/ios/Specs/stable-specs.git', specs:'<业务线stbale名称-可选>', tag:'<标签-可选>', branch:'<分支-可选>'".green
30
+ exit -9002
31
+ end
32
+ eval(stableCommand.to_s)
21
33
  end
22
34
 
23
- # 开发环境,执行pod install/update
24
- def loadDeveloperEnv
35
+ # 拉取stable仓库代码 hook开发环境,执行pod install/update
36
+ def system_clone_stable_git
25
37
  cachePath = @cache.cachePath
26
- puts "hook [pod install/update] sync stable git=>#{cachePath}"
38
+ puts "hook [pod install/update] fetch stable git=>#{cachePath}"
27
39
  if Dir.exist?(File.join(cachePath))
28
- `cd #{cachePath}; git switch main; git pull --all`
40
+ # `cd #{cachePath}; git switch main; git pull --all`
41
+ system "cd #{cachePath}; git switch main; git pull --all"
29
42
  else
30
43
  clonePath = File.dirname(cachePath)
31
44
  FileUtils.mkdir_p clonePath
32
- `git clone #{@stable_source} #{cachePath}`
45
+ # `git clone #{@stable_source} #{cachePath}`
46
+ system "git clone #{@stable_source} #{cachePath}"
33
47
  end
34
48
  end
49
+
50
+ # ========podfile 约定函数规则,切勿修改
51
+ #help load podfile option
52
+ def stable!(source, options = {})
53
+ @stable_source = source
54
+ if options.has_key?(:specs)
55
+ @businessSpec = options[:specs]
56
+ end
57
+ @stable_tag = options[:tag] if options.has_key?(:tag)
58
+ @stable_branch = options[:branch] if options.has_key?(:branch)
59
+ puts "###stable env => [stable公共源]:#{source} [业务线源名称]:#{@businessSpec} branch:#{@stable_branch} tag:#{@stable_tag}".yellow
60
+ end
61
+
62
+ def stable_source
63
+ return @stable_source
64
+ end
65
+ def stable_branch
66
+ return @stable_branch
67
+ end
68
+ def stable_tag
69
+ return @stable_tag
70
+ end
71
+ def business_stable
72
+ return @businessSpec
73
+ end
74
+ # 验证stable环境是否存在
75
+ def verify_stable_env_exists
76
+ return @stable_source.empty? ? false : true
77
+ end
35
78
  end
36
79
  end
@@ -47,13 +47,25 @@ module Pod
47
47
  class Podfile
48
48
  # @!group DSL support
49
49
  include Pod::Podfile::DSL
50
-
51
- # pod组件合并操作
52
- def pod_module_run(pod_modules, member_modules = {}, member_configs = [], ignore_local_stable = false, skip_stable_check = false)
50
+ # pod组件合并操作(项目)
51
+ def project_pod_module_run(pod_modules, member_modules = {}, member_configs = [], skip_stable_check = false)
52
+ # Pod::UI.puts "Pod Module:#{pod_modules}"
53
+ time1 = Time.new
54
+ puts "[PodAssistant]项目pod组件组装开始操作时间:#{time1}".green
55
+ source = BB::PodModule.new(pod_modules, member_modules, member_configs, false, skip_stable_check)
56
+ pod_box_module_run(source)
57
+ time2 = Time.new
58
+ puts "[PodAssistant]项目pod组件组装结束时间:#{time2}".green
59
+ # 获取时间差
60
+ time = time2 - time1
61
+ puts "项目pod组件组装操作耗时:#{time.to_s.send(:red)}秒".green
62
+ end
63
+ # pod组件合并操作(单组件)
64
+ def pod_module_run(pod_modules, member_modules = {}, member_configs = [])
53
65
  # Pod::UI.puts "Pod Module:#{pod_modules}"
54
66
  time1 = Time.new
55
67
  puts "[PodAssistant]pod组件组装开始操作时间:#{time1}".green
56
- source = BB::PodModule.new(pod_modules, member_modules, member_configs, ignore_local_stable, skip_stable_check)
68
+ source = BB::PodModule.new(pod_modules, member_modules, member_configs, true, true)
57
69
  pod_box_module_run(source)
58
70
  time2 = Time.new
59
71
  puts "[PodAssistant]pod组件组装结束时间:#{time2}".green
@@ -1,6 +1,7 @@
1
1
  require 'cocoapods-bb-PodAssistant/command'
2
2
  require 'csv'
3
3
  require 'xcodeproj'
4
+ require 'cocoapods-bb-PodAssistant/config/source_manager'
4
5
 
5
6
  class Dir
6
7
  def self.size(dir)
@@ -49,7 +50,7 @@ module BB
49
50
  $podStartTime = Time.new
50
51
  puts "[PodAssistant] plugin hook pre_install".yellow
51
52
  env = BB::StableEnv.new()
52
- env.loadDeveloperEnv
53
+ env.system_clone_stable_git # 自动拉取远端git仓库数据
53
54
  if $pluginIsVerbose == true
54
55
  # home路径下是否存在.AllPodsTimeAndSize.csv的隐藏文件
55
56
  if File.exist?("#{Dir.home}/.AllPodsTimeAndSize.csv")
@@ -67,6 +68,9 @@ module BB
67
68
  end
68
69
  Pod::HooksManager.register("cocoapods-bb-PodAssistant", :post_install) do |installer|
69
70
  begin
71
+ source_manager = BB::SourceManager.new()
72
+ # 生成本地yml配置
73
+ source_manager.generate_localStable
70
74
  $podEndTime = Time.new
71
75
  puts "[PodAssistant] plugin hook post_install".yellow
72
76
  puts "[PodAssistant] pod库下载耗时 GitCloneAllSize: #{$gitAllSize} M GitCloneAllTime: #{$cloneAllTime} S CDNDownloadAllSize: #{$pluginCurrentZipAllSize} M CDNAllTime: #{$downloadAllTime} S CDNDownloadAllTime: #{$cdnDownloadAllTime} S CDNUnzipAllTime: #{$cdnUnZipAllTime} S"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-bb-PodAssistant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5.1
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - humin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-13 00:00:00.000000000 Z
11
+ date: 2023-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods-core
@@ -79,14 +79,17 @@ files:
79
79
  - lib/cocoapods-bb-PodAssistant/babybus/business/babybus_install_environment.rb
80
80
  - lib/cocoapods-bb-PodAssistant/babybus/helpers/babybus_info_plist_helper.rb
81
81
  - lib/cocoapods-bb-PodAssistant/babybus/installer/post_install_hooks.rb
82
+ - lib/cocoapods-bb-PodAssistant/babybus/linkline/target-linkline.rb
83
+ - lib/cocoapods-bb-PodAssistant/babybus/linkline/targetValidator-linkline.rb
84
+ - lib/cocoapods-bb-PodAssistant/babybus/linkline/targetdefinition-linkline.rb
85
+ - lib/cocoapods-bb-PodAssistant/babybus/stable/podfile-linkline.rb
82
86
  - lib/cocoapods-bb-PodAssistant/command.rb
83
- - lib/cocoapods-bb-PodAssistant/command/PodAssistant.rb
84
- - lib/cocoapods-bb-PodAssistant/command/linkline/linkline.rb
85
- - lib/cocoapods-bb-PodAssistant/command/linkline/target-linkline.rb
86
- - lib/cocoapods-bb-PodAssistant/command/linkline/targetValidator-linkline.rb
87
- - lib/cocoapods-bb-PodAssistant/command/linkline/targetdefinition-linkline.rb
88
- - lib/cocoapods-bb-PodAssistant/command/stable/podfile-linkline.rb
89
- - lib/cocoapods-bb-PodAssistant/command/stable/stable.rb
87
+ - lib/cocoapods-bb-PodAssistant/command/linkline.rb
88
+ - lib/cocoapods-bb-PodAssistant/command/stable.rb
89
+ - lib/cocoapods-bb-PodAssistant/command/stable/init.rb
90
+ - lib/cocoapods-bb-PodAssistant/command/stable/install.rb
91
+ - lib/cocoapods-bb-PodAssistant/command/stable/sync.rb
92
+ - lib/cocoapods-bb-PodAssistant/command/stable/update.rb
90
93
  - lib/cocoapods-bb-PodAssistant/config/cache_path.rb
91
94
  - lib/cocoapods-bb-PodAssistant/config/source_manager.rb
92
95
  - lib/cocoapods-bb-PodAssistant/config/stable_source.rb
@@ -1,44 +0,0 @@
1
- module Pod
2
- class Command
3
- # This is an example of a cocoapods plugin adding a top-level subcommand
4
- # to the 'pod' command.
5
- #
6
- # You can also create subcommands of existing or new commands. Say you
7
- # wanted to add a subcommand to `list` to show newly deprecated pods,
8
- # (e.g. `pod list deprecated`), there are a few things that would need
9
- # to change.
10
- #
11
- # - move this file to `lib/pod/command/list/deprecated.rb` and update
12
- # the class to exist in the the Pod::Command::List namespace
13
- # - change this class to extend from `List` instead of `Command`. This
14
- # tells the plugin system that it is a subcommand of `list`.
15
- # - edit `lib/cocoapods_plugins.rb` to require this file
16
- #
17
- # @todo Create a PR to add your plugin to CocoaPods/cocoapods.org
18
- # in the `plugins.json` file, once your plugin is released.
19
- #
20
- class Podassistant < Command
21
- self.summary = 'Short description of cocoapods-bb-PodAssistant.'
22
-
23
- self.description = <<-DESC
24
- Longer description of cocoapods-bb-PodAssistant.
25
- DESC
26
-
27
- # self.arguments = 'NAME'
28
-
29
- def initialize(argv)
30
- # @name = argv.shift_argument
31
- super
32
- end
33
-
34
- def validate!
35
- super
36
- # help! 'A Pod name is required.' unless @name
37
- end
38
-
39
- def run
40
- UI.puts "Add your implementation for the cocoapods-bb-PodAssistant plugin in #{__FILE__}"
41
- end
42
- end
43
- end
44
- end
@@ -1,168 +0,0 @@
1
- require 'cocoapods-bb-PodAssistant/config/source_manager'
2
- require 'cocoapods-bb-PodAssistant/config/cache_path'
3
- require 'cocoapods-bb-PodAssistant/helpers'
4
-
5
- module Pod
6
-
7
- # class StableOptions
8
- # # define business specs,defalut is stable_specs
9
- # option :business_specs, "stable_specs"
10
-
11
- # # define custom lockSpecs tag
12
- # option :tag, ""
13
-
14
- # # define custom lockSpecs branch
15
- # option :branch, ""
16
- # end
17
-
18
- class Command
19
- class Stable < Command
20
- require 'fileutils'
21
- require 'cocoapods/executable.rb'
22
- extend Executable
23
- executable :git
24
-
25
- self.summary = '拉取稳定lock配置'
26
- self.description = <<-DESC
27
- 拉取稳定lock配置插件。利用版本比对进行更新配置实现对组件版本控制管理。
28
- DESC
29
-
30
- self.arguments = [
31
- CLAide::Argument.new('Podfile', false)
32
- ]
33
- def self.options
34
- [
35
- ['--init', '初始化项目yml配置,根据当前项目Podfile.lock生成'],
36
- ['--sync', '同步远端yml配置,更新项目yml配置'],
37
- ['--install', '命令同执行`pod install操作`'],
38
- ['--update', '命令同执行`pod update操作`'],
39
- ['--update-pod', '命令同执行`pod update <组件>操作`,更新yml配置组件版本信息,多个组件使用`,`或者`空格`隔开,注意⚠️ 使用`空格`需要使用双引号'],
40
- ].concat(super)
41
- end
42
-
43
- def initialize(argv)
44
- @names = argv.arguments! unless argv.arguments.empty?
45
- @help = argv.flag?('help')
46
- @init = argv.flag?('init')
47
- @sync = argv.flag?('sync')
48
- # install操作
49
- @install = argv.flag?('install')
50
- @update = argv.flag?('update')
51
- # update组件数据支持多个使用`,`或者`空格`隔开
52
- update_pods = argv.option('update-pod','')
53
- if !update_pods.empty?
54
- if update_pods.include?(' ')
55
- @update_pods = update_pods.split(' ') unless update_pods.nil?
56
- else update_pods.include?(',')
57
- @update_pods = update_pods.split(',') unless update_pods.nil?
58
- end
59
- end
60
- super
61
- end
62
- def validate!
63
- super
64
- banner! if @help
65
- end
66
-
67
- #help load podfile option
68
- def stable!(source, options = {})
69
- @ll_stable_source = source
70
- if options.has_key?(:specs)
71
- @businessSpec = options[:specs]
72
- puts "当前业务使用源=>#{@businessSpec}"
73
- end
74
- @ll_stable_tag = options[:tag] if options.has_key?(:tag)
75
- @ll_stable_branch = options[:branch] if options.has_key?(:branch)
76
- @cache = BB::Cache.new()
77
- configGitPath(@cache.cachePath)
78
- end
79
-
80
- ######################################## Main ########################################
81
-
82
- def run
83
- # begin
84
- source_manager = BB::SourceManager.new(@businessSpec)
85
- if @init
86
- puts "[PodAssistant] 开始配置生成当前项目yml文件".yellow
87
- # 生成本地yml配置
88
- source_manager.generate_localStable
89
- puts "[PodAssistant] `pod stable --init` complete!".green
90
- elsif @install
91
- puts "[PodAssistant] 执行 $ pod install".yellow
92
- system "pod install"
93
- puts "[PodAssistant] `pod stable --install` complete!".green
94
- elsif @update
95
- puts "[PodAssistant] 执行 $ pod update".yellow
96
- system "pod update"
97
- puts "[PodAssistant] `pod stable --update` complete!".green
98
- elsif @update_pods
99
- # 更新单个组件
100
- puts "更新pod组件#{@update_pods} count:#{@update_pods.count}".yellow
101
- source_manager.update_podmodules(@update_pods)
102
- podnames = @update_pods.join(" ")
103
- puts "[PodAssistant] 执行 $ pod update #{podnames}".yellow
104
- system "pod update #{podnames}"
105
- source_manager.update_local_stable_from_podmodules(@update_pods)
106
- podnames = @update_pods.join(",")
107
- puts "[PodAssistant] `pod stable --update-pod=#{podnames}` complete!".green
108
- elsif @sync
109
- puts "开始合并远端lock数据".yellow
110
- ll_load_stable
111
- #2、clone origin lock spec to cache dir
112
- ll_cloneStable
113
- #3、fetch newest code
114
- ll_fetch_stale_git
115
- # 数据合并
116
- source_manager.merge_stable_data
117
- puts "[PodAssistant] `pod stable` complete!".green
118
- else
119
- puts "[PodAssistant] `pod stable` 帮助文档请查看👇".yellow
120
- banner!
121
- end
122
- # rescue => exception
123
- # puts "[pod stable] error(已捕获): #{exception}".red
124
- # end
125
-
126
- end
127
-
128
- private
129
- ######################################## API ########################################
130
- def ll_load_stable
131
- unless File.exist?(File.join(Pathname.pwd, "Podfile"))
132
- err_msg = "- Error: #{File.join(Pathname.pwd, "Podfile")} is not exit"
133
- Pod::UI.puts "#{err_msg}".send(:red)
134
- exit -9001
135
- end
136
-
137
- #获取podfile 内容
138
- #1、删除所有注释行,避免干扰
139
- #2、正则匹配,筛选出stable 方法
140
- #3、执行stable 方法,获取配置
141
- podfileContent = File.read(File.join(Pathname.pwd, "Podfile"))
142
- podfileContent_vaild = podfileContent.lines.reject { |line| line.strip.start_with?("#") }.join
143
- stableCommand = podfileContent_vaild.match(/^\s*stable!\s*'([^']+)'(?:,\s*(\w+):\s*'([^']+)')*/m)
144
- unless stableCommand
145
- err_msg = "- Error: not stable define in the podfile! you can define like【stable! 'https://git.babybus.co/babybus/ios/Specs/stable-specs.git', specs:'global_stable_specs'】in podfile"
146
- Pod::UI.puts "#{err_msg}".send(:red)
147
- exit -9002
148
- end
149
- eval(stableCommand.to_s)
150
- end
151
- def ll_cloneStable
152
- cachePath = @cache.cachePath
153
- unless Dir.exist?(File.join(cachePath))
154
- clonePath = File.dirname(cachePath)
155
- FileUtils.mkdir_p clonePath
156
- git_clone(@stable_source,clonePath)
157
- end
158
- end
159
-
160
- def ll_fetch_stale_git
161
- git_reset
162
- git_fetch
163
- git_checkout_and_pull(@stable_source, @stable_branch, @stable_tag)
164
- end
165
-
166
- end
167
- end
168
- end