EXtremeZip 2022.2.6 → 2022.2.19

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: d368c2ced983111e5abca75f712fd09f01f9a3c308860782ce9d17850aa84b9d
4
- data.tar.gz: 8d9c5b14cd143fec9be4a4149b4ba191665bbdaab6e30c3de9492eb3183c5839
3
+ metadata.gz: d6f7accde07ae32cb5a0b760673749535b3cbbcaf33df4688ca303b427080bff
4
+ data.tar.gz: 808669d1eb5fa58e9f6d89b5e8a01c0bafebf0f49475f215aee8cbb0f2b756e3
5
5
  SHA512:
6
- metadata.gz: 249baeec68ad080d1d4fbd7f158d11b794aeff51c4e429d447cea91c9e9cb925a0c487506b9112e1cccf530bfe325f1dd5c74b1914d63a53a972a592acbf00a2
7
- data.tar.gz: 229d12c536bc4ecec1253e62bb98db4a9cba42f0808904bd36ad9460dcb801ad949dc33c2ac39ac4c0982d37d2248d28d73e1a0943a3d61ad1547238cdc21187
6
+ metadata.gz: 634db332f4d8656a233ab935ab82c83ef1dc934861534da11c47dfbf6e93e98a6432e7542a4951fdb3d9e5b294c1fb397185d471d07e2fb8e026f9922eacd8f2
7
+ data.tar.gz: 35eb1b03750c86e87f71fb997f529cd79ef407d42d3ced0d34ecd831fe503bb74acfd37101c4bacc02ee809e49e0285efa5844c2aabb22e19f2c010efe2d52df
@@ -92,46 +92,44 @@ end # def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) #根据
92
92
 
93
93
  # 解压
94
94
  def exuz(rootPath)
95
- result = true # 解压结果
96
-
97
- currentBlockFile = File.new(rootPath, 'rb') # 打开文件
95
+ result = true # 解压结果
98
96
 
99
- @wholeFileContent = currentBlockFile.read # 读取全部内容
97
+ currentBlockFile = File.new(rootPath, 'rb') # 打开文件
100
98
 
101
- currentBlockFile.close # 关闭文件
99
+ @wholeFileContent = currentBlockFile.read # 读取全部内容
102
100
 
103
- #@wholeFileContent = File.read(rootPath) # 最终文件内容
101
+ currentBlockFile.close # 关闭文件
104
102
 
105
- checkMemoryUsage(60)
103
+ checkMemoryUsage(60)
106
104
 
107
- wholeCborByteArray = @wholeFileContent[4..-1] # 从第5个到末尾
105
+ wholeCborByteArray = @wholeFileContent[4..-1] # 从第5个到末尾
108
106
 
109
107
  begin # 可能出错。
110
- options = {:tolerant => true}
108
+ options = {:tolerant => true}
111
109
 
112
- wholeCbor = CBOR.decode(wholeCborByteArray, options) # 解码
110
+ wholeCbor = CBOR.decode(wholeCborByteArray, options) # 解码
113
111
 
114
- fileVersion = wholeCbor['version'] # 获取版本号
112
+ fileVersion = wholeCbor['version'] # 获取版本号
115
113
 
116
114
  if (fileVersion < 14) # 版本号过小
117
- checkMemoryUsage(85)
118
- puts 'file version too old' # 报告错误
115
+ checkMemoryUsage(85)
116
+ puts 'file version too old' # 报告错误
119
117
  else # 版本号够大
120
- compressedVfsMenu = wholeCbor['vfsMenu'] # 获取压缩后的目录内容
118
+ compressedVfsMenu = wholeCbor['vfsMenu'] # 获取压缩后的目录内容
121
119
 
122
- checkMemoryUsage(90)
123
- replyByteArray = LZMA.decompress(compressedVfsMenu) # 解码目录VFS字节数组内容
120
+ checkMemoryUsage(90)
121
+ replyByteArray = LZMA.decompress(compressedVfsMenu) # 解码目录VFS字节数组内容
124
122
 
125
- checkMemoryUsage(95)
123
+ checkMemoryUsage(95)
126
124
 
127
- victoriaFreshDataFile = extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
125
+ victoriaFreshDataFile = extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
128
126
 
129
- checkMemoryUsage(100)
130
- $clipDownloader = VictoriaFresh.new # 创建下载器。
127
+ checkMemoryUsage(100)
128
+ $clipDownloader = VictoriaFresh.new # 创建下载器。
131
129
 
132
- $clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) # 释放各个文件
130
+ $clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) # 释放各个文件
133
131
 
134
- fileToRemove = File.new(victoriaFreshDataFile) # 要删除的文件
132
+ fileToRemove = File.new(victoriaFreshDataFile) # 要删除的文件
135
133
  end # if (fileVersion<14) #版本号过小
136
134
 
137
135
  result =true # 解压成功
@@ -8,6 +8,7 @@ require 'etc' # cpu amount
8
8
  require 'cod'
9
9
  require 'uuid'
10
10
  require 'get_process_mem'
11
+ require 'pathname'
11
12
 
12
13
  def checkMemoryUsage(lineNumber)
13
14
  mem = GetProcessMem.new
@@ -22,6 +23,7 @@ class ExtremeZip
22
23
  @filePartCounter = 0 # 文件分块计数器
23
24
  @responsePipeList = [] # 任务回复管道列表
24
25
  @processIdList = [] # 子进程编号列表。
26
+ @processTimestamp = Time.new.to_i # 记录进程启动的时间戳。
25
27
 
26
28
  @maxSubProcessAmount = Etc.nprocessors # 获取最大的子进程个数
27
29
 
@@ -57,54 +59,132 @@ class ExtremeZip
57
59
 
58
60
  @wholeCbor['vfsDataListStart']=198910 # 压缩 VFS 数据列表起始位置。
59
61
  end # addBasicFileInformation # 加入基本文件信息
62
+
63
+ def writeStamp(rootPath) # 更新时间戳文件
64
+ directoryPathName=Pathname.new(rootPath) #构造路径名字对象。
65
+ datastore= "#{directoryPathName.expand_path}/.exzstamp" # 配置文件路径
66
+ puts "writing stamp file: #{datastore}" # Debug
67
+
68
+ #stamp = wholeCbor['timestamp'] # 获取时间戳
69
+ stampCbor={} # 时间戳对象。
70
+ stampCbor['timestamp']= @processTimestamp # 设置时间戳。
71
+
72
+ compressed= stampCbor.to_cbor
73
+
74
+ extremeZipOutputFile = File.new(datastore, 'wb') # 创建文件
75
+ extremeZipOutputFile.syswrite(compressed) # 写入文件
76
+ extremeZipOutputFile.close # 关闭文件
77
+
78
+ end # writeStamp # 更新时间戳文件
79
+
80
+ def loadStamp(rootPath) # 读取时间戳阈值。
81
+ stamp=0 # 默认值。
82
+ fileExists=false # 文件是否存在
83
+
84
+ directoryPathName=Pathname.new(rootPath) #构造路径名字对象。
85
+
86
+ isFile=directoryPathName.file? #是否是文件。
87
+
88
+ unless isFile #是文件就跳过。
89
+ #陈欣
90
+
91
+ datastore= "#{directoryPathName.expand_path}/.exzstamp" # 配置文件路径
92
+ puts "reading stamp file: #{datastore}" # Debug
93
+
94
+ begin # 尝试读取。
95
+
96
+ #陈欣
97
+
98
+ currentBlockFile = File.new(datastore, 'rb') # 打开文件
99
+
100
+ fileExists=true # 文件存在
101
+
102
+ stampFileContent = currentBlockFile.read # 读取全部内容
103
+
104
+ currentBlockFile.close # 关闭文件
105
+
106
+ options = {:tolerant => true}
107
+
108
+ wholeCbor = CBOR.decode(stampFileContent, options) # 解码
109
+
110
+ stamp = wholeCbor['timestamp'] # 获取时间戳
111
+ rescue Errno::ENOENT
112
+
113
+ end
114
+
115
+
116
+ end #unless isFile #是文件就跳过。
117
+
118
+ return stamp, fileExists # 返回时间戳。
119
+ end #loadStamp(rootPath) # 读取时间戳阈值。
60
120
 
61
121
  # 压缩
62
122
  def exz(rootPath)
63
- victoriaFresh, = @clipDownloader.checkOnce(rootPath) # 打包该目录树。
123
+ timestampTHreshold, fileExists=loadStamp(rootPath) # 读取时间戳阈值。
124
+
125
+ #陈欣
126
+
127
+ if (timestampTHreshold > 0) # 有效的时间戳
128
+ @clipDownloader.timestampThreshold=timestampTHreshold # 设置文件时间戳阈值。
129
+ end #if (timestampTHreshold > 0) # 有效的时间戳
130
+
131
+ if fileExists # 存在文件,则表明将要发生增量压缩
132
+ @wholeCbor['incremental']=true # 是增量压缩。
133
+
134
+ end # if fileExists # 存在文件,则表明用户要求增量压缩
64
135
 
65
- @filePartAmount = @clipDownloader.currentDiskFlushSuffix # 获取文件个数
136
+ @wholeCbor['timestamp']=@processTimestamp # 记录进程启动的时间戳。
137
+
138
+ victoriaFresh, = @clipDownloader.checkOnce(rootPath) # 打包该目录树。
66
139
 
67
- compressVfsMenu(victoriaFresh) # 压缩目录数据。
140
+ @filePartAmount = @clipDownloader.currentDiskFlushSuffix # 获取文件个数
68
141
 
