dake 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +36 -0
- data/Rakefile +17 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/dake.gemspec +51 -0
- data/exe/dake +170 -0
- data/lib/dake/analyzer.rb +387 -0
- data/lib/dake/database.rb +49 -0
- data/lib/dake/executor.rb +211 -0
- data/lib/dake/parser.rb +300 -0
- data/lib/dake/protocol.rb +141 -0
- data/lib/dake/resolver.rb +222 -0
- data/lib/dake/scheme.rb +85 -0
- data/lib/dake/version.rb +3 -0
- data/lib/dake.rb +13 -0
- data/vim/ftdetect/dake.vim +9 -0
- data/vim/syntax/dake.vim +97 -0
- metadata +217 -0
data/lib/dake/scheme.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
module DakeScheme
|
2
|
+
class Scheme
|
3
|
+
PATTERN = ['']
|
4
|
+
attr_reader :path, :step, :src
|
5
|
+
def initialize(scheme_part, path_part, step)
|
6
|
+
@src = scheme_part + path_part
|
7
|
+
@path = path_part
|
8
|
+
@step = step
|
9
|
+
end
|
10
|
+
def checksum; end
|
11
|
+
def mtime; end
|
12
|
+
def exist?; false end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Tag < Scheme
|
16
|
+
PATTERN = ['@']
|
17
|
+
def initialize(scheme_part, path_part, step)
|
18
|
+
@src = scheme_part + path_part
|
19
|
+
@path = path_part
|
20
|
+
@step = step
|
21
|
+
@step = step
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Regex < Scheme
|
26
|
+
PATTERN = ['^']
|
27
|
+
def initialize(scheme_part, path_part, step)
|
28
|
+
@src = path_part
|
29
|
+
@path = Regexp.compile("^#{path_part}$")
|
30
|
+
@step = step
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Local < Scheme
|
35
|
+
PATTERN = ['local:']
|
36
|
+
def initialize(scheme_part, path_part, step)
|
37
|
+
@src = path_part
|
38
|
+
if path_part.start_with? '/'
|
39
|
+
@path = path_part
|
40
|
+
else
|
41
|
+
@path = File.expand_path(path_part, step.context['BASE'])
|
42
|
+
end
|
43
|
+
@step = step
|
44
|
+
end
|
45
|
+
|
46
|
+
def mtime
|
47
|
+
File.mtime(@path)
|
48
|
+
end
|
49
|
+
|
50
|
+
def exist?
|
51
|
+
File.exist?(@path)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class HDFS < Scheme
|
56
|
+
PATTERN = ['hdfs:', 'afs:']
|
57
|
+
def initialize(scheme_part, path_part, step)
|
58
|
+
@src = scheme_part + path_part
|
59
|
+
@path = scheme_part + path_part
|
60
|
+
@step = step
|
61
|
+
if @step.context['HADOOP_HOME']
|
62
|
+
@hadoop_bin = "#{@step.context['HADOOP_HOME']}/hadoop/bin/hadoop"
|
63
|
+
elsif ENV['HADOOP_HOME']
|
64
|
+
@hadoop_bin = "#{ENV['HADOOP_HOME']}/hadoop/bin/hadoop"
|
65
|
+
else
|
66
|
+
raise "HADOOP_HOME not set." if not hadoop_home or hadoop_home.empty?
|
67
|
+
end
|
68
|
+
raise "#{@hadoop_bin} not found." unless File.exist? @hadoop_bin
|
69
|
+
end
|
70
|
+
|
71
|
+
def mtime
|
72
|
+
Time.at(`#{@hadoop_bin} fs -stat %Y #{@path}`.chomp.to_i / 1000)
|
73
|
+
end
|
74
|
+
|
75
|
+
def exist?
|
76
|
+
system("#{@hadoop_bin} fs -test -e #{@path}")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
SchemeDict = {
|
81
|
+
'local:' => Local,
|
82
|
+
'hdfs:' => HDFS,
|
83
|
+
'afs:' => HDFS
|
84
|
+
}
|
85
|
+
end
|
data/lib/dake/version.rb
ADDED
data/lib/dake.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "dake/version"
|
2
|
+
require 'dake/parser'
|
3
|
+
require 'dake/analyzer'
|
4
|
+
require 'dake/executor'
|
5
|
+
require 'dake/protocol'
|
6
|
+
require 'dake/scheme'
|
7
|
+
require 'dake/resolver'
|
8
|
+
require 'dake/database'
|
9
|
+
|
10
|
+
module Dake
|
11
|
+
class Error < StandardError; end
|
12
|
+
TargetOption = Struct.new(:tag, :regex, :build_mode, :tree_mode)
|
13
|
+
end
|
data/vim/syntax/dake.vim
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
"
|
2
|
+
" Vim syntax file for dake
|
3
|
+
" Based on https://bitbucket.org/larsyencken/vim-drake-syntax.git
|
4
|
+
" Language: dake
|
5
|
+
" Latest Revision: 2019-03-31
|
6
|
+
"
|
7
|
+
|
8
|
+
if exists("b:current_syntax")
|
9
|
+
finish
|
10
|
+
endif
|
11
|
+
|
12
|
+
syn include @Shell syntax/sh.vim
|
13
|
+
unlet b:current_syntax
|
14
|
+
|
15
|
+
syn include @Python syntax/python.vim
|
16
|
+
unlet b:current_syntax
|
17
|
+
|
18
|
+
syn include @Ruby syntax/ruby.vim
|
19
|
+
unlet b:current_syntax
|
20
|
+
|
21
|
+
syn include @Awk syntax/awk.vim
|
22
|
+
unlet b:current_syntax
|
23
|
+
|
24
|
+
syn include @R syntax/r.vim
|
25
|
+
let b:current_syntax = 'dake'
|
26
|
+
|
27
|
+
" Comments Tag Pattern Directives and Protocols
|
28
|
+
syn match dakeTag /@[^ ,@"'[\]]\+\|"[^"]*"\|'[^']*'/ contained contains=dakeVariableRef
|
29
|
+
syn match dakeDirective "^%[a-zA-Z_][a-zA-Z_]*"
|
30
|
+
syn match dakeComment "#.*$" contains=dakeTodo
|
31
|
+
syn keyword dakeTodo contained TODO NOTE FIXME XXX
|
32
|
+
syn keyword dakeProtocol contained shell python ruby awk R
|
33
|
+
|
34
|
+
" Variable definitions
|
35
|
+
syn match dakeSetVariable "^[a-zA-Z_][a-zA-Z0-9_]* *|\?= *" contains=dakeVariable nextgroup=dakeString
|
36
|
+
syn match dakeVariable "^[a-zA-Z_][a-zA-Z0-9_]*" contained
|
37
|
+
syn match dakeString /[^ ,@"'[\]]\+\|"[^"]*"\|'[^']*'/ contained contains=dakeVariableRef containedin=dakeSetValue nextgroup=dakeString
|
38
|
+
syn match dakeEscChar /\\\(x[0-9a-fA-F]\{1,2}\|u[0-9a-fA-F]\{1,4}\|.\)/ contained containedin=dakeString
|
39
|
+
|
40
|
+
" Method blocks
|
41
|
+
syn region dakeMethodBlock start="^[a-zA-Z_][a-zA-Z0-9_]*()" end="^$" contains=dakeMethodSignature
|
42
|
+
syn match dakeMethodSignature "^[a-zA-Z_][a-zA-Z0-9_]*" contained nextgroup=dakeMethodBraces
|
43
|
+
syn match dakeMethodBraces "()" contained nextgroup=dakeOptionListPy,dakeOptionListRb,dakeOptionListAwk,dakeOptionListR,dakeOptionListSh,dakeOptionList,dakeDefaultShBlock skipwhite skipnl
|
44
|
+
|
45
|
+
" Variable references in strings
|
46
|
+
syn region dakeVariableRef start='\$\[' end='\]' contained containedin=dakeString,dakeRbBlock,rubyString,dakePyBlock,pythonString,dakeAwkBlock,awkString,dakeRBlock,rString,dakeDefaultShBlock,dakeShBLock,shCmdParenRegion,shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote,shHereDoc,shHereString,shEcho contains=dakeVariableName
|
47
|
+
syn match dakeVariableName "[a-zA-Z_][a-zA-Z0-9_]*" contained containedin=dakeVariableRef
|
48
|
+
|
49
|
+
" Rule blocks
|
50
|
+
syn region dakeBlock start="[^<#, ][^<#, ]*\(, [^<#, ][^<#, ]*\)* <-" end="^$" contains=dakeRule
|
51
|
+
syn match dakeRule "[^<#, ].* <-\( *[^[<# ][^<# ]*\)*" contains=dakeTargets nextgroup=dakeOptionListPy,dakeOptionListRb,dakeOptionListAwk,dakeOptionListR,dakeOptionListSh,dakeOptionList,dakeDefaultShBlock skipwhite skipnl
|
52
|
+
syn match dakeTargets "[^<#, ][^<#, ]*\(, [^<#, ][^<#, ]*\)*" contained nextgroup=dakeRuleIdentifier contains=dakeTag,dakeString,dakeTargetSep
|
53
|
+
syn match dakeRuleIdentifier " <-" contained nextgroup=dakeSources
|
54
|
+
syn match dakeTargetSep ", " contained containedin=dakeTargets
|
55
|
+
syn region dakeOptionList matchgroup=Snip start=/\v \[/ end="\]" contained contains=dakeOption nextgroup=dakeShBlock skipwhite skipnl
|
56
|
+
syn region dakeOptionListSh matchgroup=Snip start=/\v \[(shell|.* shell)/ end="\]" contained contains=dakeOption,dakeProtocol nextgroup=dakeShBlock skipwhite skipnl
|
57
|
+
syn region dakeOptionListPy matchgroup=Snip start=/\v \[(python|.* python)/ end="\]" contained contains=dakeOption,dakeProtocol nextgroup=dakePyBlock skipwhite skipnl
|
58
|
+
syn region dakeOptionListRb matchgroup=Snip start=/\v \[(ruby|.* ruby)/ end="\]" contained contains=dakeOption,dakeProtocol nextgroup=dakeRbBlock skipwhite skipnl
|
59
|
+
syn region dakeOptionListAwk matchgroup=Snip start=/\v \[(awk|.* awk)/ end="\]" contained contains=dakeOption,dakeProtocol nextgroup=dakeAwkBlock skipwhite skipnl
|
60
|
+
syn region dakeOptionListR matchgroup=Snip start=/\v \[(R|.* R)/ end="\]" contained contains=dakeOption,dakeProtocol nextgroup=dakeRBlock skipwhite skipnl
|
61
|
+
syn match dakeOption '[a-zA-Z_][a-zA-Z0-9_]*:\|[+-][a-zA-Z_][a-zA-Z0-9_]*' contained nextgroup=dakeString
|
62
|
+
|
63
|
+
hi link dakeComment Comment
|
64
|
+
hi link dakeTodo rubyConstant
|
65
|
+
hi link dakeProtocol PreProc
|
66
|
+
hi link dakeVariable shVariable
|
67
|
+
hi link dakeVariableName shDerefSimple
|
68
|
+
hi link dakeSetIdentifier Delimiter
|
69
|
+
hi link dakeRuleIdentifier Delimiter
|
70
|
+
hi link dakeTag rubyConstant
|
71
|
+
hi link dakeString String
|
72
|
+
hi link dakeEscChar shEscape
|
73
|
+
hi link VarBraces SpecialComment
|
74
|
+
hi link dakeTargetSep Delimiter
|
75
|
+
hi link dakeDirective PreProc
|
76
|
+
hi link dakeOption Constant
|
77
|
+
|
78
|
+
" Embedded shell region in block
|
79
|
+
syn region dakeDefaultShBlock start='^\(#.*$\n\)*[ \t][ \t]*' end='^$' contained containedin=dakeBlock,dakeMethodBlock contains=@Shell
|
80
|
+
syn region dakeShBlock start=/^\(#.*$\n\)*[ \t]/ end='^$' contained contains=@Shell
|
81
|
+
syn region dakePyBlock start=/^\(#.*$\n\)*[ \t]/ end='^$' contained contains=@Python
|
82
|
+
syn region dakeRbBlock start=/^\(#.*$\n\)*[ \t]/ end='^$' contained contains=@Ruby
|
83
|
+
syn region dakeAwkBlock start=/^\(#.*$\n\)*[ \t]/ end='^$' contained contains=@Awk
|
84
|
+
syn region dakeRBlock start=/^\(#.*$\n\)*[ \t]/ end='^$' contained contains=@R
|
85
|
+
|
86
|
+
" Embedded shell regions in strings
|
87
|
+
syn region shellBrackets matchgroup=SnipBraces start='\$(' end=')' containedin=dakeString contains=@Shell
|
88
|
+
|
89
|
+
hi link Snip SpecialComment
|
90
|
+
hi link SnipBraces SpecialComment
|
91
|
+
hi link dakeVariableRef shDerefSimple
|
92
|
+
hi link dakeMethodSignature Function
|
93
|
+
hi link dakeMethodBraces SpecialComment
|
94
|
+
|
95
|
+
" Syncing
|
96
|
+
syn sync minlines=20 maxlines=200
|
97
|
+
|
metadata
ADDED
@@ -0,0 +1,217 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dake
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- minor6th
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-04-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rdoc
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: awesome_print
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: gli
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: git
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: colorize
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: sinatra
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: parslet
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: concurrent-ruby
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
description: Dake is a data workflow tool inspired by Drake.
|
168
|
+
email:
|
169
|
+
- minor6th@outlook.com
|
170
|
+
executables:
|
171
|
+
- dake
|
172
|
+
extensions: []
|
173
|
+
extra_rdoc_files: []
|
174
|
+
files:
|
175
|
+
- ".gitignore"
|
176
|
+
- Gemfile
|
177
|
+
- LICENSE
|
178
|
+
- README.md
|
179
|
+
- Rakefile
|
180
|
+
- bin/console
|
181
|
+
- bin/setup
|
182
|
+
- dake.gemspec
|
183
|
+
- exe/dake
|
184
|
+
- lib/dake.rb
|
185
|
+
- lib/dake/analyzer.rb
|
186
|
+
- lib/dake/database.rb
|
187
|
+
- lib/dake/executor.rb
|
188
|
+
- lib/dake/parser.rb
|
189
|
+
- lib/dake/protocol.rb
|
190
|
+
- lib/dake/resolver.rb
|
191
|
+
- lib/dake/scheme.rb
|
192
|
+
- lib/dake/version.rb
|
193
|
+
- vim/ftdetect/dake.vim
|
194
|
+
- vim/syntax/dake.vim
|
195
|
+
homepage: https://github.com/minor6th/dake
|
196
|
+
licenses: []
|
197
|
+
metadata: {}
|
198
|
+
post_install_message:
|
199
|
+
rdoc_options: []
|
200
|
+
require_paths:
|
201
|
+
- lib
|
202
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
|
+
requirements:
|
209
|
+
- - ">="
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: '0'
|
212
|
+
requirements: []
|
213
|
+
rubygems_version: 3.0.3
|
214
|
+
signing_key:
|
215
|
+
specification_version: 4
|
216
|
+
summary: Dake is a data workflow tool inspired by Drake.
|
217
|
+
test_files: []
|