Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/bindings/swig/ruby/svn/delta.rb view on Meta::CPAN
end
end
class ChangedDirsEditor < BaseEditor
attr_reader :changed_dirs
def initialize
@changed_dirs = []
end
def open_root(base_revision)
[true, '']
end
def delete_entry(path, revision, parent_baton)
dir_changed(parent_baton)
end
def add_directory(path, parent_baton,
copyfrom_path, copyfrom_revision)
dir_changed(parent_baton)
[true, path]
end
def open_directory(path, parent_baton, base_revision)
[true, path]
end
def change_dir_prop(dir_baton, name, value)
dir_changed(dir_baton)
end
def add_file(path, parent_baton,
copyfrom_path, copyfrom_revision)
dir_changed(parent_baton)
end
def open_file(path, parent_baton, base_revision)
dir_changed(parent_baton)
end
def close_edit(baton)
@changed_dirs.sort!
end
private
def dir_changed(baton)
if baton[0]
# the directory hasn't been printed yet. do it.
@changed_dirs << "#{baton[1]}/"
baton[0] = nil
end
end
end
class ChangedEditor < BaseEditor
attr_reader :copied_files, :copied_dirs
attr_reader :added_files, :added_dirs
attr_reader :deleted_files, :deleted_dirs
attr_reader :updated_files, :updated_dirs
def initialize(root, base_root)
@root = root
@base_root = base_root
@in_copied_dir = []
@copied_files = []
@copied_dirs = []
@added_files = []
@added_dirs = []
@deleted_files = []
@deleted_dirs = []
@updated_files = []
@updated_dirs = []
end
def open_root(base_revision)
[true, '']
end
def delete_entry(path, revision, parent_baton)
if @base_root.dir?("/#{path}")
@deleted_dirs << "#{path}/"
else
@deleted_files << path
end
end
def add_directory(path, parent_baton,
copyfrom_path, copyfrom_revision)
copyfrom_rev, copyfrom_path = @root.copied_from(path)
if in_copied_dir?
@in_copied_dir.push(true)
elsif Util.copy?(copyfrom_path, copyfrom_rev)
@copied_dirs << ["#{path}/", "#{copyfrom_path.sub(/^\//, '')}/", copyfrom_rev]
@in_copied_dir.push(true)
else
@added_dirs << "#{path}/"
@in_copied_dir.push(false)
end
[false, path]
end
def open_directory(path, parent_baton, base_revision)
[true, path]
end
def change_dir_prop(dir_baton, name, value)
if dir_baton[0]
@updated_dirs << "#{dir_baton[1]}/"
dir_baton[0] = false
end
dir_baton
end
def close_directory(dir_baton)
unless dir_baton[0]
@in_copied_dir.pop
end
end
def add_file(path, parent_baton,
copyfrom_path, copyfrom_revision)
copyfrom_rev, copyfrom_path = @root.copied_from(path)
if in_copied_dir?
# do nothing
elsif Util.copy?(copyfrom_path, copyfrom_rev)
@copied_files << [path, copyfrom_path.sub(/^\//, ''), copyfrom_rev]
else
@added_files << path
end
[nil, nil, nil]
end
def open_file(path, parent_baton, base_revision)
[nil, nil, path]
end
def apply_textdelta(file_baton, base_checksum)
file_baton[0] = :update
nil
end
def change_file_prop(file_baton, name, value)
file_baton[1] = :update
end
def close_file(file_baton, text_checksum)
text_mod, prop_mod, path = file_baton
# test the path. it will be nil if we added this file.
if path
if [text_mod, prop_mod] != [nil, nil]
@updated_files << path
end
end
end
def close_edit(baton)
@copied_files.sort! {|a, b| a[0] <=> b[0]}
@copied_dirs.sort! {|a, b| a[0] <=> b[0]}
@added_files.sort!
@added_dirs.sort!
@deleted_files.sort!
@deleted_dirs.sort!
@updated_files.sort!
@updated_dirs.sort!
end
private
def in_copied_dir?
@in_copied_dir.last
end
end
class WrapEditor
extend Forwardable
def_delegators :@wrapped_editor, :set_target_revision, :open_root
def_delegators :@wrapped_editor, :delete_entry, :add_directory
def_delegators :@wrapped_editor, :open_directory, :change_dir_prop
def_delegators :@wrapped_editor, :close_directory, :absent_directory
def_delegators :@wrapped_editor, :add_file, :open_file, :apply_textdelta
def_delegators :@wrapped_editor, :change_file_prop, :close_file
def_delegators :@wrapped_editor, :absent_file, :close_edit, :abort_edit
def initialize(wrapped_editor)
@wrapped_editor = wrapped_editor
end
end
end
end
( run in 0.324 second using v1.01-cache-2.11-cpan-5623c5533a1 )