pixab 1.8.1 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/pixab +3 -0
- data/lib/ComponentSynchronizer.rb +15 -6
- data/lib/GitUtils.rb +34 -0
- data/lib/RepoManager.rb +10 -0
- data/lib/mbox/AirBrushProjectInfo.rb +11 -0
- data/lib/mbox/Mbox.rb +33 -0
- data/lib/mbox/MboxAdd.rb +84 -0
- data/lib/mbox/MboxRemove.rb +46 -0
- data/lib/pixab/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fdba62ae7047c7ef946363083adac26824b0cb07b225e271835be82bc6665ed6
|
4
|
+
data.tar.gz: cfceb1c4a436385adf52dfc6eef0ac38d059ce0696abff97e348c2c6d4f62e15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd569f56a0420a882377aede3a6f78ae0909ca066477a4669dc2166e7aec4c077d0f050f49ac965519bc07bd15521cb01b8f578ff279fa03ea62176c75144569
|
7
|
+
data.tar.gz: 0face14f5ad601b66713ab16432cb930e8a20637a71fad8770e34b12f989894c545997f95776a621ebdd9a1d86784e00cee7ecc7d4d8aa04093ed0291a62f84a
|
data/exe/pixab
CHANGED
@@ -10,6 +10,7 @@ require_relative '../lib/Package.rb'
|
|
10
10
|
require_relative '../lib/LocalizationSmartcat.rb'
|
11
11
|
require_relative '../lib/LocalizationSmartcatImport.rb'
|
12
12
|
require_relative '../lib/LocalizationSmartcatMerge.rb'
|
13
|
+
require_relative '../lib/mbox/Mbox.rb'
|
13
14
|
|
14
15
|
case ARGV[0]
|
15
16
|
when '--version'
|
@@ -52,6 +53,8 @@ when 'localize'
|
|
52
53
|
else
|
53
54
|
Pixab::LocalizationSmartcat.new.run(ARGV[1..-1])
|
54
55
|
end
|
56
|
+
when 'mbox'
|
57
|
+
Pixab::Mbox.new.run(ARGV[1..-1])
|
55
58
|
else
|
56
59
|
puts "Invalid command".red
|
57
60
|
end
|
@@ -4,14 +4,14 @@
|
|
4
4
|
require "fileutils"
|
5
5
|
require 'colored2'
|
6
6
|
require 'open3'
|
7
|
-
require_relative './
|
7
|
+
require_relative './GitUtils.rb'
|
8
8
|
require_relative './RepoManager.rb'
|
9
9
|
|
10
10
|
module Pixab
|
11
11
|
|
12
12
|
class ComponentSynchronizer
|
13
13
|
|
14
|
-
attr_accessor :is_need_build, :is_need_remote_repo, :is_need_pod_install
|
14
|
+
attr_accessor :is_need_build, :is_need_remote_repo, :is_need_pod_install, :is_use__target_branch
|
15
15
|
attr_reader :repo_manager, :repos, :main_repo_name, :updated_repo_names
|
16
16
|
|
17
17
|
def initialize(repo_manager = RepoManager.new, commands = nil)
|
@@ -19,6 +19,8 @@ module Pixab
|
|
19
19
|
@is_need_build = false
|
20
20
|
@is_need_remote_repo = false
|
21
21
|
@is_need_pod_install = true
|
22
|
+
@is_use__target_branch = true
|
23
|
+
|
22
24
|
if commands.nil?
|
23
25
|
return
|
24
26
|
end
|
@@ -31,9 +33,12 @@ module Pixab
|
|
31
33
|
@is_need_remote_repo = true
|
32
34
|
when "--no-pod-install"
|
33
35
|
@is_need_pod_install = false
|
36
|
+
when "--current-branch"
|
37
|
+
@is_use__target_branch = false
|
34
38
|
else
|
35
39
|
end
|
36
40
|
end
|
41
|
+
|
37
42
|
end
|
38
43
|
|
39
44
|
def run
|
@@ -121,9 +126,14 @@ module Pixab
|
|
121
126
|
repo_commite_id = {}
|
122
127
|
repos.each do |repo|
|
123
128
|
repo_name = repo["name"]
|
124
|
-
|
129
|
+
|
125
130
|
FileUtils.cd("#{repo_manager.root_path}/#{repo_name}")
|
126
|
-
|
131
|
+
repo_target_branch = @is_use__target_branch ? repo_target_branch = repo["target_branch"] : GitUtils.current_branch
|
132
|
+
next unless GitUtils.check_remote_branch_exists_fast("origin/#{repo_target_branch}")
|
133
|
+
|
134
|
+
stdout, status = Open3.capture2("git fetch origin #{repo_target_branch}")
|
135
|
+
next unless status.success?
|
136
|
+
|
127
137
|
commit_id = `git log origin/#{repo_target_branch} -n 1 --pretty=format:"%H"`
|
128
138
|
if !commit_id.nil?
|
129
139
|
repo_commite_id[repo_name] = commit_id
|
@@ -199,5 +209,4 @@ module Pixab
|
|
199
209
|
|
200
210
|
end
|
201
211
|
|
202
|
-
end
|
203
|
-
|
212
|
+
end
|
data/lib/GitUtils.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# encoding: UTF-8
|
3
3
|
|
4
|
+
require 'open3'
|
4
5
|
require_relative './Utilities.rb'
|
5
6
|
|
6
7
|
module Pixab
|
@@ -96,6 +97,39 @@ module Pixab
|
|
96
97
|
return Utilities.execute_shell(commad)
|
97
98
|
end
|
98
99
|
|
100
|
+
# 获取当前分支的远程分支
|
101
|
+
def current_remote_branch
|
102
|
+
local_branch = current_branch
|
103
|
+
return nil if local_branch.nil?
|
104
|
+
|
105
|
+
remote_branch, status = Open3.capture2("git for-each-ref --format='%(upstream:short)' refs/heads/#{local_branch}")
|
106
|
+
remote_branch.strip!
|
107
|
+
return nil if !status.success? || remote_branch.empty?
|
108
|
+
|
109
|
+
return nil unless check_remote_branch_exists_fast(remote_branch)
|
110
|
+
return remote_branch
|
111
|
+
rescue => e
|
112
|
+
puts "Error: get current remote branch failed, #{e.message}".red
|
113
|
+
return nil
|
114
|
+
end
|
115
|
+
|
116
|
+
# 在远程仓库检查远程分支是否存在
|
117
|
+
# remote_branch: 远程分支名称,不需要remote前缀,使用origin作为remote
|
118
|
+
def check_remote_branch_exists(remote_branch)
|
119
|
+
exisit_remote_branch, status= Open3.capture2("git ls-remote --heads origin #{remote_branch}")
|
120
|
+
return status.success? && !exisit_remote_branch.strip.empty?
|
121
|
+
rescue => e
|
122
|
+
puts "Error: check remote branch exists failed, #{e.message}".red
|
123
|
+
return false
|
124
|
+
end
|
125
|
+
|
126
|
+
# 在本地仓库检查远程分支是否存在
|
127
|
+
# remote_branch: 远程分支名称
|
128
|
+
def check_remote_branch_exists_fast(remote_branch)
|
129
|
+
exisit_remote_branch, status = Open3.capture2("git branch -r --list #{remote_branch}")
|
130
|
+
status.success? && !exisit_remote_branch.strip.empty?
|
131
|
+
end
|
132
|
+
|
99
133
|
end
|
100
134
|
|
101
135
|
class << GitUtils
|
data/lib/RepoManager.rb
CHANGED
@@ -37,6 +37,10 @@ module Pixab
|
|
37
37
|
def main_repo
|
38
38
|
repos.first
|
39
39
|
end
|
40
|
+
|
41
|
+
def main_repo_name
|
42
|
+
main_repo["name"]
|
43
|
+
end
|
40
44
|
|
41
45
|
def sub_repos
|
42
46
|
if repos.length > 1
|
@@ -47,6 +51,12 @@ module Pixab
|
|
47
51
|
return []
|
48
52
|
end
|
49
53
|
|
54
|
+
def sub_repo_names
|
55
|
+
sub_repos.map do |sub_repo|
|
56
|
+
sub_repo["name"]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
50
60
|
def feature_name
|
51
61
|
feature["name"]
|
52
62
|
end
|
data/lib/mbox/Mbox.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative './MboxAdd.rb'
|
2
|
+
require_relative './MboxRemove.rb'
|
3
|
+
|
4
|
+
module Pixab
|
5
|
+
|
6
|
+
class Mbox
|
7
|
+
|
8
|
+
attr_reader :repo_manager
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@repo_manager = RepoManager.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def run(commands)
|
15
|
+
if commands.empty?
|
16
|
+
puts "请输入命令".red
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
command = commands[0]
|
21
|
+
case command
|
22
|
+
when "add"
|
23
|
+
MboxAdd.new(repo_manager).run(commands[1..-1])
|
24
|
+
when "remove"
|
25
|
+
MboxRemove.new(repo_manager).run(commands[1..-1])
|
26
|
+
else
|
27
|
+
`mbox #{commands.join(" ")}`
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
data/lib/mbox/MboxAdd.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'open3'
|
2
|
+
require_relative './AirBrushProjectInfo.rb'
|
3
|
+
require_relative '../Utilities.rb'
|
4
|
+
require_relative '../RepoManager.rb'
|
5
|
+
|
6
|
+
module Pixab
|
7
|
+
|
8
|
+
class MboxAdd
|
9
|
+
|
10
|
+
attr_reader :repo_manager
|
11
|
+
|
12
|
+
def initialize(repo_manager)
|
13
|
+
@repo_manager = repo_manager
|
14
|
+
end
|
15
|
+
|
16
|
+
def run(commands)
|
17
|
+
if commands.empty?
|
18
|
+
repo_names = get_all_sub_repo_names
|
19
|
+
if !repo_names.empty?
|
20
|
+
selected_item_names = Utilities.display_choose_list(repo_names, nil, "仓库", "请选择需要添加的仓库:", nil, nil, true)
|
21
|
+
selected_item_names.each do |repo_name|
|
22
|
+
add_repo([repo_name.strip, AirBrushProjectInfo::DEFAULT_BRANCH])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
elsif commands[0] == "--all"
|
26
|
+
repo_names = get_all_sub_repo_names
|
27
|
+
repo_names.each do |repo_name|
|
28
|
+
add_repo([repo_name, AirBrushProjectInfo::DEFAULT_BRANCH])
|
29
|
+
end
|
30
|
+
else
|
31
|
+
add_repo(commands)
|
32
|
+
end
|
33
|
+
|
34
|
+
system("mbox status")
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_repo(commands)
|
39
|
+
return if commands.empty?
|
40
|
+
|
41
|
+
execute_commad = "mbox add"
|
42
|
+
commands.each do |command|
|
43
|
+
execute_commad += " #{command}"
|
44
|
+
end
|
45
|
+
|
46
|
+
stdout, status = Open3.capture2(execute_commad)
|
47
|
+
if status.success?
|
48
|
+
pull_lfs_files_if_needed(commands[0])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# 获取所有的子仓名
|
53
|
+
def get_all_sub_repo_names
|
54
|
+
podfile_path = "#{@repo_manager.root_path}/#{@repo_manager.main_repo_name}/#{AirBrushProjectInfo::COMPONENT_FILE_PATH}"
|
55
|
+
podfile_content = File.read(podfile_path)
|
56
|
+
matches = podfile_content.match(/def pix_ab_component(.*?)end/m)
|
57
|
+
return [] if matches.nil?
|
58
|
+
podfile_content = matches[0]
|
59
|
+
reg = /'([^']+).+:commit => '(.+)'/
|
60
|
+
matches = podfile_content.scan(reg)
|
61
|
+
repo_names = matches.map do |match|
|
62
|
+
match[0]
|
63
|
+
end
|
64
|
+
repo_names - @repo_manager.sub_repo_names
|
65
|
+
end
|
66
|
+
|
67
|
+
# 如果使用了lfs,则拉取lfs文件
|
68
|
+
def pull_lfs_files_if_needed(repo_name)
|
69
|
+
# 使用此方法切换路径时可以避免在控制台打印路径,并在执行完成后会切换回原路径
|
70
|
+
FileUtils.cd("#{@repo_manager.root_path}/#{repo_name}") do
|
71
|
+
break unless File.exist?(".gitattributes")
|
72
|
+
|
73
|
+
file_content = File.read(".gitattributes")
|
74
|
+
break unless file_content.include?("filter=lfs")
|
75
|
+
|
76
|
+
Open3.capture3("mbox git hooks --disable")
|
77
|
+
`git lfs pull`
|
78
|
+
Open3.capture3("mbox git hooks --enable")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Pixab
|
2
|
+
|
3
|
+
class MboxRemove
|
4
|
+
|
5
|
+
attr_reader :repo_manager
|
6
|
+
|
7
|
+
def initialize(repo_manager)
|
8
|
+
@repo_manager = repo_manager
|
9
|
+
end
|
10
|
+
|
11
|
+
def run(commands)
|
12
|
+
if commands.empty?
|
13
|
+
repo_names = @repo_manager.sub_repo_names
|
14
|
+
if !repo_names.empty?
|
15
|
+
selected_item_names = Utilities.display_choose_list(repo_names, nil, "仓库", "请选择需要移除的仓库:", nil, nil, true)
|
16
|
+
selected_item_names.each do |repo_name|
|
17
|
+
remove_repo([repo_name.strip])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
elsif commands[0] == "--all"
|
21
|
+
repo_names = @repo_manager.sub_repo_names
|
22
|
+
repo_names.each do |repo_name|
|
23
|
+
remove_repo([repo_name])
|
24
|
+
end
|
25
|
+
else
|
26
|
+
remove_repo(commands)
|
27
|
+
end
|
28
|
+
|
29
|
+
system("mbox status")
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def remove_repo(commands)
|
34
|
+
return if commands.empty?
|
35
|
+
|
36
|
+
execute_commad = "mbox remove"
|
37
|
+
commands.each do |command|
|
38
|
+
execute_commad += " #{command}"
|
39
|
+
end
|
40
|
+
|
41
|
+
`#{execute_commad}`
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/lib/pixab/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pixab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 廖再润
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colored2
|
@@ -93,6 +93,10 @@ files:
|
|
93
93
|
- lib/Package.rb
|
94
94
|
- lib/RepoManager.rb
|
95
95
|
- lib/Utilities.rb
|
96
|
+
- lib/mbox/AirBrushProjectInfo.rb
|
97
|
+
- lib/mbox/Mbox.rb
|
98
|
+
- lib/mbox/MboxAdd.rb
|
99
|
+
- lib/mbox/MboxRemove.rb
|
96
100
|
- lib/pixab.rb
|
97
101
|
- lib/pixab/version.rb
|
98
102
|
- pixab.gemspec
|