EXtremeZip 2022.2.6 → 2022.2.22

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: da998c51added74a4ed2c3aad2e8ceb768152b7255f9807d92703dc503485b71
4
+ data.tar.gz: 6bf1557f7c8a52c6c065cac5a7c70374202c60170bd0717fb2db100540a22c8d
5
5
  SHA512:
6
- metadata.gz: 249baeec68ad080d1d4fbd7f158d11b794aeff51c4e429d447cea91c9e9cb925a0c487506b9112e1cccf530bfe325f1dd5c74b1914d63a53a972a592acbf00a2
7
- data.tar.gz: 229d12c536bc4ecec1253e62bb98db4a9cba42f0808904bd36ad9460dcb801ad949dc33c2ac39ac4c0982d37d2248d28d73e1a0943a3d61ad1547238cdc21187
6
+ metadata.gz: ba80a4d83712386988790d45ae7916b52cba1107f7a7bef496fba3e948af2d50c57f5cae95530df2e65cb13efc869bf5e71fe701b84af28b69fd2b4eac321000
7
+ data.tar.gz: 1a9cd925dbfc6624d02bfe2861072fd8c78d87ee9f2762ee6cc56fcbcaff4ffcc09cc7e2b139c4884e111770577f0b4fd43471a5605b27073f76d495680c9179
@@ -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,142 @@ 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
+ puts wholeCbor # Debug
111
+ puts wholeCbor.inspect # Debug
112
+
113
+ stamp = wholeCbor['timestamp'].to_i # 获取时间戳
114
+ #stamp = wholeCbor.try(:[], 'timestamp') # 获取时间戳
115
+
116
+
117
+ rescue Errno::ENOENT, TypeError
118
+
119
+ end
120
+
121
+
122
+ end #unless isFile #是文件就跳过。
123
+
124
+ return stamp, fileExists # 返回时间戳。
125
+ end #loadStamp(rootPath) # 读取时间戳阈值。
60
126
 
61
127
  # 压缩
62
128
  def exz(rootPath)
63
- victoriaFresh, = @clipDownloader.checkOnce(rootPath) # 打包该目录树。
129
+ timestampTHreshold, fileExists=loadStamp(rootPath) # 读取时间戳阈值。
130
+
131
+ puts "threshold: #{timestampTHreshold}" # Debug
132
+
133
+ #陈欣
134
+
135
+ if (timestampTHreshold > 0) # 有效的时间戳
136
+ @clipDownloader.timestampThreshold=timestampTHreshold # 设置文件时间戳阈值。
137
+ end #if (timestampTHreshold > 0) # 有效的时间戳
138
+
139
+ puts "threshold vfs: #{@clipDownloader.timestampThreshold}" # Debug
140
+
141
+ if fileExists # 存在文件,则表明将要发生增量压缩
142
+ @wholeCbor['incremental']=true # 是增量压缩。
143
+
144
+ end # if fileExists # 存在文件,则表明用户要求增量压缩
64
145
 
65
- @filePartAmount = @clipDownloader.currentDiskFlushSuffix # 获取文件个数
146
+ @wholeCbor['timestamp']=@processTimestamp # 记录进程启动的时间戳。
147
+
148
+ victoriaFresh, = @clipDownloader.checkOnce(rootPath) # 打包该目录树。
66
149
 
67
- compressVfsMenu(victoriaFresh) # 压缩目录数据。
150
+ @filePartAmount = @clipDownloader.currentDiskFlushSuffix # 获取文件个数
68
151
 
69
- addBasicFileInformation # 加入基本文件信息
152
+ compressVfsMenu(victoriaFresh) # 压缩目录数据。
70
153
 
71
- processIdList, responsePipeList = launchSubProcesses # 启动子进程。
154
+ addBasicFileInformation # 加入基本文件信息
72
155
 
73
- receiveCompressedVfsDataList(processIdList, responsePipeList) # 接收压缩后的数据块列表
156
+ processIdList, responsePipeList = launchSubProcesses # 启动子进程。
74
157
 
75
- checkMemoryUsage(155)
76
- @wholeCbor['vfsDataList'] = @vfsDataList # 加入数据
158
+ receiveCompressedVfsDataList(processIdList, responsePipeList) # 接收压缩后的数据块列表
77
159
 
78
- wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
160
+ checkMemoryUsage(155)
161
+ @wholeCbor['vfsDataList'] = @vfsDataList # 加入数据
162
+
163
+ wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
79
164
 
80
- vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
165
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
81
166
 
82
- while (vfsDataListStart!=@wholeCbor['vfsDataListStart']) # 计算出的偏移不一致
83
- @wholeCbor['vfsDataListStart']=vfsDataListStart # 使用新的值
84
- wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
85
- vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
86
- end
167
+ while (vfsDataListStart!=@wholeCbor['vfsDataListStart']) # 计算出的偏移不一致
168
+ @wholeCbor['vfsDataListStart']=vfsDataListStart # 使用新的值
169
+ wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
170
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
171
+ end
87
172
 
88
- # 写入文件:
89
- writeFile(wholeFileContent, victoriaFresh) # 写入文件内容
173
+ # 写入文件:
174
+ writeFile(wholeFileContent, victoriaFresh) # 写入文件内容
90
175
 
91
- appendVfsDataList victoriaFresh # 追加压缩块列表数据。
176
+ appendVfsDataList victoriaFresh # 追加压缩块列表数据。
177
+
178
+ if fileExists # 存在文件,则表明将要发生增量压缩
179
+ writeStamp (rootPath) # 更新时间戳文件
180
+ end # if fileExists # 存在文件,则表明用户要求增量压缩
181
+
92
182
  end # def exz(rootPath)
93
183
 
94
184
  # 写入压缩块文件
95
185
  def writeCompressBlock(compressed, processCounter)
96
- extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
97
- extremeZipOutputFile.syswrite(compressed) # 写入文件
98
- extremeZipOutputFile.close # 关闭文件
186
+ extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
187
+ extremeZipOutputFile.syswrite(compressed) # 写入文件
188
+ extremeZipOutputFile.close # 关闭文件
99
189
  end
100
190
 
101
191
  # 追加压缩块列表数据。
102
192
  def appendVfsDataList (victoriaFresh)
103
- extremeZipOutputFile = File.new("#{victoriaFresh['name']}.exz", 'ab') # 打开文件
193
+ extremeZipOutputFile = File.new("#{victoriaFresh['name']}.exz", 'ab') # 打开文件
104
194
 
105
- processCounter=0 # 块计数器。
195
+ processCounter=0 # 块计数器。
106
196
 
107
- @wholeCbor['vfsDataList'].each do
197
+ @wholeCbor['vfsDataList'].each do
108
198
  #extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
109
199
 
110
200
  currentBlockFile = File.new("comressed.#{processCounter}.cex", 'rb') # 打开文件
@@ -112,17 +202,18 @@ class ExtremeZip
112
202
  wholeFileContent = currentBlockFile.read # 读取全部内容
113
203
 
114
204
  currentBlockFile.close # 关闭文件
205
+ File.delete(currentBlockFile) # 删除数据块文件
115
206
 
116
207
  #wholeFileContent=File.read("comressed.#{processCounter}.cex", 'rb') # 读取压缩块。
117
208
 
118
- puts "wirte file contetn length: #{wholeFileContent.length}" # Debghu
209
+ puts "wirte file contetn length: #{wholeFileContent.length}" # Debghu
119
210
 
120
- extremeZipOutputFile.syswrite(wholeFileContent) # 写入文件
211
+ extremeZipOutputFile.syswrite(wholeFileContent) # 写入文件
121
212
 
122
- processCounter += 1 # 计数
123
- end
213
+ processCounter += 1 # 计数
214
+ end
124
215
 
125
- extremeZipOutputFile.close # 关闭文件
216
+ extremeZipOutputFile.close # 关闭文件
126
217
  end
127
218
 
128
219
  # 写入文件内容
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.22
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-20 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.20
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 2022.1.27
92
+ version: 2022.2.20
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.20
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 2022.1.27
102
+ version: 2022.2.20
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: hx_cbor
105
105
  requirement: !ruby/object:Gem::Requirement