pindo 4.6.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +7 -0
  2. data/bin/pindo +35 -0
  3. data/lib/pindo/base/aeshelper.rb +31 -0
  4. data/lib/pindo/base/deviceinfo.rb +90 -0
  5. data/lib/pindo/base/executable.rb +224 -0
  6. data/lib/pindo/base/githelper.rb +489 -0
  7. data/lib/pindo/base/hashhelper.rb +134 -0
  8. data/lib/pindo/base/plaininformative.rb +15 -0
  9. data/lib/pindo/base/plistbuddyexecutable.rb +121 -0
  10. data/lib/pindo/base/standarderror.rb +14 -0
  11. data/lib/pindo/client/applovinclient.rb +156 -0
  12. data/lib/pindo/client/aws3sclient.rb +183 -0
  13. data/lib/pindo/client/bossclient.rb +229 -0
  14. data/lib/pindo/client/bossconfigclient.rb +175 -0
  15. data/lib/pindo/client/giteeclient.rb +65 -0
  16. data/lib/pindo/client/httpclient.rb +40 -0
  17. data/lib/pindo/client/pgyerclient.rb +439 -0
  18. data/lib/pindo/client/tgateclient.rb +103 -0
  19. data/lib/pindo/command.rb +101 -0
  20. data/lib/pindo/config/pindoconfig.rb +439 -0
  21. data/lib/pindo/config/pindouserlocalconfig.rb +81 -0
  22. data/lib/pindo/deploy/Fastfile +233 -0
  23. data/lib/pindo/deploy/build.rb +167 -0
  24. data/lib/pindo/deploy/bundleid.rb +245 -0
  25. data/lib/pindo/deploy/cert.rb +508 -0
  26. data/lib/pindo/deploy/check.rb +79 -0
  27. data/lib/pindo/deploy/configproj.rb +89 -0
  28. data/lib/pindo/deploy/confusecode.rb +248 -0
  29. data/lib/pindo/deploy/confuseproj.rb +112 -0
  30. data/lib/pindo/deploy/fabric.rb +58 -0
  31. data/lib/pindo/deploy/getitcinfo.rb +248 -0
  32. data/lib/pindo/deploy/iap.rb +796 -0
  33. data/lib/pindo/deploy/initconfig.rb +128 -0
  34. data/lib/pindo/deploy/itcapp.rb +147 -0
  35. data/lib/pindo/deploy/itcinfo.rb +369 -0
  36. data/lib/pindo/deploy/pem.rb +55 -0
  37. data/lib/pindo/deploy/pullconfig.rb +46 -0
  38. data/lib/pindo/deploy/pushconfig.rb +83 -0
  39. data/lib/pindo/deploy/quswark.rb +146 -0
  40. data/lib/pindo/deploy/quswauth.rb +67 -0
  41. data/lib/pindo/deploy/reportbug.rb +135 -0
  42. data/lib/pindo/deploy/resign.rb +338 -0
  43. data/lib/pindo/deploy/tag.rb +108 -0
  44. data/lib/pindo/deploy/updateconfig.rb +129 -0
  45. data/lib/pindo/deploy/uploadipa.rb +63 -0
  46. data/lib/pindo/deploy.rb +44 -0
  47. data/lib/pindo/dev/autobuild.rb +204 -0
  48. data/lib/pindo/dev/autoresign.rb +186 -0
  49. data/lib/pindo/dev/confusecode.rb +127 -0
  50. data/lib/pindo/dev/confuseproj.rb +111 -0
  51. data/lib/pindo/dev/createbuild.rb +159 -0
  52. data/lib/pindo/dev/debug.rb +141 -0
  53. data/lib/pindo/dev/pub.rb +171 -0
  54. data/lib/pindo/dev/renewcert.rb +142 -0
  55. data/lib/pindo/dev.rb +23 -0
  56. data/lib/pindo/env/dreamstudio.rb +53 -0
  57. data/lib/pindo/env/flutter.rb +59 -0
  58. data/lib/pindo/env/flutter.sh +116 -0
  59. data/lib/pindo/env/quarkenv.rb +58 -0
  60. data/lib/pindo/env/swarkenv.rb +62 -0
  61. data/lib/pindo/env/workhard.rb +56 -0
  62. data/lib/pindo/env.rb +17 -0
  63. data/lib/pindo/ipa/autoresign.rb +188 -0
  64. data/lib/pindo/ipa/import.rb +261 -0
  65. data/lib/pindo/ipa/output.rb +396 -0
  66. data/lib/pindo/ipa.rb +22 -0
  67. data/lib/pindo/lib/forcepush.rb +159 -0
  68. data/lib/pindo/lib/lint.rb +115 -0
  69. data/lib/pindo/lib/push.rb +143 -0
  70. data/lib/pindo/lib/update.rb +75 -0
  71. data/lib/pindo/lib.rb +18 -0
  72. data/lib/pindo/module/appselect.rb +200 -0
  73. data/lib/pindo/module/appstore_in_app_purchase.rb +1803 -0
  74. data/lib/pindo/module/appstore_metadata_connect_api_helper.rb +12 -0
  75. data/lib/pindo/module/appstore_metadata_fastlane_helper.rb +922 -0
  76. data/lib/pindo/module/buildconfighelper.rb +13 -0
  77. data/lib/pindo/module/buildhelper.rb +76 -0
  78. data/lib/pindo/module/commonconfuseproj.rb +271 -0
  79. data/lib/pindo/module/config_project.sh +143 -0
  80. data/lib/pindo/module/configprojhelper.rb +631 -0
  81. data/lib/pindo/module/iap_tier.json +813 -0
  82. data/lib/pindo/module/icon_contents.json +116 -0
  83. data/lib/pindo/module/imessage_icon.json +91 -0
  84. data/lib/pindo/module/imgset_contents.json +21 -0
  85. data/lib/pindo/module/launchimg_contents.json +21 -0
  86. data/lib/pindo/module/pemcreate.rb +63 -0
  87. data/lib/pindo/module/pgyerhelper.rb +339 -0
  88. data/lib/pindo/module/xcodebuildpre.rb +258 -0
  89. data/lib/pindo/module/xcodehelper.rb +521 -0
  90. data/lib/pindo/options/appconfigoptions.rb +23 -0
  91. data/lib/pindo/options/deployoptions.rb +363 -0
  92. data/lib/pindo/pgyer/apptest.rb +104 -0
  93. data/lib/pindo/pgyer/comment.rb +95 -0
  94. data/lib/pindo/pgyer/download.rb +105 -0
  95. data/lib/pindo/pgyer/login.rb +61 -0
  96. data/lib/pindo/pgyer/upload.rb +234 -0
  97. data/lib/pindo/pgyer.rb +17 -0
  98. data/lib/pindo/repo/clone.rb +78 -0
  99. data/lib/pindo/repo/create.rb +55 -0
  100. data/lib/pindo/repo/login.rb +64 -0
  101. data/lib/pindo/repo/search.rb +60 -0
  102. data/lib/pindo/repo.rb +16 -0
  103. data/lib/pindo/setup.rb +60 -0
  104. data/lib/pindo/upgrade.rb +56 -0
  105. data/lib/pindo/utils/applovin.rb +213 -0
  106. data/lib/pindo/utils/boss.rb +209 -0
  107. data/lib/pindo/utils/clearcert.rb +60 -0
  108. data/lib/pindo/utils/device.rb +279 -0
  109. data/lib/pindo/utils/icon.rb +91 -0
  110. data/lib/pindo/utils/icon.sh +133 -0
  111. data/lib/pindo/utils/podindex.rb +56 -0
  112. data/lib/pindo/utils/podindex.sh +30 -0
  113. data/lib/pindo/utils/renewproj.rb +146 -0
  114. data/lib/pindo/utils/tgate.rb +159 -0
  115. data/lib/pindo/utils/xcassets.rb +46 -0
  116. data/lib/pindo/utils/xcassets.sh +88 -0
  117. data/lib/pindo/utils.rb +29 -0
  118. data/lib/pindo/version.rb +110 -0
  119. data/lib/pindo.rb +34 -0
  120. metadata +364 -0
@@ -0,0 +1,146 @@
1
+
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+
6
+ module Pindo
7
+ class Command
8
+ class Utils < Command
9
+ class Renewproj < Utils
10
+
11
+ include Command::DeployOptions
12
+
13
+ include XcodeHelper
14
+
15
+ self.summary = '重新创建Xcode工程'
16
+
17
+ self.description = <<-DESC
18
+ 重新创建Xcode工程
19
+ DESC
20
+
21
+ self.arguments = [
22
+ CLAide::Argument.new('path/to/config.json', true),
23
+ ]
24
+
25
+ def self.options
26
+ [
27
+ ['--n=', 'input project name'],
28
+ ['--nocreate', 'no create xcode project'],
29
+ ].concat(super)
30
+ end
31
+
32
+ def initialize(argv)
33
+ @project_name = argv.option('n')
34
+ @args_nocreate_flag = argv.flag?('nocreate')
35
+ super
36
+ end
37
+
38
+ def validate!
39
+ super
40
+ if @project_name.nil? || @project_name.empty?
41
+ if @config_json['project_info'] && @config_json['project_info']['project_name']
42
+ @project_name = @config_json['project_info']['project_name']
43
+ end
44
+ end
45
+
46
+ if @project_name.nil?
47
+ @project_name = ask('Project Name: ')
48
+ end
49
+
50
+ @project_name = "Example" if @project_name.nil? || @project_name.empty?
51
+ @project_name = @project_name.gsub(/ /, '');
52
+ @project_name = @project_name.gsub(/\'/, '');
53
+
54
+ puts "project_name = #{@project_name}"
55
+ end
56
+
57
+ def create_project(new_proj_name:nil, new_proj_path:nil, old_proj_name:nil, old_proj_path:nil)
58
+
59
+ new_proj_fullname = File.join(new_proj_path, new_proj_name) + ".xcodeproj"
60
+ Xcodeproj::Project.new(new_proj_fullname).save
61
+ new_proj_obj = Xcodeproj::Project.open(new_proj_fullname)
62
+
63
+ old_proj_fullname = File.join(old_proj_path, old_proj_name) + ".xcodeproj"
64
+ old_proj_obj = Xcodeproj::Project.open(old_proj_fullname)
65
+
66
+ copy_to_newproject(new_proj_path:new_proj_path, new_proj_name:new_proj_name, old_proj_path:old_proj_path, old_proj_name:old_proj_name)
67
+
68
+ create_project_target(new_proj_name:new_proj_name, new_proj_path:new_proj_path, new_proj_obj:new_proj_obj, old_proj_name:old_proj_name, old_proj_path:old_proj_path, old_proj_obj:old_proj_obj)
69
+
70
+ add_file_to_target(new_proj_name:new_proj_name, new_proj_path:new_proj_path, new_proj_obj:new_proj_obj, old_proj_name:old_proj_name, old_proj_path:old_proj_path, old_proj_obj:old_proj_obj)
71
+
72
+ config_project_target(new_proj_name:new_proj_name, new_proj_path:new_proj_path, new_proj_obj:new_proj_obj, old_proj_name:old_proj_name, old_proj_path:old_proj_path, old_proj_obj:old_proj_obj)
73
+
74
+ setting_new_project(new_proj_name:new_proj_name, new_proj_path:new_proj_path, new_proj_obj:new_proj_obj, old_proj_name:old_proj_name, old_proj_path:old_proj_path, old_proj_obj:old_proj_obj)
75
+
76
+ end
77
+
78
+
79
+ def run
80
+ system 'pod deintegrate'
81
+ current_dir = Dir.pwd
82
+ old_project_dir = current_dir
83
+ old_proj_name = get_old_proj_name(old_proj_path:current_dir)
84
+
85
+
86
+ if @args_nocreate_flag
87
+ puts "2=================="
88
+ new_proj_name = old_proj_name
89
+ new_project_dir = old_project_dir
90
+ ENV['pindo_new_project_dir'] = old_project_dir
91
+ else
92
+ new_proj_name = @project_name
93
+ if new_proj_name.nil?
94
+ puts "Please input a new project name."
95
+ return
96
+ end
97
+ new_project_dir = get_new_proj_path
98
+ ENV['pindo_new_project_dir'] = new_project_dir
99
+ create_project(new_proj_name:new_proj_name, new_proj_path:new_project_dir, old_proj_name:old_proj_name, old_proj_path:old_project_dir)
100
+ end
101
+
102
+ if File.exist?(File.join(new_project_dir, 'Podfile.lock'))
103
+ FileUtils.rm_rf(File.join(new_project_dir, 'Podfile.lock'))
104
+ end
105
+ system "open #{new_project_dir}"
106
+ puts "New Project Dir: #{new_project_dir}"
107
+ puts "Done !"
108
+ end
109
+
110
+ def get_new_proj_path
111
+
112
+ current_dir = Dir.pwd
113
+
114
+ temp_dir_name = @project_name + '_' +Time.now.strftime('%y%m%d_%H%M%S')
115
+ new_project_dir = File.join(File::expand_path(current_dir + "/../") , temp_dir_name)
116
+
117
+ if File.exist?(new_project_dir)
118
+ system 'sh rm -rf ' + new_project_dir
119
+ FileUtils.rm_rf(new_project_dir)
120
+ end
121
+ FileUtils.mkdir(new_project_dir)
122
+
123
+ return new_project_dir
124
+ end
125
+
126
+ def get_old_proj_name(old_proj_path:nil)
127
+
128
+
129
+ old_project_fullname = ""
130
+ Dir.foreach(old_proj_path) do |file|
131
+ if file =~ /(.*).xcodeproj/
132
+ old_project_fullname = file
133
+ break;
134
+ end
135
+ end
136
+
137
+ old_proj_name = File.basename(old_project_fullname, ".xcodeproj")
138
+ return old_proj_name
139
+
140
+ end
141
+
142
+
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,159 @@
1
+
2
+
3
+ require 'highline/import'
4
+ require 'fileutils'
5
+ require 'json'
6
+ require 'faraday'
7
+ require 'pindo/client/tgateclient'
8
+
9
+
10
+
11
+ module Pindo
12
+ class Command
13
+ class Utils < Command
14
+ class Tgate < Utils
15
+
16
+ self.summary = 'tGate的命令行终端工具'
17
+
18
+ self.description = <<-DESC
19
+ tGate的命令行终端工具. 用法:查看状态 pindo utils tgate --env=dev --type=device --deviceid=XXX-XX
20
+ 修改tgate状态,例如设置dev环境当前ip为超白: pindo utils tgate --env=dev --type=ip --status=super_white
21
+ DESC
22
+
23
+ self.arguments = [
24
+
25
+ ]
26
+
27
+ def self.options
28
+ [
29
+ ['--env', '指定的dev或者prod环境: --env=dev / prod'],
30
+ ['--type', '指定的type类型: --type=ip / device'],
31
+ ['--status', '指定需要修改状态: --status=normal / black / super_white '],
32
+ ['--deviceid', '指定手机设备deviceid: --deviceid=newvalue'],
33
+ ['--idfa', '指定手机设备idfa: --idfa=newvalue'],
34
+ ['--sbsid', '指定手机设备sbsid: --sbsid=newvalue'],
35
+ ['--sutid', '指定手机设备sutid: --sutid=newvalue'],
36
+ ['--tzlid', '指定手机设备tzlid: --tzlid=newvalue'],
37
+ ].concat(super)
38
+ end
39
+
40
+
41
+ def initialize(argv)
42
+
43
+ @args_env_options = argv.option('env')
44
+ @args_type_options = argv.option('type')
45
+ @args_status_options = argv.option('status')
46
+ @args_deviceid_options = argv.option('deviceid')
47
+ @args_idfa_options = argv.option('idfa')
48
+ @args_sbsid_options = argv.option('sbsid')
49
+ @args_sutid_options = argv.option('sutid')
50
+ @args_tzlid_options = argv.option('tzlid')
51
+
52
+
53
+ super(argv)
54
+ @additional_args = argv.remainder!
55
+ end
56
+
57
+ def validate!
58
+
59
+ super
60
+ end
61
+
62
+ def run
63
+
64
+ @tgate_client = TgateClient.new(base_usrl:pindo_single_config.tgate_base_url, req_config:pindo_single_config.tgate_req_config)
65
+
66
+
67
+ current_device_info = Pindo::DeviceInfo.new
68
+
69
+ if !@args_deviceid_options.nil?
70
+ current_device_info.device_id = @args_deviceid_options
71
+ end
72
+
73
+ if !@args_idfa_options.nil?
74
+ current_device_info.device_id = @args_idfa_options
75
+ end
76
+
77
+ if !@args_sbsid_options.nil?
78
+ current_device_info.device_id = @args_sbsid_options
79
+ end
80
+ if !@args_sutid_options.nil?
81
+ current_device_info.device_id = @args_sutid_options
82
+ end
83
+ if !@args_tzlid_options.nil?
84
+ current_device_info.device_id = @args_tzlid_options
85
+ end
86
+
87
+
88
+ puts
89
+ puts
90
+ puts "========================================================================================================="
91
+ puts "========================================================================================================="
92
+ puts
93
+
94
+
95
+
96
+ puts "111"
97
+ if !@args_status_options.nil?
98
+
99
+ puts @args_status_options
100
+ puts "112"
101
+ env = "dev"
102
+ if !@args_env_options.nil?
103
+ env = @args_env_options
104
+ end
105
+
106
+ type = "ip"
107
+ if !@args_type_options.nil? && @args_type_options.eql?("device")
108
+ type = @args_type_options
109
+ end
110
+
111
+ to_status = "normal"
112
+ if !@args_status_options.nil?
113
+ to_status = @args_status_options
114
+ end
115
+
116
+
117
+
118
+ puts "当前设备信息:"
119
+ puts JSON.pretty_generate(JSON.parse(current_device_info.to_json))
120
+ puts
121
+
122
+ @tgate_client.post_update_gate_status(env_mode:env, type:type, to_status:to_status, device_info:current_device_info)
123
+
124
+
125
+ else
126
+
127
+ puts "当前设备信息:"
128
+ puts JSON.pretty_generate(JSON.parse(current_device_info.to_json))
129
+ puts
130
+ end
131
+
132
+
133
+
134
+ # current_device_info = Pindo::DeviceInfo.new
135
+ # Tgate.post_update_gate_status(env_mode:"dev", type:"ip", to_status:"normal", device_info:current_device_info)
136
+ # Tgate.post_update_gate_status(env_mode:"dev", type:"device", to_status:"normal", device_info:current_device_info)
137
+ # Tgate.post_update_gate_status(env_mode:"prod", type:"ip", to_status:"normal", device_info:current_device_info)
138
+ # Tgate.post_update_gate_status(env_mode:"prod", type:"device", to_status:"normal", device_info:current_device_info)
139
+
140
+
141
+ response_data = @tgate_client.get_gate_status(device_info:current_device_info)
142
+ puts JSON.pretty_generate(response_data)
143
+ puts
144
+ puts "========================================================================================================="
145
+ puts "========================================================================================================="
146
+ puts
147
+
148
+ end
149
+
150
+ end
151
+ end
152
+ end
153
+ end
154
+
155
+
156
+
157
+
158
+
159
+
@@ -0,0 +1,46 @@
1
+
2
+
3
+ require 'highline/import'
4
+
5
+ module Pindo
6
+ class Command
7
+ class Utils < Command
8
+ class Xcasserts < Utils
9
+
10
+ self.summary = '获取Assets.xcassets中所有图片,并检查是否有缺失图片'
11
+
12
+ self.description = <<-DESC
13
+ 获取Assets.xcassets中所有图片,并检查是否有缺失图片
14
+ DESC
15
+
16
+
17
+ self.arguments = [
18
+
19
+ ]
20
+
21
+ def self.options
22
+ [
23
+
24
+ ].concat(super)
25
+ end
26
+
27
+ def initialize(argv)
28
+ super(argv)
29
+ @additional_args = argv.remainder!
30
+ end
31
+
32
+ def validate!
33
+ super
34
+ end
35
+
36
+ def run
37
+ current_dir = Dir.pwd;
38
+
39
+ command = 'sh ' + File.join(File.expand_path('./', __dir__), 'xcassets.sh') + " #{current_dir}"
40
+ system command
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,88 @@
1
+ #!/bin/bash
2
+
3
+ #当前脚本目录
4
+
5
+ IMAGESET_SCRIPT_DIR=$(cd `dirname $0`; pwd)
6
+
7
+ if [ "$1" == "" ]; then
8
+ echo "Please input resource dir!!!"
9
+ exit 1
10
+ else
11
+ ALL_IMAGE_DIR=$1
12
+ fi
13
+
14
+
15
+ function proc_imagesets()
16
+ {
17
+ TEMP_XCASSETS_DIR=$1
18
+ TEMP_XCASSETS_BUNDLE_DIR=$2
19
+
20
+ echo $TEMP_XCASSETS_DIR
21
+
22
+ for IMAGESET_DIR in $( find $TEMP_XCASSETS_DIR -name "*.imageset" )
23
+
24
+ do
25
+ IMAGESET_NAME=${IMAGESET_DIR##*/}
26
+ NEW_IMAGE_BASE_NAME=${IMAGESET_NAME%.imageset*}
27
+
28
+ find $IMAGESET_DIR -type f -name "*.[pPjJ][nNpP][gG]" | while read ORIGIN_IMAGE_FILE
29
+ do
30
+
31
+ ORIGIN_IMAGE_NAME=${ORIGIN_IMAGE_FILE##*/}
32
+ ORIGIN_IMAGE_BASE_NAME=${ORIGIN_IMAGE_NAME%.[pPjJ][nNpP][gG]*}
33
+ ORIGIN_IMAGE_BASE_NAME=${ORIGIN_IMAGE_BASE_NAME%@[123]x*}
34
+
35
+ NEW_IMAGE_NAME=${ORIGIN_IMAGE_NAME/${ORIGIN_IMAGE_BASE_NAME}/${NEW_IMAGE_BASE_NAME}}
36
+ NEW_IMAGE_FILE=${ORIGIN_IMAGE_FILE/${ORIGIN_IMAGE_NAME}/${NEW_IMAGE_NAME}}
37
+
38
+
39
+ if [ "$NEW_IMAGE_BASE_NAME" != "$ORIGIN_IMAGE_BASE_NAME" ]; then
40
+
41
+ echo
42
+ echo
43
+ echo 图片路径:
44
+ echo 旧:$ORIGIN_IMAGE_FILE
45
+ echo 新:$NEW_IMAGE_FILE
46
+
47
+ echo 图片名称:
48
+ echo 旧:$ORIGIN_IMAGE_NAME
49
+ echo 新:$NEW_IMAGE_NAME
50
+
51
+ mv "$ORIGIN_IMAGE_FILE" "$NEW_IMAGE_FILE"
52
+ sed -i "" "s/$ORIGIN_IMAGE_NAME/$NEW_IMAGE_NAME/g" $IMAGESET_DIR/Contents.json
53
+
54
+ fi
55
+
56
+ cp $NEW_IMAGE_FILE $TEMP_XCASSETS_BUNDLE_DIR
57
+ done
58
+ done
59
+ }
60
+
61
+
62
+ for XCASSETS_DIR in $( find $ALL_IMAGE_DIR -name "*.xcassets" )
63
+
64
+ do
65
+
66
+ XCASSETS_NAME=${XCASSETS_DIR##*/}
67
+ XCASSETS_FATHER_DIR=${XCASSETS_DIR%/*}
68
+
69
+ XCASSETS_BASE_NAME=${XCASSETS_NAME%.xcassets*}
70
+
71
+ XCASSETS_BUNDLE_DIR=${XCASSETS_FATHER_DIR}/${XCASSETS_BASE_NAME}.bundle
72
+ if [[ -d ${XCASSETS_BUNDLE_DIR} ]]; then
73
+ rm -rf ${XCASSETS_BUNDLE_DIR}
74
+ fi
75
+
76
+ mkdir ${XCASSETS_BUNDLE_DIR}
77
+
78
+ proc_imagesets $XCASSETS_DIR ${XCASSETS_BUNDLE_DIR}
79
+ done
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
@@ -0,0 +1,29 @@
1
+
2
+ require 'pindo/utils/icon'
3
+ require 'pindo/utils/renewproj'
4
+ require 'pindo/utils/clearcert'
5
+ require 'pindo/utils/xcassets'
6
+ require 'pindo/utils/podindex'
7
+ require 'pindo/utils/device'
8
+ require 'pindo/utils/applovin'
9
+ require 'pindo/utils/tgate'
10
+ require 'pindo/utils/boss'
11
+
12
+
13
+ module Pindo
14
+ class Command
15
+
16
+ class Utils < Command
17
+
18
+
19
+ self.abstract_command = true
20
+
21
+ self.summary = '其他工具类的相关命令'
22
+
23
+ self.description = '其他工具类的相关命令'
24
+
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,110 @@
1
+ module Pindo
2
+
3
+ VERSION = "4.6.9"
4
+
5
+ class VersionCheck
6
+
7
+ def self.check_pindo_new_version
8
+
9
+ puts
10
+ puts "pindo #{Pindo::VERSION}"
11
+
12
+ begin
13
+
14
+ pindo_dir = File.expand_path(ENV['PINDO_DIR'] || '~/.pindo')
15
+ pindo_common_configdir = File.join(pindo_dir, "pindo_common_config")
16
+ pindo_common_configfile_fullname = File.join(pindo_common_configdir, "pindo_config.json")
17
+ pindo_common_config_json = JSON.parse(File.read(pindo_common_configfile_fullname))
18
+
19
+ pindo_latest_version = pindo_common_config_json["pindo_latest_version"]
20
+ pindo_mini_version = pindo_common_config_json["pindo_mini_version"]
21
+ pindo_force_upgrade = pindo_common_config_json["pindo_force_upgrade"]
22
+ pindo_lates_update_info = pindo_common_config_json["pindo_lates_update_info"]
23
+
24
+ pindo_current_version = Pindo::VERSION
25
+
26
+ if pindo_force_upgrade
27
+ compare_num = Pindo::VersionCheck::version_greater_than(version_string1:pindo_current_version, version_string2:pindo_latest_version)
28
+ if compare_num < 0
29
+ # answer = agree("有可用的新版本,是否升级?(Y/n:")
30
+ # if answer
31
+ # Pindo::Command::Env::Upgrade::run([])
32
+ # end
33
+ puts
34
+ puts "最新版本是#{pindo_latest_version}目前可用, 可使用pindo upgrade 升级"
35
+ puts
36
+ puts pindo_lates_update_info
37
+ puts
38
+ end
39
+
40
+ end
41
+
42
+ rescue Exception => e
43
+ puts "有异常错误,请使用pindo upgrade 升级"
44
+ puts
45
+
46
+ end
47
+ end
48
+
49
+ def self.check_pindo_force_upgrade
50
+
51
+ begin
52
+
53
+ pindo_dir = File.expand_path(ENV['PINDO_DIR'] || '~/.pindo')
54
+ pindo_common_configdir = File.join(pindo_dir, "pindo_common_config")
55
+ pindo_common_configfile_fullname = File.join(pindo_common_configdir, "pindo_config.json")
56
+ pindo_common_config_json = JSON.parse(File.read(pindo_common_configfile_fullname))
57
+
58
+ pindo_latest_version = pindo_common_config_json["pindo_latest_version"]
59
+ pindo_mini_version = pindo_common_config_json["pindo_mini_version"]
60
+ pindo_force_upgrade = pindo_common_config_json["pindo_force_upgrade"]
61
+ pindo_current_version = Pindo::VERSION
62
+
63
+ if pindo_force_upgrade
64
+ compare_num = Pindo::VersionCheck::version_greater_than(version_string1:pindo_current_version, version_string2:pindo_mini_version)
65
+ if compare_num < 0
66
+ puts "当前pindo版本 #{Pindo::VERSION}"
67
+ puts "最新版本 #{pindo_latest_version}"
68
+ puts "要求最低版本 #{pindo_mini_version}"
69
+ raise Informative, "请使用pindo upgrade 升级!"
70
+ end
71
+ end
72
+
73
+ rescue Exception => e
74
+ raise Informative, "有异常错误,请使用pindo upgrade 升级!"
75
+ end
76
+ end
77
+
78
+ def self.version_greater_than(version_string1: nil, version_string2: nil)
79
+ return 0 if version_string1.nil? && version_string2.nil?
80
+ return -1 if version_string1.nil?
81
+ return 1 if version_string2.nil?
82
+
83
+ version_string1_array = version_string1.split('.') || []
84
+ version_string2_array = version_string2.split('.') || []
85
+
86
+ array_max_length = [version_string1_array.size, version_string2_array.size].max
87
+
88
+ version_string1_array += ['0'] * (array_max_length - version_string1_array.size)
89
+ version_string2_array += ['0'] * (array_max_length - version_string2_array.size)
90
+
91
+ compare_num = 0
92
+ (0..array_max_length).each do |i|
93
+ if version_string1_array[i] == version_string2_array[i]
94
+ compare_num = 0
95
+ elsif version_string1_array[i].to_i > version_string2_array[i].to_i
96
+ compare_num = 1
97
+ break
98
+ else
99
+ compare_num = -1
100
+ break
101
+ end
102
+ end
103
+
104
+ compare_num
105
+ end
106
+
107
+ end
108
+
109
+
110
+ end
data/lib/pindo.rb ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'claide'
5
+
6
+ module Pindo
7
+
8
+ autoload :VersionCheck, 'pindo/version'
9
+ autoload :Command, 'pindo/command'
10
+ autoload :Executable, 'pindo/base/executable'
11
+ autoload :Plistbuddyexecutable, 'pindo/base/plistbuddyexecutable'
12
+
13
+ require 'pindo/command'
14
+ require 'pindo/version'
15
+
16
+ class PindoApp
17
+
18
+ def run(argv)
19
+
20
+ Pindo::VersionCheck::check_pindo_new_version()
21
+ Pindo::Command.run(argv)
22
+
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+
29
+
30
+
31
+
32
+
33
+
34
+