VictoriaFreSh 2020.7.40 → 2020.8.28

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/victoriafresh.rb +69 -34
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6875e9de252b8afd7dd64d34c32597dcadaabee06ef8bca5b620a87f42b1ba58
4
- data.tar.gz: 9f488ace675b90f90418f29c8e108e666c1966715fad8cdf509bebe9628da3df
3
+ metadata.gz: f3584c33ba89a128cba749bdd3f40999487bd3b752f74b0fef2185f4de4cccc8
4
+ data.tar.gz: a02a0a68b46bcb9dd2bdf66cddb8364e7d267172cc3ebf0e65178ffc8d7838e2
5
5
  SHA512:
6
- metadata.gz: df5341edc8fdc913e4172853f56db04f633d10a076bcc00cdda2b69e62a8dd2289020b70e5c36dbbefcfe4cdc77f299181997a81ab2b76906ef993f0312ff149
7
- data.tar.gz: 9684efa8248d70a73e68806b221835cbf793cf10ee7bc13abff1c5d2676f0165824a7ccba4e7251277e28640eac49a645058467fb96e69ae57a2400752a51347
6
+ metadata.gz: c7daf3a023afb9d6190c57db4fbda022a8b191dba03c7a579ee40200f1d5a60b75524acaced3721ebfbc42ddd500b07a1622c9d82f4e309a69a6a4f1b0f80dca
7
+ data.tar.gz: d10c9cd621aac4017795dd36157db9f2264d5ed4b7db9812d84d86bcc46db34a9536aedbf19bbd161a37fd10f437d91d7f91c0a5baf644e95a3d5631f2725877
@@ -21,23 +21,44 @@ class VictoriaFresh
21
21
 
22
22
  timeObject=getTimeObject(packagedFile) #构造时间戳对象
23
23
 
24
- victoriaFreshData=contentString[packagedFile.file_start_index, packagedFile.file_length] #获取内容
24
+ # victoriaFreshData=contentString[packagedFile.file_start_index, packagedFile.file_length] #获取内容
25
+ victoriaFreshData=contentString[ packagedFile['file_start_index'], packagedFile['file_length'] ] #获取内容
25
26
 
26
- pathToMake=pathPrefix + '/' + packagedFile.name #构造文件名
27
+ # pathToMake=pathPrefix + '/' + packagedFile.name #构造文件名
28
+ pathToMake=pathPrefix + '/' + packagedFile['name'] #构造文件名
27
29
 
28
- victoriaFreshDataFile=File.new(pathToMake , "wb") #数据文件。
29
- victoriaFreshDataFile.syswrite(victoriaFreshData) #写入文件。
30
+ victoriaFreshDataFile=File.new(pathToMake , "wb") #数据文件。
31
+ victoriaFreshDataFile.syswrite(victoriaFreshData) #写入文件。
30
32
  victoriaFreshDataFile.close #关闭文件。
31
-
33
+
32
34
  FileUtils.touch pathToMake, :mtime => timeObject #设置修改时间
33
-
35
+
34
36
  end #writeFile(pathPrefix, packagedFile, contentString) #写入文件
35
37
 
36
- def getTimeObject(packagedFile) #构造时间戳对象
37
- puts packagedFile.timestamp #Debug
38
+ #创建符号链接
39
+ def makeSymlink(pathPrefix, packagedFile, contentString)
40
+ puts("start index: #{packagedFile['file_start_index']}, length: #{packagedFile['file_length']}, content string length: #{contentString.bytesize}") #Debug
41
+ victoriaFreshData=contentString[ packagedFile['file_start_index'], packagedFile['file_length'] ] #获取内容
42
+
43
+ pathToMake=pathPrefix + '/' + packagedFile['name'] #构造文件名
38
44
 
39
- seconds=packagedFile.timestamp.seconds #获取秒数
40
- microSeconds=packagedFile.timestamp.nanos/ 1000.0 #获取毫秒数
45
+ # victoriaFreshDataFile=File.new(pathToMake , "wb") #数据文件。
46
+ # victoriaFreshDataFile.syswrite(victoriaFreshData) #写入文件。
47
+ # victoriaFreshDataFile.close #关闭文件。
48
+ #
49
+ # FileUtils.touch pathToMake, :mtime => timeObject #设置修改时间
50
+
51
+ puts("data: #{victoriaFreshData}, path: #{pathToMake}") #Debug
52
+
53
+ FileUtils.symlink(victoriaFreshData, pathToMake, force: true) #创建符号链接
54
+ end #def makeSymlink(pathPrefix, packagedFile, contentString) #创建符号链接
55
+
56
+ def getTimeObject(packagedFile) #构造时间戳对象
57
+ # seconds=packagedFile.timestamp.seconds #获取秒数
58
+ seconds=packagedFile['timestamp']['seconds'] #获取秒数
59
+
60
+ # microSeconds=packagedFile.timestamp.nanos/ 1000.0 #获取毫秒数
61
+ microSeconds=packagedFile['timestamp']['nanos'] / 1000.0 #获取毫秒数
41
62
 
42
63
  timeObject=Time.at(seconds, microSeconds) #构造时间对象
43
64
 
@@ -49,7 +70,8 @@ class VictoriaFresh
49
70
 
50
71
  puts 'mkdir' #Debug
51
72
 
52
- pathToMake=File.join(pathPrefix, packagedFile.name)
73
+ # pathToMake=File.join(pathPrefix, packagedFile.name)
74
+ pathToMake=File.join(pathPrefix, packagedFile['name'])
53
75
 
54
76
  puts pathToMake #Debug.
55
77
 
@@ -66,13 +88,16 @@ class VictoriaFresh
66
88
  def releaseFile( pathPrefix, packagedFile, contentString) #释放一个文件
67
89
  # puts packagedFile.name #Debug
68
90
  puts packagedFile['name'] #Debug
69
-
91
+ puts("content stirng length: #{contentString.bytesize}") #Debug
70
92
  # puts packagedFile.timestamp #Debug
71
93
  puts packagedFile['timestamp'] #Debug
72
94
 
73
95
  # if packagedFile.is_file #是文件,则直接写入文件
74
96
  if packagedFile['is_file'] #是文件,则直接写入文件
75
97
  writeFile(pathPrefix, packagedFile, contentString) #写入文件
98
+ elsif packagedFile['is_symlink'] #是符号链接,则创建符号链接
99
+ makeSymlink(pathPrefix, packagedFile, contentString) #创建符号链接
100
+ # writeFile(pathPrefix, packagedFile, contentString) #写入文件
76
101
  else #是目录,则创建目录,并递归处理
77
102
  makeDirectory(pathPrefix, packagedFile) #创建目录
78
103
 
@@ -104,43 +129,54 @@ class VictoriaFresh
104
129
 
105
130
  baseName=directoryPathName.basename.to_s #基本文件名。
106
131
 
107
- # packagedFile.name=baseName #设置文件名。
108
132
  packagedFile['name']=baseName #设置文件名。
109
133
 
110
134
  isFile=directoryPathName.file? #是否是文件。
135
+ isSymLink=directoryPathName.symlink? #是否是符号链接
111
136
 
112
- # packagedFile.is_file=isFile #设置属性,是否是文件。
113
137
  packagedFile['is_file']=isFile #设置属性,是否是文件。
114
-
115
- # packagedFile.file_start_index=startIndex #记录文件内容的开始位置。
116
138
  packagedFile['file_start_index']=startIndex #记录文件内容的开始位置。
117
139
 
118
-
119
- #记录时间戳:
120
- mtimeStamp=File.mtime(directoryPath) #获取时间戳
140
+ packagedFile['is_symlink']=isSymLink #设置属性,是否是符号链接
141
+
121
142
  puts directoryPath #Dbug.
122
- puts mtimeStamp #Debug
123
- puts mtimeStamp.tv_sec #Debug
124
- puts mtimeStamp.tv_nsec #Debug
125
143
 
126
- # packagedFile.timestamp=Google::Protobuf::Timestamp.new #时间戳
127
- packagedFile['timestamp']={} #时间戳
144
+ #记录时间戳:
145
+ begin #读取时间戳
146
+ mtimeStamp=File.mtime(directoryPath) #获取时间戳
147
+ # puts mtimeStamp #Debug
128
148
 
