vcsdiff 0.1.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/bin/vcsdiff +114 -0
  2. metadata +68 -0
data/bin/vcsdiff ADDED
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ################################################################################
4
+ # #
5
+ # File: vcsdiff.rb #
6
+ # ++++++++++++++++++++++++++++++ #
7
+ # Copyright (C) 2012 + Author: Foivos S. Zakkak + #
8
+ # + Website: foivos.zakkak.net + #
9
+ # + Email: foivos@zakkak.net + #
10
+ # ++++++++++++++++++++++++++++++ #
11
+ # #
12
+ # Based on the script svnvimdiff, written by #
13
+ # Geoff Buchan <geoffrey.buchan@gmail.com> #
14
+ # #
15
+ # This program is free software: you can redistribute it and/or modify #
16
+ # it under the terms of the GNU General Public License as published by #
17
+ # the Free Software Foundation, either version 3 of the License, or #
18
+ # (at your option) any later version. #
19
+ # #
20
+ # This program is distributed in the hope that it will be useful, #
21
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
22
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
23
+ # GNU General Public License for more details. #
24
+ # #
25
+ # You should have received a copy of the GNU General Public License #
26
+ # along with this program. If not, see <http://www.gnu.org/licenses/>. #
27
+ # #
28
+ ################################################################################
29
+
30
+ require 'optparse'
31
+ require 'ftools'
32
+
33
+ options = {}
34
+ option_parser = OptionParser.new do |opts|
35
+ opts.banner = %'Usage: #{opts.program_name} [OPTIONS] -- [DIFF OPTIONS]'
36
+ opts.separator ''
37
+ opts.separator 'Options'
38
+
39
+ options[:files] = Array.new
40
+ opts.on('-f','--file FILE',Array,'Define the file/files you want to diff',
41
+ '(you can use it more than once',
42
+ 'or seperate the filenames with commas)') do |f|
43
+ options[:files]+=f
44
+ end
45
+
46
+ avail_sys = %w[svn hg git]
47
+ opts.on('-s','--system NAME',avail_sys,
48
+ 'Define the version control system you are using',
49
+ "(#{avail_sys.join(',')})",
50
+ "if not given, #{opts.program_name} tries to automatically detect it"
51
+ ) do |s|
52
+ options[:sys]=s
53
+ end
54
+
55
+ avail_diff = %w[vimdiff kompare]
56
+ options[:diff]="vimdiff"
57
+ opts.on('-t','--tool NAME',avail_diff,
58
+ 'Define the prefered diff visualization tool',
59
+ "(#{avail_diff.join(',')})",
60
+ 'defaults to vimdiff') do |t|
61
+ options[:diff]=t
62
+ end
63
+
64
+ opts.separator ''
65
+ opts.separator 'Diff options:'
66
+ opts.separator 'All diff options are passed to svn/git/hg diff'
67
+ opts.separator ''
68
+ opts.separator 'Common options:'
69
+
70
+ opts.on_tail('-h','--help','Show this message') do
71
+ puts option_parser
72
+ exit 0;
73
+ end
74
+ end
75
+
76
+ begin
77
+ option_parser.parse!(ARGV)
78
+ rescue OptionParser::InvalidOption, OptionParser::MissingArgument
79
+ puts option_parser
80
+ exit 1;
81
+ end
82
+
83
+ if options[:sys].length == 0
84
+ # TODO: implement auto detection
85
+ options[:sys]="svn"
86
+ end
87
+
88
+ # if the user didn't specify any arguments go through each file in the directory
89
+ if options[:files].length == 0
90
+ # FIXME: works only for svn and hg like this
91
+ modified=%x[#{options[:sys]} status 2> /dev/null | grep -e "^[MU]" | awk '{print $2}']
92
+ modified.split(%r[\n]).each do |f|
93
+ options[:files].push(f) if File.file?(f)
94
+ end
95
+ end
96
+
97
+ patch="/tmp/svnkomp_747_patch"
98
+ remote=""
99
+
100
+ options[:files].each do |f|
101
+ remote="/tmp/"+f
102
+ %x[cp #{f} #{remote}]
103
+ %x[#{options[:sys]} diff #{ARGV.join(" ")} #{f} > #{patch}]
104
+ if !($?.success?)
105
+ exit 1;
106
+ end
107
+ %x[patch -R -p0 #{remote} #{patch}]
108
+ %x[#{options[:diff]} #{remote} #{f}]
109
+ File.delete(remote)
110
+ end
111
+
112
+ at_exit do
113
+ %x[rm -rf #{remote} #{patch}]
114
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vcsdiff
3
+ version: !ruby/object:Gem::Version
4
+ hash: -981096060
5
+ prerelease: 6
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ - alpha
11
+ version: 0.1.0.alpha
12
+ platform: ruby
13
+ authors:
14
+ - Foivos Zakkak
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2012-10-15 00:00:00 Z
20
+ dependencies: []
21
+
22
+ description: A ruby gem for inspecting diffs generated by git/svn/hg diff using vim or Kompare
23
+ email: foivos@zakkak.net
24
+ executables:
25
+ - vcsdiff
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - bin/vcsdiff
32
+ homepage: http://rubygems.org/gems/vcsdiff
33
+ licenses:
34
+ - GPL-3
35
+ post_install_message:
36
+ rdoc_options: []
37
+
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">"
53
+ - !ruby/object:Gem::Version
54
+ hash: 25
55
+ segments:
56
+ - 1
57
+ - 3
58
+ - 1
59
+ version: 1.3.1
60
+ requirements:
61
+ - patch
62
+ rubyforge_project:
63
+ rubygems_version: 1.8.15
64
+ signing_key:
65
+ specification_version: 3
66
+ summary: vcsdiff
67
+ test_files: []
68
+