docker_core 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docker_core.rb +113 -65
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f70d7fa0c2f973490e37183f8b2af082d3ae23c01182982030806442da8b057
4
- data.tar.gz: 2d079bfee65ce10d1d73fab1565841aa6f46337891a0057c6af1dbcc1e9978f7
3
+ metadata.gz: ad11481b8c2d460b9685c4022b1805220b64bf1db62bbf7faca9a0733d568169
4
+ data.tar.gz: aa21c991bfa072b42b378b7f569bbd55f54b7bd98b10b73a8b01a56a765bd8bd
5
5
  SHA512:
6
- metadata.gz: 6d3326c261ce7ebb72226eba403c5e46a1d1a500eda84c530a368c868758717763ed51d1744b3f8cb6b03dd1321105d5fa2296b2c0ef2851d0b59afcbe0c0ed3
7
- data.tar.gz: 38fd0d39ac645253844533f1f80c2a95c82efaa8822e0d9a3d88a6b539b2f7eb2809311b292cf9c37fa661beed9edd4d4ce6b004291c8483ddad237b33cac939
6
+ metadata.gz: c6b657275d527d98b636106b41f524ecf380743d525089affc0369240c6c93f243e0f9b646efea7195462c030e7f1813153b8a23a9e7551364b77ec5004eaf5e
7
+ data.tar.gz: 67897ef4a150344583d759fc9a89d333cf414c65496bd13cffaa2a6be3ccd644ed9fa3f0850cf0bc8b4646ed0643d6633df02bedc51c9e8ebafa4038bef27909
data/lib/docker_core.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require('fileutils')
2
- require('net/http')
3
2
  require('json')
4
- require('zlib')
3
+ require('net/http')
5
4
  require('rubygems/package')
5
+ require('zlib')
6
6
 
7
7
  module DockerCore
8
8
  COLOR_CODE = { error: 31, info: 32, warn: 33 }
@@ -19,7 +19,7 @@ module DockerCore
19
19
 
20
20
  # @param [String] text
21
21
  # @param [Integer] code
22
- def self.echo(text, code = self::COLOR_CODE[:info])
22
+ def self.echo(text, code: self::COLOR_CODE[:info])
23
23
  puts(self.color(text, code))
24
24
  end
25
25
 
@@ -28,16 +28,16 @@ module DockerCore
28
28
  # @param [Array] argumets
29
29
  def self.execute(title, run, *argumets)
30
30
  code = self::COLOR_CODE[:warn]
31
- self.echo("> #{title}", code)
31
+ self.echo("> #{title}", code: code)
32
32
  run.call(*argumets)
33
- self.echo("< #{title}", code)
33
+ self.echo("< #{title}", code: code)
34
34
  end
35
35
 
36
36
  # @param [String] command
37
- # @param [Boolean] echo
37
+ # @param [Boolean] verbose
38
38
  # @param [Boolean] throw
39
- def self.run(command, echo = true, throw = true)
40
- if echo
39
+ def self.run(command, verbose: true, throw: true)
40
+ if verbose
41
41
  self.echo("+ #{command}")
42
42
  end
43
43
 
@@ -52,56 +52,66 @@ module DockerCore
52
52
 
53
53
  # @param [Integer] uid
54
54
  # @param [Integer] gid
55
- def self.update_user(uid = 500, gid = 500)
55
+ def self.update_user(uid: 500, gid: 500)
56
56
  uid = ENV.fetch('DOCKER_CORE_UID', uid)
57
57
  gid = ENV.fetch('DOCKER_CORE_GID', gid)
58
- self.run('deluser core')
59
- self.run('delgroup core')
58
+ self.run('deluser core', throw: false)
59
+ self.run('delgroup core', throw: false)
60
60
  self.run("addgroup --system --gid=#{gid} core")
61
61
  self.run("adduser --system --disabled-password --no-create-home --ingroup=core --gecos=core --shell=/bin/bash --uid=#{uid} core")
62
62
  end
63
63
 
64
+ # @param [Array<String>] arguments
65
+ def self.path(*arguments)
66
+ return Dir[*arguments].map { |item| File.path(item) }.uniq
67
+ end
68
+
64
69
  # @param [Array<String>] arguments
65
70
  def self.chown(*arguments)
66
- arguments.each do |list|
67
- FileUtils.chown_R('core', 'core', list)
71
+ self.path(*arguments).each do |path|
72
+ FileUtils.chown_R('core', 'core', path, force: true)
68
73
  end
69
- return
70
74
  end
71
75
 
72
76
  # @param [Array<String>] arguments
73
- def self.mkdir(*arguments)
74
- arguments.each do |list|
75
- FileUtils.mkdir_p(list)
77
+ def self.mkdir(*arguments, mode: nil)
78
+ self.path(*arguments).each do |path|
79
+ if File.exist?(path) && false == File.directory?(path)
80
+ File.delete(path)
81
+ end
82
+
83
+ FileUtils.mkdir_p(path, mode: mode)
84
+ end
85
+ end
86
+
87
+ # @param [Array<String>] arguments
88
+ def self.rm(*arguments)
89
+ self.path(*arguments).each do |path|
90
+ FileUtils.rm_rf(path)
76
91
  end
77
- self.chown(*arguments)
78
92
  end
79
93
 
80
94
  # @param [String] value
81
95
  def self.to_boolean(value)
82
- return %w[true yes on].include?(value.strip.downcase)
96
+ return %w[true yes on].include?("#{value}".strip.downcase)
83
97
  end
84
98
 
85
99
  # @param [String] stdout
86
100
  # @param [String] stderr
87
- def self.link_log(stdout = '', stderr = '')
101
+ def self.link_log(stdout: '', stderr: '')
88
102
  if '' != stdout
89
- File.symlink('/dev/stdout', stdout)
103
+ File.symlink('/dev/stdout', File.path(stdout))
90
104
  end
91
105
 
92
106
  if '' != stderr
93
- File.symlink('/dev/stderr', stderr)
107
+ File.symlink('/dev/stderr', File.path(stderr))
94
108
  end
95
- return
96
109
  end
97
110
 
98
111
  # @param [Array<String>] arguments
99
- def self.clear_path(*arguments)
100
- arguments.each do |list|
101
- FileUtils.rm_rf(list)
102
- end
103
-
104
- self.mkdir(*arguments)
112
+ def self.clear_path(*arguments, mode: nil)
113
+ self.rm(*arguments)
114
+ self.mkdir(*arguments, mode: mode)
105
115
  end
106
116
 
107
117
  def self.arch_suffix
@@ -111,8 +121,8 @@ module DockerCore
111
121
 
112
122
  # @param [String] repository
113
123
  def self.github_latest_version(repository)
114
- body = Net::HTTP.get(URI("https://api.github.com/repos/#{repository}/releases/latest"))
115
- return JSON.parse(body)['tag_name']
124
+ uri = URI("https://api.github.com/repos/#{repository}/releases/latest")
125
+ return JSON.parse(Net::HTTP.get(uri))['tag_name']
116
126
  end
117
127
 
118
128
  # @param [String] uri
@@ -128,8 +138,9 @@ module DockerCore
128
138
 
129
139
  if 0 == max_redirect
130
140
  raise('maximum redirect reached')
131
- else return self.uri_resolve(response['location'], max_redirect)
132
141
  end
142
+
143
+ return self.uri_resolve(response['location'], max_redirect)
133
144
  end
134
145
 
135
146
  # @param [String] uri
@@ -140,53 +151,90 @@ module DockerCore
140
151
  return File.binwrite(file, content)
141
152
  end
142
153
 
143
- # @param [String] file
144
154
  # @param [String] path