129
- # packagedFile.timestamp.seconds=mtimeStamp.tv_sec #设置秒数
130
- packagedFile['timestamp']['seconds']=mtimeStamp.tv_sec #设置秒数
149
+ packagedFile['timestamp']={} #时间戳
150
+ packagedFile['timestamp']['seconds']=mtimeStamp.tv_sec #设置秒数
151
+ packagedFile['timestamp']['nanos']=mtimeStamp.tv_nsec #设置纳秒数
131
152
 
153
+ rescue Errno::ENOENT
154
+
155
+ end #begin #读取时间戳
132
156
 
133
- # packagedFile.timestamp.nanos=mtimeStamp.tv_nsec #设置纳秒数
134
- packagedFile['timestamp']['nanos']=mtimeStamp.tv_nsec #设置纳秒数
135
157
 
136
158
  if (isFile) #是文件,不用再列出其子文件了。
137
- # packagedFile.file_length=directoryPathName.size #记录文件的内容长度。
138
159
  packagedFile['file_length']=directoryPathName.size #记录文件的内容长度。
139
160
 
140
161
  #读取文件内容:
141
162
  fileToReadContent=File.new(directoryPath,"rb") #创建文件。
142
163
  contentString=fileToReadContent.read #全部读取。
143
164
 
165
+ # puts("encoding: #{contentString.encoding}") #Debug.
166
+ elsif (isSymLink) #是符号链接
167
+ # puts("sub file: #{directoryPathName}, class: #{directoryPathName.class}, symlink: #{directoryPathName.symlink?}, expand_path: #{directoryPathName.expand_path}, file?: #{directoryPathName.file?}, read link: #{directoryPathName.readlink}") #Debug.
168
+
169
+ linkTarget=directoryPathName.readlink #获取链接目标
170
+
171
+ # 待续,设置内容长度。符号链接字符串的长度
172
+ packagedFile['file_length']=linkTarget.to_s.bytesize #记录文件的内容长度。
173
+
174
+ #读取文件内容:
175
+ # fileToReadContent=File.new(directoryPath,"rb") #创建文件。
176
+ contentString=StringIO.new(linkTarget.to_s).binmode.read #全部读取。
177
+ # contentString=linkTarget.to_s.encode('UTF-8') #全部读取。
178
+ puts("encoding: #{contentString.encoding}") #Debug.
179
+ puts("content string: #{contentString}") #Debug
144
180
  else #是目录。
145
181
  contentString="" #容纳内容的字符串。
146
182
  subFileStartIndex=startIndex #子文件的起始位置,以此目录的起始位置为基准。
@@ -149,20 +185,19 @@ class VictoriaFresh
149
185
  packagedFile['file_length']=0 #本目录的内容长度。
150
186
 
151
187
  directoryPathName.each_child do |subFile| #一个个文件地处理。
152
- realPath=subFile.realpath #获取绝对路径。
153
-
188
+ # puts("sub file: #{subFile}, class: #{subFile.class}, symlink: #{subFile.symlink?}, expand_path: #{subFile.expand_path}, file?: #{subFile.file?}") #Debug.
189
+ realPath=subFile.expand_path #获取绝对路径。
154
190
 
155
191
  packagedSubFile,subFileContent=checkOnce(realPath,subFileStartIndex) #打包这个子文件。
156
192
 
157
- # packagedFile.sub_files << packagedSubFile #加入到子文件列表中。
158
193
  packagedFile['sub_files'] << packagedSubFile #加入到子文件列表中。
159
194
 
195
+ # puts("sub file content: #{subFileContent}") #Debug
196
+
160
197
  contentString = contentString + subFileContent #串接文件内容。
161
198
 
162
- # subFileStartIndex+=packagedSubFile.file_length #记录打包的子文件的长度,更新下一个要打包的子文件的起始位置。
163
199
  subFileStartIndex+=packagedSubFile['file_length'] #记录打包的子文件的长度,更新下一个要打包的子文件的起始位置。
164
200
 
165
- # packagedFile.file_length+=packagedSubFile.file_length #随着子文件的打包而更新本目录的总长度。
166
201
  packagedFile['file_length']+=packagedSubFile['file_length'] #随着子文件的打包而更新本目录的总长度。
167
202
  end #directoryPathName.each_child do |subFile| #一个个文件地处理。
168
203
  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.7.40
4
+ version: 2020.8.28
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-02 00:00:00.000000000 Z
11
+ date: 2020-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor