build-tool 0.6.3 → 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +9 -5
- data/History.rdoc +13 -0
- data/build-tool.gemspec +1 -0
- data/lib/build-tool/commands/modules/shell.rb +1 -1
- data/lib/build-tool/commands/recipes/edit.rb +5 -4
- data/lib/build-tool/commands/recipes/install.rb +4 -5
- data/lib/build-tool/configuration.rb +27 -3
- data/lib/build-tool/model/setting.rb +3 -1
- data/lib/build-tool/version.rb +1 -1
- data/lib/mj/path.rb +41 -0
- data/lib/mj/tools/editor.rb +37 -6
- metadata +31 -14
data/Gemfile.lock
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
build-tool (0.6.
|
4
|
+
build-tool (0.6.4)
|
5
5
|
activerecord (>= 3.2.1)
|
6
6
|
ansi (>= 1.4.2)
|
7
7
|
grit (>= 2.4.1)
|
8
|
+
inifile (>= 1.1.0)
|
8
9
|
logging (>= 1.6.0)
|
9
10
|
sqlite3 (>= 1.3.5)
|
10
11
|
|
@@ -26,22 +27,25 @@ GEM
|
|
26
27
|
arel (3.0.2)
|
27
28
|
builder (3.0.0)
|
28
29
|
diff-lcs (1.1.3)
|
29
|
-
grit (2.
|
30
|
+
grit (2.5.0)
|
30
31
|
diff-lcs (~> 1.1)
|
31
32
|
mime-types (~> 1.15)
|
33
|
+
posix-spawn (~> 0.3.6)
|
32
34
|
i18n (0.6.0)
|
35
|
+
inifile (1.1.0)
|
33
36
|
little-plugger (1.1.3)
|
34
37
|
logging (1.7.2)
|
35
38
|
little-plugger (>= 1.1.3)
|
36
39
|
mime-types (1.18)
|
37
|
-
multi_json (1.
|
40
|
+
multi_json (1.3.6)
|
41
|
+
posix-spawn (0.3.6)
|
38
42
|
racc (1.4.7)
|
39
43
|
rake (0.9.2.2)
|
40
44
|
rexical (1.0.5)
|
41
|
-
sqlite3 (1.3.
|
45
|
+
sqlite3 (1.3.6)
|
42
46
|
turn (0.9.3)
|
43
47
|
ansi
|
44
|
-
tzinfo (0.3.
|
48
|
+
tzinfo (0.3.33)
|
45
49
|
yard (0.7.5)
|
46
50
|
|
47
51
|
PLATFORMS
|
data/History.rdoc
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
== Version 0.6.4
|
2
|
+
=== Enhancements
|
3
|
+
- Check for xdg-open before using it and give error message if missing.
|
4
|
+
- Give error message if opening the editor fails.
|
5
|
+
- Changed file format for <tt>configuration edit</tt> from yaml to ini file. Easier to read for
|
6
|
+
humans.
|
7
|
+
|
8
|
+
=== Bugfixes
|
9
|
+
- Fix <tt>recipe install</tt> creating an invalid link on <tt>ruby19</tt> systems.
|
10
|
+
- Set build directory as working directory for <tt>module shell</tt> as advertised.
|
11
|
+
- Fix editor beeing hardcoded to <tt>gvim -f</tt>. Tries VISUAL, GUIEDITOR (both when DISPLAY set)
|
12
|
+
and EDITOR now.
|
13
|
+
|
1
14
|
== Version 0.6.3
|
2
15
|
=== Enhancements
|
3
16
|
- <tt>module shell<</tt>: Add <tt>--batch</tt> option.
|
data/build-tool.gemspec
CHANGED
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
|
|
33
33
|
s.add_dependency( 'sqlite3', '>= 1.3.5' ) # SQLite Database Support
|
34
34
|
s.add_dependency( 'ansi', '>= 1.4.2' ) # ANSI Codes at your Fingertips
|
35
35
|
s.add_dependency( 'grit', '>= 2.4.1' ) # Git Support
|
36
|
+
s.add_dependency( 'inifile', '>= 1.1.0' ) # INI File
|
36
37
|
|
37
38
|
# Development Dependencies
|
38
39
|
s.add_development_dependency( 'racc', '>= 1.4.7' ) # A LALR(1) parser generator.
|
@@ -73,7 +73,7 @@ def do_execute( args )
|
|
73
73
|
|
74
74
|
def do_execute_module( mod )
|
75
75
|
verbose "> #{@command}"
|
76
|
-
rc = mod.shell( @command, { detach: @detach } )
|
76
|
+
rc = mod.shell( @command, { detach: @detach, wd: mod.build_directory } )
|
77
77
|
verbose "> #{rc}" if not @detach
|
78
78
|
verbose "> send to background" if @detach
|
79
79
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'build-tool/commands'
|
4
4
|
require 'build-tool/recipe'
|
5
|
+
require 'mj/path'
|
5
6
|
|
6
7
|
require 'fileutils'
|
7
8
|
|
@@ -47,15 +48,15 @@ def do_execute( args )
|
|
47
48
|
|
48
49
|
if @global
|
49
50
|
if @browser
|
50
|
-
|
51
|
+
MJ::Path::open( rec.global_path )
|
51
52
|
else
|
52
|
-
|
53
|
+
MJ::Path::open( rec.global_config_file_path( 'recipe' ) )
|
53
54
|
end
|
54
55
|
else
|
55
56
|
if @browser
|
56
|
-
|
57
|
+
MJ::Path::open( rec.local_path() )
|
57
58
|
else
|
58
|
-
|
59
|
+
MJ::Path::open( rec.local_config_file_path( 'recipe' ) )
|
59
60
|
end
|
60
61
|
end
|
61
62
|
return 0
|
@@ -43,10 +43,9 @@ def do_execute(args)
|
|
43
43
|
exename = "#{commandname}-build"
|
44
44
|
conffile = Application::instance.local_configuration_dir.join("#{commandname}.yaml")
|
45
45
|
|
46
|
-
# Our executable
|
47
|
-
|
48
|
-
|
49
|
-
Pathname.new( $0 ).basename ).to_s
|
46
|
+
# Our executable. We use $0 directly here to pick up any rubygem wrapper that could
|
47
|
+
# exists. But we use realpath to skip any unnecessary link
|
48
|
+
buildtool = Pathname.new( $0 ).realpath()
|
50
49
|
|
51
50
|
# Load the recipe
|
52
51
|
recipe = Recipe.find_recipe(recipename)
|
@@ -98,7 +97,7 @@ def do_execute(args)
|
|
98
97
|
error( "a symbolic link in a directory that is part of $PATH yourself." )
|
99
98
|
error( "> ln -s #{buildtool} #{exename}" )
|
100
99
|
else
|
101
|
-
File.symlink(buildtool,
|
100
|
+
File.symlink( buildtool, link )
|
102
101
|
end
|
103
102
|
end
|
104
103
|
|
@@ -21,6 +21,9 @@
|
|
21
21
|
require 'build-tool/build-system/kdel10n'
|
22
22
|
require 'build-tool/build-system/qmake'
|
23
23
|
|
24
|
+
require 'stringio'
|
25
|
+
require 'inifile'
|
26
|
+
|
24
27
|
|
25
28
|
module BuildTool
|
26
29
|
|
@@ -32,15 +35,36 @@ def self.edit( only = [] )
|
|
32
35
|
BuildTool::Application.instance.configuration.settings,
|
33
36
|
only )
|
34
37
|
|
35
|
-
|
38
|
+
text = StringIO.new
|
39
|
+
settings.each do |s|
|
40
|
+
text << '# ' << s[:description].gsub( /\n(?!\z)/, "\n# " )
|
41
|
+
text << s[:name] << ' = ' << s[:value]
|
42
|
+
text << "\n"
|
43
|
+
text << "\n"
|
44
|
+
end
|
45
|
+
|
46
|
+
editor = MJ::Tools::TmpFileEditor.new( text.string )
|
36
47
|
|
48
|
+
# Give the user the possibility to edit the file
|
37
49
|
editor.edit()
|
38
50
|
if not Pathname.new( editor.path() ).exist?
|
39
|
-
info( "File deleted!" )
|
51
|
+
logger.info( "File deleted!" )
|
40
52
|
return 0
|
41
53
|
end
|
42
|
-
values = YAML::load( File.open( editor.path(), 'r:UTF-8' ) )
|
43
54
|
|
55
|
+
# Reparse it
|
56
|
+
values = Array.new
|
57
|
+
file = IniFile.new( editor.path() )
|
58
|
+
file.each do | section, param, value |
|
59
|
+
if section != 'global'
|
60
|
+
logger.error( 'section is not global?' )
|
61
|
+
end
|
62
|
+
values << {
|
63
|
+
name: param,
|
64
|
+
value: value }
|
65
|
+
end
|
66
|
+
|
67
|
+
# Write it back
|
44
68
|
BuildTool::Setting::import(
|
45
69
|
BuildTool::Application.instance.configuration.settings,
|
46
70
|
values )
|
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'active_record'
|
4
4
|
|
5
|
+
# This class uses the active_record logger !!!!!!!!!!!!!!!!
|
6
|
+
|
5
7
|
module BuildTool
|
6
8
|
|
7
9
|
class Setting < ActiveRecord::Base
|
@@ -64,7 +66,7 @@ def import( settings, new )
|
|
64
66
|
s = settings[v[:name]]
|
65
67
|
if s.value != v[:value]
|
66
68
|
s.value = v[:value]
|
67
|
-
logger.info( 'Setting %s to "%s"' % [ s.name, s.value ] )
|
69
|
+
Logging.logger.root.info( 'Setting %s to "%s"' % [ s.name, s.value ] )
|
68
70
|
s.save!
|
69
71
|
end
|
70
72
|
end
|
data/lib/build-tool/version.rb
CHANGED
data/lib/mj/path.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
module MJ;
|
4
|
+
|
5
|
+
#
|
6
|
+
# Utility functions to work with PATH
|
7
|
+
#
|
8
|
+
module Path;
|
9
|
+
|
10
|
+
#
|
11
|
+
# Open the given +path+ in a file browser with +xdg-open+.
|
12
|
+
#
|
13
|
+
# Will print an error if xdg-open is not found.
|
14
|
+
#
|
15
|
+
# @param [#to_s] Pathname to open.
|
16
|
+
def Path.open( path )
|
17
|
+
if Path.which( 'xdg-open' ).nil?
|
18
|
+
logger.error( 'xdg-open is not available.' )
|
19
|
+
end
|
20
|
+
if system( 'xdg-open %s' % [ path ] ).nil?
|
21
|
+
logger.error( 'xdg-open failed to start' )
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
#
|
27
|
+
# Find +cmd+ in environment variable +$PATH+
|
28
|
+
#
|
29
|
+
def Path.which( cmd )
|
30
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
31
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
32
|
+
exts.each { |ext|
|
33
|
+
exe = "#{path}/#{cmd}#{ext}"
|
34
|
+
return exe if File.executable? exe
|
35
|
+
}
|
36
|
+
end
|
37
|
+
return nil
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end; end # module MJ::Path
|
data/lib/mj/tools/editor.rb
CHANGED
@@ -1,9 +1,34 @@
|
|
1
1
|
# -*- coding: UTF-8 -*-
|
2
2
|
|
3
|
+
require 'mj/path'
|
3
4
|
require 'tempfile'
|
4
5
|
|
5
6
|
module MJ; module Tools
|
6
7
|
|
8
|
+
@@editor = nil
|
9
|
+
|
10
|
+
# Look for a suitable editor in the users environment.
|
11
|
+
#
|
12
|
+
# We check
|
13
|
+
# 1. +$VISUAL+ (if +$DISPLAY+ is set)
|
14
|
+
# 2. +$GUIEDITOR+ (if +$DISPLAY+ is set)
|
15
|
+
# 3. +$EDITOR+
|
16
|
+
# 4. Giving up
|
17
|
+
# The result is cached.
|
18
|
+
def Tools.editor()
|
19
|
+
return @@editor if @@editor
|
20
|
+
logger.debug( 'Looking for a editor.' )
|
21
|
+
|
22
|
+
if ENV.include?( 'DISPLAY' )
|
23
|
+
logger.debug( 'Checking $VISUAL' )
|
24
|
+
return @@editor = ENV['VISUAL'] if ENV.include?( 'VISUAL' )
|
25
|
+
logger.debug( 'Checking $GUIEDITOR' )
|
26
|
+
return @@editor = ENV['GUIEDITOR'] if ENV.include?( 'GUIEDITOR' )
|
27
|
+
end
|
28
|
+
logger.debug( 'Checking $EDITOR' )
|
29
|
+
return @@editor = ENV['EDITOR'] if ENV.include?( 'EDITOR' )
|
30
|
+
end
|
31
|
+
|
7
32
|
# A class that puts the given content in a tmpfile, opens an editor for the user to play with
|
8
33
|
# it. After the user closed the editor it will give back the new content.
|
9
34
|
class TmpFileEditor
|
@@ -15,13 +40,19 @@ def initialize( content )
|
|
15
40
|
@file.close()
|
16
41
|
end
|
17
42
|
|
18
|
-
def editor()
|
19
|
-
"gvim -f"
|
20
|
-
end
|
21
|
-
|
22
43
|
def edit()
|
23
|
-
|
24
|
-
|
44
|
+
# Check if there is a editor around here.
|
45
|
+
editor = Tools::editor()
|
46
|
+
if editor.nil?
|
47
|
+
logger.error( 'Could not find a editor to use (xdg-open, $VISUAL, $GUIEDITOR, $EDITOR).' )
|
48
|
+
end
|
49
|
+
# Execute the editor
|
50
|
+
cmd = "#{editor} #{@file.path}"
|
51
|
+
logger.trace( "> #{cmd}" )
|
52
|
+
if system( cmd ).nil?
|
53
|
+
logger.error( "Failed to start editor #{editor}" )
|
54
|
+
end
|
55
|
+
return 0
|
25
56
|
end
|
26
57
|
|
27
58
|
def path()
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: build-tool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 4
|
10
|
+
version: 0.6.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Jansen
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-05-
|
18
|
+
date: 2012-05-31 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -99,9 +99,25 @@ dependencies:
|
|
99
99
|
type: :runtime
|
100
100
|
version_requirements: *id005
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
|
-
name:
|
102
|
+
name: inifile
|
103
103
|
prerelease: false
|
104
104
|
requirement: &id006 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
hash: 19
|
110
|
+
segments:
|
111
|
+
- 1
|
112
|
+
- 1
|
113
|
+
- 0
|
114
|
+
version: 1.1.0
|
115
|
+
type: :runtime
|
116
|
+
version_requirements: *id006
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: racc
|
119
|
+
prerelease: false
|
120
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
105
121
|
none: false
|
106
122
|
requirements:
|
107
123
|
- - ">="
|
@@ -113,11 +129,11 @@ dependencies:
|
|
113
129
|
- 7
|
114
130
|
version: 1.4.7
|
115
131
|
type: :development
|
116
|
-
version_requirements: *
|
132
|
+
version_requirements: *id007
|
117
133
|
- !ruby/object:Gem::Dependency
|
118
134
|
name: rexical
|
119
135
|
prerelease: false
|
120
|
-
requirement: &
|
136
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
121
137
|
none: false
|
122
138
|
requirements:
|
123
139
|
- - ">="
|
@@ -129,11 +145,11 @@ dependencies:
|
|
129
145
|
- 5
|
130
146
|
version: 1.0.5
|
131
147
|
type: :development
|
132
|
-
version_requirements: *
|
148
|
+
version_requirements: *id008
|
133
149
|
- !ruby/object:Gem::Dependency
|
134
150
|
name: rake
|
135
151
|
prerelease: false
|
136
|
-
requirement: &
|
152
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
137
153
|
none: false
|
138
154
|
requirements:
|
139
155
|
- - ">="
|
@@ -145,11 +161,11 @@ dependencies:
|
|
145
161
|
- 2
|
146
162
|
version: 0.9.2
|
147
163
|
type: :development
|
148
|
-
version_requirements: *
|
164
|
+
version_requirements: *id009
|
149
165
|
- !ruby/object:Gem::Dependency
|
150
166
|
name: yard
|
151
167
|
prerelease: false
|
152
|
-
requirement: &
|
168
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
153
169
|
none: false
|
154
170
|
requirements:
|
155
171
|
- - ">="
|
@@ -161,11 +177,11 @@ dependencies:
|
|
161
177
|
- 5
|
162
178
|
version: 0.7.5
|
163
179
|
type: :development
|
164
|
-
version_requirements: *
|
180
|
+
version_requirements: *id010
|
165
181
|
- !ruby/object:Gem::Dependency
|
166
182
|
name: turn
|
167
183
|
prerelease: false
|
168
|
-
requirement: &
|
184
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
169
185
|
none: false
|
170
186
|
requirements:
|
171
187
|
- - ">="
|
@@ -176,7 +192,7 @@ dependencies:
|
|
176
192
|
- 9
|
177
193
|
version: "0.9"
|
178
194
|
type: :development
|
179
|
-
version_requirements: *
|
195
|
+
version_requirements: *id011
|
180
196
|
description: "\n The tool helps \n\n ...\n "
|
181
197
|
email:
|
182
198
|
- info@michael-jansen.biz
|
@@ -282,6 +298,7 @@ files:
|
|
282
298
|
- lib/mj/error.rb
|
283
299
|
- lib/mj/logging.rb
|
284
300
|
- lib/mj/mixins/inherited_attributes.rb
|
301
|
+
- lib/mj/path.rb
|
285
302
|
- lib/mj/tools/editor.rb
|
286
303
|
- lib/mj/tools/ssh.rb
|
287
304
|
- lib/mj/tools/subprocess.rb
|