build-tool 0.5.7 → 0.6.0.rc1
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/.gitignore +1 -0
- data/.rvmrc +1 -0
- data/.yardopts +1 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +56 -0
- data/History.txt +64 -0
- data/README.txt +0 -7
- data/Rakefile +8 -56
- data/bin/build-tool +4 -1
- data/build-tool.gemspec +62 -0
- data/db/migrations/20110703074000_add_command_logs.rb +17 -0
- data/db/migrations/20110703075000_add_module_logs.rb +20 -0
- data/db/migrations/20110815170000_add_features.rb +17 -0
- data/db/migrations/20120103204700_add_modules.rb +17 -0
- data/db/migrations/20120106181200_add_settings.rb +18 -0
- data/lib/build-tool.rb +3 -4
- data/lib/build-tool/application.rb +127 -37
- data/lib/build-tool/build-system/autoconf.rb +2 -8
- data/lib/build-tool/build-system/base.rb +12 -4
- data/lib/build-tool/build-system/cmake.rb +2 -0
- data/lib/build-tool/build-system/custom.rb +2 -0
- data/lib/build-tool/build-system/kdel10n.rb +2 -0
- data/lib/build-tool/build-system/make.rb +2 -0
- data/lib/build-tool/build-system/none.rb +2 -0
- data/lib/build-tool/build-system/qmake.rb +2 -0
- data/lib/build-tool/build-system/qt.rb +4 -0
- data/lib/build-tool/cfg/lexer.rex +40 -8
- data/lib/build-tool/cfg/lexer_base.rb +3 -1
- data/lib/build-tool/cfg/node.rb +17 -1
- data/lib/build-tool/cfg/parser.y +92 -10
- data/lib/build-tool/cfg/visitor.rb +202 -78
- data/lib/build-tool/command_actions.rb +26 -10
- data/lib/build-tool/commands.rb +289 -197
- data/lib/build-tool/commands/build.rb +13 -9
- data/lib/build-tool/commands/configuration.rb +25 -0
- data/lib/build-tool/commands/configuration/edit.rb +42 -0
- data/lib/build-tool/commands/configuration/list.rb +48 -0
- data/lib/build-tool/commands/configure.rb +9 -5
- data/lib/build-tool/commands/ctags.rb +8 -3
- data/lib/build-tool/commands/environments.rb +2 -4
- data/lib/build-tool/commands/environments/list.rb +13 -10
- data/lib/build-tool/commands/environments/set.rb +5 -1
- data/lib/build-tool/commands/features.rb +24 -0
- data/lib/build-tool/commands/features/disable.rb +70 -0
- data/lib/build-tool/commands/features/enable.rb +66 -0
- data/lib/build-tool/commands/features/list.rb +92 -0
- data/lib/build-tool/commands/fetch.rb +9 -3
- data/lib/build-tool/commands/files.rb +9 -5
- data/lib/build-tool/commands/gc.rb +48 -15
- data/lib/build-tool/commands/history.rb +21 -16
- data/lib/build-tool/commands/info.rb +16 -13
- data/lib/build-tool/commands/install.rb +8 -4
- data/lib/build-tool/commands/modules.rb +2 -4
- data/lib/build-tool/commands/modules/cleanup.rb +52 -0
- data/lib/build-tool/commands/modules/disable.rb +95 -0
- data/lib/build-tool/commands/modules/enable.rb +52 -0
- data/lib/build-tool/commands/modules/info.rb +44 -35
- data/lib/build-tool/commands/modules/list.rb +67 -15
- data/lib/build-tool/commands/modules/shell.rb +8 -2
- data/lib/build-tool/commands/rebase.rb +15 -7
- data/lib/build-tool/commands/recipes.rb +2 -4
- data/lib/build-tool/commands/recipes/add.rb +16 -2
- data/lib/build-tool/commands/recipes/edit.rb +72 -0
- data/lib/build-tool/commands/recipes/incoming.rb +11 -7
- data/lib/build-tool/commands/recipes/info.rb +12 -8
- data/lib/build-tool/commands/recipes/install.rb +37 -42
- data/lib/build-tool/commands/recipes/list.rb +6 -2
- data/lib/build-tool/configuration.rb +88 -3
- data/lib/build-tool/environment.rb +2 -0
- data/lib/build-tool/errors.rb +5 -0
- data/lib/build-tool/history.rb +3 -181
- data/lib/build-tool/model/command_log.rb +93 -0
- data/lib/build-tool/model/feature.rb +80 -0
- data/lib/build-tool/{module.rb → model/module.rb} +110 -29
- data/lib/build-tool/model/module_log.rb +64 -0
- data/lib/build-tool/model/setting.rb +84 -0
- data/lib/build-tool/recipe.rb +40 -18
- data/lib/build-tool/repository.rb +39 -33
- data/lib/build-tool/server.rb +27 -3
- data/lib/build-tool/singleton.rb +2 -0
- data/lib/build-tool/sshkey.rb +2 -0
- data/lib/build-tool/state_helper.rb +64 -0
- data/lib/build-tool/vcs/archive.rb +3 -1
- data/lib/build-tool/vcs/base.rb +13 -0
- data/lib/build-tool/vcs/git-svn.rb +36 -14
- data/lib/build-tool/vcs/git.rb +180 -44
- data/lib/build-tool/vcs/mercurial.rb +25 -13
- data/lib/build-tool/vcs/svn.rb +20 -15
- data/lib/build-tool/version.rb +30 -0
- data/lib/mj/error.rb +2 -0
- data/lib/mj/logging.rb +2 -0
- data/lib/mj/mixins/inherited_attributes.rb +73 -0
- data/lib/mj/tools/editor.rb +34 -0
- data/lib/mj/tools/ssh.rb +2 -0
- data/lib/mj/tools/subprocess.rb +2 -1
- data/lib/mj/vcs/git.rb +14 -2
- data/lib/mj/visitor.rb +22 -0
- data/tasks/db.rake +36 -0
- data/tasks/racc.rake +14 -0
- data/tasks/rdoc.rake +8 -0
- data/tasks/rexical.rake +14 -0
- data/tasks/test.rake +21 -0
- data/test/integration/history_test.rb +88 -0
- data/test/integration/parser_configuration.rb +36 -0
- data/test/integration/parser_environment_parser.rb +156 -0
- data/test/integration/parser_feature_test.rb +75 -0
- data/test/integration/parser_git-svn_test.rb +92 -0
- data/test/integration/parser_git_test.rb +97 -0
- data/test/integration/parser_mercurial_test.rb +77 -0
- data/test/integration/parser_module_test.rb +103 -0
- data/test/integration/parser_svn_test.rb +92 -0
- data/test/integration/parser_test.rb +73 -0
- data/test/test_helper.rb +61 -0
- data/test/unit/configuration_test.rb +36 -0
- data/test/unit/git_configuration_test.rb +163 -0
- data/test/unit/git_svn_configuration_test.rb +240 -0
- data/test/unit/mercurial_configuration_test.rb +64 -0
- data/test/unit/model/command_log_test.rb +103 -0
- data/test/unit/model/feature_test.rb +29 -0
- data/test/unit/model/module_log_test.rb +70 -0
- data/test/unit/model/module_test.rb +32 -0
- data/test/unit/repository_test.rb +110 -0
- data/test/unit/server_test.rb +66 -0
- data/test/unit/svn_configuration_test.rb +90 -0
- metadata +134 -93
- data/Manifest.txt +0 -80
- data/db/migrations/001_command_histories.rb +0 -20
- data/db/migrations/002_module_events.rb +0 -24
- data/db/migrations/003_command_histories_add_logfile.rb +0 -19
- data/lib/build-tool/GUI.rb +0 -360
- data/lib/build-tool/commands/help.rb +0 -22
- data/lib/build-tool/commands/lsfeatures.rb +0 -76
- data/lib/build-tool/feature.rb +0 -47
@@ -1,3 +1,5 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
1
3
|
require 'build-tool/commands'
|
2
4
|
require 'build-tool/recipe'
|
3
5
|
|
@@ -13,14 +15,16 @@ class List < Standard
|
|
13
15
|
long_description [ "Shows the list of recipes." ]
|
14
16
|
|
15
17
|
def initialize_options
|
16
|
-
|
18
|
+
options.banner = "Usage: #{self.fullname} [OPTIONS]..."
|
19
|
+
options.separator( "" )
|
20
|
+
options.separator( "Options" )
|
17
21
|
super
|
18
22
|
end
|
19
23
|
|
20
24
|
def do_execute( args )
|
21
25
|
recipes = Recipe.all_recipes
|
22
26
|
recipes.keys.sort.each do |name|
|
23
|
-
|
27
|
+
info( format( "%-20s - %s", name, recipes[name].short_description ) )
|
24
28
|
end
|
25
29
|
|
26
30
|
return 0
|
@@ -1,9 +1,17 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
require 'mj/tools/editor'
|
4
|
+
|
1
5
|
require 'build-tool/vcs/git'
|
2
6
|
require 'build-tool/vcs/git-svn'
|
3
7
|
require 'build-tool/vcs/svn'
|
4
8
|
require 'build-tool/vcs/archive'
|
5
9
|
require 'build-tool/vcs/mercurial'
|
6
10
|
|
11
|
+
require 'build-tool/model/module'
|
12
|
+
require 'build-tool/model/feature'
|
13
|
+
require 'build-tool/model/setting'
|
14
|
+
|
7
15
|
require 'build-tool/build-system/cmake'
|
8
16
|
require 'build-tool/build-system/qt'
|
9
17
|
require 'build-tool/build-system/autoconf'
|
@@ -17,16 +25,39 @@ module BuildTool
|
|
17
25
|
|
18
26
|
class Configuration
|
19
27
|
|
20
|
-
|
28
|
+
def self.edit( only = [] )
|
29
|
+
|
30
|
+
settings = BuildTool::Setting::export(
|
31
|
+
BuildTool::Application.instance.configuration.settings,
|
32
|
+
only )
|
33
|
+
|
34
|
+
editor = MJ::Tools::TmpFileEditor.new( YAML::dump( settings ) )
|
35
|
+
|
36
|
+
editor.edit()
|
37
|
+
if not Pathname.new( editor.path() ).exist?
|
38
|
+
info( "File deleted!" )
|
39
|
+
return 0
|
40
|
+
end
|
41
|
+
values = YAML::load( File.open( editor.path(), 'r:UTF-8' ) )
|
42
|
+
|
43
|
+
BuildTool::Setting::import(
|
44
|
+
BuildTool::Application.instance.configuration.settings,
|
45
|
+
values )
|
46
|
+
return 0
|
47
|
+
end
|
48
|
+
|
49
|
+
attr_accessor :recipe
|
21
50
|
attr_reader :modules
|
22
51
|
attr_reader :environments
|
23
52
|
attr_reader :features
|
24
53
|
attr_accessor :active_feature
|
54
|
+
attr_reader :settings
|
25
55
|
|
26
56
|
def log_directory
|
27
57
|
return @log_directory if @log_directory
|
28
58
|
raise BuildTool::ConfigurationError, "No log directory configured"
|
29
59
|
end
|
60
|
+
|
30
61
|
def log_directory=( path )
|
31
62
|
path = Pathname.new( path.sub( /\$HOME/, '~' ) )
|
32
63
|
if path.to_s[0] != '~' and path.relative?
|
@@ -84,8 +115,12 @@ def add_sshkey( key )
|
|
84
115
|
@sshkey[key.name] = key
|
85
116
|
end
|
86
117
|
|
87
|
-
def
|
88
|
-
@
|
118
|
+
def add_setting( s )
|
119
|
+
@settings[s.name] = s
|
120
|
+
end
|
121
|
+
|
122
|
+
def initialize()
|
123
|
+
@recipe = nil
|
89
124
|
@server = {}
|
90
125
|
@log_directory = nil
|
91
126
|
@environments = {}
|
@@ -96,6 +131,7 @@ def initialize( recipe = nil )
|
|
96
131
|
@sshkey = {}
|
97
132
|
@active_feature = nil
|
98
133
|
@features = {}
|
134
|
+
@settings = {}
|
99
135
|
end
|
100
136
|
|
101
137
|
def vcs( name )
|
@@ -151,6 +187,55 @@ def add_build_system( bs )
|
|
151
187
|
return @build_system[bs.name] = bs
|
152
188
|
end
|
153
189
|
|
190
|
+
def save
|
191
|
+
logger.debug "Saving features to database."
|
192
|
+
@features.each do |name, f|
|
193
|
+
logger.debug2( " Feature %s" % [ f.name ] ) if f.changed?
|
194
|
+
f.save! if f.changed?
|
195
|
+
end
|
196
|
+
logger.debug "Saving modules to database."
|
197
|
+
@modules.each do |m|
|
198
|
+
logger.debug2( " Module %s" % [ m.name ] ) if m.changed?
|
199
|
+
m.save! if m.changed?
|
200
|
+
end
|
201
|
+
logger.debug "Saving settings to database."
|
202
|
+
@settings.each do |n, s|
|
203
|
+
logger.debug2( " Setting %s: %s" % [ s.name, s.value ] ) if s.changed?
|
204
|
+
s.save! if s.changed?
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def load
|
209
|
+
logger.debug "Loading features from database."
|
210
|
+
BuildTool::Feature.all.each do |f|
|
211
|
+
logger.debug2 " - Feature %s" % [ f.name ]
|
212
|
+
add_feature( f )
|
213
|
+
end
|
214
|
+
logger.debug "Loading modules from database."
|
215
|
+
BuildTool::Module.all.each do |m|
|
216
|
+
logger.debug2 " - Module %s" % [ m.name ]
|
217
|
+
add_module( m )
|
218
|
+
end
|
219
|
+
logger.debug "Loading settings from database."
|
220
|
+
BuildTool::Setting.all.each do |s|
|
221
|
+
logger.debug2 " - Setting %s: %s" % [ s.name, s.value ]
|
222
|
+
add_setting( s )
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def truncate
|
227
|
+
logger.debug "Deleting all features from database."
|
228
|
+
BuildTool::Feature.delete_all()
|
229
|
+
@features = {}
|
230
|
+
logger.debug "Deleting all modules from database."
|
231
|
+
BuildTool::Module.delete_all()
|
232
|
+
@module = {}
|
233
|
+
@modules = []
|
234
|
+
logger.debug "Deleting all settings from database."
|
235
|
+
BuildTool::Setting.delete_all()
|
236
|
+
@settings = {}
|
237
|
+
end
|
238
|
+
|
154
239
|
end # Configuration
|
155
240
|
|
156
241
|
end # module BuildTool
|
data/lib/build-tool/errors.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
1
3
|
module BuildTool
|
2
4
|
|
3
5
|
# Base class for all BuildTool Errors
|
@@ -6,4 +8,7 @@ class Error < StandardError; end
|
|
6
8
|
# A configuration error happened.
|
7
9
|
class ConfigurationError < Error; end
|
8
10
|
|
11
|
+
# A parser error happend
|
12
|
+
class ParseError < Error; end
|
13
|
+
|
9
14
|
end
|
data/lib/build-tool/history.rb
CHANGED
@@ -1,183 +1,5 @@
|
|
1
|
-
|
2
|
-
require 'ansi'
|
3
|
-
|
4
|
-
module BuildTool
|
5
|
-
|
6
|
-
#
|
7
|
-
# Provide method to add and retrieve entries from the history
|
8
|
-
#
|
9
|
-
module History
|
10
|
-
|
11
|
-
module StateHelper
|
12
|
-
|
13
|
-
# ATTENTION
|
14
|
-
#
|
15
|
-
# Ansi::Code and Sequel don't like each other. Do not include Ansi::Code here.
|
16
|
-
|
17
|
-
# Needed for both Module and Command History
|
18
|
-
STARTED = 0
|
19
|
-
CANCELED_BY_USER = 1
|
20
|
-
FINISHED_SUCCESSFUL = 2
|
21
|
-
FINISHED_WITH_ERRORS = 3
|
22
|
-
|
23
|
-
def state_str
|
24
|
-
case self.state
|
25
|
-
when STARTED
|
26
|
-
"STARTED"
|
27
|
-
when CANCELED_BY_USER
|
28
|
-
ANSI::Code.red { "CANCELED" }
|
29
|
-
when FINISHED_SUCCESSFUL
|
30
|
-
ANSI::Code.green { "SUCCESS" }
|
31
|
-
when FINISHED_WITH_ERRORS
|
32
|
-
ANSI::Code.red { "ERRORS" }
|
33
|
-
else
|
34
|
-
"#{self.state.to_s}?"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
module ClassMethods
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.included( klass )
|
42
|
-
klass.extend ClassMethods
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
# Represents a log entry for a command.
|
48
|
-
class CommandLog < Sequel::Model( :command_logs )
|
49
|
-
|
50
|
-
include StateHelper
|
51
|
-
|
52
|
-
# A command can have many module events
|
53
|
-
one_to_many :module_logs, :order => :id
|
54
|
-
|
55
|
-
def duration
|
56
|
-
if self.finished_at
|
57
|
-
dur = self.finished_at - self.started_at
|
58
|
-
"%02d:%02d" % [ dur.to_i / 60, (dur% 60 ).to_i ]
|
59
|
-
else
|
60
|
-
"-----"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# Call this if the command is finished. [:finished] will be set to Time.now,
|
65
|
-
# [:state] to the given value and the object is saved.
|
66
|
-
def finished( state )
|
67
|
-
self.finished_at = Time.now
|
68
|
-
self.state = state
|
69
|
-
save
|
70
|
-
end
|
71
|
-
|
72
|
-
# Call this if the command is started. [:started] will be set to Time.now, [:state]
|
73
|
-
# to STARTED and the object is saved.
|
74
|
-
def started
|
75
|
-
self.started_at = Time.now
|
76
|
-
save
|
77
|
-
end
|
78
|
-
|
79
|
-
# Sequel Hook
|
80
|
-
#
|
81
|
-
# Make sure a finished command has one of the accepted finished states.
|
82
|
-
def before_update
|
83
|
-
super
|
84
|
-
if !self.finished_at.nil?
|
85
|
-
raise StandardError, "Wrong state for finished Command" if ! [ FINISHED_SUCCESSFUL, FINISHED_WITH_ERRORS, CANCELED_BY_USER ].include? self.state
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def before_destroy
|
90
|
-
self.module_logs_dataset.delete
|
91
|
-
super
|
92
|
-
end
|
93
|
-
|
94
|
-
# Class Methods
|
95
|
-
class << self
|
96
|
-
|
97
|
-
# Loads the most recents entry from the database
|
98
|
-
def most_recent( offset = nil )
|
99
|
-
if offset.nil?
|
100
|
-
return where( "id = (SELECT MAX(id) FROM #{table_name})" ).first
|
101
|
-
else
|
102
|
-
return order( :id.desc ).limit( 1, offset ).first
|
103
|
-
end
|
104
|
-
end # def most_recent
|
105
|
-
|
106
|
-
# Get the last :count issued commands
|
107
|
-
#
|
108
|
-
# @param [Integer] count Number of commands to return
|
109
|
-
# @return [Array] List containing the last count issued commands
|
110
|
-
def last( count = 50 )
|
111
|
-
order(:id.desc).limit(count).all
|
112
|
-
end
|
113
|
-
|
114
|
-
# Get the last :count command entries containing module :modname.
|
115
|
-
def last_by_module( modname, count = 3 )
|
116
|
-
where( 'id in ( select distinct command_log_id from module_logs where module = ? )', modname ).order( :id.desc ).first( count );
|
117
|
-
end
|
118
|
-
|
119
|
-
# Get all commands older than :days
|
120
|
-
def older_than
|
121
|
-
where( 'finished_at < ?', Date.today - 10 )
|
122
|
-
end
|
123
|
-
|
124
|
-
|
125
|
-
end # ClassMethods
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
# Represents a module event.
|
130
|
-
#
|
131
|
-
# A module event is updating, compiling etc. a module.
|
132
|
-
class ModuleLog < Sequel::Model( :module_logs )
|
133
|
-
|
134
|
-
include StateHelper
|
135
|
-
|
136
|
-
# A module event belongs to a command
|
137
|
-
many_to_one :command_log
|
138
|
-
|
139
|
-
def duration
|
140
|
-
if self.finished_at
|
141
|
-
dur = self.finished_at - self.started_at
|
142
|
-
"%02d:%02d" % [ dur.to_i / 60, (dur% 60 ).to_i ]
|
143
|
-
else
|
144
|
-
"-----"
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
# Call this if the command is finished. [:finished] will be set to Time.now,
|
149
|
-
# [:state] to the given value and the object is saved.
|
150
|
-
def finished( state )
|
151
|
-
self.finished_at = Time.now
|
152
|
-
self.state = state
|
153
|
-
save
|
154
|
-
end
|
155
|
-
|
156
|
-
# Call this when the command is started. [:started] will be set to Time.now and
|
157
|
-
# the object is saved.
|
158
|
-
def started
|
159
|
-
self.started_at = Time.now
|
160
|
-
save
|
161
|
-
end
|
162
|
-
|
163
|
-
# Sequel Hook
|
164
|
-
#
|
165
|
-
# Make sure a finished command has one of the accepted finished states.
|
166
|
-
def before_update
|
167
|
-
super
|
168
|
-
if !self.finished_at.nil?
|
169
|
-
raise StandardError, "Wrong state for finished Command" if ! [ FINISHED_SUCCESSFUL, FINISHED_WITH_ERRORS, CANCELED_BY_USER ].include? self.state
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
class << self
|
174
|
-
|
175
|
-
end # class self
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
|
-
end # module BuildTool::History
|
180
|
-
|
181
|
-
end # module BuildTool
|
1
|
+
# -*- coding: UTF-8 -*-
|
182
2
|
|
3
|
+
require 'build-tool/model/command_log'
|
4
|
+
require 'build-tool/model/module_log'
|
183
5
|
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
require 'build-tool/state_helper'
|
4
|
+
require 'build-tool/model/module_log'
|
5
|
+
|
6
|
+
require 'active_record'
|
7
|
+
|
8
|
+
module BuildTool module History
|
9
|
+
|
10
|
+
# Represents a log entry for a command.
|
11
|
+
class CommandLog < ActiveRecord::Base
|
12
|
+
|
13
|
+
include StateHelper
|
14
|
+
|
15
|
+
# A command can have many module events
|
16
|
+
has_many :module_logs, :order => :id, :dependent => :destroy
|
17
|
+
|
18
|
+
def duration
|
19
|
+
if self.finished_at
|
20
|
+
dur = self.finished_at - self.started_at
|
21
|
+
"%02d:%02d" % [ dur.to_i / 60, (dur% 60 ).to_i ]
|
22
|
+
else
|
23
|
+
"-----"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Call this if the command is finished. [:finished] will be set to Time.now,
|
28
|
+
# [:state] to the given value and the object is saved.
|
29
|
+
def finished( state )
|
30
|
+
self.finished_at = Time.now
|
31
|
+
self.state = state
|
32
|
+
save!
|
33
|
+
end
|
34
|
+
|
35
|
+
# Call this if the command is started. [:started] will be set to Time.now, [:state]
|
36
|
+
# to STARTED and the object is saved.
|
37
|
+
def started
|
38
|
+
self.started_at = Time.now
|
39
|
+
save!
|
40
|
+
end
|
41
|
+
|
42
|
+
# Sequel Hook
|
43
|
+
#
|
44
|
+
# Make sure a finished command has one of the accepted finished states.
|
45
|
+
def before_update
|
46
|
+
super
|
47
|
+
if !self.finished_at.nil?
|
48
|
+
raise StandardError, "Wrong state for finished Command" if ! [ FINISHED_SUCCESSFUL, FINISHED_WITH_ERRORS, CANCELED_BY_USER ].include? self.state
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# def before_destroy
|
53
|
+
# self.module_logs_dataset.delete
|
54
|
+
# super
|
55
|
+
# end
|
56
|
+
|
57
|
+
# Class Methods
|
58
|
+
class << self
|
59
|
+
|
60
|
+
# Loads the most recents entry from the database
|
61
|
+
def most_recent( offset = nil )
|
62
|
+
if offset.nil?
|
63
|
+
return where( "id = (SELECT MAX(id) FROM #{table_name})" ).first
|
64
|
+
else
|
65
|
+
return order( 'id DESC' ).limit( 1 ).offset( offset ).first
|
66
|
+
end
|
67
|
+
end # def most_recent
|
68
|
+
|
69
|
+
# Get the last :count issued commands
|
70
|
+
#
|
71
|
+
# @param [Integer] count Number of commands to return
|
72
|
+
# @return [Array] List containing the last count issued commands
|
73
|
+
def last( count = 50 )
|
74
|
+
order( 'id DESC' ).limit(count).all
|
75
|
+
end
|
76
|
+
|
77
|
+
# Get the last :count command entries containing module :modname.
|
78
|
+
def last_by_module( modname, count = 3 )
|
79
|
+
where( 'id in ( select distinct command_log_id from module_logs where module = ? )', modname ).order( 'id DESC' ).first( count );
|
80
|
+
end
|
81
|
+
|
82
|
+
# Get all commands older than :days
|
83
|
+
def older_than
|
84
|
+
where( 'finished_at < ?', Date.today - 10 )
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
end # ClassMethods
|
89
|
+
|
90
|
+
end end # class CommandLog
|
91
|
+
|
92
|
+
end
|
93
|
+
|