pindo 5.17.5 → 5.18.3
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/git_handler.rb +120 -38
- data/lib/pindo/command/android/autobuild.rb +62 -25
- data/lib/pindo/command/appstore/adhocbuild.rb +1 -1
- data/lib/pindo/command/appstore/autobuild.rb +1 -1
- data/lib/pindo/command/appstore/autoresign.rb +1 -1
- data/lib/pindo/command/appstore/updateid.rb +229 -0
- data/lib/pindo/command/appstore.rb +1 -0
- data/lib/pindo/command/ios/autobuild.rb +70 -33
- data/lib/pindo/command/ios/podpush.rb +1 -1
- data/lib/pindo/command/unity/autobuild.rb +38 -18
- data/lib/pindo/command/utils/allcopyconfig.rb +144 -0
- data/lib/pindo/command/utils/copyconfig.rb +207 -0
- data/lib/pindo/command/utils/icon.rb +2 -2
- data/lib/pindo/command/utils/renewbundleid.rb +199 -0
- data/lib/pindo/command/utils/renewcert.rb +56 -54
- data/lib/pindo/command/utils.rb +3 -0
- data/lib/pindo/command/web/autobuild.rb +10 -8
- data/lib/pindo/config/build_info_manager.rb +1 -3
- data/lib/pindo/module/android/android_build_helper.rb +193 -33
- data/lib/pindo/module/android/android_config_helper.rb +305 -88
- data/lib/pindo/module/android/android_project_helper.rb +69 -14
- data/lib/pindo/module/android/android_res_helper.rb +349 -51
- data/lib/pindo/module/android/keystore_helper.rb +611 -295
- data/lib/pindo/module/android/workflow_gradle_injector.rb +702 -0
- data/lib/pindo/module/appselect.rb +4 -4
- data/lib/pindo/module/appstore/bundleid_helper.rb +204 -14
- data/lib/pindo/module/build/build_helper.rb +76 -10
- data/lib/pindo/module/build/git_repo_helper.rb +4 -4
- data/lib/pindo/module/cert/mode/base_cert_operator.rb +8 -6
- data/lib/pindo/module/pgyer/pgyerhelper.rb +102 -39
- data/lib/pindo/module/task/model/build/android_build_dev_task.rb +64 -6
- data/lib/pindo/module/task/model/git/git_commit_task.rb +70 -54
- data/lib/pindo/module/task/model/git/git_tag_task.rb +13 -9
- data/lib/pindo/module/task/model/jps/jps_upload_task.rb +104 -1
- data/lib/pindo/module/task/model/unity/unity_export_task.rb +2 -1
- data/lib/pindo/module/task/model/unity/unity_update_task.rb +2 -1
- data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +2 -1
- data/lib/pindo/module/task/model/unity_task.rb +2 -1
- data/lib/pindo/module/unity/unity_helper.rb +13 -10
- data/lib/pindo/module/unity/unity_proc_helper.rb +27 -2
- data/lib/pindo/module/xcode/applovin_xcode_helper.rb +4 -2
- data/lib/pindo/module/xcode/res/xcode_res_constant.rb +72 -0
- data/lib/pindo/module/xcode/xcode_build_config.rb +36 -17
- data/lib/pindo/module/xcode/xcode_build_helper.rb +180 -23
- data/lib/pindo/module/xcode/xcode_project_helper.rb +1 -1
- data/lib/pindo/module/xcode/xcode_res_helper.rb +32 -16
- data/lib/pindo/options/groups/build_options.rb +5 -5
- data/lib/pindo/options/groups/git_options.rb +7 -5
- data/lib/pindo/options/groups/unity_options.rb +11 -0
- data/lib/pindo/options/helpers/bundleid_selector.rb +25 -0
- data/lib/pindo/options/helpers/git_constants.rb +7 -6
- data/lib/pindo/version.rb +2 -2
- metadata +10 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6aa6cacda33572effc137d3edb8cc37b1cf395c200da85365b8f1f975dd8b56a
|
|
4
|
+
data.tar.gz: ae49f32ec2d23e85acb5311b9358e8fa2dd0f136c85613401d4053e9538e03a2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 878e76466b93a3f095b024af378a47b6c54e36d5000455eaf29f07c1b5d6ec1d3ace1b7624a2d3826dc595d976cf030c3e241158e675b74ca8affdca696d7c7a
|
|
7
|
+
data.tar.gz: '0769e7e7f5f55836395bedb94f04d5665accb807a88e5c5bbb98f6c0cd92547a62410dfd4ae1a3873e40114d302fcb966f65aaed4d8b8a31e02fa2342b7171c3'
|
|
@@ -20,6 +20,50 @@ module Pindo
|
|
|
20
20
|
git!(%W(config --global user.name #{usrname}))
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
# 检查指定目录的 Git 仓库是否使用 gitee.com 远程地址
|
|
24
|
+
def is_gitee_repo?(local_repo_dir: nil)
|
|
25
|
+
return false if local_repo_dir.nil? || !File.exist?(local_repo_dir)
|
|
26
|
+
begin
|
|
27
|
+
remote_url = git!(%W(-C #{local_repo_dir} remote get-url origin)).strip rescue ""
|
|
28
|
+
remote_url.include?("gitee.com")
|
|
29
|
+
rescue
|
|
30
|
+
false
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# 临时去除代理环境变量执行代码块
|
|
35
|
+
# 用于 gitee.com 等不需要代理的仓库操作
|
|
36
|
+
def without_proxy(&block)
|
|
37
|
+
saved_env = {}
|
|
38
|
+
%w[http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY].each do |key|
|
|
39
|
+
saved_env[key] = ENV[key]
|
|
40
|
+
ENV.delete(key)
|
|
41
|
+
end
|
|
42
|
+
begin
|
|
43
|
+
block.call
|
|
44
|
+
ensure
|
|
45
|
+
saved_env.each do |key, value|
|
|
46
|
+
if value.nil?
|
|
47
|
+
ENV.delete(key)
|
|
48
|
+
else
|
|
49
|
+
ENV[key] = value
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# 执行需要联网的 git 命令(fetch / push / pull)
|
|
56
|
+
# 若仓库地址包含 gitee.com,自动清除代理环境变量再执行
|
|
57
|
+
# @param project_dir [String] 仓库目录(用于判断是否 gitee)
|
|
58
|
+
# @param args [Array] git 命令参数
|
|
59
|
+
def git_remote!(project_dir, args)
|
|
60
|
+
if is_gitee_repo?(local_repo_dir: project_dir)
|
|
61
|
+
without_proxy { git!(args) }
|
|
62
|
+
else
|
|
63
|
+
git!(args)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
23
67
|
def is_git_directory?(local_repo_dir: nil)
|
|
24
68
|
args = local_repo_dir ? %W(-C #{local_repo_dir} rev-parse --is-inside-work-tree) : %w(rev-parse --is-inside-work-tree)
|
|
25
69
|
begin
|
|
@@ -51,7 +95,7 @@ module Pindo
|
|
|
51
95
|
result = true
|
|
52
96
|
end
|
|
53
97
|
|
|
54
|
-
|
|
98
|
+
git_remote!(local_repo_dir, %W(-C #{local_repo_dir} push origin #{branch}:#{branch}))
|
|
55
99
|
|
|
56
100
|
Dir.chdir(current)
|
|
57
101
|
return result
|
|
@@ -69,7 +113,7 @@ module Pindo
|
|
|
69
113
|
end
|
|
70
114
|
|
|
71
115
|
if remote_branch_exists?(local_repo_dir: local_repo_dir, branch: branch)
|
|
72
|
-
|
|
116
|
+
git_remote!(local_repo_dir, %W(-C #{local_repo_dir} push origin :#{branch}))
|
|
73
117
|
result = true
|
|
74
118
|
end
|
|
75
119
|
|
|
@@ -105,7 +149,7 @@ module Pindo
|
|
|
105
149
|
result = false
|
|
106
150
|
if File.exist?(local_repo_dir)
|
|
107
151
|
Dir.chdir(local_repo_dir)
|
|
108
|
-
res_data =
|
|
152
|
+
res_data = git_remote!(local_repo_dir, %W(-C #{local_repo_dir} ls-remote --heads origin refs/heads/#{branch}))
|
|
109
153
|
result = !res_data.nil? && !res_data.empty?
|
|
110
154
|
else
|
|
111
155
|
result = false
|
|
@@ -125,7 +169,7 @@ module Pindo
|
|
|
125
169
|
git!(%W(-C #{local_repo_dir} tag #{tag_name}))
|
|
126
170
|
result = true
|
|
127
171
|
end
|
|
128
|
-
|
|
172
|
+
git_remote!(local_repo_dir, %W(-C #{local_repo_dir} push origin #{tag_name}))
|
|
129
173
|
else
|
|
130
174
|
result = false
|
|
131
175
|
end
|
|
@@ -152,7 +196,7 @@ module Pindo
|
|
|
152
196
|
if local_tag_exists?(local_repo_dir: local_repo_dir, tag_name: tag_name)
|
|
153
197
|
git!(%W(-C #{local_repo_dir} tag -d #{tag_name}))
|
|
154
198
|
end
|
|
155
|
-
|
|
199
|
+
git_remote!(local_repo_dir, %W(-C #{local_repo_dir} push origin :#{tag_name}))
|
|
156
200
|
add_tag(local_repo_dir:local_repo_dir, tag_name:tag_name)
|
|
157
201
|
else
|
|
158
202
|
if local_tag_exists?(local_repo_dir: local_repo_dir, tag_name: tag_name)
|
|
@@ -173,7 +217,7 @@ module Pindo
|
|
|
173
217
|
result = true
|
|
174
218
|
end
|
|
175
219
|
if remote_tag_exists?(local_repo_dir: local_repo_dir, tag_name: tag_name)
|
|
176
|
-
|
|
220
|
+
git_remote!(local_repo_dir, %W(-C #{local_repo_dir} push origin :#{tag_name}))
|
|
177
221
|
result = true
|
|
178
222
|
end
|
|
179
223
|
else
|
|
@@ -193,7 +237,7 @@ module Pindo
|
|
|
193
237
|
if File.exist?(local_repo_dir)
|
|
194
238
|
Dir.chdir(local_repo_dir)
|
|
195
239
|
tag_ref = "refs/tags/#{tag_name}"
|
|
196
|
-
res_data =
|
|
240
|
+
res_data = git_remote!(local_repo_dir, %W(-C #{local_repo_dir} ls-remote --tags origin #{tag_ref}))
|
|
197
241
|
result = !res_data.nil? && !res_data.empty?
|
|
198
242
|
else
|
|
199
243
|
result = false
|
|
@@ -250,6 +294,19 @@ module Pindo
|
|
|
250
294
|
current=Dir.pwd
|
|
251
295
|
local_repo_dir = File::join(path, reponame)
|
|
252
296
|
|
|
297
|
+
# gitee.com 仓库自动去除代理
|
|
298
|
+
if remote_url && remote_url.include?("gitee.com")
|
|
299
|
+
return without_proxy { getcode_to_dir_impl(reponame: reponame, remote_url: remote_url, path: path, new_branch: new_branch, new_tag: new_tag) }
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
getcode_to_dir_impl(reponame: reponame, remote_url: remote_url, path: path, new_branch: new_branch, new_tag: new_tag)
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def getcode_to_dir_impl(reponame:nil, remote_url:nil, path: nil, new_branch:"master", new_tag: nil)
|
|
306
|
+
|
|
307
|
+
current=Dir.pwd
|
|
308
|
+
local_repo_dir = File::join(path, reponame)
|
|
309
|
+
|
|
253
310
|
Funlog.instance.fancyinfo_update("开始更新仓库:#{local_repo_dir}...")
|
|
254
311
|
|
|
255
312
|
begin
|
|
@@ -267,13 +324,17 @@ module Pindo
|
|
|
267
324
|
git!(%W(remote add origin #{remote_url}))
|
|
268
325
|
args = %W(-C #{local_repo_dir} fetch origin)
|
|
269
326
|
args.push('--progress')
|
|
270
|
-
|
|
327
|
+
git_remote!(local_repo_dir, args)
|
|
271
328
|
git!(%W(-C #{local_repo_dir} branch --set-upstream-to=origin/#{current_branch} #{current_branch}))
|
|
272
329
|
end
|
|
273
330
|
|
|
274
|
-
|
|
331
|
+
git_remote!(local_repo_dir, %W(-C #{local_repo_dir} fetch origin --progress))
|
|
275
332
|
else
|
|
276
|
-
|
|
333
|
+
if remote_url&.include?("gitee.com")
|
|
334
|
+
without_proxy { git!(['clone', remote_url, local_repo_dir]) }
|
|
335
|
+
else
|
|
336
|
+
git!(['clone', remote_url, local_repo_dir])
|
|
337
|
+
end
|
|
277
338
|
end
|
|
278
339
|
|
|
279
340
|
Dir.chdir(local_repo_dir)
|
|
@@ -281,7 +342,7 @@ module Pindo
|
|
|
281
342
|
if current_branch.eql?(new_branch)
|
|
282
343
|
git!(%W(-C #{local_repo_dir} reset --hard origin/#{new_branch}))
|
|
283
344
|
git!(%W(-C #{local_repo_dir} branch --set-upstream-to=origin/#{new_branch} #{new_branch}))
|
|
284
|
-
|
|
345
|
+
git_remote!(local_repo_dir, %W(-C #{local_repo_dir} pull))
|
|
285
346
|
|
|
286
347
|
else
|
|
287
348
|
git!(%W(-C #{local_repo_dir} clean -fd))
|
|
@@ -295,7 +356,7 @@ module Pindo
|
|
|
295
356
|
end
|
|
296
357
|
end
|
|
297
358
|
git!(%W(-C #{local_repo_dir} branch --set-upstream-to=origin/#{new_branch} #{new_branch}))
|
|
298
|
-
|
|
359
|
+
git_remote!(local_repo_dir, %W(-C #{local_repo_dir} pull))
|
|
299
360
|
end
|
|
300
361
|
|
|
301
362
|
if !new_tag.nil? && new_tag != ""
|
|
@@ -335,17 +396,20 @@ module Pindo
|
|
|
335
396
|
FileUtils.mkdir(pindo_dir)
|
|
336
397
|
end
|
|
337
398
|
|
|
399
|
+
# 通配符 bundle id (如 com.eyesofstorms.*) 对应的仓库名去掉 .* 后缀
|
|
400
|
+
actual_repo_name = repo_name&.gsub(".*", "") || repo_name
|
|
401
|
+
|
|
338
402
|
repo_org_name = Pindoconfig.instance.build_deploy_org
|
|
339
403
|
|
|
340
404
|
git_repo_file = File.join(Pindoconfig.instance.pindo_env_configdir, "git_base_url.json")
|
|
341
405
|
git_repo_json = JSON.parse(File.read(git_repo_file))
|
|
342
|
-
if
|
|
343
|
-
repo_org_name = git_repo_json[
|
|
406
|
+
if actual_repo_name && git_repo_json && git_repo_json[actual_repo_name]
|
|
407
|
+
repo_org_name = git_repo_json[actual_repo_name]
|
|
344
408
|
end
|
|
345
409
|
|
|
346
|
-
url = File.join("https://gitee.com", repo_org_name,
|
|
347
|
-
getcode_to_dir(reponame:
|
|
348
|
-
config_repo_dir = File.join(pindo_dir,
|
|
410
|
+
url = File.join("https://gitee.com", repo_org_name, actual_repo_name + ".git")
|
|
411
|
+
getcode_to_dir(reponame:actual_repo_name, remote_url: url, path:pindo_dir)
|
|
412
|
+
config_repo_dir = File.join(pindo_dir, actual_repo_name)
|
|
349
413
|
|
|
350
414
|
|
|
351
415
|
|
|
@@ -414,6 +478,19 @@ module Pindo
|
|
|
414
478
|
def git_addpush_repo(path:nil, message:"res", commit_file_params:nil)
|
|
415
479
|
current=Dir.pwd
|
|
416
480
|
Dir.chdir(path)
|
|
481
|
+
|
|
482
|
+
# gitee.com 仓库自动去除代理
|
|
483
|
+
if is_gitee_repo?(local_repo_dir: path)
|
|
484
|
+
Dir.chdir(current)
|
|
485
|
+
return without_proxy { git_addpush_repo_impl(path: path, message: message, commit_file_params: commit_file_params) }
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
git_addpush_repo_impl(path: path, message: message, commit_file_params: commit_file_params)
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
def git_addpush_repo_impl(path:nil, message:"res", commit_file_params:nil)
|
|
492
|
+
current=Dir.pwd
|
|
493
|
+
Dir.chdir(path)
|
|
417
494
|
begin
|
|
418
495
|
if !commit_file_params.nil? && !commit_file_params.empty?
|
|
419
496
|
files_list = git! ['ls-files', '--other', '--modified', '--exclude-standard'] || []
|
|
@@ -527,9 +604,13 @@ module Pindo
|
|
|
527
604
|
handle_delete_all(current_project_dir, coding_branch)
|
|
528
605
|
when Pindo::UncommittedFilesProcessType::STASH
|
|
529
606
|
handle_stash(current_project_dir, coding_branch)
|
|
530
|
-
when Pindo::UncommittedFilesProcessType::
|
|
531
|
-
#
|
|
532
|
-
Funlog.instance.warning("
|
|
607
|
+
when Pindo::UncommittedFilesProcessType::SKIP_WITH_TAG
|
|
608
|
+
# 不提交,但后续会合并分支并打 tag
|
|
609
|
+
Funlog.instance.warning("跳过提交,但会合并分支并打 tag")
|
|
610
|
+
return
|
|
611
|
+
when Pindo::UncommittedFilesProcessType::SKIP_WITHOUT_TAG
|
|
612
|
+
# 不提交,不合并分支,不打 tag
|
|
613
|
+
Funlog.instance.warning("跳过提交,不合并分支,不打 tag")
|
|
533
614
|
return
|
|
534
615
|
when Pindo::UncommittedFilesProcessType::EXIT
|
|
535
616
|
raise Informative, "请手动处理未提交的文件!!!"
|
|
@@ -593,14 +674,14 @@ module Pindo
|
|
|
593
674
|
end
|
|
594
675
|
end
|
|
595
676
|
|
|
596
|
-
|
|
677
|
+
git_remote!(project_dir, %W(-C #{project_dir} fetch origin))
|
|
597
678
|
Funlog.instance.fancyinfo_start("正在push...")
|
|
598
679
|
if remote_branch_exists?(local_repo_dir: project_dir, branch: branch)
|
|
599
680
|
git!(%W(-C #{project_dir} branch --set-upstream-to=origin/#{branch} #{branch}))
|
|
600
|
-
|
|
601
|
-
|
|
681
|
+
git_remote!(project_dir, %W(-C #{project_dir} pull))
|
|
682
|
+
git_remote!(project_dir, %W(-C #{project_dir} push))
|
|
602
683
|
else
|
|
603
|
-
|
|
684
|
+
git_remote!(project_dir, %W(-C #{project_dir} push --set-upstream origin #{branch}))
|
|
604
685
|
end
|
|
605
686
|
Funlog.instance.fancyinfo_success("push文件完成!")
|
|
606
687
|
end
|
|
@@ -615,7 +696,7 @@ module Pindo
|
|
|
615
696
|
git!(%W(-C #{project_dir} reset --hard))
|
|
616
697
|
git!(%W(-C #{project_dir} clean -df))
|
|
617
698
|
git!(%W(-C #{project_dir} branch --set-upstream-to=origin/#{branch} #{branch}))
|
|
618
|
-
|
|
699
|
+
git_remote!(project_dir, %W(-C #{project_dir} pull))
|
|
619
700
|
Funlog.instance.fancyinfo_success("未提交的文件已删除!")
|
|
620
701
|
end
|
|
621
702
|
|
|
@@ -887,7 +968,7 @@ module Pindo
|
|
|
887
968
|
git_root = git_root_directory(local_repo_dir: project_dir)
|
|
888
969
|
unless git_root
|
|
889
970
|
Funlog.instance.fancyinfo_warning("当前目录不是Git仓库")
|
|
890
|
-
return Pindo::UncommittedFilesProcessType::
|
|
971
|
+
return Pindo::UncommittedFilesProcessType::SKIP_WITH_TAG
|
|
891
972
|
end
|
|
892
973
|
|
|
893
974
|
current_branch = git!(%W(-C #{git_root} rev-parse --abbrev-ref HEAD)).strip
|
|
@@ -897,11 +978,12 @@ module Pindo
|
|
|
897
978
|
cli = HighLine.new
|
|
898
979
|
cli.choose do |menu|
|
|
899
980
|
menu.header = "仓库有未提交的修改,请选择处理方式"
|
|
900
|
-
menu.prompt = "请输入选项(1/2/3/4/5):"
|
|
981
|
+
menu.prompt = "请输入选项(1/2/3/4/5/6):"
|
|
901
982
|
menu.choice("(commit) 全部提交") { Pindo::UncommittedFilesProcessType::COMMIT }
|
|
902
|
-
menu.choice("(skip)
|
|
983
|
+
menu.choice("(skip-with-tag) 不提交,但合并分支并打tag") { Pindo::UncommittedFilesProcessType::SKIP_WITH_TAG }
|
|
984
|
+
menu.choice("(skip-without-tag) 不提交,不合并分支,不打tag") { Pindo::UncommittedFilesProcessType::SKIP_WITHOUT_TAG }
|
|
903
985
|
menu.choice("(reset) 全部丢弃更改,回滚代码") { Pindo::UncommittedFilesProcessType::RESET }
|
|
904
|
-
menu.choice("(stash) 保存到stash
|
|
986
|
+
menu.choice("(stash) 保存到stash区域(该部分代码本次编译不生效)") { Pindo::UncommittedFilesProcessType::STASH }
|
|
905
987
|
menu.choice("(exit) 先退出,手动来处理退出") { Pindo::UncommittedFilesProcessType::EXIT }
|
|
906
988
|
end
|
|
907
989
|
end
|
|
@@ -936,7 +1018,7 @@ module Pindo
|
|
|
936
1018
|
end
|
|
937
1019
|
|
|
938
1020
|
git!(%W(-C #{current_project_dir} branch --set-upstream-to=origin/#{target_branch} #{target_branch}))
|
|
939
|
-
|
|
1021
|
+
git_remote!(current_project_dir, %W(-C #{current_project_dir} fetch origin #{target_branch}))
|
|
940
1022
|
git!(%W(-C #{current_project_dir} merge origin/#{target_branch}))
|
|
941
1023
|
|
|
942
1024
|
# 执行合并操作
|
|
@@ -947,7 +1029,7 @@ module Pindo
|
|
|
947
1029
|
if !conflict_filelist.nil? && !conflict_filelist.strip.empty?
|
|
948
1030
|
raise Informative, "合并#{source_branch}到#{target_branch}时产生冲突,请手动处理!"
|
|
949
1031
|
else
|
|
950
|
-
|
|
1032
|
+
git_remote!(current_project_dir, %W(-C #{current_project_dir} push))
|
|
951
1033
|
Funlog.instance.fancyinfo_success("代码已经合并到#{target_branch}分支")
|
|
952
1034
|
# 获取 target_branch 的 commit ID(处理空分支情况)
|
|
953
1035
|
begin
|
|
@@ -977,7 +1059,7 @@ module Pindo
|
|
|
977
1059
|
|
|
978
1060
|
# 基于 source_branch 创建 target_branch(明确指定起点,避免基于错误的分支创建)
|
|
979
1061
|
git!(%W(-C #{current_project_dir} checkout -b #{target_branch} #{source_branch}))
|
|
980
|
-
|
|
1062
|
+
git_remote!(current_project_dir, %W(-C #{current_project_dir} push origin #{target_branch}))
|
|
981
1063
|
git!(%W(-C #{current_project_dir} branch --set-upstream-to=origin/#{target_branch} #{target_branch}))
|
|
982
1064
|
|
|
983
1065
|
Funlog.instance.fancyinfo_success("代码已经合并到#{target_branch}分支")
|
|
@@ -1013,14 +1095,14 @@ module Pindo
|
|
|
1013
1095
|
Funlog.instance.fancyinfo_success("已将#{source_branch} fast-forward 到#{target_branch},两分支现在在同一节点")
|
|
1014
1096
|
|
|
1015
1097
|
# 推送到远程(普通 push,因为是 fast-forward)
|
|
1016
|
-
|
|
1098
|
+
git_remote!(current_project_dir, %W(-C #{current_project_dir} push origin #{source_branch}))
|
|
1017
1099
|
Funlog.instance.fancyinfo_success("已推送#{source_branch}分支到远程")
|
|
1018
1100
|
rescue => e
|
|
1019
1101
|
if e.message.include?("Not possible to fast-forward")
|
|
1020
1102
|
# 理论上不应该到这里,因为前面检查过是祖先
|
|
1021
1103
|
Funlog.instance.fancyinfo_warning("无法 fast-forward,将产生 merge commit")
|
|
1022
1104
|
git!(%W(-C #{current_project_dir} merge #{target_branch}))
|
|
1023
|
-
|
|
1105
|
+
git_remote!(current_project_dir, %W(-C #{current_project_dir} push origin #{source_branch}))
|
|
1024
1106
|
else
|
|
1025
1107
|
raise e
|
|
1026
1108
|
end
|
|
@@ -1036,7 +1118,7 @@ module Pindo
|
|
|
1036
1118
|
raise Informative, "合并#{target_branch}到#{source_branch}时产生冲突,请手动处理!"
|
|
1037
1119
|
end
|
|
1038
1120
|
|
|
1039
|
-
|
|
1121
|
+
git_remote!(current_project_dir, %W(-C #{current_project_dir} push origin #{source_branch}))
|
|
1040
1122
|
Funlog.instance.fancyinfo_success("已将#{target_branch}合并到#{source_branch}(产生了新 merge commit)")
|
|
1041
1123
|
end
|
|
1042
1124
|
else
|
|
@@ -1071,13 +1153,13 @@ module Pindo
|
|
|
1071
1153
|
unless remote_exists
|
|
1072
1154
|
Funlog.instance.fancyinfo_warning("远程分支 #{remote_branch} 不存在,需要创建")
|
|
1073
1155
|
Funlog.instance.fancyinfo_start("正在推送并创建远程分支...")
|
|
1074
|
-
|
|
1156
|
+
git_remote!(project_dir, %W(-C #{project_dir} push -u origin #{branch}))
|
|
1075
1157
|
Funlog.instance.fancyinfo_success("远程分支创建成功!")
|
|
1076
1158
|
return
|
|
1077
1159
|
end
|
|
1078
1160
|
|
|
1079
1161
|
# 3. 先 fetch 获取最新的远程状态
|
|
1080
|
-
|
|
1162
|
+
git_remote!(project_dir, %W(-C #{project_dir} fetch origin #{branch}))
|
|
1081
1163
|
|
|
1082
1164
|
# 4. 检查本地分支是否领先远程分支
|
|
1083
1165
|
ahead_count = git!(%W(-C #{project_dir} rev-list --count #{remote_branch}..#{branch})).strip.to_i
|
|
@@ -1093,7 +1175,7 @@ module Pindo
|
|
|
1093
1175
|
# 仅本地领先:直接推送
|
|
1094
1176
|
Funlog.instance.fancyinfo_warning("检测到 #{ahead_count} 个本地提交尚未推送")
|
|
1095
1177
|
Funlog.instance.fancyinfo_start("正在推送到远程分支 #{remote_branch}...")
|
|
1096
|
-
|
|
1178
|
+
git_remote!(project_dir, %W(-C #{project_dir} push origin #{branch}))
|
|
1097
1179
|
Funlog.instance.fancyinfo_success("推送成功!")
|
|
1098
1180
|
elsif ahead_count == 0 && behind_count > 0
|
|
1099
1181
|
# 仅远程领先:重置本地到远程位置
|
|
@@ -66,7 +66,7 @@ module Pindo
|
|
|
66
66
|
|
|
67
67
|
使用示例:
|
|
68
68
|
|
|
69
|
-
$ pindo and autobuild --bundle_name=com.example
|
|
69
|
+
$ pindo and autobuild --bundle_name=com.example.* # 指定 Bundle Name(支持通配符)
|
|
70
70
|
|
|
71
71
|
$ pindo and autobuild --proj="My App" # 指定项目名称
|
|
72
72
|
|
|
@@ -151,8 +151,11 @@ module Pindo
|
|
|
151
151
|
def run
|
|
152
152
|
pindo_project_dir = Dir.pwd
|
|
153
153
|
|
|
154
|
-
# 加载 JPS
|
|
155
|
-
Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
|
|
154
|
+
# 加载 JPS 配置(缓存 project_name,并通过映射表解析 bundle_id)
|
|
155
|
+
Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir, conf: @args_conf)
|
|
156
|
+
|
|
157
|
+
# 解析 bundle_name(优先级:命令行参数 > JPSBuildConfig映射 > 交互选择)
|
|
158
|
+
resolve_bundle_name!
|
|
156
159
|
|
|
157
160
|
# 准备配置
|
|
158
161
|
config = prepare_android_config(pindo_project_dir)
|
|
@@ -177,27 +180,56 @@ module Pindo
|
|
|
177
180
|
|
|
178
181
|
private
|
|
179
182
|
|
|
180
|
-
#
|
|
181
|
-
def
|
|
182
|
-
#
|
|
183
|
-
|
|
183
|
+
# 解析 bundle_name(优先级:命令行参数 > JPSBuildConfig映射 > prepare_upload交互选择)
|
|
184
|
+
def resolve_bundle_name!
|
|
185
|
+
# 优先级 1:命令行 --bundle_name 参数
|
|
186
|
+
return if @args_bundle_name && !@args_bundle_name.empty?
|
|
184
187
|
|
|
185
|
-
#
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
@
|
|
188
|
+
# 优先级 2:JPSBuildConfig.json 通过映射表解析的 bundle_name
|
|
189
|
+
resolved = Pindo::Options::GlobalOptionsState.instance[:bundle_name]
|
|
190
|
+
if resolved && !resolved.empty?
|
|
191
|
+
@args_bundle_name = resolved
|
|
192
|
+
return
|
|
189
193
|
end
|
|
190
194
|
|
|
191
|
-
#
|
|
192
|
-
|
|
195
|
+
# 优先级 3:走 prepare_upload 交互选择 JPS 项目,创建/更新 JPSBuildConfig.json
|
|
196
|
+
pindo_project_dir = Dir.pwd
|
|
197
|
+
@cached_app_info_obj, @cached_workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
193
198
|
working_directory: pindo_project_dir,
|
|
194
199
|
conf: @args_conf,
|
|
195
200
|
package_type: 'apk'
|
|
196
201
|
)
|
|
197
202
|
|
|
203
|
+
# prepare_upload 已创建 JPSBuildConfig.json,重新加载获取 bundle_name
|
|
204
|
+
Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir, conf: @args_conf)
|
|
205
|
+
resolved = Pindo::Options::GlobalOptionsState.instance[:bundle_name]
|
|
206
|
+
if resolved && !resolved.empty?
|
|
207
|
+
@args_bundle_name = resolved
|
|
208
|
+
return
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# 最终降级:交互选择 bundle_name
|
|
212
|
+
@args_bundle_name = get_selected_dev_bundle_name()
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# 准备 Android 配置
|
|
216
|
+
def prepare_android_config(pindo_project_dir)
|
|
217
|
+
# 获取 JPS 配置(复用 resolve_bundle_name! 中已缓存的结果)
|
|
218
|
+
if @cached_app_info_obj && @cached_workflow_info
|
|
219
|
+
app_info_obj = @cached_app_info_obj
|
|
220
|
+
workflow_info = @cached_workflow_info
|
|
221
|
+
else
|
|
222
|
+
app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
223
|
+
working_directory: pindo_project_dir,
|
|
224
|
+
conf: @args_conf,
|
|
225
|
+
package_type: 'apk',
|
|
226
|
+
bundle_name: @args_bundle_name
|
|
227
|
+
)
|
|
228
|
+
end
|
|
229
|
+
|
|
198
230
|
{
|
|
199
231
|
project_path: pindo_project_dir,
|
|
200
|
-
bundle_name:
|
|
232
|
+
bundle_name: @args_bundle_name,
|
|
201
233
|
app_info_obj: app_info_obj,
|
|
202
234
|
workflow_info: workflow_info
|
|
203
235
|
}
|
|
@@ -223,13 +255,15 @@ module Pindo
|
|
|
223
255
|
# 如果用户指定了 --git-commit 参数,直接使用该参数;否则交互式询问
|
|
224
256
|
user_specified_git_commit = @options[:git_commit] != nil
|
|
225
257
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
258
|
+
if ENV['PINDO_DEBUG']
|
|
259
|
+
puts "[PINDO_DEBUG] @options[:git_commit] = #{@options[:git_commit].inspect}"
|
|
260
|
+
puts "[PINDO_DEBUG] @args_git_commit = #{@args_git_commit.inspect}"
|
|
261
|
+
puts "[PINDO_DEBUG] user_specified_git_commit = #{user_specified_git_commit}"
|
|
262
|
+
end
|
|
229
263
|
|
|
230
264
|
if user_specified_git_commit
|
|
231
265
|
# 用户指定了 --git-commit 参数,直接使用
|
|
232
|
-
process_type = @args_git_commit || Pindo::UncommittedFilesProcessType::
|
|
266
|
+
process_type = @args_git_commit || Pindo::UncommittedFilesProcessType::SKIP_WITH_TAG
|
|
233
267
|
Funlog.instance.info("使用用户指定的 Git 提交处理方式:#{process_type}")
|
|
234
268
|
else
|
|
235
269
|
# 未指定参数,交互式询问
|
|
@@ -327,12 +361,15 @@ module Pindo
|
|
|
327
361
|
build_task.dependencies << tasks.last.id if tasks.any?
|
|
328
362
|
tasks << build_task
|
|
329
363
|
|
|
330
|
-
# 4. Git
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
364
|
+
# 4. Git 标签任务(skip_without_tag 模式下不创建)
|
|
365
|
+
git_tag_task = nil
|
|
366
|
+
unless process_type == Pindo::UncommittedFilesProcessType::SKIP_WITHOUT_TAG
|
|
367
|
+
# 所有参数都从 GitCommitTask 获取
|
|
368
|
+
git_tag_task = Pindo::TaskSystem::GitTagTask.new(config[:project_path])
|
|
369
|
+
git_tag_task.dependencies << build_task.id
|
|
370
|
+
git_tag_task.dependencies << git_commit_task.id
|
|
371
|
+
tasks << git_tag_task
|
|
372
|
+
end
|
|
336
373
|
|
|
337
374
|
# 5. 上传和消息发送任务(如果需要)
|
|
338
375
|
upload_task = nil # 声明变量以便后续绑定任务使用
|
|
@@ -419,7 +456,7 @@ module Pindo
|
|
|
419
456
|
)
|
|
420
457
|
# 依赖 Git Commit、Git Tag 和 Bind Package 任务
|
|
421
458
|
workflow_message_task.dependencies << git_commit_task.id
|
|
422
|
-
workflow_message_task.dependencies << git_tag_task.id
|
|
459
|
+
workflow_message_task.dependencies << git_tag_task.id if git_tag_task
|
|
423
460
|
workflow_message_task.dependencies << bind_package_task.id
|
|
424
461
|
tasks << workflow_message_task
|
|
425
462
|
end
|
|
@@ -133,7 +133,7 @@ module Pindo
|
|
|
133
133
|
|
|
134
134
|
begin
|
|
135
135
|
# 加载 JPS 配置(如果存在)
|
|
136
|
-
Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
|
|
136
|
+
Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir, conf: @args_conf)
|
|
137
137
|
|
|
138
138
|
# 处理配置文件
|
|
139
139
|
prepare_config(pindo_project_dir)
|
|
@@ -97,7 +97,7 @@ module Pindo
|
|
|
97
97
|
@args_release_branch = @options[:release_branch] || 'master'
|
|
98
98
|
@args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type])
|
|
99
99
|
@args_tag_pre = @options[:tag_pre] || 'ios_release_'
|
|
100
|
-
@args_git_commit = Pindo::Options::GitOptions.parse_git_commit_type(@options[:git_commit]) || Pindo::UncommittedFilesProcessType::
|
|
100
|
+
@args_git_commit = Pindo::Options::GitOptions.parse_git_commit_type(@options[:git_commit]) || Pindo::UncommittedFilesProcessType::SKIP_WITH_TAG
|
|
101
101
|
|
|
102
102
|
super(argv)
|
|
103
103
|
end
|
|
@@ -165,7 +165,7 @@ module Pindo
|
|
|
165
165
|
def run
|
|
166
166
|
begin
|
|
167
167
|
# 加载 JPS 配置(如果存在)
|
|
168
|
-
Pindo::BuildHelper.share_instance.load_jps_build_config(Dir.pwd)
|
|
168
|
+
Pindo::BuildHelper.share_instance.load_jps_build_config(Dir.pwd, conf: @args_conf)
|
|
169
169
|
|
|
170
170
|
# 1. 查找或指定 IPA 文件
|
|
171
171
|
ipa_file_path = find_ipa_file()
|