EXtremeZip 2022.1.15 → 2022.2.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 19b030c24fbd796b5f9ea2681973bf10c7afc763a5e2d5e9c7f5937a1daf950d
4
- data.tar.gz: 761d719cf3873320fe0742be3be5fc44b72bfd00029ad86bbc7ac87d8b31590c
3
+ metadata.gz: d368c2ced983111e5abca75f712fd09f01f9a3c308860782ce9d17850aa84b9d
4
+ data.tar.gz: 8d9c5b14cd143fec9be4a4149b4ba191665bbdaab6e30c3de9492eb3183c5839
5
5
  SHA512:
6
- metadata.gz: 2e2b943aacc965d09995eb9ca824ac4bb3d01ebe99d224fff0899fcfb6973a4afd936f234231416fb47a84445983b37de5d13953474b459a2bb9b7b1a83273f5
7
- data.tar.gz: 0c4c3d9ca686dd8a32d338879c8048cb661ea6315fc533727e6a7093a14fd718ea37bf2554f1d0522c2a3a3afdd45b6a9878f5844f0134ff76b0a09fb227c5ed
6
+ metadata.gz: 249baeec68ad080d1d4fbd7f158d11b794aeff51c4e429d447cea91c9e9cb925a0c487506b9112e1cccf530bfe325f1dd5c74b1914d63a53a972a592acbf00a2
7
+ data.tar.gz: 229d12c536bc4ecec1253e62bb98db4a9cba42f0808904bd36ad9460dcb801ad949dc33c2ac39ac4c0982d37d2248d28d73e1a0943a3d61ad1547238cdc21187
@@ -1,20 +1,47 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # require 'pathname'
4
- # require File.dirname(__FILE__)+'/filemessage.pb.rb'
5
3
  require 'victoriafresh'
6
4
  require 'cbor'
7
5
  require 'lzma'
8
6
  require 'get_process_mem'
9
7
 
10
8
  def checkMemoryUsage(lineNumber)
11
- mem = GetProcessMem.new
9
+ mem = GetProcessMem.new
12
10
 
13
- puts("#{lineNumber} , Memory: #{mem.mb}"); # Debug
11
+ puts("#{lineNumber} , Memory: #{mem.mb}"); # Debug
14
12
  end # def checkMemoryUsage
15
13
 
16
- # 根据版本号,提取VFS数据内容
17
- def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
14
+
15
+
16
+
17
+ class ExtremeUnZip
18
+ # 根据偏移值来读取压缩块数据列表。
19
+ def readVfsDataList(wholeCbor)
20
+ compressedVfsDataList = [] # 获取压缩后的数据块列表
21
+ startIndix=wholeCbor['vfsDataListStart'] # 初始起始位置。
22
+
23
+ puts "whole length: #{@wholeFileContent.length}, list conent: #{wholeCbor['vfsDataList']}" # Debug
24
+
25
+
26
+ wholeCbor['vfsDataList'].each do |currentBlockInfo| # 一个个块地处理
27
+ length=currentBlockInfo['length'] # 获取长度。
28
+
29
+ currentBlock=@wholeFileContent[startIndix, length] # 读取内容
30
+
31
+ puts "start index: #{startIndix}, length: #{length}, content length: #{currentBlock.length}" # Debug
32
+
33
+ compressedVfsDataList << currentBlock # 加入当前块
34
+
35
+ startIndix+=length # 位移。
36
+ end
37
+
38
+ compressedVfsDataList # 返回 内容
39
+ end
40
+
41
+ # 根据版本号,提取VFS数据内容
42
+
43
+
44
+ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
18
45
  victoriaFreshData = '' # 解压后的数据块整体
19
46
  dataFileName = 'victoriafreshdata.w' # 数据文件名
20
47
  dataFile = {} # 数据文件对象
@@ -31,6 +58,10 @@ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
31
58
  dataFile.close # 关闭文件
32
59
  elsif (fileVersion >= 30) # 30以上版本
33
60
  compressedVfsDataList = wholeCbor['vfsDataList'] # 获取压缩后的数据块列表
61
+
62
+ if (fileVersion>=251) # 251 以上版本。要按照偏移值来读取压缩数据块列表。
63
+ compressedVfsDataList=readVfsDataList(wholeCbor) # 根据偏移值来读取压缩块数据列表。
64
+ end # if (fileVersion>=251) # 251 以上版本
34
65
 
35
66
  puts("data block amont: #{compressedVfsDataList.length}") # Debug
36
67
 
@@ -44,18 +75,12 @@ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
44
75
 
45
76
  begin # 解压
46
77
  currentRawData = LZMA.decompress(currentCompressed) # 解压这一块
47
-
48
78
 
49
79
  dataFile.syswrite(currentRawData) # 写入内容
50
80
  rescue RuntimeError => e # 解压失败
51
81
  puts "Warning: the exz file may be incomplete." # 报告错误。文件可能不完整。
52
82
  end # begin # 解压
53
83
 
54
- # victoriaFreshData=victoriaFreshData+currentRawData #追加
55
- # victoriaFreshData << currentRawData #追加
56
-
57
- #puts("byte size: #{victoriaFreshData.bytesize}") # debug.
58
-
59
84
  dataBlockCounter += 1 # count
60
85
  end # compressedVfsDataList.each do |currentCompressed|
61
86
 
@@ -65,54 +90,21 @@ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
65
90
  dataFileName # 返回解压后的数据块整体
66
91
  end # def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
67
92
 
68
- def extractVfsDataWithVersion(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
69
- victoriaFreshData = '' # 解压后的数据块整体
70
-
71
- if (fileVersion == 14) # 14版本
72
- compressedVfsData = wholeCbor['vfsData'] # 获取压缩后的数据内容
73
-
74
- victoriaFreshData = LZMA.decompress(compressedVfsData) # 解压缩数据内容
75
- elsif (fileVersion >= 30) # 30以上版本
76
- compressedVfsDataList = wholeCbor['vfsDataList'] # 获取压缩后的数据块列表
77
-
78
- puts("data block amont: #{compressedVfsDataList.length}") # Debug
79
-
80
- dataBlockCounter = 0 # Data block counter
81
-
82
- compressedVfsDataList.each do |currentCompressed| # 一块块地解压
83
- puts("data block counter: #{dataBlockCounter}") # Debug
84
- checkMemoryUsage(34)
85
-
86
- currentRawData = LZMA.decompress(currentCompressed) # 解压这一块
87
-
88
- # victoriaFreshData=victoriaFreshData+currentRawData #追加
89
- victoriaFreshData << currentRawData # 追加
90
-
91
- puts("byte size: #{victoriaFreshData.bytesize}") # debug.
92
-
93
- dataBlockCounter += 1 # count
94
- end # compressedVfsDataList.each do |currentCompressed|
95
- end # if (fileVersion==14) #14版本
96
-
97
- victoriaFreshData # 返回解压后的数据块整体
98
- end # extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
99
-
100
- class ExtremeUnZip
101
- # 解压
93
+ # 解压
102
94
  def exuz(rootPath)
103
95
  result = true # 解压结果
104
96
 
105
- wholeFileContent = File.read(rootPath) # 最终文件内容
97
+ currentBlockFile = File.new(rootPath, 'rb') # 打开文件
106
98
 
107
- checkMemoryUsage(60)
99
+ @wholeFileContent = currentBlockFile.read # 读取全部内容
108
100
 
109
- puts wholeFileContent.class # debug
101
+ currentBlockFile.close # 关闭文件
110
102
 
111
- wholeCborByteArray = wholeFileContent[4..-1] # 从第5个到末尾
103
+ #@wholeFileContent = File.read(rootPath) # 最终文件内容
112
104
 
113
- # puts wholeCborByteArray #Debug.
105
+ checkMemoryUsage(60)
114
106
 
115
- #/usr/local/share/gems/gems/EXtremeZip-2021.7.8/lib/extremeunzip.zzaqsu.rb:110:in `decode': end of buffer reached (EOFError)
107
+ wholeCborByteArray = @wholeFileContent[4..-1] # 从第5个到末尾
116
108
 
117
109
  begin # 可能出错。
118
110
  options = {:tolerant => true}
@@ -130,23 +122,16 @@ class ExtremeUnZip
130
122
  checkMemoryUsage(90)
131
123
  replyByteArray = LZMA.decompress(compressedVfsMenu) # 解码目录VFS字节数组内容
132
124
 
133
- # puts replyByteArray #Debug
134
-
135
125
  checkMemoryUsage(95)
136
- # victoriaFreshData=extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
126
+
137
127
  victoriaFreshDataFile = extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
138
128
 
139
- # puts victoriaFreshData #Debug
140
-
141
129
  checkMemoryUsage(100)
142
130
  $clipDownloader = VictoriaFresh.new # 创建下载器。
143
131
 
144
132
  $clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) # 释放各个文件
