tekkub-fugit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  :minor: 0
3
- :patch: 1
3
+ :patch: 2
4
4
  :major: 0
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.1"
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-10}
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.delete_all_items
45
- root = @list.add_root("root")
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 @list.get_root_item == i
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 @list.get_root_item == i
107
+ apply_diff(*@list.get_item_data(i)) unless @root == i
108
108
  end
109
109
 
110
110
  def apply_diff(diff, type)
@@ -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.delete_all_items
77
- root = @index.add_root("root")
78
- uns = @index.append_item(root, "Unstaged", 0)
79
- stg = @index.append_item(root, "Staged", 1)
80
-
81
- others.split("\n").each {|file| @index.append_item(uns, file, 2, -1, [file, :new, :unstaged])}
82
- modified.split("\n").each {|file| @index.append_item(uns, file, 3, -1, [file, :modified, :unstaged]) unless deleted.include?(file)}
83
- deleted.each {|file| @index.append_item(uns, file, 4, -1, [file, :deleted, :unstaged])}
84
- staged.each {|file, sha| @index.append_item(stg, file, 5, -1, [file, :modified, :staged])}
85
-
86
- @index.get_root_items.each do |i|
87
- @index.set_item_bold(i)
88
- @index.sort_children(i)
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.get_root_items.include?(i)
123
+ if i == @unstaged || i == @staged || @index.get_selections.size != 1
104
124
  send_message(:diff_clear)
105
125
  else
106
- (file, change, status) = @index.get_item_data(i)
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 @index.get_root_items.include?(i)
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.1
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-10 00:00:00 -08:00
12
+ date: 2009-02-11 00:00:00 -08:00
13
13
  default_executable: fugit
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency