Module: HDIUtil

Defined in:
lib/iesd/utility/hdiutil.rb,
lib/iesd/utility/hdiutil.rb

Defined Under Namespace

Classes: DMG

Constant Summary collapse

DEFAULT_MOUNT_OPTIONS =
%w{ -nobrowse -quiet -noverify}
DEFAULT_UNMOUNT_OPTIONS =
%w{ -quiet }
DEFAULT_CONVERT_OPTIONS =
%w{ -quiet }

Class Method Summary collapse

Class Method Details

.read(input) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/iesd/utility/hdiutil.rb', line 7

def self.read input
  Dir.mktmpdir { |mountpoint|
    attach input, mountpoint, [*DEFAULT_MOUNT_OPTIONS]
    if block_given?
      yield mountpoint
    else
      shell mountpoint
    end
    detach input, mountpoint, [*DEFAULT_UNMOUNT_OPTIONS]
  }
end

.validate(input) ⇒ Object



43
44
45
# File 'lib/iesd/utility/hdiutil.rb', line 43

def self.validate input
  Kernel.system("#{Utility::HDIUTIL} imageinfo \"#{input}\" >/dev/null 2>&1")
end

.write(input, output, add_sectors = 0) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/iesd/utility/hdiutil.rb', line 19

def self.write input, output, add_sectors = 0
  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] + add_sectors).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)
    }
    oh1 "Merging #{shadow}"
    system(Utility::HDIUTIL, "convert", *DEFAULT_CONVERT_OPTIONS, *format_options, *shadow_options, "-o", output, input)
    puts "Merged: #{output}"
  }
end