tekkub-fugit 0.0.1 → 0.0.2
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/VERSION.yml +2 -2
- data/fugit.gemspec +2 -2
- data/lib/fugit/diff.rb +6 -6
- data/lib/fugit/index_list.rb +70 -32
- metadata +2 -2
data/VERSION.yml
CHANGED
data/fugit.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{fugit}
|
3
|
-
s.version = "0.0.
|
3
|
+
s.version = "0.0.2"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.authors = ["Tekkub"]
|
7
|
-
s.date = %q{2009-02-
|
7
|
+
s.date = %q{2009-02-11}
|
8
8
|
s.default_executable = %q{fugit}
|
9
9
|
s.description = %q{A cross-platform replacement for git-gui based on wxruby}
|
10
10
|
s.email = %q{tekkub@gmail.com}
|
data/lib/fugit/diff.rb
CHANGED
@@ -7,6 +7,7 @@ module Fugit
|
|
7
7
|
self.set_font(Font.new(8, FONTFAMILY_TELETYPE, FONTSTYLE_NORMAL, FONTWEIGHT_NORMAL))
|
8
8
|
|
9
9
|
@list = TreeCtrl.new(self, ID_ANY, nil, nil, NO_BORDER|TR_MULTIPLE|TR_HIDE_ROOT|TR_FULL_ROW_HIGHLIGHT|TR_NO_LINES)
|
10
|
+
@root = @list.add_root("root")
|
10
11
|
@list.hide
|
11
12
|
|
12
13
|
@list_menu = Menu.new
|
@@ -26,7 +27,6 @@ module Fugit
|
|
26
27
|
evt_tree_item_activated(@list.get_id, :on_double_click)
|
27
28
|
|
28
29
|
register_for_message(:commit_saved, :clear)
|
29
|
-
register_for_message(:index_changed, :clear)
|
30
30
|
register_for_message(:diff_clear, :clear)
|
31
31
|
register_for_message(:diff_set, :set_diff)
|
32
32
|
register_for_message(:diff_raw, :change_value)
|
@@ -41,13 +41,13 @@ module Fugit
|
|
41
41
|
@text.hide
|
42
42
|
@list.hide
|
43
43
|
|
44
|
-
@list.
|
45
|
-
|
44
|
+
@list.delete_children(@root)
|
45
|
+
|
46
46
|
chunks.each do |chunk|
|
47
47
|
diff = header + "\n" + chunk
|
48
48
|
diff = diff + "\n" if diff[-1..-1] != "\n" # git bitches if we don't have a proper newline at the end of the diff
|
49
49
|
chunk.split("\n").each do |line|
|
50
|
-
id = @list.append_item(root, line.gsub("\t", " "), -1, -1, [diff, type])
|
50
|
+
id = @list.append_item(@root, line.gsub("\t", " "), -1, -1, [diff, type])
|
51
51
|
|
52
52
|
color = case line[0..0]
|
53
53
|
when "+"
|
@@ -91,7 +91,7 @@ module Fugit
|
|
91
91
|
def on_item_menu_request(event)
|
92
92
|
i = event.get_item
|
93
93
|
@menu_data = nil
|
94
|
-
unless @
|
94
|
+
unless @root == i
|
95
95
|
@menu_data = @list.get_item_data(i)
|
96
96
|
@list_menu.set_label(@menu_stage_chunk.get_id, (@menu_data[1] == :staged ? "Unstage chunk" : "Stage chunk"))
|
97
97
|
@list.popup_menu(@list_menu)
|
@@ -104,7 +104,7 @@ module Fugit
|
|
104
104
|
|
105
105
|
def on_double_click(event)
|
106
106
|
i = event.get_item
|
107
|
-
apply_diff(*@list.get_item_data(i)) unless @
|
107
|
+
apply_diff(*@list.get_item_data(i)) unless @root == i
|
108
108
|
end
|
109
109
|
|
110
110
|
def apply_diff(diff, type)
|
data/lib/fugit/index_list.rb
CHANGED
@@ -17,6 +17,12 @@ module Fugit
|
|
17
17
|
imagelist << get_icon("script.png")
|
18
18
|
@index.set_image_list(imagelist)
|
19
19
|
|
20
|
+
root = @index.add_root("root")
|
21
|
+
@unstaged = @index.append_item(root, "Unstaged", 0)
|
22
|
+
@staged = @index.append_item(root, "Staged", 1)
|
23
|
+
@index.set_item_bold(@unstaged)
|
24
|
+
@index.set_item_bold(@staged)
|
25
|
+
|
20
26
|
@toolbar = ToolBar.new(self, ID_ANY, nil, nil, TB_HORIZONTAL|NO_BORDER|TB_NODIVIDER)
|
21
27
|
@toolbar.set_tool_bitmap_size(Size.new(16,16))
|
22
28
|
@toolbar.add_tool(101, "Stage all", get_icon("folder_add.png"), "Stage all")
|
@@ -34,6 +40,9 @@ module Fugit
|
|
34
40
|
evt_tree_sel_changed(@index.get_id, :on_click)
|
35
41
|
evt_tree_item_activated(@index.get_id, :on_double_click)
|
36
42
|
|
43
|
+
evt_tool(101, :on_stage_all_clicked)
|
44
|
+
evt_tool(104, :on_unstage_all_clicked)
|
45
|
+
|
37
46
|
evt_tree_item_collapsing(@index.get_id) {|event| event.veto}
|
38
47
|
|
39
48
|
register_for_message(:refresh, :update_tree)
|
@@ -73,24 +82,35 @@ module Fugit
|
|
73
82
|
staged.reject! {|file, sha| committed[file] == sha}
|
74
83
|
|
75
84
|
@index.hide
|
76
|
-
@index.
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
@index.
|
87
|
-
|
88
|
-
|
85
|
+
selection = @index.get_selections.map {|i| @index.get_item_data(i)}
|
86
|
+
@index.delete_children(@unstaged)
|
87
|
+
@index.delete_children(@staged)
|
88
|
+
|
89
|
+
others.split("\n").each {|file| @index.append_item(@unstaged, file, 2, -1, [file, :new, :unstaged])}
|
90
|
+
modified.split("\n").each {|file| @index.append_item(@unstaged, file, 3, -1, [file, :modified, :unstaged]) unless deleted.include?(file)}
|
91
|
+
deleted.each {|file| @index.append_item(@unstaged, file, 4, -1, [file, :deleted, :unstaged])}
|
92
|
+
staged.each {|file, sha| @index.append_item(@staged, file, 5, -1, [file, :modified, :staged])}
|
93
|
+
|
94
|
+
@index.sort_children(@unstaged)
|
95
|
+
@index.sort_children(@staged)
|
96
|
+
@index.select_item(@unstaged, false)
|
97
|
+
@index.select_item(@staged, false)
|
98
|
+
|
99
|
+
to_select = []
|
100
|
+
@index.each {|i| to_select << i if selection.include?(@index.get_item_data(i))}
|
101
|
+
to_select.each {|i| @index.select_item(i)}
|
102
|
+
if to_select.size == 1
|
103
|
+
set_diff(*@index.get_item_data(to_select[0]))
|
104
|
+
else
|
105
|
+
send_message(:diff_clear)
|
89
106
|
end
|
90
107
|
|
91
108
|
@index.expand_all
|
109
|
+
@index.ensure_visible(to_select.empty? ? @unstaged : to_select[0])
|
110
|
+
@index.set_scroll_pos(HORIZONTAL, 0)
|
92
111
|
@index.show
|
93
112
|
self.enable
|
113
|
+
self.set_focus unless to_select.size == 1
|
94
114
|
end
|
95
115
|
|
96
116
|
|
@@ -100,33 +120,17 @@ module Fugit
|
|
100
120
|
i = event.get_item
|
101
121
|
return if i == 0 || !self.enabled?
|
102
122
|
|
103
|
-
if @index.
|
123
|
+
if i == @unstaged || i == @staged || @index.get_selections.size != 1
|
104
124
|
send_message(:diff_clear)
|
105
125
|
else
|
106
|
-
(
|
107
|
-
case status
|
108
|
-
when :unstaged
|
109
|
-
case change
|
110
|
-
when :new
|
111
|
-
val = File.read(file)
|
112
|
-
send_message(:diff_raw, val)
|
113
|
-
when :modified, :deleted
|
114
|
-
val = `git diff -- #{file}`
|
115
|
-
send_message(:diff_set, val, :unstaged)
|
116
|
-
else
|
117
|
-
send_message(:diff_clear)
|
118
|
-
end
|
119
|
-
when :staged
|
120
|
-
val = `git diff --cached -- #{file}`
|
121
|
-
send_message(:diff_set, val, :staged)
|
122
|
-
end
|
126
|
+
set_diff(*@index.get_item_data(i))
|
123
127
|
end
|
124
128
|
end
|
125
129
|
|
126
130
|
|
127
131
|
def on_double_click(event)
|
128
132
|
i = event.get_item
|
129
|
-
unless @
|
133
|
+
unless i == @unstaged || i == @staged
|
130
134
|
(file, change, status) = @index.get_item_data(i)
|
131
135
|
case status
|
132
136
|
when :unstaged
|
@@ -144,5 +148,39 @@ module Fugit
|
|
144
148
|
end
|
145
149
|
end
|
146
150
|
|
151
|
+
def on_stage_all_clicked(event)
|
152
|
+
children = @index.get_children(@unstaged).map {|child| @index.get_item_data(child)}
|
153
|
+
to_delete = children.reject {|file, change, status| change != :deleted}.map {|f,c,s| f}
|
154
|
+
to_add = children.map {|f,c,s| f} - to_delete
|
155
|
+
`git rm --cached "#{to_delete.join('" "')}"` unless to_delete.empty?
|
156
|
+
`git add "#{to_add.join('" "')}"` unless to_add.empty?
|
157
|
+
send_message(:index_changed)
|
158
|
+
end
|
159
|
+
|
160
|
+
def on_unstage_all_clicked(event)
|
161
|
+
children = @index.get_children(@staged).map {|child| @index.get_item_data(child)[0]}
|
162
|
+
`git reset "#{children.join('" "')}"` unless children.empty?
|
163
|
+
send_message(:index_changed)
|
164
|
+
end
|
165
|
+
|
166
|
+
def set_diff(file, change, status)
|
167
|
+
case status
|
168
|
+
when :unstaged
|
169
|
+
case change
|
170
|
+
when :new
|
171
|
+
val = File.read(file)
|
172
|
+
send_message(:diff_raw, val)
|
173
|
+
when :modified, :deleted
|
174
|
+
val = `git diff -- #{file}`
|
175
|
+
send_message(:diff_set, val, :unstaged)
|
176
|
+
else
|
177
|
+
send_message(:diff_clear)
|
178
|
+
end
|
179
|
+
when :staged
|
180
|
+
val = `git diff --cached -- #{file}`
|
181
|
+
send_message(:diff_set, val, :staged)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
147
185
|
end
|
148
186
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tekkub-fugit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tekkub
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-02-
|
12
|
+
date: 2009-02-11 00:00:00 -08:00
|
13
13
|
default_executable: fugit
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|