145
- def self.ungzip(file, path)
146
- longlink = '././@LongLink'
155
+ # @param [Boolean] verbose
156
+ def self.untar(io, path, verbose: false)
157
+ # @type [Gem::Package::TarReader] reader
158
+ Gem::Package::TarReader.new(io) do |reader|
159
+ reader.rewind
160
+ reader.each do |entry|
161
+ # @type [Gem::Package::TarHeader] header
162
+ header = entry.header
163
+ mode = header.mode
164
+ file = File.join(path, entry.full_name)
147
165
 
148
- # @type [Gem::Package::TarReader] tar
149
- Gem::Package::TarReader.new(Zlib::GzipReader.open(file)) do |tar|
150
- target = nil
151
- tar.rewind
166
+ if verbose
167
+ self.echo(": #{file}")
168
+ end
152
169
 
153
- tar.each do |entry|
154
- name = entry.full_name
170
+ if entry.directory?
171
+ self.mkdir(file, mode: mode)
172
+ next
173
+ end
155
174
 
156
- if name == longlink
157
- target = File.join(path, "#{entry.read}".strip)
175
+ if entry.file?
176
+ self.mkdir(File.dirname(file))
177
+ File.binwrite(file, entry.read)
178
+ FileUtils.chmod(mode, file)
158
179
  next
159
180
  end
181
+ end
182
+ end
183
+ end
160
184
 
161
- target ||= File.join(path, name)
185
+ # @param [String] file
186
+ # @param [String] path
187
+ # @param [Boolean] verbose
188
+ def self.ungzip(file, path, verbose: false)
189
+ # @type [Zlib::GzipReader] reader
190
+ Zlib::GzipReader.open(file) do |reader|
191
+ self.untar(reader, path, verbose: verbose)
192
+ end
193
+ end
162
194
 
163
- # @type [Gem::Package::TarHeader] header
164
- header = entry.header
165
- typeflag = header.typeflag
166
- end_slash = name.end_with?('/')
195
+ # @param [String] path
196
+ # @param [Boolean] verbose
197
+ def self.tar(path, verbose: false)
198
+ io = StringIO.new('')
199
+ offset = path.size + 1
200
+
201
+ # @type [Gem::Package::TarWriter] writer
202
+ Gem::Package::TarWriter.new(io) do |writer|
203
+ # @type [String] file
204
+ Dir[File.join(path, '**/*')].each do |name|
205
+ mode = File.stat(name).mode
206
+ file = name.slice(offset ..)
207
+
208
+ if verbose
209
+ self.echo(": #{file}")
210
+ end
167
211
 
168
- if entry.directory? || ('' == typeflag && end_slash)
169
- if File.file?(target)
170
- File.delete(target)
171
- end
212
+ if File.directory?(name)
213
+ writer.mkdir(file, mode)
214
+ next
215
+ end
172
216
 
173
- FileUtils.mkdir_p(target, mode: header.mode)
174
- elsif entry.file? || ('' == typeflag && !end_slash)
175
- if File.directory?(target)
176
- FileUtils.rm_rf(target)
217
+ if File.file?(name)
218
+ writer.add_file(file, mode) do |stream|
219
+ stream.write(File.binread(name))
177
220
  end
178
-
179
- FileUtils.mkdir_p(File.dirname(target))
180
- File.binwrite(target, entry.read)
181
- FileUtils.chmod(header.mode, target)
182
- elsif '2' == typeflag #Symlink!
183
- File.symlink(header.linkname, target)
184
- else raise("Unkown tar entry: #{name} type: #{typeflag}.")
221
+ next
185
222
  end
186
-
187
- target = nil
188
223
  end
189
224
  end
225
+
226
+ io.rewind
227
+ return io.string
228
+ end
229
+
230
+ # @param [String] file
231
+ # @param [String] path
232
+ # @param [Boolean] verbose
233
+ def self.gzip(file, path, verbose: false)
234
+ # @type [Zlib::GzipWriter] writer
235
+ Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do |writer|
236
+ writer.write(self.tar(path, verbose: verbose))
237
+ end
190
238
  end
191
239
 
192
240
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - agrozyme
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-05 00:00:00.000000000 Z
11
+ date: 2021-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fileutils