VictoriaFreSh 2020.7.41 → 2020.8.29

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 +67 -41
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e5911a19548bfe00380087be4ecdd1b409998b4e638efda2dced3e9230f96e5
4
- data.tar.gz: dacb8805adc3a9ecdb92dc4dc3b823a51e817d5e185b3e4ce84c7febc7df21f7
3
+ metadata.gz: 62522d43b651b6ba58ed738f1a0e72b2c0f66ca24f8329cb60dc6e6807be782a
4
+ data.tar.gz: e4c61f51e78420aac6c6d29090b4fefa627479415671a0a1df919b735277baa9
5
5
  SHA512:
6
- metadata.gz: cfa90b3207130554012814b0c767414716e899dbf3eac02db2ce61b93d82e11102fd9604e79a372951b05dbffe2e638f2bcd3ac25f504dc045d773c9b10f0e14
7
- data.tar.gz: 523547ae2dcc53db55f79f4165d6e86e3cd0bd0f63b6e347178a7c23cfe843de8f7597ba7f44d020411879e81933b6b2e08437ddaef819b6ba6b03897c430340
6
+ metadata.gz: fc5531da173296c23d942ed4690d71dda0b7748beae9fd1923e47c91011f544b1efea697d7ac330930d3d3f40455af1ae846258372223c61cdab918a020c5551
7
+ data.tar.gz: 0a43292024c056a5af88b210728fc9345533de397d23078134b21429c61b63812945eaab823bac890c06ed4f60b77d7f9b024d6328a8e58768cd9f60d102e0cd
@@ -21,22 +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", packagedFile['permission']) #数据文件。
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
- 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'] ] #获取内容
39
42
 
43
+ pathToMake=pathPrefix + '/' + packagedFile['name'] #构造文件名
44
+
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
+
55
+ File.lchmod(packagedFile['permission'], pathToMake) #设置权限
56
+ end #def makeSymlink(pathPrefix, packagedFile, contentString) #创建符号链接
57
+
58
+ def getTimeObject(packagedFile) #构造时间戳对象
40
59
  # seconds=packagedFile.timestamp.seconds #获取秒数
41
60
  seconds=packagedFile['timestamp']['seconds'] #获取秒数
42
61
 
@@ -53,7 +72,8 @@ class VictoriaFresh
53
72
 
54
73
  puts 'mkdir' #Debug
55
74
 
56
- pathToMake=File.join(pathPrefix, packagedFile.name)
75
+ # pathToMake=File.join(pathPrefix, packagedFile.name)
76
+ pathToMake=File.join(pathPrefix, packagedFile['name'])
57
77
 
58
78
  puts pathToMake #Debug.
59
79
 
@@ -64,19 +84,22 @@ class VictoriaFresh
64
84
 
65
85
 
66
86
  FileUtils.touch pathToMake, :mtime => timeObject #设置修改时间
67
-
87
+ File.chmod(packagedFile['permission'], pathToMake) #设置权限
68
88
  end #makeDirectory(pathPrefix, packagedFile) #创建目录
69
89
 
70
90
  def releaseFile( pathPrefix, packagedFile, contentString) #释放一个文件
71
91
  # puts packagedFile.name #Debug
72
92
  puts packagedFile['name'] #Debug
73
-
93
+ puts("content stirng length: #{contentString.bytesize}") #Debug
74
94
  # puts packagedFile.timestamp #Debug
75
95
  puts packagedFile['timestamp'] #Debug
76
96
 
77
97
  # if packagedFile.is_file #是文件,则直接写入文件
78
98
  if packagedFile['is_file'] #是文件,则直接写入文件
79
99
  writeFile(pathPrefix, packagedFile, contentString) #写入文件
100
+ elsif packagedFile['is_symlink'] #是符号链接,则创建符号链接
101
+ makeSymlink(pathPrefix, packagedFile, contentString) #创建符号链接
102
+ # writeFile(pathPrefix, packagedFile, contentString) #写入文件
80
103
  else #是目录,则创建目录,并递归处理
81
104
  makeDirectory(pathPrefix, packagedFile) #创建目录
82
105
 
@@ -94,57 +117,61 @@ class VictoriaFresh
94
117
  end #def releaseFile(packagedFile, contentString) #释放一个文件
95
118
 
96
119
  def checkOnce(directoryPath,startIndex=0) #打包一个目录树。
97
- # packagedFile=Com::Stupidbeauty::Victoriafresh::FileMessage.new #创建文件消息对象。
98
120
  packagedFile={} #创建文件消息对象。
99
121
 
100
- # packagedFile.sub_files=[] #初始化数组。
101
122
  packagedFile['sub_files'] = [] #加入到子文件列表中。
102
123
 
103
- # packagedFile.sub_files=Google::Protobuf::RepeatedField.new(Com::Stupidbeauty::Victoriafresh::FileMessage, []) #初始化数组
104
- # packagedFile.sub_files=Google::Protobuf::RepeatedField.new(Google::Protobuf::DescriptorPool.generated_pool.lookup("com.stupidbeauty.victoriafresh.FileMessage").msgclass, []) #初始化数组
105
-
106
-
107
124
  directoryPathName=Pathname.new(directoryPath) #构造路径名字对象。
108
125
 
109
126
  baseName=directoryPathName.basename.to_s #基本文件名。
110
127
 
111
- # packagedFile.name=baseName #设置文件名。
112
128
  packagedFile['name']=baseName #设置文件名。
113
129
 
114
130
  isFile=directoryPathName.file? #是否是文件。
131
+ isSymLink=directoryPathName.symlink? #是否是符号链接
115
132
 
