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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/victoriafresh.rb +78 -36
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3cd9a3ba2ec266174958ab7fed3a2dfba2656ffb0b0833742fb91fe078a28617
4
- data.tar.gz: 44f60f5f60c7d0126a5994e1ba99afa435a2c153a4a84d46dd9406ddf0bbb9b1
3
+ metadata.gz: 99215cc9a7204a11d468653634860ed7222a8448550e4aa4daab5a39ddc6bde3
4
+ data.tar.gz: 1456293d1e0a810f7eaa71006b9ac5eedbfece62686b5aec36e5d18960c1e62b
5
5
  SHA512:
6
- metadata.gz: 965aea54528d639258d17c780a28160fb33d4043f026eb000c3c1ad51e5b11960c3655b2b5b96ad1c1fe02e926417603560eadbaca2d42b436380573883ce233
7
- data.tar.gz: ae2bbe7ab8f2a894af168acbebbe9e6861bd2e46baf5fe19d65049d986575848f3d27fe9fbf6e0827e9c604d1814b21e26e3921737e5455601c6405a32bac8eb
6
+ metadata.gz: 5eb6776e38f7156f29fd1f494956e358079faddc20237b106a3391a30d81e5fa627b041500fc4c8cdcf516064974116ce005abf86250bcae8f853be70db3f5fc
7
+ data.tar.gz: 85de65cc4cab55bdf7abc1034efa844b04481d3add31bcb8b8979774e0fd7d3c641c749c55f348503748447dd022084190e42de34e6e27546a9de9bf907c6b8d
@@ -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
- def getTimeObject(packagedFile) #构造时间戳对象
39
- # puts packagedFile.timestamp #Debug
40
- puts packagedFile['timestamp'] #Debug
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
- # packagedFile.timestamp=Google::Protobuf::Timestamp.new #时间戳
134
- packagedFile['timestamp']={} #时间戳
159
+ #记录时间戳:
160
+ begin #读取时间戳
161
+ mtimeStamp=File.mtime(directoryPath) #获取时间戳
135
162
 
136
- # packagedFile.timestamp.seconds=mtimeStamp.tv_sec #设置秒数
137
- packagedFile['timestamp']['seconds']=mtimeStamp.tv_sec #设置秒数
138
-
139
-
140
- # packagedFile.timestamp.nanos=mtimeStamp.tv_nsec #设置纳秒数
141
- packagedFile['timestamp']['nanos']=mtimeStamp.tv_nsec #设置纳秒数
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
- realPath=subFile.realpath #获取绝对路径。
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.7.43
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-02 00:00:00.000000000 Z
11
+ date: 2020-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor