furion 1.0.8.1 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: de60f21eaebb24d12a94110b907696c0b7dbc9bb308deb5fadabad1ff02d5b69
4
- data.tar.gz: 699bb862f947c0c92e4a76cec7b5a8eaa25ff041449b90c50219365091fed69f
3
+ metadata.gz: 88af458021bc7618aeda209a06c96fefe324857cc36284d40aaf6ffe9e1a0a4f
4
+ data.tar.gz: 92100ff9ec52165dae9a1933d113e35b3fc483c6b716f253a1b8e13b6e71d633
5
5
  SHA512:
6
- metadata.gz: d8ef667dcb984fddb8570c61c3bb524bd6f9fb6ee6d5c303e4018b8a556b33bb789a278117fddf74f5630001af5af3ef239e8d3e67f0abfe3b7b8d3ee690936a
7
- data.tar.gz: 94aa38483bb12907c0e6bd0a8a4af8a91b9ad52c8306239cddb704087a9688f9612f8b2b1f7bff5e9e5c7bc924c905c27fe7aed3166f22ce3026270a5de6e34b
6
+ metadata.gz: 866e8db42a8585fdb0e3b9176fa9a974663033fce27d3fbfa213551b044713a9c757286022e367edffa3b24257c7b9b152bd3df01212e7f8a6ceb5c535413c76
7
+ data.tar.gz: fba8475942b5e2b374635a68c8df43bcb287f062b6e4920869fb52261eb73ced1b2e7b0a0d5463cfa4b4dd52e1e77f1b970fbd3198942fa53c0778a9d195e2fe
data/bin/furion CHANGED
@@ -11,12 +11,12 @@ OptionParser.new do |opts|
11
11
  puts "Options and arguments:
12
12
  -v : print the version number
13
13
  -h : print the help message
14
- init : run wrapper-pick work flow in existed project
15
- create [name]: create an empty project and init wrapper
14
+ init : run wrapper-pick work flow in existed project
15
+ update : update the config of sdk-wrapper
16
16
  "
17
17
  end
18
18
  opts.on("-v", "--version", "Prints version") do |dh|
19
- puts "1.0.8.1"
19
+ puts "1.0.9"
20
20
  end
21
21
 
22
22
 
@@ -25,3 +25,11 @@ end.parse!
25
25
  if ARGV[0] == "init"
26
26
  Furion.makeConfig
27
27
  end
28
+
29
+ if ARGV[0] == "confdet"
30
+ Furion.detectConflict
31
+ end
32
+
33
+ if ARGV[0] == "update"
34
+ Furion.updateConfig
35
+ end
@@ -4,10 +4,12 @@ require 'json'
4
4
  require 'plist'
5
5
  require 'open-uri'
6
6
  require 'furion/file_editor'
7
+ require 'furion/ver_conflict_detector'
7
8
  class Furion
8
9
 
9
10
  def self.fetchFile(fileName)
10
- uri = "https://git.huya.com/chenguohao2/FurionTemplateResource/raw/master/"+fileName
11
+ uri = "https://git.huya.com/chenguohao2/FurionTemplateResource/raw/master/iOS/"+fileName
12
+ puts "download from "+uri
11
13
  data = open(uri){|f| f.read}
12
14
  file = File.new fileName, 'w+'
13
15
  file.binmode
@@ -22,18 +24,55 @@ class Furion
22
24
  self.fetchFile("example.code")
23
25
  result = `python GenConfig.py `
24
26
  File.write('data.json', result)
25
- puts "finish writting"
26
- FileEditor.editPodfile
27
27
  `plutil -convert xml1 data.json -o MTPSDK.plist`
28
+ if !(File.exist?'MTPSDK.plist')
29
+ puts "error in Config Generation: "+result
30
+ end
31
+
32
+ FileEditor.editPodfile
33
+
28
34
  File.delete('GenConfig.py')
29
35
  File.delete('data.json')
30
36
  FileEditor.insertExampleCode
31
37
  File.delete('example.code')
