dake 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,3 @@
1
+ module Dake
2
+ VERSION = "0.1.0"
3
+ end
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
@@ -0,0 +1,9 @@
1
+ au BufNewFile,BufRead *.dake,Dakefile call SetDakeOptions()
2
+ if !exists("*SetDakeOptions")
3
+ function SetDakeOptions()
4
+ set autoindent
5
+ set filetype=dake syntax=dake
6
+ setlocal shiftwidth=4 softtabstop=4
7
+ setlocal indentkeys=!^F,o,O
8
+ endfunction
9
+ endif
@@ -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: []