cxxproject 0.6.30 → 0.6.31

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,66 +0,0 @@
1
- module Cxxproject
2
- module Utils
3
- define_progress = lambda do
4
- require 'rake'
5
- require 'cxxproject/ext/rake'
6
-
7
- require 'progressbar'
8
- require 'cxxproject/ext/progressbar'
9
- require 'colored'
10
- require 'cxxproject/utils/progress_helper'
11
-
12
- class ProgressListener
13
- def initialize
14
- @progress_helper = ProgressHelper.new
15
- Rake::application.top_level_tasks.each do |name|
16
- @progress_helper.count_with_filter(name)
17
- end
18
- @progress = ProgressBar.new('all tasks', @progress_helper.todo)
19
- @progress.title_width = 30
20
- @progress.unblock
21
- end
22
-
23
- def after_execute(name)
24
- needed_tasks = @progress_helper.needed_tasks
25
- if needed_tasks[name]
26
- task = Rake::Task[name]
27
- @progress.title = task.name
28
- @progress.inc(task.progress_count)
29
- if (@progress.total == @progress.current)
30
- puts
31
- end
32
- end
33
- end
34
- end
35
-
36
- require 'benchmark'
37
- class BenchmarkedProgressListener < ProgressListener
38
- def initialize
39
- Benchmark.bm do |x|
40
- x.report('ProgressListener.initialize') do
41
- super
42
- end
43
- end
44
- end
45
- end
46
-
47
- desc 'show a progressbar for the build (use with -s for best results)'
48
- task :progress do
49
- require 'cxxproject/ext/rake_listener'
50
- Rake::add_listener(ProgressListener.new)
51
- end
52
-
53
- task :benchmark_progress do
54
- require 'cxxproject/ext/rake_listener'
55
- Rake::add_listener(BenchmarkedProgressListener.new)
56
- end
57
- end
58
-
59
- could_not_define_progress = lambda {
60
- task :progress do
61
- puts 'could not define progress'
62
- end
63
- }
64
- optional_package(define_progress, could_not_define_progress)
65
- end
66
- end
@@ -1,77 +0,0 @@
1
- module Cxxproject
2
- module Utils
3
- class ProgressHelper
4
-
5
- attr_reader :todo
6
-
7
- attr_reader :needed_tasks
8
-
9
- def initialize
10
- @todo = 0.0
11
- @needed_tasks = {}
12
- end
13
-
14
- def count_with_filter(name)
15
- tasks = find_tasks_for_toplevel_task(name)
16
- tasks.each do |t|
17
- count(t)
18
- end
19
- if @todo < 1
20
- @todo = 1
21
- end
22
- end
23
-
24
- def find_tasks_for_toplevel_task(name)
25
- regex = create_regex_for_name(name)
26
- return filter_all_tasks(regex)
27
- end
28
-
29
- def create_regex_for_name(name)
30
- res = Regexp.new(name)
31
- res = create_regex_for_filter(name, res)
32
- return res
33
- end
34
-
35
- def is_filter(name)
36
- return name.index('filter')
37
- end
38
-
39
- def create_regex_for_filter(name, res)
40
- return res unless is_filter(name)
41
-
42
- name = name.gsub('filter', '')
43
- if name.index('[') == nil
44
- name = name + '.*'
45
- else
46
- name = name.gsub('[', '')
47
- name = name.gsub(']', '')
48
- end
49
- return Regexp.new(name)
50
- end
51
-
52
- def filter_all_tasks(regex)
53
- return Rake::Task::tasks.find_all do |t|
54
- task_name = t.name
55
- res = ((task_name.index('filter') == nil) && regex.match(task_name)!=nil)
56
- end
57
- end
58
-
59
- def count(task)
60
- task.visit() do |t|
61
- count_needed_tasks(t)
62
- true
63
- end
64
- end
65
-
66
- def count_needed_tasks(t)
67
- c = t.progress_count
68
- if c && c > 0
69
- if t.needed? && @needed_tasks[t.name] == nil
70
- @needed_tasks[t.name] = true
71
- @todo += c
72
- end
73
- end
74
- end
75
- end
76
- end
77
- end
@@ -1,284 +0,0 @@
1
- module Cxxproject
2
- module Utils
3
- define_rbcurse_ui = lambda do
4
- require 'rake'
5
- require 'ncurses'
6
- require 'rbcurse'
7
-
8
- require 'rbcurse/rtable'
9
- require 'rbcurse/table/tablecellrenderer'
10
- require 'rbcurse/rsplitpane'
11
- require 'rbcurse/rtextview'
12
- require 'cxxproject/ext/rake_listener'
13
- require 'cxxproject/utils/rbcurse_progress'
14
- require 'cxxproject/utils/rbcurse_tasktable'
15
-
16
- include RubyCurses
17
-
18
- Rake::TaskManager.record_task_metadata = true
19
-
20
- class RakeGui
21
- def initialize
22
- require 'cxxproject/utils/rbcurse_executable_ext'
23
- Cxxproject::ColorizingFormatter.enabled = false
24
- Rake::Task.output_disabled = true
25
-
26
- $log = Logger.new(File.join("./", "view.log"))
27
- $log.level = Logger::ERROR
28
- @data_stack = []
29
- @path_stack = []
30
- end
31
-
32
- def self.keycode(s)
33
- return s[0].to_i
34
- end
35
-
36
- def create_table
37
- @col_names = ['name', 'desc']
38
- return TaskTable.new(self) do
39
- name 'my table'
40
- title 'my table'
41
- cell_editing_allowed false
42
- end
43
- end
44
-
45
- def reenable_including_prerequisites(task)
46
- task.visit() do |t|
47
- t.reenable
48
- true
49
- end
50
- end
51
-
52
- def invoke(table)
53
- t = table.get_value_at(table.focussed_row, 0)
54
- @progress_helper = ProgressHelper.new
55
- complete_task_name = t.name
56
- args = []
57
- if @progress_helper.is_filter(t.name)
58
- args = [get_string('please input filterpattern', 20, '.*')]
59
- complete_task_name = "#{t.name}[#{args[0]}]"
60
- end
61
- @progress_helper.count_with_filter(complete_task_name)
62
-
63
- @progress.max = @progress_helper.todo
64
- Rake::add_listener(self)
65
- reenable_including_prerequisites(t)
66
- t.invoke(args)
67
- Rake::remove_listener(self)
68
- show_details_for(table.focussed_row)
69
- table.repaint_all(true)
70
- end
71
-
72
- def after_execute(name)
73
- needed_tasks = @progress_helper.needed_tasks
74
- if needed_tasks[name]
75
- task = Rake::Task[name]
76
- @progress.title = task.name
77
- @progress.inc(task.progress_count)
78
- @form.repaint
79
- end
80
- end
81
-
82
- def details(table)
83
- t = table.get_value_at(table.focussed_row, 0)
84
- pre = t.prerequisite_tasks
85
- if pre.size > 0
86
- push_table_data(pre, t.name)
87
- table.set_focus_on 0
88
-
89
- show_details_for(0)
90
- end
91
- end
92
-
93
- def repaint_and_next_char
94
- @form.repaint
95
- @window.wrefresh
96
- return @window.getchar
97
- end
98
-
99
- def process_input_events
100
- ch = repaint_and_next_char
101
- while ch != RakeGui.keycode('q')
102
- $log.error "entered key: #{ch}"
103
- case ch
104
- when RakeGui.keycode('a')
105
- @h_split.set_divider_location(@h_split.divider_location+1)
106
- when RakeGui.keycode('s')
107
- @h_split.set_divider_location(@h_split.divider_location-1)
108
- else
109
- @form.handle_key(ch)
110
- end
111
- ch = repaint_and_next_char
112
- end
113
- end
114
-
115
- def push_table_data(task_data, new_path=nil)
116
- @path_stack.push(new_path) if new_path
117
- set_breadcrumbs
118
-
119
- @data_stack.push(task_data)
120
- set_table_data(task_data)
121
- end
122
- def set_table_data(task_data)
123
- size = size()
124
- new_data = task_data.map{|t|[t, t.comment]}
125
- @table.set_data new_data, @col_names
126
- tcm = @table.table_column_model
127
- first_col_width = task_data.map{|t|t.name.size}.max
128
- tcm.column(0).width(first_col_width)
129
- tcm.column(1).width(size[0]-first_col_width-3)
130
- end
131
- def set_breadcrumbs
132
- crumbs = File.join(@path_stack.map{|i|"(#{i})"}.join('/'))
133
- @breadcrumbs.text = crumbs
134
- @breadcrumbs.repaint_all(true)
135
- end
136
- def pop_data
137
- if @data_stack.size > 1
138
- @path_stack.pop
139
- set_breadcrumbs
140
-
141
- popped = @data_stack.pop
142
- top= @data_stack.last
143
- set_table_data(top)
144
- end
145
- end
146
-
147
- def size
148
- return @window.default_for(:width), @window.default_for(:height)
149
- end
150
-
151
- def show_details_for(row)
152
- buffer = StringIO.new
153
- t = @table.get_value_at(row, 0)
154
- t.visit do |t|
155
- if t.output_string && t.output_string.length > 0
156
- buffer.puts(t.output_string)
157
- end
158
- if t.failure
159
- true
160
- else
161
- false
162
- end
163
- end
164
- @output.set_content(buffer.string)
165
- @output.set_focus_on(0)
166
- @output.repaint_all(true)
167
- end
168
-
169
- def start_editor_for_task(t)
170
- file_name = t.name
171
- return unless File.exists?(file_name)
172
-
173
- start_editor(file_name, 0, 0)
174
- end
175
-
176
- def start_editor(file, line, column)
177
- $log.error "starting editor for #{file}:#{line}"
178
- editor = ENV['EDITOR']
179
- editor = 'vi' unless editor
180
- cmd = "#{editor} +#{line} #{file}"
181
- shell_out(cmd)
182
- end
183
-
184
- def shell_out(cmd)
185
- @window.hide
186
- Ncurses.endwin
187
- system(cmd)
188
- Ncurses.refresh
189
- @window.show
190
- end
191
-
192
- def create_breadcrumbs(size)
193
- @breadcrumbs = Label.new @form do
194
- name 'breadcrumbs'
195
- row 0
196
- col 0
197
- width size[0]
198
- height 1
199
- end
200
- @breadcrumbs.display_length(size[0])
201
- @breadcrumbs.text = ''
202
- end
203
-
204
- def create_splitpane(size)
205
- @h_split = SplitPane.new @form do
206
- name 'mainpane'
207
- row 1
208
- col 0
209
- width size[0]
210
- height size[1]-3
211
- orientation :HORIZONTAL_SPLIT
212
- end
213
- end
214
-
215
- def create_output_view(size)
216
- @output = TextView.new nil
217
- @output.set_content('')
218
- @output.configure do
219
- bind_key(RakeGui.keycode('e')) do |code|
220
- line = selected_item
221
- file_pattern = '(.*?):(\d+):(\d*):? '
222
- error_pattern = Regexp.new("#{file_pattern}(error: .*)")
223
- warning_pattern = Regexp.new("#{file_pattern}(warning: .*)")
224
- md = error_pattern.match(line)
225
- md = warning_pattern.match(line) unless md
226
- if md
227
- file_name = md[1]
228
- line = md[2]
229
- col = md[3]
230
- rake_gui.start_editor(file_name, line, col)
231
- end
232
- end
233
- end
234
- end
235
-
236
- def create_components(size)
237
- create_breadcrumbs(size)
238
- @progress = Progress.new(@form, size)
239
- create_splitpane(size)
240
- @table = create_table
241
- push_table_data(Rake::Task.tasks.select {|t|t.comment})
242
-
243
- create_output_view(size)
244
- end
245
-
246
- def wire_components
247
- @h_split.first_component(@table)
248
- @h_split.second_component(@output)
249
- @h_split.set_resize_weight(0.50)
250
- end
251
-
252
- def run
253
- rake_gui = self
254
- begin
255
- VER::start_ncurses
256
-
257
- @window = VER::Window.root_window
258
- @form = Form.new @window
259
-
260
- create_components(size())
261
- wire_components
262
-
263
- @table.bind(:TABLE_TRAVERSAL_EVENT) do |e|
264
- rake_gui.show_details_for(e.newrow)
265
- end
266
-
267
- process_input_events
268
- rescue => e
269
- puts e
270
- end
271
- @window.destroy if @window
272
- VER::stop_ncurses
273
- end
274
- end
275
-
276
- task :ui do
277
- RakeGui.new.run
278
- end
279
-
280
- end
281
-
282
- optional_package(define_rbcurse_ui, nil)
283
- end
284
- end
@@ -1,228 +0,0 @@
1
- module Cxxproject
2
- define_ubigraph = lambda do
3
- require 'rubigraph'
4
-
5
- module Rubigraph
6
- class Vertex
7
- alias_method :initialize_original, :initialize
8
- def initialize(id = nil)
9
- if id != nil
10
- @id = id
11
- else
12
- initialize_original
13
- end
14
- end
15
- end
16
- end
17
-
18
- class IdsAndEdges
19
- attr_reader :ids, :edges
20
- def initialize
21
- @ids = Hash.new
22
- @edges = Hash.new
23
- end
24
- end
25
-
26
- class V
27
-
28
- def self.shutdown
29
- File.open('id_cache', 'w') do |f|
30
- f.write(@@ids_and_edges.to_yaml)
31
- end
32
- end
33
-
34
- def self.reset
35
- begin
36
- File.delete('id_cache')
37
- rescue StandardError => e
38
- puts e
39
- puts 'problem deleting id_cache'
40
- end
41
- @@ids_and_edges = IdsAndEdges.new
42
- end
43
-
44
- def self.startup
45
- begin
46
- @@ids_and_edges = YAML.load_file('id_cache')
47
- rescue
48
- @@ids_and_edges = IdsAndEdges.new
49
- end
50
- end
51
-
52
- attr_reader :v
53
-
54
- def initialize(name)
55
- h = @@ids_and_edges.ids
56
- id = h[name]
57
- if !id
58
- @v = Rubigraph::Vertex.new
59
- @@ids_and_edges.ids()[name] = @v.id
60
- else
61
- @v = Rubigraph::Vertex.new(id)
62
- end
63
- end
64
- def self.create_edge(edge_and_task1, edge_and_task2)
65
- complete_name = "#{edge_and_task1[:task].name}->#{edge_and_task2[:task].name}"
66
- if @@ids_and_edges.edges.has_key?(complete_name)
67
- return nil
68
- else
69
- e = Rubigraph::Edge.new(edge_and_task1[:vertex].v, edge_and_task2[:vertex].v)
70
- @@ids_and_edges.edges[complete_name] = true
71
- return e
72
- end
73
- end
74
- end
75
-
76
- class UbiGraphSupport
77
-
78
- def object?(name)
79
- name.match(/.*\.o\Z/) != nil
80
- end
81
-
82
- def exe?(name)
83
- name.match(/.*\.exe\Z/) != nil
84
- end
85
- def library?(name)
86
- name.match(/.*\.a\Z/) != nil
87
- end
88
- def multitask?(name)
89
- name.index("Sources") == 0
90
- end
91
- def interesting?(name)
92
- exe?(name) || object?(name) || library?(name) || multitask?(name)
93
- end
94
- def create_vertices
95
- @vertices = {}
96
- @interesting_tasks.each do |task|
97
- v = V.new(task.name)
98
- @vertices[task.name] = {:vertex=>v, :task=>task}
99
- end
100
- end
101
- def create_edges
102
- @interesting_tasks.each do |task|
103
- name = task.name
104
- v1 = @vertices[name]
105
- task.prerequisites.each do |p|
106
- v2 = @vertices[p]
107
- if (v2 != nil)
108
- e = V.create_edge(v1, v2)
109
- e.width=2 if e
110
- end
111
- end
112
- end
113
- end
114
- def color_vertices
115
- @vertices.each do |k, value|
116
- v = value[:vertex]
117
- v.v.label = k
118
- set_attributes(v, k)
119
- end
120
- end
121
- def initialize
122
- @interesting_tasks = Rake::Task.tasks.select { |i| interesting?(i.name) }
123
- create_vertices
124
- create_edges
125
- color_vertices
126
- end
127
-
128
- def update_colors
129
- @vertices.each_key do |k|
130
- set_attributes(v, k)
131
- end
132
- end
133
-
134
- def set_attributes(v, name)
135
- v.v.color = state2color(name)
136
- v.v.shape = name2shape(name)
137
- v.v.size = name2size(name)
138
- end
139
-
140
- def name2shape(name)
141
- if object?(name)
142
- return 'cube'
143
- elsif exe?(name)
144
- return 'sphere'
145
- elsif multitask?(name)
146
- return 'torus'
147
- else
148
- return 'octahedron'
149
- end
150
- end
151
- def name2size(name)
152
- if object?(name)
153
- return 0.7
154
- elsif exe?(name)
155
- return 1.2
156
- else
157
- return 1.0
158
- end
159
- end
160
- def state2color(name)
161
- t = @vertices[name][:task]
162
- begin
163
- if t.dirty?
164
- return '#ff0000'
165
- else
166
- return '#00ff00'
167
- end
168
- rescue StandardError => bang
169
- puts bang
170
- return '#ff00ff'
171
- end
172
- end
173
-
174
- def update(name, color)
175
- @vertices[name][:vertex].v.color = color if @vertices[name]
176
- end
177
-
178
- YELLOW = '#ffff00'
179
- def before_prerequisites(name)
180
- update(name, YELLOW)
181
- end
182
-
183
- ORANGE = '#ff7f00'
184
- def after_prerequisites(name)
185
- update(name, ORANGE)
186
- end
187
-
188
- BLUE = '#0000ff'
189
- def before_execute(name)
190
- update(name, BLUE)
191
- end
192
-
193
- GREEN = '#00ff00'
194
- def after_execute(name)
195
- update(name, GREEN)
196
- end
197
- end
198
-
199
- namespace :rubygraph do
200
- task :init do
201
- Rubigraph.init
202
- V.startup
203
- at_exit do
204
- V.shutdown
205
- end
206
- end
207
-
208
- desc 'clear rubygraph'
209
- task :clear => :init do
210
- Rubigraph.clear
211
- V.reset
212
- end
213
-
214
- desc 'update rubygraph'
215
- task :update => :init do
216
- begin
217
- require 'cxxproject/ext/rake_listener'
218
- require 'cxxproject/ext/rake_dirty'
219
- Rake::add_listener(UbiGraphSupport.new)
220
- rescue StandardError => e
221
- puts e
222
- end
223
- end
224
- end
225
- end
226
-
227
- Utils.optional_package(define_ubigraph, nil)
228
- end