38
+ puts "pod installing..."
32
39
  `pod install`
33
40
  projName = FileEditor.getCuriOSProjName
34
41
  puts "Config finished, run "+projName+".xcworkspace to continue "
35
42
  end
36
43
 
44
+ def self.updateConfig
45
+
46
+ if !(File.exist?'MTPSDK.plist')
47
+ puts "MTPSDK.plist not exist "
48
+ return
49
+ end
50
+
51
+ self.fetchFile("GenConfig.py")
52
+ sdkWrapperDict = Plist::parse_xml("MTPSDK.plist")
53
+ jsonObj = sdkWrapperDict.to_json
54
+ fJson = File.open("cachedConfig.json","w")
55
+ fJson.write(jsonObj)
56
+ fJson.close
57
+ result = `python GenConfig.py update`
58
+ File.write('data.json', result)
59
+ `plutil -convert xml1 data.json -o MTPSDK.plist`
60
+ if !(File.exist?'MTPSDK.plist')
61
+ puts "error in Config Generation: "+result
62
+ end
63
+ puts "pod installing..."
64
+ `pod install`
65
+ File.delete('GenConfig.py')
66
+ File.delete('data.json')
67
+ File.delete("cachedConfig.json")
68
+ projName = FileEditor.getCuriOSProjName
69
+ puts "Config finished, run "+projName+".xcworkspace to continue "
70
+ end
71
+
72
+ def self.detectConflict
73
+ ConflictDetector.detectConflict
74
+ end
75
+
37
76
  def self.runCMD
38
77
  cmd = ARGV[0]
39
78
  if cmd == "init"
@@ -45,6 +84,3 @@ class Furion
45
84
  end
46
85
  end
47
86
  end
48
-
49
-
50
-
@@ -20,7 +20,7 @@ class FileEditor
20
20
 
21
21
  projName = self.getCuriOSProjName
22
22
 
23
- if projName.length == 0
23
+ if projName == nil
24
24
  return
25
25
  end
26
26
 
@@ -72,9 +72,9 @@ class FileEditor
72
72
  def self.insertExampleCode
73
73
 
74
74
  dict = Plist::parse_xml("MTPSDK.plist")
75
- wrapperSDKDict = dict["sdkWrapper"]
75
+ #wrapperSDKDict = dict["sdkWrapper"]
76
76
  params = dict["commonParams"]
77
- keys = wrapperSDKDict.keys()
77
+ keys = []#wrapperSDKDict.keys()
78
78
  keys.insert(0,"commonCode")
79
79
  keys.append("finnalInit")
80
80
  targetFilePath = ""
