pindo 5.14.8 → 5.15.1
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.
- checksums.yaml +4 -4
- data/lib/pindo/base/aeshelper.rb +53 -22
- data/lib/pindo/base/git_handler.rb +243 -22
- data/lib/pindo/client/giteeclient.rb +15 -6
- data/lib/pindo/command/android/autobuild.rb +7 -5
- data/lib/pindo/command/appstore/autobuild.rb +5 -2
- data/lib/pindo/command/appstore/cert.rb +6 -0
- data/lib/pindo/command/ios/autobuild.rb +31 -21
- data/lib/pindo/command/ios/cert.rb +1 -1
- data/lib/pindo/command/jps/apptest.rb +1 -1
- data/lib/pindo/command/jps/bind.rb +6 -2
- data/lib/pindo/command/jps/media.rb +6 -2
- data/lib/pindo/command/jps/upload.rb +6 -4
- data/lib/pindo/command/repo/clone.rb +110 -32
- data/lib/pindo/command/repo/subgit.rb +91 -0
- data/lib/pindo/command/repo.rb +1 -0
- data/lib/pindo/command/unity/autobuild.rb +6 -4
- data/lib/pindo/command/unity/packbuild.rb +14 -7
- data/lib/pindo/command/utils/tag.rb +5 -3
- data/lib/pindo/command/web/autobuild.rb +7 -5
- data/lib/pindo/command.rb +1 -1
- data/lib/pindo/config/build_info_manager.rb +37 -14
- data/lib/pindo/module/appstore/bundleid_helper.rb +7 -3
- data/lib/pindo/module/build/git_repo_helper.rb +1 -14
- data/lib/pindo/module/cert/cert_helper.rb +33 -9
- data/lib/pindo/module/cert/xcode_cert_helper.rb +17 -7
- data/lib/pindo/module/pgyer/pgyerhelper.rb +110 -22
- data/lib/pindo/module/task/model/git/git_commit_task.rb +106 -6
- data/lib/pindo/module/task/model/git/git_tag_task.rb +17 -7
- data/lib/pindo/module/task/model/jps/jps_upload_media_task.rb +13 -8
- data/lib/pindo/module/task/model/resign/ipa_local_resign_task.rb +5 -0
- data/lib/pindo/options/core/option_item.rb +4 -5
- data/lib/pindo/options/groups/git_options.rb +40 -0
- data/lib/pindo/options/helpers/git_constants.rb +28 -0
- data/lib/pindo/version.rb +1 -1
- metadata +7 -5
|
@@ -52,14 +52,15 @@ module Pindo
|
|
|
52
52
|
root_dir = @git_root_path
|
|
53
53
|
git_repo_helper = Pindo::GitRepoHelper.share_instance
|
|
54
54
|
stash_saved = false
|
|
55
|
+
stash_name = "pindo_stash_#{Time.now.strftime('%Y%m%d%H%M%S')}_#{rand(1000)}"
|
|
55
56
|
coding_branch = Pindo::GitHandler.git!(%W(-C #{root_dir} rev-parse --abbrev-ref HEAD)).strip
|
|
56
57
|
|
|
57
58
|
begin
|
|
58
59
|
# 1. 检查工作目录,不干净则 stash
|
|
59
60
|
status = Pindo::GitHandler.git!(%W(-C #{root_dir} status --porcelain)).strip
|
|
60
61
|
unless status.empty?
|
|
61
|
-
Funlog.instance.fancyinfo_update("工作目录有未提交更改,暂存到 stash")
|
|
62
|
-
Pindo::GitHandler.git!(%W(-C #{root_dir} stash -u))
|
|
62
|
+
Funlog.instance.fancyinfo_update("工作目录有未提交更改,暂存到 stash: #{stash_name}")
|
|
63
|
+
Pindo::GitHandler.git!(%W(-C #{root_dir} stash push -u -m #{stash_name}))
|
|
63
64
|
stash_saved = true
|
|
64
65
|
end
|
|
65
66
|
|
|
@@ -109,13 +110,22 @@ module Pindo
|
|
|
109
110
|
|
|
110
111
|
ensure
|
|
111
112
|
# 5. 还原 stash
|
|
113
|
+
|
|
112
114
|
if stash_saved
|
|
113
115
|
begin
|
|
114
|
-
#
|
|
115
|
-
Pindo::GitHandler.git!(%W(-C #{root_dir} stash
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
116
|
+
# 查找指定名字的 stash
|
|
117
|
+
stash_list = Pindo::GitHandler.git!(%W(-C #{root_dir} stash list)).strip
|
|
118
|
+
matched_line = stash_list.lines.find { |l| l.include?(stash_name) }
|
|
119
|
+
|
|
120
|
+
if matched_line && (stash_id = matched_line.match(/(stash@\{\d+\})/)&.[](1))
|
|
121
|
+
# 先应用 stash(不删除)
|
|
122
|
+
Pindo::GitHandler.git!(%W(-C #{root_dir} stash apply #{stash_id}))
|
|
123
|
+
# 应用成功后再删除 stash
|
|
124
|
+
Pindo::GitHandler.git!(%W(-C #{root_dir} stash drop #{stash_id}))
|
|
125
|
+
Funlog.instance.fancyinfo_success("已还原 stash: #{stash_name} (#{stash_id})")
|
|
126
|
+
else
|
|
127
|
+
Funlog.instance.fancyinfo_warning("未找到名为 #{stash_name} 的 stash,请手动检查")
|
|
128
|
+
end
|
|
119
129
|
rescue => e
|
|
120
130
|
# 如果应用失败(通常是有冲突),stash 仍然保留,用户可以手动处理
|
|
121
131
|
Funlog.instance.fancyinfo_warning("stash 还原时发生冲突: #{e.message}")
|
|
@@ -294,7 +294,7 @@ module Pindo
|
|
|
294
294
|
FileUtils.mkdir_p(backup_dir) unless Dir.exist?(backup_dir)
|
|
295
295
|
|
|
296
296
|
# 移动文件
|
|
297
|
-
file_name = File.basename(file_path)
|
|
297
|
+
file_name = File.basename(file_path).force_encoding('UTF-8').scrub('')
|
|
298
298
|
dest_path = File.join(backup_dir, file_name)
|
|
299
299
|
|
|
300
300
|
# 如果目标文件已存在,添加序号避免覆盖
|
|
@@ -391,11 +391,12 @@ module Pindo
|
|
|
391
391
|
puts ""
|
|
392
392
|
files.each_with_index do |file, index|
|
|
393
393
|
size_str = format_file_size(File.size(file))
|
|
394
|
-
file_name = File.basename(file)
|
|
394
|
+
file_name = File.basename(file).force_encoding('UTF-8').scrub('')
|
|
395
395
|
# 对齐:序号(3位) + 文件名(左对齐) + 大小(右对齐)
|
|
396
396
|
puts " \e[90m#{(index + 1).to_s.rjust(2)}.\e[0m %-40s \e[33m%8s\e[0m" % [file_name, size_str]
|
|
397
397
|
if debug_mode
|
|
398
|
-
|
|
398
|
+
safe_path = file.force_encoding('UTF-8').scrub('')
|
|
399
|
+
puts " \e[90m路径: #{safe_path}\e[0m"
|
|
399
400
|
end
|
|
400
401
|
end
|
|
401
402
|
puts ""
|
|
@@ -422,7 +423,7 @@ module Pindo
|
|
|
422
423
|
failed_files = []
|
|
423
424
|
|
|
424
425
|
files.each_with_index do |file, index|
|
|
425
|
-
file_name = File.basename(file)
|
|
426
|
+
file_name = File.basename(file).force_encoding('UTF-8').scrub('')
|
|
426
427
|
|
|
427
428
|
# 显示进度(简洁模式)
|
|
428
429
|
progress = "#{index + 1}/#{files.size}"
|
|
@@ -433,7 +434,10 @@ module Pindo
|
|
|
433
434
|
# MacCompressCliTool 的 -f 参数需要一个包含文件路径列表的文本文件
|
|
434
435
|
file_list_path = File.join(compress_dir, "file_list_#{index}.txt")
|
|
435
436
|
File.open(file_list_path, 'w:UTF-8') do |f|
|
|
436
|
-
|
|
437
|
+
# 强制将文件路径转换为 UTF-8 编码,处理无效字符
|
|
438
|
+
# 避免 "incompatible character encodings: UTF-8 and BINARY" 错误
|
|
439
|
+
safe_path = file.force_encoding('UTF-8').scrub('')
|
|
440
|
+
f.puts(safe_path)
|
|
437
441
|
end
|
|
438
442
|
|
|
439
443
|
# 调用压缩工具: compress-cli -s -f file_list.txt -o output_dir/
|
|
@@ -444,7 +448,8 @@ module Pindo
|
|
|
444
448
|
|
|
445
449
|
if debug_mode
|
|
446
450
|
puts ""
|
|
447
|
-
|
|
451
|
+
safe_file = file.force_encoding('UTF-8').scrub('')
|
|
452
|
+
puts " \e[90m完整路径: #{safe_file}\e[0m"
|
|
448
453
|
puts " \e[90m文件列表: #{file_list_path}\e[0m"
|
|
449
454
|
puts " \e[90m执行命令: #{cmd}\e[0m"
|
|
450
455
|
print " "
|
|
@@ -497,7 +502,7 @@ module Pindo
|
|
|
497
502
|
if all_files.empty?
|
|
498
503
|
puts " \e[90m(目录为空)\e[0m"
|
|
499
504
|
else
|
|
500
|
-
all_files.each { |f| puts " \e[90m- #{File.basename(f)}\e[0m" }
|
|
505
|
+
all_files.each { |f| puts " \e[90m- #{File.basename(f).force_encoding('UTF-8').scrub('')}\e[0m" }
|
|
501
506
|
end
|
|
502
507
|
else
|
|
503
508
|
puts " \e[90m(目录不存在)\e[0m"
|
|
@@ -532,7 +537,7 @@ module Pindo
|
|
|
532
537
|
puts ""
|
|
533
538
|
puts " \e[31m失败文件 (#{failed_files.size}):\e[0m"
|
|
534
539
|
failed_files.each do |f|
|
|
535
|
-
puts " \e[31m✗\e[0m #{File.basename(f)}"
|
|
540
|
+
puts " \e[31m✗\e[0m #{File.basename(f).force_encoding('UTF-8').scrub('')}"
|
|
536
541
|
end
|
|
537
542
|
end
|
|
538
543
|
|
|
@@ -154,11 +154,10 @@ module Pindo
|
|
|
154
154
|
|
|
155
155
|
# 构建描述文本(描述 + 环境变量)
|
|
156
156
|
def build_description_text
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
end
|
|
157
|
+
desc = @description.dup
|
|
158
|
+
desc += " (环境变量: #{@env_name})" if @env_name
|
|
159
|
+
desc += " 示例: #{@example}" if @example && !@example.to_s.strip.empty?
|
|
160
|
+
desc
|
|
162
161
|
end
|
|
163
162
|
|
|
164
163
|
# 类型转换为提示字符串
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'pindo/options/core/option_item'
|
|
2
2
|
require 'pindo/options/groups/option_group'
|
|
3
|
+
require 'pindo/options/helpers/git_constants'
|
|
3
4
|
|
|
4
5
|
module Pindo
|
|
5
6
|
module Options
|
|
@@ -75,6 +76,24 @@ module Pindo
|
|
|
75
76
|
optional: true,
|
|
76
77
|
cacheable: true, # 存入文件缓存
|
|
77
78
|
example: 'pindo ios autobuild --release_branch=main'
|
|
79
|
+
),
|
|
80
|
+
|
|
81
|
+
git_commit: OptionItem.new(
|
|
82
|
+
key: :git_commit,
|
|
83
|
+
name: 'Git 未提交处理方式',
|
|
84
|
+
description: '处理未提交文件的方式: commit/skip/reset/stash/exit',
|
|
85
|
+
type: String,
|
|
86
|
+
env_name: 'PINDO_GIT_COMMIT',
|
|
87
|
+
default_value: nil,
|
|
88
|
+
optional: true,
|
|
89
|
+
cacheable: false,
|
|
90
|
+
verify_block: proc do |value|
|
|
91
|
+
allowed = %w[commit skip reset delete stash exit resetde discard]
|
|
92
|
+
unless allowed.include?(value.to_s.downcase)
|
|
93
|
+
raise "git_commit 值错误: #{value}, 必须是 #{allowed.join(', ')} 之一"
|
|
94
|
+
end
|
|
95
|
+
end,
|
|
96
|
+
example: 'pindo unity autobuild --git-commit=skip'
|
|
78
97
|
)
|
|
79
98
|
}
|
|
80
99
|
end
|
|
@@ -95,6 +114,27 @@ module Pindo
|
|
|
95
114
|
end
|
|
96
115
|
end
|
|
97
116
|
|
|
117
|
+
# 解析 --git-commit 参数并转换为枚举常量
|
|
118
|
+
# @param value [String] 命令行参数值
|
|
119
|
+
# @return [Symbol, nil] UncommittedFilesProcessType 常量或 nil
|
|
120
|
+
def self.parse_git_commit_type(value)
|
|
121
|
+
return nil if value.nil?
|
|
122
|
+
case value.to_s.downcase
|
|
123
|
+
when 'commit', 'comm'
|
|
124
|
+
Pindo::UncommittedFilesProcessType::COMMIT
|
|
125
|
+
when 'skip', 'none', 'dont'
|
|
126
|
+
Pindo::UncommittedFilesProcessType::SKIP
|
|
127
|
+
when 'reset', 'delete', 'resetde', 'discard'
|
|
128
|
+
Pindo::UncommittedFilesProcessType::RESET
|
|
129
|
+
when 'stash'
|
|
130
|
+
Pindo::UncommittedFilesProcessType::STASH
|
|
131
|
+
when 'exit'
|
|
132
|
+
Pindo::UncommittedFilesProcessType::EXIT
|
|
133
|
+
else
|
|
134
|
+
nil
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
98
138
|
# 将命令行参数值转换为 CreateTagType 常量
|
|
99
139
|
# @param value [String] 命令行参数值 (new/recreate/none)
|
|
100
140
|
# @return [Symbol] CreateTagType 常量值
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Pindo
|
|
2
|
+
# Git 版本号增加类型枚举
|
|
3
|
+
# 用于控制版本号自动增长规则
|
|
4
|
+
module VersionIncreaseType
|
|
5
|
+
MAIN = :main # 大版本号增加1 (x.0.0)
|
|
6
|
+
MINI = :mini # 小版本号增加1 (0.x.0)
|
|
7
|
+
PATCH = :patch # 补丁版本号增加1 (0.0.x)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Git Tag 创建类型枚举
|
|
11
|
+
# 用于控制标签创建行为
|
|
12
|
+
module CreateTagType
|
|
13
|
+
NEW = :new # 创建新的 tag,生成新版本号
|
|
14
|
+
RECREATE = :recreate # 重新创建当前版本号的 tag
|
|
15
|
+
NONE = :none # 不创建 tag
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Git 未提交文件处理类型枚举
|
|
19
|
+
# 用于控制构建前未提交文件的处理方式
|
|
20
|
+
module UncommittedFilesProcessType
|
|
21
|
+
COMMIT = :commit # 自动提交所有更改
|
|
22
|
+
SKIP = :skip # 跳过处理,继续执行
|
|
23
|
+
RESET = :reset # 丢弃所有更改,重置到远程
|
|
24
|
+
STASH = :stash # 保存到 stash 区域
|
|
25
|
+
EXIT = :exit # 退出程序,要求手动处理
|
|
26
|
+
NONE = :none # 没有需要提交的内容
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/pindo/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pindo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.15.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- wade
|
|
@@ -55,20 +55,20 @@ dependencies:
|
|
|
55
55
|
requirements:
|
|
56
56
|
- - "~>"
|
|
57
57
|
- !ruby/object:Gem::Version
|
|
58
|
-
version: '2.
|
|
58
|
+
version: '2.230'
|
|
59
59
|
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 2.
|
|
61
|
+
version: 2.230.0
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '2.
|
|
68
|
+
version: '2.230'
|
|
69
69
|
- - ">="
|
|
70
70
|
- !ruby/object:Gem::Version
|
|
71
|
-
version: 2.
|
|
71
|
+
version: 2.230.0
|
|
72
72
|
- !ruby/object:Gem::Dependency
|
|
73
73
|
name: fastimage
|
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -340,6 +340,7 @@ files:
|
|
|
340
340
|
- lib/pindo/command/repo/create.rb
|
|
341
341
|
- lib/pindo/command/repo/login.rb
|
|
342
342
|
- lib/pindo/command/repo/search.rb
|
|
343
|
+
- lib/pindo/command/repo/subgit.rb
|
|
343
344
|
- lib/pindo/command/setup.rb
|
|
344
345
|
- lib/pindo/command/unity.rb
|
|
345
346
|
- lib/pindo/command/unity/autobuild.rb
|
|
@@ -481,6 +482,7 @@ files:
|
|
|
481
482
|
- lib/pindo/options/groups/task_options.rb
|
|
482
483
|
- lib/pindo/options/groups/unity_options.rb
|
|
483
484
|
- lib/pindo/options/helpers/bundleid_selector.rb
|
|
485
|
+
- lib/pindo/options/helpers/git_constants.rb
|
|
484
486
|
- lib/pindo/options/options.rb
|
|
485
487
|
- lib/pindo/version.rb
|
|
486
488
|
homepage: https://gitee.com/test/pindo.git
|