class ODisk::Diff

Attributes

local[RW]

local Info Object

remote[RW]

remote Info Object

sub_diffs[RW]

Public Class Methods

digest_diff(ld, rd) click to toggle source
# File lib/odisk/diff.rb, line 34
def self.digest_diff(ld, rd)
  diffs = {}
  lh = ld.entries_hash()
  rh = rd.entries_hash()
  keys = lh.keys | rh.keys
  keys.each do |k|
    le = lh[k]
    re = rh[k]
    diffs[k] = self.new(le, re) unless le == re
  end
  diffs
end
dir_diff(l, r, recursive=false) click to toggle source
# File lib/odisk/diff.rb, line 11
def self.dir_diff(l, r, recursive=false)
  ld = Digest.create(l, nil)
  rd = Digest.create(r, nil)
  diffs = digest_diff(ld, rd)
  if recursive
    lh = ld.entries_hash()
    rh = rd.entries_hash()
    keys = lh.keys | rh.keys
    keys.each do |k|
      next unless lh[k].is_a?(::ODisk::Dir) || rh[k].is_a?(::ODisk::Dir)
      unless (sd = dir_diff(::File.join(l, k), ::File.join(r, k))).nil? || sd.empty?
        if (d = diffs[k]).nil?
          d = self.new(lh[k], rh[k], sd)
        else
          d.sub_diffs = sd
        end
        diffs[k] = d
      end
    end
  end
  diffs
end
new(local, remote, sub_diffs={}) click to toggle source
# File lib/odisk/diff.rb, line 47
def initialize(local, remote, sub_diffs={})
  @local = local
  @remote = remote
  @sub_diffs = sub_diffs
end

Public Instance Methods

fill_hash(prefix, h, sym=false) click to toggle source
# File lib/odisk/diff.rb, line 53
def fill_hash(prefix, h, sym=false)
  [:class, :name, :owner, :group, :mode, :mtime, :size, :target].each do |m|
    next unless @local.respond_to?(m) and @remote.respond_to?(m)
    lv = @local.send(m)
    rv = @remote.send(m)
    if sym
      k = m
    else
      k = @local.name + '.' + m.to_s
      k = prefix + '.' + k unless prefix.nil?
    end
    h[k] = [lv, rv] unless lv == rv unless (:mtime == m && !@remote.is_a?(::ODisk::File))
  end
  unless @local.nil?
    pre = prefix.nil? ? @local.name : (prefix + '.' + @local.name)
  end
  @sub_diffs.each do |name,d|
    d.fill_hash(pre, h)
  end
end
to_s() click to toggle source
# File lib/odisk/diff.rb, line 74
def to_s()
  s = ''
  h = {}
  fill_hash(nil, h)
  h.each { |k,v| s << "#{k}: #{v[0]} vs #{v[1]}\n" }
  s
end