Skip to content

Instantly share code, notes, and snippets.

@ddeyoung
Forked from gregawoods/ksdiffdir.rb
Created February 4, 2014 14:30
Show Gist options
  • Save ddeyoung/8804580 to your computer and use it in GitHub Desktop.
Save ddeyoung/8804580 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
# Usage:
# ksdiffdir.rb /path/to/a /path/to/b
FOLDER_A = ARGV[0]
FOLDER_B = ARGV[1]
def build_file_list(dir_path)
Dir.glob("#{dir_path}/**/*").select{ |f| File.file?(f) }.collect{ |f| f.gsub("#{dir_path}", '') }
end
def ks_diff(base, left, right)
left ||= "/dev/null"
right ||= "/dev/null"
`ksdiff --partial-changeset --relative-path "#{base}" -- "#{left}" "#{right}"`
end
change_list = []
add_list = []
remove_list = []
if File.exists?(FOLDER_A) && File.exists?(FOLDER_B)
file_list_a = build_file_list(FOLDER_A)
file_list_b = build_file_list(FOLDER_B)
file_list_a.each do |f|
if file_list_b.include?(f)
file_list_b.delete(f)
if File.read(File.join(FOLDER_A, f)) != File.read(File.join(FOLDER_B, f))
change_list << f
end
else
remove_list << f
end
end
add_list += file_list_b
change_list.each do |f|
ks_diff(f, File.join(FOLDER_A, f), File.join(FOLDER_B, f))
end
add_list.each do |f|
ks_diff(f, nil, File.join(FOLDER_B, f))
end
remove_list.each do |f|
ks_diff(f, File.join(FOLDER_A, f), nil)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment