gotasks 0.0.0
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/LICENSE +0 -0
- data/README.rdoc +0 -0
- data/lib/gotasks.rb +209 -0
- data/lib/gotasks/version.rb +3 -0
- metadata +78 -0
data/LICENSE
ADDED
File without changes
|
data/README.rdoc
ADDED
File without changes
|
data/lib/gotasks.rb
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
['GOROOT','GOARCH','GOBIN','GOOS'].each do |envvar|
|
2
|
+
unless self.class.const_defined?(envvar)
|
3
|
+
if ENV.has_key?(envvar)
|
4
|
+
self.class.const_set(envvar, ENV[envvar])
|
5
|
+
else
|
6
|
+
raise "#{envvar} not defined"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
if GOARCH=="amd64"
|
12
|
+
GO_OBJ_EXT=".6"
|
13
|
+
GO_COMPILER="6g"
|
14
|
+
GO_LINKER="6l"
|
15
|
+
elsif GOARCH=="386"
|
16
|
+
GO_OBJ_EXT=".8"
|
17
|
+
GO_COMPILER="8g"
|
18
|
+
GO_LINKER="8l"
|
19
|
+
elsif GOARCH=="arm"
|
20
|
+
GO_OBJ_EXT=".5"
|
21
|
+
GO_COMPILER="5g"
|
22
|
+
GO_LINKER="5l"
|
23
|
+
else
|
24
|
+
raise "gotasks: architecture #{GOARCH} not supportedh"
|
25
|
+
end
|
26
|
+
|
27
|
+
GOPKG = ['.','pkg','test'] unless self.class.const_defined?('GOPKG')
|
28
|
+
TEST_DEPENDENCIES = [] unless self.class.const_defined?('TEST_DEPENDENCIES')
|
29
|
+
TEST_FILES = FileList.new('test/**/*_test.go')
|
30
|
+
|
31
|
+
|
32
|
+
class GoTestFile
|
33
|
+
attr_reader :filename, :package, :benchmarks, :tests
|
34
|
+
|
35
|
+
def initialize(filename)
|
36
|
+
@filename = filename
|
37
|
+
|
38
|
+
@tests = []
|
39
|
+
@benchmarks = []
|
40
|
+
@package = nil
|
41
|
+
IO.popen("gofmt -comments=false \"#{@filename}\"", 'r') do |f|
|
42
|
+
f.each_line do |line|
|
43
|
+
if line =~ /^\s*package\s+(.*)\s*$/
|
44
|
+
@package = $1
|
45
|
+
elsif line =~ /^\s*func\s+(Test.+)\s*\(/
|
46
|
+
@tests << $1
|
47
|
+
elsif line =~ /^\s*func\s+(Benchmark.+)\s*\(/
|
48
|
+
@benchmarks << $1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def tests?
|
55
|
+
tests.length > 0
|
56
|
+
end
|
57
|
+
|
58
|
+
def package?
|
59
|
+
!package.nil?
|
60
|
+
end
|
61
|
+
|
62
|
+
def benchmarks?
|
63
|
+
benchmarks.length > 0
|
64
|
+
end
|
65
|
+
|
66
|
+
def testfile
|
67
|
+
gofile = []
|
68
|
+
gofile << "package main"
|
69
|
+
gofile << "import \"#{package}\""
|
70
|
+
gofile << "import \"testing\""
|
71
|
+
|
72
|
+
gofile << ''
|
73
|
+
gofile << "var tests = []testing.Test {"
|
74
|
+
@tests.each do |test|
|
75
|
+
gofile << "\ttesting.Test{ \"#{package}.#{test}\", #{package}.#{test} },"
|
76
|
+
end
|
77
|
+
gofile << "}"
|
78
|
+
|
79
|
+
gofile << ''
|
80
|
+
gofile << "var benchmarks = []testing.Benchmark {"
|
81
|
+
@benchmarks.each do |benchmark|
|
82
|
+
gofile << "\ttesting.Benchmark{ \"#{package}.#{benchmark}\", #{package}.#{benchmark} },"
|
83
|
+
end
|
84
|
+
gofile << "}"
|
85
|
+
|
86
|
+
gofile << ''
|
87
|
+
gofile << 'func main() {'
|
88
|
+
gofile << ' testing.Main(tests);'
|
89
|
+
gofile << ' testing.RunBenchmarks(benchmarks)'
|
90
|
+
gofile << '}'
|
91
|
+
|
92
|
+
gofile.join("\n")
|
93
|
+
end
|
94
|
+
|
95
|
+
def runner
|
96
|
+
@filename.ext('') + "runner.go"
|
97
|
+
end
|
98
|
+
|
99
|
+
def save(outfile = runner)
|
100
|
+
File.open(outfile, "w") do |f|
|
101
|
+
f.puts testfile
|
102
|
+
end
|
103
|
+
self
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
def gocompile(out, source)
|
110
|
+
sh "#{GO_COMPILER} -I#{GOPKG.join(" -I")} -o #{out} #{source}"
|
111
|
+
end
|
112
|
+
|
113
|
+
def golink(out, source)
|
114
|
+
sh "#{GO_LINKER} -L#{GOPKG.join(" -L")} -o #{out} #{source}"
|
115
|
+
end
|
116
|
+
|
117
|
+
def gopack(archive, *files)
|
118
|
+
mkdir_p File.dirname(archive) unless File.exists?(File.dirname(archive))
|
119
|
+
sh "gopack grc #{archive} #{files.join(' ')}"
|
120
|
+
end
|
121
|
+
|
122
|
+
def runtest(test)
|
123
|
+
result = nil
|
124
|
+
IO.popen("#{test}", "r") do |f|
|
125
|
+
result = f.readlines.join('')
|
126
|
+
end
|
127
|
+
|
128
|
+
unless $?.to_i == 0 and result =~ /^\s*PASS\s*$/
|
129
|
+
puts "#{test}:"
|
130
|
+
IO.popen("#{test}", "r") do |f|
|
131
|
+
puts f.readlines
|
132
|
+
end
|
133
|
+
return false
|
134
|
+
end
|
135
|
+
|
136
|
+
return true
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
rule GO_OBJ_EXT => [".go"] do |t|
|
141
|
+
gocompile t.name, t.source
|
142
|
+
end
|
143
|
+
|
144
|
+
# Link Go-Files
|
145
|
+
rule /^[a-z0-9]+$/ => [GO_OBJ_EXT] do |t|
|
146
|
+
golink t.name, t.prerequisites.first
|
147
|
+
end
|
148
|
+
|
149
|
+
# Create a Package
|
150
|
+
rule '.a' => [GO_OBJ_EXT] do |t|
|
151
|
+
gopack t.name, *t.prerequisites
|
152
|
+
end
|
153
|
+
|
154
|
+
TEST_FILES.each do |test|
|
155
|
+
file test.ext('').gsub(/^test/,'testrun') => test.ext(GO_OBJ_EXT).gsub(/^test/,'testrun') do |t|
|
156
|
+
golink t.name, t.prerequisites.last
|
157
|
+
end
|
158
|
+
|
159
|
+
file test.gsub(/^test/,'testrun') => test.ext(GO_OBJ_EXT) do |t|
|
160
|
+
GoTestFile.new(t.prerequisites.last.ext('.go')).save(t.name)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
|
165
|
+
desc "run all tests"
|
166
|
+
task :test => "test:all"
|
167
|
+
|
168
|
+
namespace :test do
|
169
|
+
desc "clean tests"
|
170
|
+
task :clean do
|
171
|
+
FileList.new('./testrun', 'test/**/*.[6]').each do |f|
|
172
|
+
rm_rf f if File.exists?(f)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
task :all => ['testdir'] + TEST_DEPENDENCIES + TEST_FILES.ext('').collect{|f| f.gsub(/^test/,'testrun') } do
|
177
|
+
passed = 0
|
178
|
+
failed = 0
|
179
|
+
TEST_FILES.each do |test|
|
180
|
+
if runtest("#{test.ext('').gsub(/^test/,'testrun')}")
|
181
|
+
passed+=1
|
182
|
+
else
|
183
|
+
failed+=1
|
184
|
+
end
|
185
|
+
end
|
186
|
+
puts "#{passed+failed} Tests: #{passed} OK / #{failed} FAILED"
|
187
|
+
end
|
188
|
+
|
189
|
+
task :testdir do
|
190
|
+
TEST_FILES.each do |test|
|
191
|
+
dirname = File.dirname(test.ext('').gsub(/^test/,'testrun'))
|
192
|
+
mkdir_p dirname unless File.exists?(dirname)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
|
198
|
+
desc "remove all generated files"
|
199
|
+
task :clean => "test:clean" do
|
200
|
+
(CLEAN_FILES + FileList.new('**/*.[6a]','./pkg')).each do |f|
|
201
|
+
if File.exists?(f)
|
202
|
+
if File.directory?(f)
|
203
|
+
rm_rf f
|
204
|
+
else
|
205
|
+
rm_f f
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gotasks
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 0.0.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Thomas Volkmar Worm
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-04-09 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rake
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 8
|
30
|
+
- 7
|
31
|
+
version: 0.8.7
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
description: Rake tasks and rules for compiling go projects (http://golang.org)
|
35
|
+
email: tvw@s4r.de
|
36
|
+
executables: []
|
37
|
+
|
38
|
+
extensions: []
|
39
|
+
|
40
|
+
extra_rdoc_files: []
|
41
|
+
|
42
|
+
files:
|
43
|
+
- lib/gotasks.rb
|
44
|
+
- lib/gotasks/version.rb
|
45
|
+
- README.rdoc
|
46
|
+
- LICENSE
|
47
|
+
has_rdoc: true
|
48
|
+
homepage: http://github.com/tvw/gotasks
|
49
|
+
licenses: []
|
50
|
+
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
version: "0"
|
70
|
+
requirements: []
|
71
|
+
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 1.3.6
|
74
|
+
signing_key:
|
75
|
+
specification_version: 3
|
76
|
+
summary: Rake tasks for go projects.
|
77
|
+
test_files: []
|
78
|
+
|