packo 0.0.1.alpha.1 → 0.0.1.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/bin/packo +13 -2
  2. data/lib/packo.rb +16 -52
  3. data/lib/packo/cli.rb +9 -3
  4. data/lib/packo/cli/base.rb +65 -66
  5. data/lib/packo/cli/build.rb +124 -128
  6. data/lib/packo/cli/files.rb +7 -7
  7. data/lib/packo/cli/repository.rb +40 -26
  8. data/lib/packo/do.rb +106 -73
  9. data/lib/packo/environment.rb +2 -2
  10. data/lib/packo/extensions.rb +20 -6
  11. data/lib/packo/host.rb +10 -0
  12. data/lib/packo/models.rb +8 -2
  13. data/lib/packo/models/repository.rb +17 -14
  14. data/lib/packo/package.rb +9 -3
  15. data/lib/packo/profile.rb +2 -2
  16. data/lib/packo/rbuild.rb +0 -2
  17. data/lib/packo/rbuild/behaviors/default.rb +3 -2
  18. data/lib/packo/rbuild/{modules/misc/fetching.rb → behaviors/python.rb} +8 -3
  19. data/lib/packo/rbuild/modules.rb +2 -3
  20. data/lib/packo/rbuild/modules/building.rb +5 -2
  21. data/lib/packo/rbuild/modules/building/autotools.rb +11 -11
  22. data/lib/packo/rbuild/modules/building/rake.rb +71 -7
  23. data/lib/packo/rbuild/modules/building/scons.rb +128 -0
  24. data/lib/packo/rbuild/modules/{misc/fetcher.rb → fetcher.rb} +5 -5
  25. data/lib/packo/rbuild/modules/fetching.rb +29 -0
  26. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/git.rb +15 -9
  27. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/github.rb +1 -1
  28. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/gnu.rb +1 -1
  29. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/mercurial.rb +11 -7
  30. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/sourceforge.rb +1 -1
  31. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/subversion.rb +23 -5
  32. data/lib/packo/rbuild/modules/misc.rb +0 -8
  33. data/lib/packo/rbuild/modules/packager.rb +63 -0
  34. data/lib/packo/rbuild/modules/packaging.rb +2 -0
  35. data/lib/packo/rbuild/modules/packaging/pko.rb +24 -44
  36. data/lib/packo/rbuild/modules/{misc/unpacker.rb → unpacker.rb} +2 -2
  37. data/lib/packo/rbuild/modules/{misc/unpacking.rb → unpacking.rb} +6 -4
  38. data/lib/packo/rbuild/modules/{misc/unpacking → unpacking}/lzma.rb +1 -1
  39. data/lib/packo/rbuild/modules/{misc/unpacking → unpacking}/tar.rb +1 -1
  40. data/lib/packo/rbuild/modules/{misc/unpacking → unpacking}/xz.rb +1 -1
  41. data/lib/packo/rbuild/modules/{misc/unpacking → unpacking}/zip.rb +1 -1
  42. data/lib/packo/rbuild/package.rb +17 -8
  43. data/lib/packo/repository.rb +1 -1
  44. data/lib/packo/repository/virtual.rb +16 -0
  45. data/lib/packo/utils.rb +106 -0
  46. data/lib/packo/version.rb +1 -1
  47. metadata +39 -25
  48. data/lib/packo/rbuild/modules/misc/fetching/wget.rb +0 -57
@@ -61,7 +61,7 @@ class Files < Thor
61
61
  require 'packo/models'
62
62
 
63
63
  package = Models.search_installed(name).first
64
- root = Pathname.new(package.destination || '/')
64
+ root = Path.new(package.destination || '/')
65
65
 
66
66
  if !package
67
67
  fatal "No package matches #{name}"
@@ -70,9 +70,9 @@ class Files < Thor
70
70
 
71
71
  package.model.contents.each {|content| content.check!
72
72
  case content.type
73
- when :dir; puts "--- #{(root + content.path).cleanpath}"
74
- when :sym; puts ">>> #{(root + content.path).cleanpath} -> #{content.meta}".cyan.bold
75
- when :obj; puts ">>> #{(root + content.path).cleanpath}".bold
73
+ when :dir; puts "--- #{Path.clean(root + content.path)}"
74
+ when :sym; puts ">>> #{Path.clean(root + content.path)} -> #{content.meta}".cyan.bold
75
+ when :obj; puts ">>> #{Path.clean(root + content.path)}".bold
76
76
  end
77
77
  }
78
78
  end
@@ -82,7 +82,7 @@ class Files < Thor
82
82
  def belongs (file)
83
83
  require 'packo/models'
84
84
 
85
- path = Pathname.new(file).realpath.to_s
85
+ path = Path.new(file).realpath.to_s
86
86
  path[0] = ''
87
87
 
88
88
  if content = Models::InstalledPackage::Content.first(path: path)
@@ -119,7 +119,7 @@ class Files < Thor
119
119
  print "\n"
120
120
 
121
121
  package.model.contents.each {|content|
122
- path = (Pathname.new(package.model.destination || '/') + content.path[1, content.path.length]).cleanpath.to_s
122
+ path = Path.clean((package.model.destination || '/') + content.path[1, content.path.length])
123
123
 
124
124
  case content.type
125
125
  when :dir
@@ -137,7 +137,7 @@ class Files < Thor
137
137
  end
138
138
 
139
139
  when :obj
140
- if content.meta != (Do.digest(path) rescue nil)
140
+ if content.meta != (Packo.digest(path) rescue nil)
141
141
  puts "#{'FAIL ' if System.env[:NO_COLORS]}>>> #{path}".red
142
142
  else
143
143
  puts "#{'OK ' if System.env[:NO_COLORS]}>>> #{path}".green
@@ -37,6 +37,7 @@ class Repository < Thor
37
37
 
38
38
  desc 'add URI...', 'Add repositories'
39
39
  map '-a' => :add
40
+ method_option :ignore, type: :boolean, default: true, aliases: '-i', desc: 'Do not add the packages of a virtual repository to the index'
40
41
  def add (*uris)
41
42
  uris.each {|uri|
42
43
  uri = URI.parse(uri)
@@ -139,7 +140,11 @@ class Repository < Thor
139
140
 
140
141
  begin
141
142
  Models.transaction {
142
- _add type, name, uri, path
143
+ if type == :virtual && options[:ignore]
144
+ _add type, name, uri, path, false
145
+ else
146
+ _add type, name, uri, path
147
+ end
143
148
  }
144
149
 
145
150
  CLI.info "Added #{type}/#{name}"
@@ -151,7 +156,6 @@ class Repository < Thor
151
156
  }
152
157
  end
153
158
 
154
-
155
159
  desc 'delete REPOSITORY...', 'Delete installed repositories'
156
160
  map '-d' => :delete, '-R' => :delete
157
161
  def delete (*names)
@@ -178,9 +182,11 @@ class Repository < Thor
178
182
  begin
179
183
  repositories.each {|repository|
180
184
  Models.transaction {
185
+ path = repository.path
186
+
181
187
  _delete(repository.type, repository.name)
182
188
 
183
- FileUtils.rm_rf repository.path, secure: true
189
+ FileUtils.rm_rf path, secure: true
184
190
  }
185
191
  }
186
192
  rescue Exception => e
@@ -191,11 +197,14 @@ class Repository < Thor
191
197
  }
192
198
  end
193
199
 
194
- desc 'update', 'Update installed repositories'
200
+ desc 'update [REPOSITORY...]', 'Update installed repositories'
195
201
  map '-u' => :update
196
202
  method_option :force, type: :boolean, default: false, aliases: '-f', desc: 'Force the update'
197
- def update
203
+ method_option :ignore, type: :boolean, default: true, aliases: '-i', desc: 'Do not add the packages of a virtual repository to the index'
204
+ def update (*repositories)
198
205
  Models::Repository.all.each {|repository|
206
+ next if !repositories.empty? && !repositories.member?(Packo::Repository.wrap(repository).to_s)
207
+
199
208
  updated = false
200
209
 
201
210
  type = repository.type
@@ -223,6 +232,13 @@ class Repository < Thor
223
232
  end
224
233
 
225
234
  when :virtual
235
+ if (content = open(uri).read != File.read(path)) || options[:force]
236
+ _delete(:virtual, name)
237
+ File.write(path, content)
238
+ _add(:vitual, name, uri, path, !options[:ignore])
239
+
240
+ update = true
241
+ end
226
242
  end
227
243
  }
228
244
 
@@ -251,7 +267,9 @@ class Repository < Thor
251
267
  print "#{"#{packages.first.tags}/" unless packages.first.tags.empty?}#{packages.first.name.bold}"
252
268
 
253
269
  print ' ('
254
- print packages.map {|package|
270
+ print packages.sort {|a, b|
271
+ a.version <=> b.version
272
+ }.map {|package|
255
273
  "#{package.version.to_s.red}" + (package.slot ? "%#{package.slot.to_s.blue.bold}" : '')
256
274
  }.join(', ')
257
275
  print ')'
@@ -261,7 +279,9 @@ class Repository < Thor
261
279
  else
262
280
  print "#{packages.first.tags}/#{packages.first.name.bold} ("
263
281
 
264
- print packages.map {|package|
282
+ print packages.sort {|a, b|
283
+ a.version <=> b.version
284
+ }.map {|package|
265
285
  "#{package.version.to_s.red}" + (package.slot ? "%#{package.slot.to_s.blue.bold}" : '')
266
286
  }.join(', ')
267
287
 
@@ -403,19 +423,11 @@ class Repository < Thor
403
423
  puts repository.URI
404
424
  end
405
425
 
406
- desc 'rehash REPOSITORY...', 'Rehash the repository caches'
407
- def rehash (*names)
408
- repositories = []
409
-
410
- if names.empty?
411
- repositories << Models::Repository.all
412
- else
413
- names.each {|name|
414
- repositories << Models::Repository.all(name: name)
415
- }
416
- end
426
+ desc 'rehash [REPOSITORY...]', 'Rehash the repository caches'
427
+ def rehash (*repositories)
428
+ Models::Repository.all.each {|repository|
429
+ next if !repositories.empty? && !repositories.member?(Packo::Repository.wrap(repository).to_s)
417
430
 
418
- repositories.flatten.compact.each {|repository|
419
431
  type = repository.type
420
432
  name = repository.name
421
433
  uri = repository.uri
@@ -475,7 +487,7 @@ class Repository < Thor
475
487
  )
476
488
 
477
489
  build.xpath('.//digest').each {|node| node.remove}
478
- build.add_child dom.create_element('digest', Do.digest(pko))
490
+ build.add_child dom.create_element('digest', Packo.digest(pko))
479
491
 
480
492
  FileUtils.mkpath "#{options[:output]}/#{dom.root['name']}/#{package.tags.to_s(true)}"
481
493
  FileUtils.mv pko, "#{options[:output]}/#{dom.root['name']}/#{package.tags.to_s(true)}"
@@ -508,14 +520,16 @@ class Repository < Thor
508
520
  }
509
521
  end
510
522
 
511
- def _add (type, name, uri, path)
512
- Helpers::Repository.wrap(Models::Repository.create(
523
+ def _add (type, name, uri, path, populate=true)
524
+ repo = Helpers::Repository.wrap(Models::Repository.create(
513
525
  type: type,
514
526
  name: name,
515
527
 
516
528
  uri: uri,
517
529
  path: path
518
- )).populate
530
+ ))
531
+
532
+ repo.populate if populate
519
533
  end
520
534
 
521
535
  def _delete (type, name)
@@ -544,12 +558,12 @@ class Repository < Thor
544
558
  end
545
559
 
546
560
  def _update (path)
547
- result = false
561
+ done = false
548
562
 
549
563
  old = Dir.pwd; Dir.chdir(path)
550
564
 
551
- if !result && (`git reset --hard`) && (`git pull`.strip != 'Already up-to-date.' rescue nil)
552
- result = true
565
+ if !done && (`git reset --hard`) && (`git pull`.strip != 'Already up-to-date.' rescue nil)
566
+ done = true
553
567
  end
554
568
 
555
569
  Dir.chdir(old)
@@ -17,16 +17,11 @@
17
17
  # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
 
20
- require 'fileutils'
21
- require 'digest/sha1'
20
+ require 'packo/utils'
22
21
 
23
22
  module Packo
24
23
 
25
24
  class Do
26
- def self.digest (path)
27
- Digest::SHA1.hexdigest(File.read(path))
28
- end
29
-
30
25
  def self.cd (path=nil)
31
26
  if block_given?
32
27
  tmp = Dir.pwd
@@ -52,12 +47,14 @@ class Do
52
47
  files.flatten!
53
48
  files.compact!
54
49
 
55
- if files.length == 1
56
- Do.dir(File.dirname(to))
57
- FileUtils.cp_r(files.first, to)
58
- else
50
+ type = (path.first.is_a?(Symbol) ? path.shift : :f).to_s
51
+
52
+ if type.include?('r')
59
53
  Do.dir(to)
60
- FileUtils.cp_r(files, to)
54
+ FileUtils.cp_r(files, to, :force => type.include?('f'))
55
+ else
56
+ Do.dir(File.dirname(to))
57
+ FileUtils.cp(files, to, :force => type.include?('f'))
61
58
  end
62
59
  end
63
60
 
@@ -74,17 +71,25 @@ class Do
74
71
  end
75
72
  end
76
73
 
77
- def self.rm (*path)
78
- path.flatten!
79
- path.compact!
74
+ def self.rm (*files)
75
+ files.flatten!
76
+ files.compact!
77
+
78
+ type = (files.first.is_a?(Symbol) ? files.shift : :f).to_s
79
+
80
+ files.each {|file|
81
+ next unless File.exists?(file)
80
82
 
81
- path.each {|path|
82
- next unless File.exists?(path)
83
+ case type
84
+ when /r/
85
+ FileUtils.rm_r(file, :force => type.include?('f'), :secure => true)
83
86
 
84
- if File.directory?(path)
85
- Dir.delete(path) rescue nil
86
- else
87
- FileUtils.rm_f(path) rescue nil
87
+ else
88
+ if File.directory?(file)
89
+ Dir.delete(file) rescue nil
90
+ else
91
+ FileUtils.rm(file, :force => type.include?('f')) rescue nil
92
+ end
88
93
  end
89
94
  }
90
95
  end
@@ -103,7 +108,7 @@ class Do
103
108
  content = File.read(file)
104
109
 
105
110
  seds.each {|(regexp, sub)|
106
- content.gsub!(regexp, sub || '')
111
+ content.gsub!(regexp, sub.to_s)
107
112
  }
108
113
 
109
114
  File.write(file, content)
@@ -114,7 +119,6 @@ class Do
114
119
  def initialize (package)
115
120
  @package = package
116
121
 
117
- @relative = '/usr'
118
122
  @opts = nil
119
123
  @verbose = true
120
124
  end
@@ -124,7 +128,7 @@ class Do
124
128
  def not_verbose!; @verbose = false end
125
129
 
126
130
  def root
127
- "#{@root ? @root : package.distdir}/#{@relative}".gsub(%r{/*/}, '/')
131
+ @root || package.distdir
128
132
  end
129
133
 
130
134
  def root= (path)
@@ -134,7 +138,7 @@ class Do
134
138
  def into (path)
135
139
  tmp, @relative = @relative, path
136
140
 
137
- Do.dir root if root != "/"
141
+ Do.dir "#{root}/#{@relative}"
138
142
 
139
143
  yield
140
144
 
@@ -143,15 +147,10 @@ class Do
143
147
 
144
148
  def opts (value)
145
149
  tmp, @opts = @opts, value
150
+
146
151
  yield
147
- @opts = tmp
148
- end
149
152
 
150
- def ins (*files)
151
- files.map {|file| Dir.glob(file)}.flatten.each {|file|
152
- FileUtils.cp_r file, "#{root}/#{File.basename(file)}", preserve: true, verbose: @verbose
153
- FileUtils.chmod @opts || 0644, "#{root}/#{File.basename(file)}", verbose: @verbose
154
- }
153
+ @opts = tmp
155
154
  end
156
155
 
157
156
  def dir (path)
@@ -159,91 +158,125 @@ class Do
159
158
  FileUtils.chmod @opts || 0755, "#{root}/#{path}", verbose: @verbose
160
159
  end
161
160
 
162
- def bin (*bins)
163
- FileUtils.mkpath "#{root}/bin"
161
+ def ins (*files)
162
+ files.map {|file|
163
+ file.is_a?(Array) ? [file] : Dir.glob(file)
164
+ }.flatten(1).each {|(file, name)|
165
+ path = Path.clean("#{root}/#{@relative || 'usr'}/#{File.basename(name || file)}")
164
166
 
165
- bins.map {|bin| Dir.glob(bin)}.flatten.each {|(file, name)|
166
- FileUtils.cp_r file, "#{root}/bin/#{File.basename(name || file)}", preserve: true, verbose: @verbose
167
- FileUtils.chmod @opts || 0755, "#{root}/bin/#{File.basename(name || file)}", verbose: @verbose
167
+ FileUtils.cp_r file, path, preserve: true, verbose: @verbose
168
+ FileUtils.chmod @opts || 0644, path, verbose: @verbose
168
169
  }
169
170
  end
170
171
 
171
- def sbin (*sbins)
172
- FileUtils.mkpath "#{root}/sbin"
172
+ def bin (*bins)
173
+ bins.map {|bin|
174
+ bin.is_a?(Array) ? [bin] : Dir.glob(bin)
175
+ }.flatten(1).each {|(file, name)|
176
+ path = Path.clean("#{root}/#{@relative || '/'}/bin/#{File.basename(name || file)}")
177
+
178
+ FileUtils.mkpath File.dirname(path)
179
+ FileUtils.cp_r file, path, preserve: true, verbose: @verbose
180
+ FileUtils.chmod @opts || 0755, path, verbose: @verbose
181
+ }
182
+ end
173
183
 
174
- sbins.map {|sbin| Dir.glob(sbin)}.flatten.each {|(file, name)|
175
- FileUtils.cp_r file, "#{root}/sbin/#{File.basename(name || file)}", preserve: true, verbose: @verbose
176
- FileUtils.chmod @opts || 0755, "#{root}/sbin/#{File.basename(name || file)}", verbose: @verbose
184
+ def sbin (*sbins)
185
+ sbins.map {|sbin|
186
+ sbin.is_a?(Array) ? [sbin] : Dir.glob(sbin)
187
+ }.flatten(1).each {|(file, name)|
188
+ path = Path.clean("#{root}/#{@relative || '/'}/sbin/#{File.basename(name || file)}")
189
+
190
+ FileUtils.mkpath File.dirname(path)
191
+ FileUtils.cp_r file, path, preserve: true, verbose: @verbose
192
+ FileUtils.chmod @opts || 0755, path, verbose: @verbose
177
193
  }
178
194
  end
179
195
 
180
196
  def lib (*libs)
181
- FileUtils.mkpath "#{root}/lib"
182
-
183
- libs.map {|lib| Dir.glob(lib)}.flatten.each {|(file, name)|
184
- FileUtils.cp_r file, "#{root}/lib/#{File.basename(name || file)}", preserve: true, verbose: @verbose
185
- FileUtils.chmod @opts || (file.match(/\.a(\.|$)/) ? 0644 : 0755), "#{root}/lib/#{File.basename(name || file)}", verbose: @verbose
197
+ libs.map {|lib|
198
+ lib.is_a?(Array) ? [lib] : Dir.glob(lib)
199
+ }.flatten(1).each {|(file, name)|
200
+ path = Path.clean("#{root}/#{@relative || '/usr'}/lib/#{File.basename(name || file)}")
201
+
202
+ FileUtils.mkpath File.dirname(path)
203
+ FileUtils.cp_r file, path, preserve: true, verbose: @verbose
204
+ FileUtils.chmod @opts || (file.match(/\.a(\.|$)/) ? 0644 : 0755), path, verbose: @verbose
186
205
  }
187
206
  end
188
207
 
189
208
  def doc (*docs)
190
209
  into("/usr/share/doc/#{package.name}-#{package.version}") {
191
- docs.map {|doc| Dir.glob(doc)}.flatten.each {|(file, name)|
192
- FileUtils.cp_r file, "#{root}/#{File.basename(name || file)}", preserve: true, verbose: @verbose
193
- FileUtils.chmod @opts || 0644, "#{root}/#{File.basename(name || file)}", verbose: @verbose
210
+ docs.map {|doc|
211
+ doc.is_a?(Array) ? [doc] : Dir.glob(doc)
212
+ }.flatten(1).each {|(file, name)|
213
+ path = "#{root}/#{@relative}/#{File.basename(name || file)}"
214
+
215
+ FileUtils.cp_r file, path, preserve: true, verbose: @verbose
216
+ FileUtils.chmod @opts || 0644, path, verbose: @verbose
194
217
  }
195
218
  }
196
219
  end
197
220
 
198
221
  def html (*htmls)
199
222
  into("/usr/share/doc/#{package.name}-#{package.version}/html") {
200
- htmls.map {|html| Dir.glob(html)}.flatten.each {|(file, name)|
201
- FileUtils.cp_r file, "#{root}/#{File.basename(name || file)}", preserve: true, verbose: @verbose
202
- FileUtils.chmod @opts || 0644, "#{root}/#{File.basename(name || file)}", verbose: @verbose
223
+ htmls.map {|html|
224
+ html.is_a?(Array) ? [html] : Dir.glob(html)
225
+ }.flatten(1).each {|(file, name)|
226
+ path = "#{root}/#{@relative}/#{File.basename(name || file)}"
227
+
228
+ FileUtils.cp_r file, path, preserve: true, verbose: @verbose
229
+ FileUtils.chmod @opts || 0644, path, verbose: @verbose
203
230
  }
204
231
  }
205
232
  end
206
233
 
207
234
  def man (*mans)
208
- mans.map {|man| Dir.glob(man)}.flatten.each {|man|
209
- into("/usr/share/man/man#{man[-1]}") {
210
- FileUtils.cp_r man, "#{root}/#{File.basename(man)}", preserve: true, verbose: @verbose
211
- FileUtils.chmod @opts || 0644, "#{root}/#{File.basename(man)}", verbose: @verbose
235
+ into("/usr/share/man/man#{man[-1]}") {
236
+ mans.map {|man|
237
+ man.is_a?(Array) ? [man] : Dir.glob(man)
238
+ }.flatten(1).each {|(file, name)|
239
+ path = "#{root}/#{@relative}/#{File.basename(name || file)}"
240
+
241
+ FileUtils.cp_r file, path, preserve: true, verbose: @verbose
242
+ FileUtils.chmod @opts || 0644, path, verbose: @verbose
212
243
  }
213
244
  }
214
245
  end
215
246
 
216
247
  def info (*infos)
217
- infos.map {|info| Dir.glob(info)}.flatten.each {|info|
218
- into("/usr/share/info/#{info[-1]}") {
219
- FileUtils.cp_r info, "#{root}/#{File.basename(info)}", preserve: true, verbose: @verbose
220
- Packo.sh 'gzip', '-9', "#{root}/#{File.basename(info)}", silent: !@verbose rescue nil
221
- FileUtils.chmod @opts || 0644, "#{root}/#{File.basename(info)}", verbose: @verbose
248
+ into("/usr/share/info/#{info[-1]}") {
249
+ infos.map {|info|
250
+ info.is_a?(Array) ? [info] : Dir.glob(info)
251
+ }.flatten(1).each {|(file, name)|
252
+ path = "#{root}/#{@relative}/#{File.basename(name || file)}"
253
+
254
+ FileUtils.cp_r file, path, preserve: true, verbose: @verbose
255
+ Packo.sh 'gzip', '-9', path, silent: !@verbose rescue nil
256
+ FileUtils.chmod @opts || 0644, path, verbose: @verbose
222
257
  }
223
258
  }
224
259
  end
225
260
 
226
261
  def sym (link, to)
227
- FileUtils.mkpath "#{root}/#{File.dirname(to)}"
228
- FileUtils.ln_sf link, "#{root}/#{to}", verbose: @verbose
262
+ path = Path.clean("#{root}/#{@relative}/#{to}")
263
+
264
+ FileUtils.mkpath File.dirname(path)
265
+ FileUtils.ln_sf link, path, verbose: @verbose
229
266
  end
230
267
 
231
268
  def hard (link, to)
232
- FileUtils.mkpath "#{root}/#{File.dirname(to)}"
233
- FileUtils.ln_f link, "#{root}/#{to}", verbose: @verbose
269
+ path = Path.clean("#{root}/#{@relative}/#{to}")
270
+
271
+ FileUtils.mkpath File.dirname(path)
272
+ FileUtils.ln_f link, path, verbose: @verbose
234
273
  end
235
274
 
236
275
  def own (user, group, *files)
237
- infos.map {|info| Dir.glob(info)}.flatten.each {|info|
238
- into("/usr/share/info/#{info[-1]}") {
239
- FileUtils.cp_r info, "#{root}/#{File.basename(info)}", preserve: true, verbose: @verbose
240
- Packo.sh 'gzip', '-9', "#{root}/#{File.basename(info)}", silent: !@verbose rescue nil
241
- FileUtils.chmod @opts || 0644, "#{root}/#{File.basename(info)}", verbose: @verbose
242
- }
276
+ files.flatten.compact.each {|file|
277
+ FileUtils.chown user, group, files, :verbose => @verbose
243
278
  }
244
279
  end
245
-
246
- # TODO: wrappers
247
280
  end
248
281
 
249
282
  end