Skip to content

Commit b4a5328

Browse files
luke-hillp0deje
authored andcommitted
Refactor crazy fun namespace 1 (#7667)
* Namespaced and fixed up common.rb and export.rb * Sort out folder and python files
1 parent 32394fc commit b4a5328

20 files changed

+441
-429
lines changed
Lines changed: 1 addition & 240 deletions
Original file line numberDiff line numberDiff line change
@@ -1,240 +1 @@
1-
module FileCopyHack
2-
def cp_r(src, dest, opts = {})
3-
super
4-
rescue => ex
5-
raise unless ex.message =~ /operation not permitted|Permission denied/i
6-
Dir["#{dest}/**/.svn"].each { |file| rm_rf file }
7-
8-
# virtual box shared folders has a problem with some of the .svn files
9-
if ENV['USER'] == "vagrant" && opts.empty?
10-
sh "cp", "-r", src, dest
11-
else
12-
super(src, dest, opts)
13-
end
14-
end
15-
end
16-
17-
class Tasks
18-
include FileCopyHack
19-
20-
def task_name(dir, name)
21-
return name if name.to_s.start_with? "//"
22-
23-
# Strip any leading ".", "./" or ".\\"
24-
# I am ashamed
25-
use = dir.gsub(/\\/, '/').sub(/^\./, '').sub(/^\//, '')
26-
27-
"//#{use}:#{name}"
28-
end
29-
30-
def output_name(dir, name, suffix)
31-
t = task_name(dir, name)
32-
result = "build/" + (t.slice(2 ... t.length)) + "." + suffix
33-
result.gsub(":", "/")
34-
end
35-
36-
def add_dependencies(target, dir, all_deps)
37-
return if all_deps.nil?
38-
39-
Array(all_deps).each do |dep|
40-
target.enhance(dep_type(dir, dep))
41-
end
42-
end
43-
44-
def copy_resources(dir, to_copy, out_dir)
45-
to_copy.each do |res|
46-
if res.is_a? Symbol
47-
out = Rake::Task[task_name(dir, res)].out
48-
elsif Rake::Task.task_defined?(res)
49-
task = Rake::Task[res]
50-
out = task.out
51-
while out.nil? && task.prerequisites.size == 1 do
52-
task = Rake::Task[task.prerequisites[0]]
53-
out = task.out
54-
end
55-
elsif res.is_a? Hash
56-
# Copy the key to "out_dir + value"
57-
res.each do |from, to|
58-
possible_task = task_name(dir, from)
59-
if Rake::Task.task_defined?(possible_task) and Rake::Task[possible_task].out
60-
target = Rake::Task[possible_task].out
61-
62-
if File.directory? target
63-
dest = File.join(out_dir, to)
64-
mkdir_p dest
65-
cp_r target, dest
66-
else
67-
dest = File.join(out_dir, to)
68-
mkdir_p File.dirname(dest)
69-
cp_r target, dest, remove_destination: true
70-
end
71-
else
72-
tdir = to.gsub(/\/.*?$/, "")
73-
mkdir_p "#{out_dir}/#{tdir}"
74-
src = find_file(File.join(dir, from))
75-
76-
if File.directory? src
77-
mkdir_p "#{out_dir}/#{to}"
78-
else
79-
mkdir_p File.join(out_dir, File.dirname(to))
80-
end
81-
cp_r src, "#{out_dir}/#{to}"
82-
end
83-
end
84-
85-
next
86-
else
87-
if File.exists? res
88-
out = res
89-
else
90-
out = File.join(dir, res)
91-
return copy_all(dir, to_copy, out_dir) unless File.exists?(out)
92-
end
93-
end
94-
95-
if out.is_a? Array
96-
out.each { |o| cp_r o, out_dir }
97-
else
98-
cp_r out, out_dir
99-
end
100-
end
101-
end
102-
103-
def copy_to_prebuilt(out, fun)
104-
prebuilt = fun.find_prebuilt(out)
105-
puts "Copying #{out} to prebuilt #{prebuilt}"
106-
cp out, prebuilt
107-
end
108-
109-
def copy_prebuilt(fun, out)
110-
src = fun.find_prebuilt(out) || raise("unable to find prebuilt for #{out.inspect}")
111-
112-
mkdir_p File.dirname(out)
113-
puts "Falling back to #{src}"
114-
cp src, out
115-
end
116-
117-
def copy_all(dir, srcs, dest)
118-
if srcs.is_a? Array
119-
copy_array(dir, srcs, dest)
120-
elsif srcs.is_a? String
121-
copy_string(dir, srcs, dest)
122-
elsif srcs.is_a? Hash
123-
copy_hash(dir, srcs, dest)
124-
elsif srcs.is_a? Symbol
125-
copy_symbol(dir, srcs, dest)
126-
else
127-
raise StandardError, "Undetermined type: #{srcs.class}"
128-
end
129-
end
130-
131-
def zip(src, dest)
132-
out = SeleniumRake::Checks.path_for(File.expand_path(dest))
133-
Dir.chdir(src) {
134-
# TODO(jari): something very weird going on here on windows
135-
# the 2>&1 is needed for some reason
136-
ok = system(%{jar cMf "#{out}" * 2>&1})
137-
ok or raise "could not zip #{src} => #{dest}"
138-
}
139-
end
140-
141-
def to_filelist(dir, src)
142-
str = dir + "/" + src
143-
FileList[str].collect do |file|
144-
SeleniumRake::Checks.path_for(file)
145-
end
146-
end
147-
148-
private
149-
150-
def copy_string(dir, src, dest)
151-
if Rake::Task.task_defined? src
152-
from = Rake::Task[src].out
153-
else
154-
from = to_filelist(dir, src)
155-
end
156-
157-
cp_r from, to_dir(dest), :remove_destination => true
158-
end
159-
160-
def copy_symbol(dir, src, dest)
161-
from = Rake::Task[task_name(dir, src)].out
162-
163-
if File.directory? from
164-
cp_r from, to_dir(dest)
165-
else
166-
mkdir_p File.dirname(dest)
167-
cp from, dest
168-
end
169-
end
170-
171-
def copy_array(dir, src, dest)
172-
src.each do |item|
173-
if item.is_a? Hash
174-
copy_hash(dir, item, dest)
175-
elsif item.is_a? Array
176-
# TODO: Is this correct here? Shouldn't we do +copy_array+ (Luke - Sep 2019')
177-
raise StandardError, "Undetermined type: #{item.class}"
178-
elsif item.is_a? String
179-
copy_string(dir, item, dest)
180-
elsif item.is_a? Symbol
181-
copy_symbol(dir, item, dest)
182-
else
183-
raise StandardError, "Undetermined type: #{item.class}"
184-
end
185-
end
186-
end
187-
188-
def copy_hash(dir, src, dest)
189-
src.each do |key, value|
190-
if key.is_a? Symbol
191-
copy_symbol dir, key, SeleniumRake::Checks.path_for(File.join(dest, value))
192-
else
193-
from, to = File.join(dir, key), File.join(dest, value)
194-
cp_r from, to
195-
end
196-
end
197-
198-
end
199-
200-
def to_dir(name)
201-
unless File.exists? name
202-
mkdir_p name
203-
end
204-
name
205-
end
206-
207-
def dep_type(dir, dep)
208-
if dep.is_a? String
209-
if dep.start_with?("//")
210-
return [dep]
211-
else
212-
return to_filelist(dir, dep)
213-
end
214-
end
215-
216-
if dep.is_a? Symbol
217-
return [task_name(dir, dep)]
218-
end
219-
220-
if dep.is_a? Hash
221-
all_deps = []
222-
dep.each do |k, v|
223-
# We only care about the keys
224-
all_deps += dep_type(dir, k)
225-
end
226-
return all_deps
227-
end
228-
229-
raise "Unmatched dependency type: #{dep.class}"
230-
end
231-
232-
def halt_on_error?
233-
[nil, 'true'].include?(ENV['haltonerror']) &&
234-
[nil, 'true'].include?(ENV['haltonfailure'])
235-
end
236-
237-
def halt_on_failure?
238-
halt_on_error?
239-
end
240-
end
1+
require_relative 'tasks'
Lines changed: 5 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,7 @@
11
require 'rake_tasks/crazy_fun/mappings/common'
22

3-
class ExportMappings
4-
def add_all(fun)
5-
fun.add_mapping("export_file", Export::CheckPreconditions.new)
6-
fun.add_mapping("export_file", Export::CreateTask.new)
7-
fun.add_mapping("export_file", Export::AddDependencies.new)
8-
end
9-
end
10-
11-
module Export
12-
class CheckPreconditions < Tasks
13-
def handle(_fun, _dir, args)
14-
raise StandardError, ":name must be set" if args[:name].nil?
15-
raise StandardError, ":srcs must be set" if args[:srcs].nil?
16-
end
17-
end
18-
19-
class ExportTasks < Tasks
20-
def export_name(dir, name, extension)
21-
name = task_name(dir, name)
22-
name = "build/" + (name.slice(2 ... name.length))
23-
name = name.sub(":", "/")
24-
name += extension
25-
Platform.path_for name
26-
end
27-
end
28-
29-
class CreateTask < ExportTasks
30-
def handle(_fun, dir, args)
31-
to_export = dir + "/" + args[:srcs][0]
32-
33-
name = export_name(dir, args[:name], File.extname(to_export))
34-
file name => to_export do
35-
src = Platform.path_for "#{dir}/#{args[:srcs][0]}"
36-
mkdir_p File.dirname(name)
37-
cp_r src, name
38-
end
39-
40-
task_name = task_name(dir, args[:name])
41-
task task_name => name
42-
task "#{task_name}#{File.extname(to_export)}" => task_name
43-
Rake::Task[task_name].out = name
44-
end
45-
end
46-
47-
class AddDependencies < ExportTasks
48-
def handle(_fun, dir, args)
49-
to_export = dir + "/" + args[:srcs][0]
50-
name = export_name(dir, args[:name], File.extname(to_export))
51-
task = Rake::Task[name]
52-
add_dependencies(task, dir, args[:deps])
53-
add_dependencies(task, dir, args[:srcs])
54-
end
55-
end
56-
end
3+
require_relative 'export_mappings'
4+
require_relative 'export/check_preconditions'
5+
require_relative 'export/export_tasks'
6+
require_relative 'export/create_task'
7+
require_relative 'export/add_dependencies'
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module Export
2+
class AddDependencies < ExportTasks
3+
def handle(_fun, dir, args)
4+
to_export = dir + "/" + args[:srcs][0]
5+
name = export_name(dir, args[:name], File.extname(to_export))
6+
task = Rake::Task[name]
7+
add_dependencies(task, dir, args[:deps])
8+
add_dependencies(task, dir, args[:srcs])
9+
end
10+
end
11+
end
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module Export
2+
class CheckPreconditions < Tasks
3+
def handle(_fun, _dir, args)
4+
raise StandardError, ":name must be set" if args[:name].nil?
5+
raise StandardError, ":srcs must be set" if args[:srcs].nil?
6+
end
7+
end
8+
end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module Export
2+
class CreateTask < ExportTasks
3+
def handle(_fun, dir, args)
4+
to_export = dir + "/" + args[:srcs][0]
5+
6+
name = export_name(dir, args[:name], File.extname(to_export))
7+
file name => to_export do
8+
src = Platform.path_for "#{dir}/#{args[:srcs][0]}"
9+
mkdir_p File.dirname(name)
10+
cp_r src, name
11+
end
12+
13+
task_name = task_name(dir, args[:name])
14+
task task_name => name
15+
task "#{task_name}#{File.extname(to_export)}" => task_name
16+
Rake::Task[task_name].out = name
17+
end
18+
end
19+
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module Export
2+
class ExportTasks < Tasks
3+
def export_name(dir, name, extension)
4+
name = task_name(dir, name)
5+
name = "build/" + (name.slice(2 ... name.length))
6+
name = name.sub(":", "/")
7+
name += extension
8+
Platform.path_for name
9+
end
10+
end
11+
end
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class ExportMappings
2+
def add_all(fun)
3+
fun.add_mapping("export_file", Export::CheckPreconditions.new)
4+
fun.add_mapping("export_file", Export::CreateTask.new)
5+
fun.add_mapping("export_file", Export::AddDependencies.new)
6+
end
7+
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module FileCopyHack
2+
def cp_r(src, dest, opts = {})
3+
super
4+
rescue => ex
5+
raise unless ex.message =~ /operation not permitted|Permission denied/i
6+
Dir["#{dest}/**/.svn"].each { |file| rm_rf file }
7+
8+
# virtual box shared folders has a problem with some of the .svn files
9+
if ENV['USER'] == "vagrant" && opts.empty?
10+
sh "cp", "-r", src, dest
11+
else
12+
super(src, dest, opts)
13+
end
14+
end
15+
end

0 commit comments

Comments
 (0)