19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/iesd/utility/hdiutil.rb', line 19
def self.write input, output, options = {}
options = {
:resize => {
:grow => 0,
:shrink => false
}
}.merge(options)
Dir.mktmpdir { |tmp|
shadow = File.join(tmp, "#{File.basename input}.shadow")
shadow_options = ["-shadow", shadow]
format_options = ["-format", `#{Utility::HDIUTIL} imageinfo -format "#{input}"`.chomp]
Dir.mktmpdir(nil, tmp) { |mountpoint|
resize_limits = `#{Utility::HDIUTIL} resize -limits -shadow "#{shadow}" "#{input}"`.chomp.split.map { |s| s.to_i }
sectors = (resize_limits[1] + options[:resize][:grow]).to_s
system(Utility::HDIUTIL, "resize", "-growonly", "-sectors", sectors, *shadow_options, input)
attach input, mountpoint, [*DEFAULT_MOUNT_OPTIONS, *shadow_options]
if block_given?
yield mountpoint
else
shell mountpoint
end
detach input, mountpoint, [*DEFAULT_UNMOUNT_OPTIONS]
system(Utility::HDIUTIL, "resize", "-shrinkonly", "-sectors", "min", *shadow_options, input) if options[:resize][:shrink]
}
oh1 "Merging #{shadow}"
system(Utility::HDIUTIL, "convert", *DEFAULT_CONVERT_OPTIONS, *format_options, *shadow_options, "-o", output, input)
puts "Merged: #{output}"
}
end
|