69
- addBasicFileInformation # 加入基本文件信息
142
+ compressVfsMenu(victoriaFresh) # 压缩目录数据。
70
143
 
71
- processIdList, responsePipeList = launchSubProcesses # 启动子进程。
144
+ addBasicFileInformation # 加入基本文件信息
72
145
 
73
- receiveCompressedVfsDataList(processIdList, responsePipeList) # 接收压缩后的数据块列表
146
+ processIdList, responsePipeList = launchSubProcesses # 启动子进程。
74
147
 
75
- checkMemoryUsage(155)
76
- @wholeCbor['vfsDataList'] = @vfsDataList # 加入数据
148
+ receiveCompressedVfsDataList(processIdList, responsePipeList) # 接收压缩后的数据块列表
77
149
 
78
- wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
150
+ checkMemoryUsage(155)
151
+ @wholeCbor['vfsDataList'] = @vfsDataList # 加入数据
152
+
153
+ wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
79
154
 
80
- vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
155
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
81
156
 
82
- while (vfsDataListStart!=@wholeCbor['vfsDataListStart']) # 计算出的偏移不一致
83
- @wholeCbor['vfsDataListStart']=vfsDataListStart # 使用新的值
84
- wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
85
- vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
86
- end
157
+ while (vfsDataListStart!=@wholeCbor['vfsDataListStart']) # 计算出的偏移不一致
158
+ @wholeCbor['vfsDataListStart']=vfsDataListStart # 使用新的值
159
+ wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
160
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
161
+ end
87
162
 
88
- # 写入文件:
89
- writeFile(wholeFileContent, victoriaFresh) # 写入文件内容
163
+ # 写入文件:
164
+ writeFile(wholeFileContent, victoriaFresh) # 写入文件内容
90
165
 
91
- appendVfsDataList victoriaFresh # 追加压缩块列表数据。
166
+ appendVfsDataList victoriaFresh # 追加压缩块列表数据。
167
+
168
+ if fileExists # 存在文件,则表明将要发生增量压缩
169
+ writeStamp # 更新时间戳文件
170
+ end # if fileExists # 存在文件,则表明用户要求增量压缩
171
+
92
172
  end # def exz(rootPath)
93
173
 
94
174
  # 写入压缩块文件
95
175
  def writeCompressBlock(compressed, processCounter)
96
- extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
97
- extremeZipOutputFile.syswrite(compressed) # 写入文件
98
- extremeZipOutputFile.close # 关闭文件
176
+ extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
177
+ extremeZipOutputFile.syswrite(compressed) # 写入文件
178
+ extremeZipOutputFile.close # 关闭文件
99
179
  end
100
180
 
101
181
  # 追加压缩块列表数据。
102
182
  def appendVfsDataList (victoriaFresh)
103
- extremeZipOutputFile = File.new("#{victoriaFresh['name']}.exz", 'ab') # 打开文件
183
+ extremeZipOutputFile = File.new("#{victoriaFresh['name']}.exz", 'ab') # 打开文件
104
184
 
105
- processCounter=0 # 块计数器。
185
+ processCounter=0 # 块计数器。
106
186
 
107
- @wholeCbor['vfsDataList'].each do
187
+ @wholeCbor['vfsDataList'].each do
108
188
  #extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
109
189
 
110
190
  currentBlockFile = File.new("comressed.#{processCounter}.cex", 'rb') # 打开文件
@@ -112,17 +192,18 @@ class ExtremeZip
112
192
  wholeFileContent = currentBlockFile.read # 读取全部内容
113
193
 
114
194
  currentBlockFile.close # 关闭文件
195
+ File.delete(currentBlockFile) # 删除数据块文件
115
196
 
116
197
  #wholeFileContent=File.read("comressed.#{processCounter}.cex", 'rb') # 读取压缩块。
117
198
 
118
- puts "wirte file contetn length: #{wholeFileContent.length}" # Debghu
199
+ puts "wirte file contetn length: #{wholeFileContent.length}" # Debghu
119
200
 
120
- extremeZipOutputFile.syswrite(wholeFileContent) # 写入文件
201
+ extremeZipOutputFile.syswrite(wholeFileContent) # 写入文件
121
202
 
122
- processCounter += 1 # 计数
123
- end
203
+ processCounter += 1 # 计数
204
+ end
124
205
 
125
- extremeZipOutputFile.close # 关闭文件
206
+ extremeZipOutputFile.close # 关闭文件
126
207
  end
127
208
 
128
209
  # 写入文件内容
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.2.6
4
+ version: 2022.2.19
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-02-04 00:00:00.000000000 Z
11
+ date: 2022-02-19 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.27
89
+ version: 2022.2.19
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 2022.1.27
92
+ version: 2022.2.19
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.27
99
+ version: 2022.2.19
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 2022.1.27
102
+ version: 2022.2.19
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: hx_cbor
105
105
  requirement: !ruby/object:Gem::Requirement