donald 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/donald +2 -2
- data/lib/donald/editor.rb +20 -0
- data/lib/donald/git.rb +32 -0
- data/lib/donald/merge_tool.rb +13 -50
- data/lib/donald.rb +2 -0
- metadata +20 -5
data/bin/donald
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Donald
|
2
|
+
class Editor
|
3
|
+
DEFAULT_EDITOR = 'vim'
|
4
|
+
|
5
|
+
def initialize(editor_name = nil)
|
6
|
+
@editor_name = editor_name
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_s
|
10
|
+
@editor_name || system_editor_variable || DEFAULT_EDITOR
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def system_editor_variable
|
16
|
+
editor = `echo $EDITOR`
|
17
|
+
editor.chomp.size.zero? ? nil : editor
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/donald/git.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Donald
|
2
|
+
class Git
|
3
|
+
CONFLICTED_TYPES = ['unmerged', 'both modified', 'both added']
|
4
|
+
|
5
|
+
def conflicted_files
|
6
|
+
files = []
|
7
|
+
|
8
|
+
status.each_line do |line|
|
9
|
+
file = conflicted_file(line)
|
10
|
+
files << file unless file.nil?
|
11
|
+
end
|
12
|
+
|
13
|
+
files
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def status
|
19
|
+
`git status`
|
20
|
+
end
|
21
|
+
|
22
|
+
def conflicted_file(line)
|
23
|
+
CONFLICTED_TYPES.each do |conflicted_type|
|
24
|
+
if line.match /#{conflicted_type}: (.*)/
|
25
|
+
return $1.strip
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/donald/merge_tool.rb
CHANGED
@@ -1,19 +1,15 @@
|
|
1
1
|
module Donald
|
2
|
-
class
|
3
|
-
|
4
|
-
DEFAULT_EDITOR = 'vim'
|
5
|
-
|
6
|
-
def initialize output, args = []
|
2
|
+
class MergeTool
|
3
|
+
def initialize(output, args = [])
|
7
4
|
@output = output
|
8
5
|
@options = parse_options args
|
9
6
|
end
|
10
7
|
|
11
8
|
def start
|
12
|
-
files =
|
9
|
+
files = Donald::Git.new.conflicted_files
|
13
10
|
|
14
11
|
if files.any?
|
15
12
|
print_files files
|
16
|
-
|
17
13
|
call_vim files
|
18
14
|
else
|
19
15
|
print_no_files_message
|
@@ -22,38 +18,15 @@ module Donald
|
|
22
18
|
|
23
19
|
private
|
24
20
|
|
25
|
-
def
|
26
|
-
`git status`
|
27
|
-
end
|
28
|
-
|
29
|
-
def unmerged_files text
|
30
|
-
files = []
|
31
|
-
|
32
|
-
text.each_line do |line|
|
33
|
-
file = conflicted_file(line)
|
34
|
-
files << file unless file.nil?
|
35
|
-
end
|
36
|
-
|
37
|
-
files
|
38
|
-
end
|
39
|
-
|
40
|
-
def conflicted_file line
|
41
|
-
conflicted_types = ['unmerged', 'both modified']
|
42
|
-
|
43
|
-
conflicted_types.each do |conflicted_type|
|
44
|
-
if line.match /#{conflicted_type}: (.*)/
|
45
|
-
return $1.strip
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
nil
|
50
|
-
end
|
51
|
-
|
52
|
-
def call_vim files
|
21
|
+
def call_vim(files)
|
53
22
|
Kernel.system "#{editor}#{arguments(editor)} #{files.join(' ')}"
|
54
23
|
end
|
24
|
+
|
25
|
+
def editor
|
26
|
+
@editor || @editor = Donald::Editor.new(@options[:editor])
|
27
|
+
end
|
55
28
|
|
56
|
-
def print_files
|
29
|
+
def print_files(files)
|
57
30
|
print_delimiter
|
58
31
|
|
59
32
|
files.each {|f| @output.puts f}
|
@@ -70,10 +43,10 @@ module Donald
|
|
70
43
|
end
|
71
44
|
|
72
45
|
def print_delimiter
|
73
|
-
@output.puts
|
46
|
+
@output.puts '*' * 30
|
74
47
|
end
|
75
48
|
|
76
|
-
def parse_options
|
49
|
+
def parse_options(args)
|
77
50
|
options = {}
|
78
51
|
|
79
52
|
options.merge! :editor => 'vim' if args.include?('--vim')
|
@@ -84,18 +57,8 @@ module Donald
|
|
84
57
|
options
|
85
58
|
end
|
86
59
|
|
87
|
-
def editor
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
def system_editor_variable
|
92
|
-
editor = `echo $EDITOR`.chomp
|
93
|
-
|
94
|
-
editor.size.zero? ? nil : editor
|
95
|
-
end
|
96
|
-
|
97
|
-
def arguments editor
|
98
|
-
" #{tab_argument} #{search_argument}" if editor.include?('vim')
|
60
|
+
def arguments(editor)
|
61
|
+
" #{tab_argument} #{search_argument}" if editor.to_s.include? 'vim'
|
99
62
|
end
|
100
63
|
|
101
64
|
def tab_argument
|
data/lib/donald.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: donald
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 23
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 6
|
10
|
+
version: 0.1.6
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Bruno Grasselli
|
@@ -9,7 +15,7 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-07-18 00:00:00 -03:00
|
13
19
|
default_executable: donald
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -25,6 +31,9 @@ files:
|
|
25
31
|
- README.textile
|
26
32
|
- LICENSE
|
27
33
|
- bin/donald
|
34
|
+
- lib/donald.rb
|
35
|
+
- lib/donald/git.rb
|
36
|
+
- lib/donald/editor.rb
|
28
37
|
- lib/donald/merge_tool.rb
|
29
38
|
has_rdoc: true
|
30
39
|
homepage: http://brunograsselli.com.br
|
@@ -36,21 +45,27 @@ rdoc_options: []
|
|
36
45
|
require_paths:
|
37
46
|
- lib
|
38
47
|
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
39
49
|
requirements:
|
40
50
|
- - ">="
|
41
51
|
- !ruby/object:Gem::Version
|
52
|
+
hash: 3
|
53
|
+
segments:
|
54
|
+
- 0
|
42
55
|
version: "0"
|
43
|
-
version:
|
44
56
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
45
58
|
requirements:
|
46
59
|
- - ">="
|
47
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
62
|
+
segments:
|
63
|
+
- 0
|
48
64
|
version: "0"
|
49
|
-
version:
|
50
65
|
requirements: []
|
51
66
|
|
52
67
|
rubyforge_project:
|
53
|
-
rubygems_version: 1.3.
|
68
|
+
rubygems_version: 1.3.7
|
54
69
|
signing_key:
|
55
70
|
specification_version: 3
|
56
71
|
summary: Simple vim based mergetool for git users.
|