@@ -0,0 +1,259 @@
1
+ require 'cocoapods'
2
+ require 'etc'
3
+ class ConflictDetector
4
+ def self.detectConflict
5
+ @openingSpec = []
6
+ @specRequire = {}
7
+ # dict = Plist::parse_xml("MTPSDK.plist")
8
+ file = File.read('sdkConfig.json')
9
+ dict = JSON.parse(file)
10
+ # "sdk":{"hypushsdk": {"wrapperVersion": "0.1.13-dev", "sdkVersion": "*", "wrapper": "pushsdk-wrapper"}
11
+ sdkDict = {}
12
+ sdkWrapperDict = dict["sdk"]
13
+ for sdk in sdkWrapperDict.keys
14
+ sdkInfo = sdkWrapperDict[sdk]
15
+ sdkDict[sdk] = sdkInfo["sdkVersion"]
16
+ if sdkInfo.key?"wrapper"
17
+ sdkDict[sdkInfo["wrapper"]] = sdkInfo["wrapperVersion"]
18
+ end
19
+ end
20
+
21
+
22
+
23
+ for sdk in sdkDict.keys
24
+ version = sdkDict[sdk]
25
+ self.loadSpec(sdk,version)
26
+ end
27
+
28
+
29
+ dependency = {}
30
+ conflictInfo = {}
31
+ for sdk in @specRequire.keys
32
+ requireinfo = @specRequire[sdk]
33
+ sdkConflict = self.compareRequire(sdk,requireinfo.values)
34
+ dependency[sdk] = {"conflict"=>sdkConflict,"requirement"=>requireinfo}
35
+ end
36
+
37
+ json = dependency.to_json
38
+ File.open("verionDependency.json", "w") do |out|
39
+ out.write(json)
40
+ end
41
+ end
42
+
43
+ def self.loadSpec(specName,version)
44
+
45
+ if @openingSpec.include?(specName)
46
+ return
47
+ end
48
+
49
+ user = Etc.getpwuid(Process.uid).name
50
+ sourcePath = "/Users/" + user + "/.cocoapods/repos/huya-ci_team-specs"
51
+ path = self.getSpecFromSDK(sourcePath,specName,version)
52
+
53
+ if path.length == 0
54
+ # SDK的文件夹没找到,就从wrapper文件夹开始找
55
+ sourcePath = "/Users/" + user + "/.cocoapods/repos/Wrapper-Specs"
56
+ path = self.getSpecFromSDK(sourcePath,specName,version)
57
+ end
58
+
59
+ if path.length == 0
60
+ # 如果在wrapper也没找到就说明找不到
61
+ puts "[FurionError]:spec load Error in "+path
62
+ return
63
+ end
64
+
65
+
66
+ @openingSpec.append(specName)
67
+ ret = Pod::Specification.from_file(path, subspec_name = specName)
68
+ if ret.dependencies.length == 0
69
+ return
70
+ end
71
+
72
+
73
+ for item in ret.dependencies
74
+ requireStr = String(item.requirement)
75
+ self.recordDependancy(item.name,requireStr,specName)
76
+ if self.isVersionSpecific(requireStr) == 0
77
+ content = self.wrapSpecificVersion(requireStr)
78
+ self.readSpecFromRepo(item.name,content)
79
+ end
80
+ end
81
+ end
82
+
83
+ def self.recordDependancy(sdk,requirement,subscriber)
84
+ requireInfo = @specRequire[sdk]
85
+ if requireInfo == nil
86
+ requireInfo = {}
87
+ end
88
+ requireInfo[subscriber] = requirement
89
+ @specRequire[sdk] = requireInfo
90
+
91
+ end
92
+
93
+ def self.isVersionSpecific(versionRequire)
94
+ symbols = ['~>','>=','<=','>','<']
95
+ for symbol in symbols
96
+ if versionRequire.include?(symbol)
97
+ return 1
98
+ end
99
+ end
100
+ return 0
101
+ end
102
+
103
+ def self.wrapSpecificVersion(versionStr)
104
+ content = String(versionStr)
105
+ content = content.sub(" ","")
106
+ content = content.sub("=","")
107
+ return content
108
+ end
109
+
110
+ def self.readSpecFromRepo(specName,version)
111
+
112
+
113
+
114
+ self.loadSpec(specName,version)
115
+ end
116
+
117
+
118
+ def self.getSpecFromSDK(groupPath,sdkName,version)
119
+
120
+ if version == "*"
121
+ allPath = groupPath + "/" + sdkName + "/" + version
122
+ subPathArray = Dir[allPath]
123
+ wrapperPath = subPathArray.last
124
+ else
125
+ wrapperPath = groupPath + "/" + sdkName + "/" + version
126
+ if !File.exist?(wrapperPath)
127
+ return ""
128
+ end
129
+ end
130
+
131
+
132
+
133
+ Find.find(wrapperPath) do |path|
134
+ if path.end_with? ".podspec"
135
+ return path
136
+ break
137
+ end
138
+ end
139
+ return ""
140
+ end
141
+
142
+ def self.compareRequire(sdk,requireArray)
143
+ # model a < x < b
144
+ smallVersion = "0"
145
+ min = smallVersion
146
+ containMin = 0 # 用于区分 < 和 <=
147
+ hugeVersion = "9999999.999999.999999"
148
+ max = hugeVersion
149
+ containMax = 0
150
+
151
+ depency = nil
152
+ isConflict = 0
153
+ for require in requireArray
154
+
155
+ depency = Pod::Dependency.new(sdk,require)
156
+ operator = depency.requirement.requirements.first[0]
157
+ version = depency.requirement.requirements.first[1]
158
+ if String(operator) == '>=' || String(operator) == '~>'
159
+ if self.isVersionBigger(version,min) == 1
160
+ min = version
161
+ containMin = 1
162
+ end
163
+ end
164
+
165
+ if String(operator) == '>'
166
+ if self.isVersionBigger(version,min) == 1
167
+ min = version
168
+ containMin = 0
169
+ end
170
+ end
171
+
172
+ if String(operator) == '<='
173
+ if self.isVersionBigger(version,max) == 1
174
+ max = version
175
+ containMax = 1
176
+ end
177
+ end
178
+
179
+ if String(operator) == '<'
180
+ if self.isVersionBigger(max,version) == 1
181
+ max = version
182
+ containMax = 0
183
+ end
184
+ end
185
+
186
+ if isVersionBigger(min,max) == 1
187
+ # 下限大于上限
188
+ isConflict = 1
189
+ else
190
+ if min == max
191
+ if containMax == 0 || containMin == 0
192
+ isConflict = 1
193
+ end
194
+ end
195
+ end
196
+
197
+ if String(operator) == '='
198
+ if isVersionBigger(version,max) == 1 || isVersionBigger(min,version) ==1
199
+ # 固定版本在已有范围之外
200
+ isConflict = 1
201
+ else
202
+ min = version
203
+ max = version
204
+ containMax = 1
205
+ containMin = 1
206
+ end
207
+ end
208
+ end
209
+ result = {"isConflict"=>isConflict}
210
+ if max != hugeVersion
211
+ maxOperater = containMax == 1 ? "<=" : "<"
212
+ maxRequire = maxOperater+ " " + String(max)
213
+ result["maxRequire"] = maxRequire
214
+ end
215
+
216
+
217
+ if min != smallVersion
218
+ minOperater = containMin == 1 ? ">=" : ">"
219
+ minRequire = minOperater+ " " + String(min)
220
+ result["minRequire"] = minRequire
221
+ end
222
+
223
+ return result
224
+ end
225
+
226
+ def self.isVersionBigger(version,otherVersion)
227
+ varNumArray1 = String(version).split("-")
228
+ verNum1 = varNumArray1[0]
229
+ if varNumArray1.length() > 1
230
+ verExt1 = varNumArray1[1]
231
+ else
232
+ verExt1 = "*"
233
+ end
234
+
235
+ varNumArray2 = String(otherVersion).split("-")
236
+ verNum2 = varNumArray1[0]
237
+ if varNumArray2.length() > 1
238
+ verExt2 = varNumArray2[1]
239
+ else
240
+ verExt2 = "*"
241
+ end
242
+
243
+
244
+ if Gem::Version.new(verNum1) > Gem::Version.new(otherVersion)
245
+ return 1
246
+ else
247
+ if Gem::Version.new(verNum1) == Gem::Version.new(otherVersion)
248
+ if verExt1 == '*' && verExt2 != '*'
249
+ return 1
250
+ end
251
+ end
252
+ end
253
+ return 0
254
+ end
255
+
256
+ def self.getLastVersionFromDir(dirPath)
257
+
258
+ end
259
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: furion
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8.1
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - MTP Huya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-29 00:00:00.000000000 Z
11
+ date: 2019-11-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: MTP Huya is the best!!!
14
14
  email: mtphuya@yandex.com
@@ -20,6 +20,7 @@ files:
20
20
  - bin/furion
21
21
  - lib/furion.rb
22
22
  - lib/furion/file_editor.rb
23
+ - lib/furion/ver_conflict_detector.rb
23
24
  homepage: https://rubygems.org/gems/furion
24
25
  licenses:
25
26
  - MIT