116
- # packagedFile.is_file=isFile #设置属性,是否是文件。
117
133
  packagedFile['is_file']=isFile #设置属性,是否是文件。
118
-
119
- # packagedFile.file_start_index=startIndex #记录文件内容的开始位置。
120
134
  packagedFile['file_start_index']=startIndex #记录文件内容的开始位置。
121
135
 
122
-
123
- #记录时间戳:
124
- mtimeStamp=File.mtime(directoryPath) #获取时间戳
136
+ packagedFile['is_symlink']=isSymLink #设置属性,是否是符号链接
137
+
125
138
  puts directoryPath #Dbug.
126
- puts mtimeStamp #Debug
127
- puts mtimeStamp.tv_sec #Debug
128
- puts mtimeStamp.tv_nsec #Debug
129
139
 
130
- # packagedFile.timestamp=Google::Protobuf::Timestamp.new #时间戳
131
- packagedFile['timestamp']={} #时间戳
140
+ #记录时间戳:
141
+ begin #读取时间戳
142
+ mtimeStamp=File.mtime(directoryPath) #获取时间戳
132
143
 
133
- # packagedFile.timestamp.seconds=mtimeStamp.tv_sec #设置秒数
134
- packagedFile['timestamp']['seconds']=mtimeStamp.tv_sec #设置秒数
135
-
144
+ packagedFile['timestamp']={} #时间戳
145
+ packagedFile['timestamp']['seconds']=mtimeStamp.tv_sec #设置秒数
146
+ packagedFile['timestamp']['nanos']=mtimeStamp.tv_nsec #设置纳秒数
147
+
148
+ packagedFile['permission']=(File.stat(directoryPath).mode & 07777 ) #设置权限信息
149
+ rescue Errno::ENOENT
136
150
 
137
- # packagedFile.timestamp.nanos=mtimeStamp.tv_nsec #设置纳秒数
138
- packagedFile['timestamp']['nanos']=mtimeStamp.tv_nsec #设置纳秒数
151
+ end #begin #读取时间戳
139
152
 
140
153
  if (isFile) #是文件,不用再列出其子文件了。
141
- # packagedFile.file_length=directoryPathName.size #记录文件的内容长度。
142
154
  packagedFile['file_length']=directoryPathName.size #记录文件的内容长度。
143
155
 
144
156
  #读取文件内容:
145
157
  fileToReadContent=File.new(directoryPath,"rb") #创建文件。
146
158
  contentString=fileToReadContent.read #全部读取。
147
159
 
160
+ # puts("encoding: #{contentString.encoding}") #Debug.
161
+ elsif (isSymLink) #是符号链接
162
+ # puts("sub file: #{directoryPathName}, class: #{directoryPathName.class}, symlink: #{directoryPathName.symlink?}, expand_path: #{directoryPathName.expand_path}, file?: #{directoryPathName.file?}, read link: #{directoryPathName.readlink}") #Debug.
163
+
164
+ linkTarget=directoryPathName.readlink #获取链接目标
165
+
166
+ # 待续,设置内容长度。符号链接字符串的长度
167
+ packagedFile['file_length']=linkTarget.to_s.bytesize #记录文件的内容长度。
168
+
169
+ #读取文件内容:
170
+ # fileToReadContent=File.new(directoryPath,"rb") #创建文件。
171
+ contentString=StringIO.new(linkTarget.to_s).binmode.read #全部读取。
172
+ # contentString=linkTarget.to_s.encode('UTF-8') #全部读取。
173
+ puts("encoding: #{contentString.encoding}") #Debug.
174
+ puts("content string: #{contentString}") #Debug
148
175
  else #是目录。
149
176
  contentString="" #容纳内容的字符串。
150
177
  subFileStartIndex=startIndex #子文件的起始位置,以此目录的起始位置为基准。
@@ -153,20 +180,19 @@ class VictoriaFresh
153
180
  packagedFile['file_length']=0 #本目录的内容长度。
154
181
 
155
182
  directoryPathName.each_child do |subFile| #一个个文件地处理。
156
- realPath=subFile.realpath #获取绝对路径。
157
-
183
+ # puts("sub file: #{subFile}, class: #{subFile.class}, symlink: #{subFile.symlink?}, expand_path: #{subFile.expand_path}, file?: #{subFile.file?}") #Debug.
184
+ realPath=subFile.expand_path #获取绝对路径。
158
185
 
159
186
  packagedSubFile,subFileContent=checkOnce(realPath,subFileStartIndex) #打包这个子文件。
160
187
 
161
- # packagedFile.sub_files << packagedSubFile #加入到子文件列表中。
162
188
  packagedFile['sub_files'] << packagedSubFile #加入到子文件列表中。
163
189
 
190
+ # puts("sub file content: #{subFileContent}") #Debug
191
+
164
192
  contentString = contentString + subFileContent #串接文件内容。
165
193
 
166
- # subFileStartIndex+=packagedSubFile.file_length #记录打包的子文件的长度,更新下一个要打包的子文件的起始位置。
167
194
  subFileStartIndex+=packagedSubFile['file_length'] #记录打包的子文件的长度,更新下一个要打包的子文件的起始位置。
168
195
 
169
- # packagedFile.file_length+=packagedSubFile.file_length #随着子文件的打包而更新本目录的总长度。
170
196
  packagedFile['file_length']+=packagedSubFile['file_length'] #随着子文件的打包而更新本目录的总长度。
171
197
  end #directoryPathName.each_child do |subFile| #一个个文件地处理。
172
198
  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.41
4
+ version: 2020.8.29
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-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor