VictoriaFreSh 2020.7.43 → 2020.8.31
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 +4 -4
- data/lib/victoriafresh.rb +78 -36
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99215cc9a7204a11d468653634860ed7222a8448550e4aa4daab5a39ddc6bde3
|
4
|
+
data.tar.gz: 1456293d1e0a810f7eaa71006b9ac5eedbfece62686b5aec36e5d18960c1e62b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5eb6776e38f7156f29fd1f494956e358079faddc20237b106a3391a30d81e5fa627b041500fc4c8cdcf516064974116ce005abf86250bcae8f853be70db3f5fc
|
7
|
+
data.tar.gz: 85de65cc4cab55bdf7abc1034efa844b04481d3add31bcb8b8979774e0fd7d3c641c749c55f348503748447dd022084190e42de34e6e27546a9de9bf907c6b8d
|
data/lib/victoriafresh.rb
CHANGED
@@ -27,18 +27,48 @@ class VictoriaFresh
|
|
27
27
|
# pathToMake=pathPrefix + '/' + packagedFile.name #构造文件名
|
28
28
|
pathToMake=pathPrefix + '/' + packagedFile['name'] #构造文件名
|
29
29
|
|
30
|
-
victoriaFreshDataFile=File.new(pathToMake , "wb") #数据文件。
|
30
|
+
victoriaFreshDataFile=File.new(pathToMake , "wb", packagedFile['permission']) #数据文件。
|
31
31
|
victoriaFreshDataFile.syswrite(victoriaFreshData) #写入文件。
|
32
32
|
victoriaFreshDataFile.close #关闭文件。
|
33
33
|
|
34
34
|
FileUtils.touch pathToMake, :mtime => timeObject #设置修改时间
|
35
35
|
|
36
|
+
permissionNumber=packagedFile['permission'] #获取权限数字
|
37
|
+
|
38
|
+
if (permissionNumber.nil?) #不带权限字段
|
39
|
+
elsif #带权限字段
|
40
|
+
File.chmod(permissionNumber, pathToMake) #设置权限
|
41
|
+
end #if (permissionNumber.nil?) #不带权限字段
|
42
|
+
|
36
43
|
end #writeFile(pathPrefix, packagedFile, contentString) #写入文件
|
37
44
|
|
38
|
-
|
39
|
-
|
40
|
-
puts packagedFile['
|
45
|
+
#创建符号链接
|
46
|
+
def makeSymlink(pathPrefix, packagedFile, contentString)
|
47
|
+
puts("start index: #{packagedFile['file_start_index']}, length: #{packagedFile['file_length']}, content string length: #{contentString.bytesize}") #Debug
|
48
|
+
victoriaFreshData=contentString[ packagedFile['file_start_index'], packagedFile['file_length'] ] #获取内容
|
49
|
+
|
50
|
+
pathToMake=pathPrefix + '/' + packagedFile['name'] #构造文件名
|
41
51
|
|
52
|
+
# victoriaFreshDataFile=File.new(pathToMake , "wb") #数据文件。
|
53
|
+
# victoriaFreshDataFile.syswrite(victoriaFreshData) #写入文件。
|
54
|
+
# victoriaFreshDataFile.close #关闭文件。
|
55
|
+
#
|
56
|
+
# FileUtils.touch pathToMake, :mtime => timeObject #设置修改时间
|
57
|
+
|
58
|
+
puts("data: #{victoriaFreshData}, path: #{pathToMake}") #Debug
|
59
|
+
|
60
|
+
FileUtils.symlink(victoriaFreshData, pathToMake, force: true) #创建符号链接
|
61
|
+
|
62
|
+
permissionNumber=packagedFile['permission'] #获取权限数字
|
63
|
+
|
64
|
+
if (permissionNumber.nil?) #不带权限字段
|
65
|
+
elsif #带权限字段
|
66
|
+
# File.chmod(permissionNumber, pathToMake) #设置权限
|
67
|
+
File.lchmod(permissionNumber, pathToMake) #设置权限
|
68
|
+
end #if (permissionNumber.nil?) #不带权限字段
|
69
|
+
end #def makeSymlink(pathPrefix, packagedFile, contentString) #创建符号链接
|
70
|
+
|
71
|
+
def getTimeObject(packagedFile) #构造时间戳对象
|
42
72
|
# seconds=packagedFile.timestamp.seconds #获取秒数
|
43
73
|
seconds=packagedFile['timestamp']['seconds'] #获取秒数
|
44
74
|
|
@@ -67,19 +97,28 @@ class VictoriaFresh
|
|
67
97
|
|
68
98
|
|
69
99
|
FileUtils.touch pathToMake, :mtime => timeObject #设置修改时间
|
70
|
-
|
100
|
+
|
101
|
+
permissionNumber=packagedFile['permission'] #获取权限数字
|
102
|
+
|
103
|
+
if (permissionNumber.nil?) #不带权限字段
|
104
|
+
elsif #带权限字段
|
105
|
+
File.chmod(permissionNumber, pathToMake) #设置权限
|
106
|
+
end #if (permissionNumber.nil?) #不带权限字段
|
71
107
|
end #makeDirectory(pathPrefix, packagedFile) #创建目录
|
72
108
|
|
73
109
|
def releaseFile( pathPrefix, packagedFile, contentString) #释放一个文件
|
74
110
|
# puts packagedFile.name #Debug
|
75
111
|
puts packagedFile['name'] #Debug
|
76
|
-
|
112
|
+
puts("content stirng length: #{contentString.bytesize}") #Debug
|
77
113
|
# puts packagedFile.timestamp #Debug
|
78
114
|
puts packagedFile['timestamp'] #Debug
|
79
115
|
|
80
116
|
# if packagedFile.is_file #是文件,则直接写入文件
|
81
117
|
if packagedFile['is_file'] #是文件,则直接写入文件
|
82
118
|
writeFile(pathPrefix, packagedFile, contentString) #写入文件
|
119
|
+
elsif packagedFile['is_symlink'] #是符号链接,则创建符号链接
|
120
|
+
makeSymlink(pathPrefix, packagedFile, contentString) #创建符号链接
|
121
|
+
# writeFile(pathPrefix, packagedFile, contentString) #写入文件
|
83
122
|
else #是目录,则创建目录,并递归处理
|
84
123
|
makeDirectory(pathPrefix, packagedFile) #创建目录
|
85
124
|
|
@@ -97,57 +136,61 @@ class VictoriaFresh
|
|
97
136
|
end #def releaseFile(packagedFile, contentString) #释放一个文件
|
98
137
|
|
99
138
|
def checkOnce(directoryPath,startIndex=0) #打包一个目录树。
|
100
|
-
# packagedFile=Com::Stupidbeauty::Victoriafresh::FileMessage.new #创建文件消息对象。
|
101
139
|
packagedFile={} #创建文件消息对象。
|
102
140
|
|
103
|
-
# packagedFile.sub_files=[] #初始化数组。
|
104
141
|
packagedFile['sub_files'] = [] #加入到子文件列表中。
|
105
142
|
|
106
|
-
# packagedFile.sub_files=Google::Protobuf::RepeatedField.new(Com::Stupidbeauty::Victoriafresh::FileMessage, []) #初始化数组
|
107
|
-
# packagedFile.sub_files=Google::Protobuf::RepeatedField.new(Google::Protobuf::DescriptorPool.generated_pool.lookup("com.stupidbeauty.victoriafresh.FileMessage").msgclass, []) #初始化数组
|
108
|
-
|
109
|
-
|
110
143
|
directoryPathName=Pathname.new(directoryPath) #构造路径名字对象。
|
111
144
|
|
112
145
|
baseName=directoryPathName.basename.to_s #基本文件名。
|
113
146
|
|
114
|
-
# packagedFile.name=baseName #设置文件名。
|
115
147
|
packagedFile['name']=baseName #设置文件名。
|
116
148
|
|
117
149
|
isFile=directoryPathName.file? #是否是文件。
|
150
|
+
isSymLink=directoryPathName.symlink? #是否是符号链接
|
118
151
|
|
119
|
-
# packagedFile.is_file=isFile #设置属性,是否是文件。
|
120
152
|
packagedFile['is_file']=isFile #设置属性,是否是文件。
|
121
|
-
|
122
|
-
# packagedFile.file_start_index=startIndex #记录文件内容的开始位置。
|
123
153
|
packagedFile['file_start_index']=startIndex #记录文件内容的开始位置。
|
124
154
|
|
125
|
-
|
126
|
-
|
127
|
-
mtimeStamp=File.mtime(directoryPath) #获取时间戳
|
155
|
+
packagedFile['is_symlink']=isSymLink #设置属性,是否是符号链接
|
156
|
+
|
128
157
|
puts directoryPath #Dbug.
|
129
|
-
puts mtimeStamp #Debug
|
130
|
-
puts mtimeStamp.tv_sec #Debug
|
131
|
-
puts mtimeStamp.tv_nsec #Debug
|
132
158
|
|
133
|
-
|
134
|
-
|
159
|
+
#记录时间戳:
|
160
|
+
begin #读取时间戳
|
161
|
+
mtimeStamp=File.mtime(directoryPath) #获取时间戳
|
135
162
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
163
|
+
packagedFile['timestamp']={} #时间戳
|
164
|
+
packagedFile['timestamp']['seconds']=mtimeStamp.tv_sec #设置秒数
|
165
|
+
packagedFile['timestamp']['nanos']=mtimeStamp.tv_nsec #设置纳秒数
|
166
|
+
|
167
|
+
packagedFile['permission']=(File.stat(directoryPath).mode & 07777 ) #设置权限信息
|
168
|
+
rescue Errno::ENOENT
|
169
|
+
rescue Errno::EACCES #权限受限
|
170
|
+
end #begin #读取时间戳
|
142
171
|
|
143
172
|
if (isFile) #是文件,不用再列出其子文件了。
|
144
|
-
# packagedFile.file_length=directoryPathName.size #记录文件的内容长度。
|
145
173
|
packagedFile['file_length']=directoryPathName.size #记录文件的内容长度。
|
146
174
|
|
147
175
|
#读取文件内容:
|
148
176
|
fileToReadContent=File.new(directoryPath,"rb") #创建文件。
|
149
177
|
contentString=fileToReadContent.read #全部读取。
|
150
178
|
|
179
|
+
# puts("encoding: #{contentString.encoding}") #Debug.
|
180
|
+
elsif (isSymLink) #是符号链接
|
181
|
+
# puts("sub file: #{directoryPathName}, class: #{directoryPathName.class}, symlink: #{directoryPathName.symlink?}, expand_path: #{directoryPathName.expand_path}, file?: #{directoryPathName.file?}, read link: #{directoryPathName.readlink}") #Debug.
|
182
|
+
|
183
|
+
linkTarget=directoryPathName.readlink #获取链接目标
|
184
|
+
|
185
|
+
# 待续,设置内容长度。符号链接字符串的长度
|
186
|
+
packagedFile['file_length']=linkTarget.to_s.bytesize #记录文件的内容长度。
|
187
|
+
|
188
|
+
#读取文件内容:
|
189
|
+
# fileToReadContent=File.new(directoryPath,"rb") #创建文件。
|
190
|
+
contentString=StringIO.new(linkTarget.to_s).binmode.read #全部读取。
|
191
|
+
# contentString=linkTarget.to_s.encode('UTF-8') #全部读取。
|
192
|
+
puts("encoding: #{contentString.encoding}") #Debug.
|
193
|
+
puts("content string: #{contentString}") #Debug
|
151
194
|
else #是目录。
|
152
195
|
contentString="" #容纳内容的字符串。
|
153
196
|
subFileStartIndex=startIndex #子文件的起始位置,以此目录的起始位置为基准。
|
@@ -156,20 +199,19 @@ class VictoriaFresh
|
|
156
199
|
packagedFile['file_length']=0 #本目录的内容长度。
|
157
200
|
|
158
201
|
directoryPathName.each_child do |subFile| #一个个文件地处理。
|
159
|
-
|
160
|
-
|
202
|
+
# puts("sub file: #{subFile}, class: #{subFile.class}, symlink: #{subFile.symlink?}, expand_path: #{subFile.expand_path}, file?: #{subFile.file?}") #Debug.
|
203
|
+
realPath=subFile.expand_path #获取绝对路径。
|
161
204
|
|
162
205
|
packagedSubFile,subFileContent=checkOnce(realPath,subFileStartIndex) #打包这个子文件。
|
163
206
|
|
164
|
-
# packagedFile.sub_files << packagedSubFile #加入到子文件列表中。
|
165
207
|
packagedFile['sub_files'] << packagedSubFile #加入到子文件列表中。
|
166
208
|
|
209
|
+
# puts("sub file content: #{subFileContent}") #Debug
|
210
|
+
|
167
211
|
contentString = contentString + subFileContent #串接文件内容。
|
168
212
|
|
169
|
-
# subFileStartIndex+=packagedSubFile.file_length #记录打包的子文件的长度,更新下一个要打包的子文件的起始位置。
|
170
213
|
subFileStartIndex+=packagedSubFile['file_length'] #记录打包的子文件的长度,更新下一个要打包的子文件的起始位置。
|
171
214
|
|
172
|
-
# packagedFile.file_length+=packagedSubFile.file_length #随着子文件的打包而更新本目录的总长度。
|
173
215
|
packagedFile['file_length']+=packagedSubFile['file_length'] #随着子文件的打包而更新本目录的总长度。
|
174
216
|
end #directoryPathName.each_child do |subFile| #一个个文件地处理。
|
175
217
|
end #if (isFile) #是文件,不用再列出其子文件了。
|
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: 2020.
|
4
|
+
version: 2020.8.31
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hxcan Cai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cbor
|