VictoriaFreSh 2021.4.19 → 2021.5.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/victoriafresh.rb +87 -3
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1f8a1b21b33f86f42e6c3712cca0f5a7ec76e2c060493df051609e476b20a2df
4
- data.tar.gz: 326eafeb9d1f68828348edde6c0b7f7fbb9876c5e4affe8e463fdd2e89662245
3
+ metadata.gz: 37e81c76bedab62d7f24f3a32a522f7e2b34d89ce5b9674bf5d8d9abd0b633e3
4
+ data.tar.gz: 9cb68fb7da462cded5735b6f5cf545502dd7c6f15d97afe82504634d864ad983
5
5
  SHA512:
6
- metadata.gz: d8e1eae45302abf8da5fd780fdedecc449f80668022b5310b7e77a2c6ebb4ea0e98f2395e16ceef3a975973f25a87b945d8840d541cf935d86ae1d58c74ce7a4
7
- data.tar.gz: f75da9a9c352ba6511a0c35f3e21cd0f66e2c771b7c91f15f81795ddff1b5d6b69ba38b84ba2e4dfe8fb6952484c5c3c012827b46ebc69b2e8571a4a4c9cc1ec
6
+ metadata.gz: 5a6fb40b33d588ed426b0914a33e01b582749d5e5c75832c55d017be8b07374b13215d7a15c2ae5571c8a1d4d2471c24304ab69144b81bb299fe9121408d5b3a
7
+ data.tar.gz: 0cb6a7e591ca99ea1572888a14b07af0a13a5414147f181d1ee4cf124416d88885d2c912ae9041a0e1f71223a31abfbacd8e870631980855db471a3334a72238
data/lib/victoriafresh.rb CHANGED
@@ -24,6 +24,7 @@ class VictoriaFresh
24
24
  @contentPartArray=[] #内容片段数组
25
25
  @currentDiskFlushSuffix=0 #当前的磁盘文件后缀
26
26
  @bufferLength=0 #缓冲区总长度
27
+ @externalDataFile={} #外部数据文件对象
27
28
  end
28
29
 
29
30
  def checkMemoryUsage(lineNumber)
@@ -33,17 +34,54 @@ class VictoriaFresh
33
34
 
34
35
  end #def checkMemoryUsage
35
36
 
36
-
37
37
  def releaseFiles(victoriaFreshPackagedFileString, contentString) #释放目录树
38
- # packagedFile=Com::Stupidbeauty::Victoriafresh::FileMessage.decode(victoriaFreshPackagedFileString) #解码文件消息对象。
39
38
  packagedFile=CBOR.decode(victoriaFreshPackagedFileString) #解码
40
39
 
41
-
42
40
  puts packagedFile #Debug
43
41
 
44
42
  releaseFile('.', packagedFile, contentString) #释放一个文件
45
43
  end #def releaseFiles(victoriaFreshPackagedFile, contentString) #释放目录树
46
44
 
45
+ def releaseFilesExternalDataFile(victoriaFreshPackagedFileString, externalDataFileName) #释放目录树
46
+ packagedFile=CBOR.decode(victoriaFreshPackagedFileString) #解码
47
+
48
+ puts packagedFile #Debug
49
+
50
+ @externalDataFile=File.open(externalDataFileName, 'rb') #打开文件
51
+
52
+ releaseFileExternalDataFile('.', packagedFile) #释放一个文件
53
+
54
+ @externalDataFile.close #关闭文件
55
+ end #def releaseFiles(victoriaFreshPackagedFile, contentString) #释放目录树
56
+
57
+ def writeFileExternalDataFile(pathPrefix, packagedFile) #写入文件
58
+ timeObject=getTimeObject(packagedFile) #构造时间戳对象
59
+
60
+ @externalDataFile.seek(packagedFile['file_start_index']) #定位到起始位置
61
+
62
+ victoriaFreshData=@externalDataFile.read(packagedFile['file_length']) #读取内容
63
+
64
+ # victoriaFreshData=contentString[packagedFile.file_start_index, packagedFile.file_length] #获取内容
65
+ # victoriaFreshData=contentString[ packagedFile['file_start_index'], packagedFile['file_length'] ] #获取内容
66
+
67
+ # pathToMake=pathPrefix + '/' + packagedFile.name #构造文件名
68
+ pathToMake=pathPrefix + '/' + packagedFile['name'] #构造文件名
69
+
70
+ victoriaFreshDataFile=File.new(pathToMake , "wb", packagedFile['permission']) #数据文件。
71
+ victoriaFreshDataFile.syswrite(victoriaFreshData) #写入文件。
72
+ victoriaFreshDataFile.close #关闭文件。
73
+
74
+ FileUtils.touch pathToMake, :mtime => timeObject #设置修改时间
75
+
76
+ permissionNumber=packagedFile['permission'] #获取权限数字
77
+
78
+ if (permissionNumber.nil?) #不带权限字段
79
+ elsif #带权限字段
80
+ File.chmod(permissionNumber, pathToMake) #设置权限
81
+ end #if (permissionNumber.nil?) #不带权限字段
82
+
83
+ end #def writeFileExternalDataFile(pathPrefix, packagedFile) #写入文件
84
+
47
85
  def writeFile(pathPrefix, packagedFile, contentString) #写入文件
48
86
 
49
87
  timeObject=getTimeObject(packagedFile) #构造时间戳对象
@@ -69,6 +107,34 @@ class VictoriaFresh
69
107
 
70
108
  end #writeFile(pathPrefix, packagedFile, contentString) #写入文件
71
109
 
110
+ #创建符号链接
111
+ def makeSymlinkExternalDataFile(pathPrefix, packagedFile)
112
+ puts("start index: #{packagedFile['file_start_index']}, length: #{packagedFile['file_length']}, content string length: #{contentString.bytesize}") #Debug
113
+
114
+ @externalDataFile.seek(packagedFile['file_start_index']) #定位到起始位置
115
+
116
+ victoriaFreshData=@externalDataFile.read(packagedFile['file_length']) #读取内容
117
+ # victoriaFreshData=contentString[ packagedFile['file_start_index'], packagedFile['file_length'] ] #获取内容
118
+
119
+ pathToMake=pathPrefix + '/' + packagedFile['name'] #构造文件名
120
+
121
+ puts("data: #{victoriaFreshData}, path: #{pathToMake}") #Debug
122
+
123
+ FileUtils.symlink(victoriaFreshData, pathToMake, force: true) #创建符号链接
124
+
125
+ permissionNumber=packagedFile['permission'] #获取权限数字
126
+
127
+ if (permissionNumber.nil?) #不带权限字段
128
+ elsif #带权限字段
129
+ # File.chmod(permissionNumber, pathToMake) #设置权限
130
+ begin #尝试修改链接本身的权限
131
+ File.lchmod(permissionNumber, pathToMake) #设置权限
132
+ rescue NotImplementedError #未实现
133
+ puts 'File.lchmod not implemented' #Debug
134
+ end #begin #尝试修改链接本身的权限
135
+ end #if (permissionNumber.nil?) #不带权限字段
136
+ end #def makeSymlinkExternalDataFile(pathPrefix, packagedFile)
137
+
72
138
  #创建符号链接
73
139
  def makeSymlink(pathPrefix, packagedFile, contentString)
74
140
  puts("start index: #{packagedFile['file_start_index']}, length: #{packagedFile['file_length']}, content string length: #{contentString.bytesize}") #Debug
@@ -135,6 +201,24 @@ class VictoriaFresh
135
201
  end #if (permissionNumber.nil?) #不带权限字段
136
202
  end #makeDirectory(pathPrefix, packagedFile) #创建目录
137
203
 
204
+ def releaseFileExternalDataFile(pathPrefix, packagedFile) #释放一个文件
205
+ if packagedFile['is_file'] #是文件,则直接写入文件
206
+ writeFileExternalDataFile(pathPrefix, packagedFile) #写入文件
207
+ elsif packagedFile['is_symlink'] #是符号链接,则创建符号链接
208
+ makeSymlinkExternalDataFile(pathPrefix, packagedFile) #创建符号链接
209
+ else #是目录,则创建目录,并递归处理
210
+ makeDirectory(pathPrefix, packagedFile) #创建目录
211
+
212
+ direcotryPathPrefix=pathPrefix + '/' + packagedFile['name'] #构造针对该目录的路径前缀
213
+
214
+ subFiles=packagedFile['sub_files'] #获取子文件列表。
215
+
216
+ subFiles.each do |currentSubFile| #一个个子文件地释放
217
+ releaseFileExternalDataFile(direcotryPathPrefix, currentSubFile) #释放子文件
218
+ end #subFiles.each do |currentSubFile| #一个个子文件地释放
219
+ end #if packagedFile.is_file #是文件,则直接写入文件
220
+ end #def releaseFileExternalDataFile(pathPrefix, packagedFile) #释放一个文件
221
+
138
222
  def releaseFile( pathPrefix, packagedFile, contentString) #释放一个文件
139
223
  if packagedFile['is_file'] #是文件,则直接写入文件
140
224
  writeFile(pathPrefix, packagedFile, contentString) #写入文件
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: VictoriaFreSh
3
3
  version: !ruby/object:Gem::Version
4
- version: 2021.4.19
4
+ version: 2021.5.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: 2021-04-17 00:00:00.000000000 Z
11
+ date: 2021-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor