VictoriaFreSh 2020.7.39 → 2020.8.24

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