Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- ########################################################################################################
- # Usage: #
- # gitchdiff [-r<left rev>:<right-rev>] [repository] #
- # #
- # Example: #
- # gitchdiff # == gitchdiff -rHEAD^:HEAD . #
- # gitchdiff -rHEAD^^:HEAD # == gitchdiff -rHEAD^^:HEAD . #
- # gitchdiff /path/to/git/repository # == gitchdiff -rHEAD^:HEAD /path/to/git/repository #
- # gitchdiff -rHEAD^:HEAD /path/to/git/repository # == gitchdiff -rHEAD^:HEAD /path/to/git/repository #
- ########################################################################################################
- def checkout(origin, rev)
- tmp = "/tmp/git_chdiff_#{rand}.tmp"
- Dir.mkdir tmp
- Dir.chdir tmp
- system "git init"
- system "git pull '#{origin}'"
- system "git checkout '#{rev}'"
- return tmp
- end
- def diff(origin, revs={})
- revs = {:left=>"HEAD^",:right=>"HEAD"}.merge(revs)
- left = checkout origin, revs[:left]
- right = checkout origin, revs[:right]
- system "chdiff '#{left}' '#{right}'"
- end
- revs = {}
- git_dir = Dir.pwd
- ARGV.each do |arg|
- if arg[0,2] == "-r"
- rev_strings = arg[2..-1].split(':')
- case rev_strings.size
- when 1
- revs[:left] = rev_strings[0] unless rev_strings[0].empty?
- when 2
- revs[:left] = rev_strings[0] unless rev_strings[0].empty?
- revs[:right] = rev_strings[1] unless rev_strings[1].empty?
- else
- revs = nil
- end
- else
- git_dir = arg unless arg.empty?
- end
- end
- diff(git_dir, revs)
Add Comment
Please, Sign In to add comment