145
133
 
146
134
  fileToRemove = File.new(victoriaFreshDataFile) # 要删除的文件
147
-
148
- #File.delete(fileToRemove) # 删除文件
149
-
150
135
  end # if (fileVersion<14) #版本号过小
151
136
 
152
137
  result =true # 解压成功
@@ -48,10 +48,14 @@ class ExtremeZip
48
48
 
49
49
  # 加入基本文件信息
50
50
  def addBasicFileInformation
51
- @wholeCbor['version'] = 233 # 文件格式版本号
51
+ @wholeCbor['version'] = 251 # 文件格式版本号
52
52
 
53
53
  uuid = UUID.new # 获取生成器
54
54
  @wholeCbor['uuid'] = uuid.generate # 指定本个压缩包的唯一编号
55
+
56
+ @wholeCbor['website']='https://rubygems.org/gems/EXtremeZip' # 加入网站地址
57
+
58
+ @wholeCbor['vfsDataListStart']=198910 # 压缩 VFS 数据列表起始位置。
55
59
  end # addBasicFileInformation # 加入基本文件信息
56
60
 
57
61
  # 压缩
@@ -72,10 +76,54 @@ class ExtremeZip
72
76
  @wholeCbor['vfsDataList'] = @vfsDataList # 加入数据
73
77
 
74
78
  wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
79
+
80
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
81
+
82
+ while (vfsDataListStart!=@wholeCbor['vfsDataListStart']) # 计算出的偏移不一致
83
+ @wholeCbor['vfsDataListStart']=vfsDataListStart # 使用新的值
84
+ wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
85
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
86
+ end
75
87
 
76
88
  # 写入文件:
77
89
  writeFile(wholeFileContent, victoriaFresh) # 写入文件内容
90
+
91
+ appendVfsDataList victoriaFresh # 追加压缩块列表数据。
78
92
  end # def exz(rootPath)
93
+
94
+ # 写入压缩块文件
95
+ def writeCompressBlock(compressed, processCounter)
96
+ extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
97
+ extremeZipOutputFile.syswrite(compressed) # 写入文件
98
+ extremeZipOutputFile.close # 关闭文件
99
+ end
100
+
101
+ # 追加压缩块列表数据。
102
+ def appendVfsDataList (victoriaFresh)
103
+ extremeZipOutputFile = File.new("#{victoriaFresh['name']}.exz", 'ab') # 打开文件
104
+
105
+ processCounter=0 # 块计数器。
106
+
107
+ @wholeCbor['vfsDataList'].each do
108
+ #extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
109
+
110
+ currentBlockFile = File.new("comressed.#{processCounter}.cex", 'rb') # 打开文件
111
+
112
+ wholeFileContent = currentBlockFile.read # 读取全部内容
113
+
114
+ currentBlockFile.close # 关闭文件
115
+
116
+ #wholeFileContent=File.read("comressed.#{processCounter}.cex", 'rb') # 读取压缩块。
117
+
118
+ puts "wirte file contetn length: #{wholeFileContent.length}" # Debghu
119
+
120
+ extremeZipOutputFile.syswrite(wholeFileContent) # 写入文件
121
+
122
+ processCounter += 1 # 计数
123
+ end
124
+
125
+ extremeZipOutputFile.close # 关闭文件
126
+ end
79
127
 
80
128
  # 写入文件内容
81
129
  def writeFile(wholeFileContent, victoriaFresh)
@@ -92,8 +140,16 @@ class ExtremeZip
92
140
  currentSubProcess=processIdList[processCounter] # 获取子进程对象
93
141
  #processIdList.each do |currentSubProcess|
94
142
  compressed = receiveFromSubProcess(currentSubProcess, responsePipeList, processCounter) # 从子进程中读取数据,并终止子进程
143
+
144
+ #写入当前压缩块到文件系统中去作为缓存。陈欣
145
+ writeCompressBlock(compressed, processCounter) # 写入压缩块文件
146
+
147
+ blockInfo={} # 块信息
148
+ blockInfo['length']=compressed.length # 记录长度
149
+
150
+ puts "block length: #{blockInfo['length']}" # Debug
95
151
 
96
- @vfsDataList << compressed # 加入数据块列表中
152
+ @vfsDataList << blockInfo # 加入数据块列表中
97
153
  checkMemoryUsage(150)
98
154
 
99
155
  processCounter += 1 # 子进程计数
@@ -112,7 +168,7 @@ class ExtremeZip
112
168
 
113
169
  currentBlockFile.close # 关闭文件
114
170
 
115
- #File.delete(currentBlockFile) # 删除数据块文件
171
+ File.delete(currentBlockFile) # 删除数据块文件
116
172
 
117
173
  currentBlockData
118
174
  end
@@ -121,11 +177,8 @@ class ExtremeZip
121
177
  def schedule1Block(filePartCounter)
122
178
  currentBlockData = readBlockFile(filePartCounter) # 读取块文件内容
123
179
 
124
- # currentTaskPipe = Cod.pipe # 任务分配管道
125
180
  currentResponsePipe = Cod.pipe # 任务回复管道
126
181
 
127
- puts("forking sub process, file part counter: #{filePartCounter}") # Debug.
128
-
129
182
  p1 = fork do # 复制出子进程
130
183
  compressInSubProcess(currentBlockData, currentResponsePipe) # 在子进程中具体执行的压缩代码
131
184
  end # p1 = fork do #复制出子进程
@@ -146,11 +199,8 @@ class ExtremeZip
146
199
 
147
200
  # 启动子进程。
148
201
  def launchSubProcesses
149
-
150
- #while ((@filePartCounter < @filePartAmount) && (true)) # 未处理完毕,并且未达到最大子进程个数
151
202
  while ((@filePartCounter < @filePartAmount) && (@filePartCounter<@maxSubProcessAmount)) # 未处理完毕,并且未达到最大子进程个数
152
203
  currentResponsePipe, p1 = schedule1Block(@filePartCounter) # 计划一个块的压缩计算
153
-
154
204
  end # while processDataLength < victoriaFreshData.byte_size do #未处理完毕
155
205
 
156
206
  [@processIdList, @responsePipeList]
@@ -168,7 +218,6 @@ class ExtremeZip
168
218
 
169
219
  currentResponsePipe.put currentCompressedVfsData # 将压缩后的数据块写入到回复管道中
170
220
 
171
- checkMemoryUsage(125)
172
221
  puts("finished #{Process.pid}") # Debug
173
222
  end # compressInSubProcess(currentBlockData, currentResponsePipe) # 在子进程中具体执行的压缩代码
174
223
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: EXtremeZip
3
3
  version: !ruby/object:Gem::Version
4
- version: 2022.1.15
4
+ version: 2022.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hxcan Cai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-15 00:00:00.000000000 Z
11
+ date: 2022-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cod
@@ -86,20 +86,20 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 2022.1.15
89
+ version: 2022.1.27
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 2022.1.15
92
+ version: 2022.1.27
93
93
  type: :runtime
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: 2022.1.15
99
+ version: 2022.1.27
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 2022.1.15
102
+ version: 2022.1.27
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: hx_cbor
105
105
  requirement: !ruby/object:Gem::Requirement