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 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