build-tool 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.txt +14 -0
- data/Manifest.txt +5 -36
- data/lib/build-tool.rb +1 -1
- data/lib/build-tool/build-system/autoconf.rb +26 -11
- data/lib/build-tool/build-system/base.rb +7 -0
- data/lib/build-tool/build-system/custom.rb +0 -4
- data/lib/build-tool/build-system/qt.rb +6 -0
- data/lib/build-tool/cfg/lexer.rb +49 -0
- data/lib/build-tool/cfg/lexer.rex +19 -0
- data/lib/build-tool/cfg/node.rb +4 -0
- data/lib/build-tool/cfg/parser.rb +495 -401
- data/lib/build-tool/cfg/parser.y +34 -2
- data/lib/build-tool/cfg/visitor.rb +46 -6
- data/lib/build-tool/commands.rb +7 -4
- data/lib/build-tool/commands/build.rb +3 -0
- data/lib/build-tool/commands/configure.rb +5 -0
- data/lib/build-tool/commands/ctags.rb +6 -0
- data/lib/build-tool/commands/environments/list.rb +5 -0
- data/lib/build-tool/commands/environments/set.rb +6 -0
- data/lib/build-tool/commands/fetch.rb +8 -0
- data/lib/build-tool/commands/files.rb +7 -0
- data/lib/build-tool/commands/gc.rb +4 -0
- data/lib/build-tool/commands/history.rb +7 -0
- data/lib/build-tool/commands/info.rb +2 -0
- data/lib/build-tool/commands/install.rb +3 -1
- data/lib/build-tool/commands/lsfeatures.rb +3 -0
- data/lib/build-tool/commands/modules/info.rb +15 -0
- data/lib/build-tool/commands/modules/list.rb +8 -3
- data/lib/build-tool/commands/modules/shell.rb +1 -1
- data/lib/build-tool/commands/rebase.rb +6 -0
- data/lib/build-tool/commands/recipes.rb +0 -4
- data/lib/build-tool/commands/recipes/add.rb +45 -0
- data/lib/build-tool/commands/recipes/incoming.rb +66 -0
- data/lib/build-tool/commands/recipes/info.rb +4 -0
- data/lib/build-tool/commands/recipes/install.rb +11 -1
- data/lib/build-tool/commands/recipes/list.rb +2 -0
- data/lib/build-tool/configuration.rb +3 -0
- data/lib/build-tool/module.rb +27 -3
- data/lib/build-tool/vcs/archive.rb +58 -30
- data/lib/build-tool/vcs/base.rb +14 -0
- data/lib/build-tool/vcs/mercurial.rb +113 -0
- data/lib/build-tool/vcs/svn.rb +20 -2
- data/lib/mj/error.rb +7 -0
- data/lib/mj/vcs/git.rb +133 -0
- metadata +9 -40
- metadata.gz.sig +2 -3
- data/recipes/kde/custom/qt/qtscriptgenerator/compile.sh +0 -77
- data/recipes/kde/custom/qt/qtscriptgenerator/configure.sh +0 -70
- data/recipes/kde/custom/qt/qtscriptgenerator/install.sh +0 -39
- data/recipes/kde/custom/scripting/pyqt4/compile.sh +0 -10
- data/recipes/kde/custom/scripting/pyqt4/configure.sh +0 -14
- data/recipes/kde/custom/scripting/pyqt4/install.sh +0 -10
- data/recipes/kde/custom/scripting/sip/compile.sh +0 -10
- data/recipes/kde/custom/scripting/sip/configure.sh +0 -13
- data/recipes/kde/custom/scripting/sip/install.sh +0 -10
- data/recipes/kde/files/finish_installation.sh +0 -16
- data/recipes/kde/files/kde4.desktop +0 -22
- data/recipes/kde/files/xsession +0 -93
- data/recipes/kde/info.yaml +0 -10
- data/recipes/kde/kde-bindings.recipe +0 -22
- data/recipes/kde/kde-core.recipe +0 -104
- data/recipes/kde/kde-devel.recipe +0 -38
- data/recipes/kde/kde-finance.recipe +0 -17
- data/recipes/kde/kde-graphics.recipe +0 -27
- data/recipes/kde/kde-kdevelop.recipe +0 -116
- data/recipes/kde/kde-l10n.recipe +0 -14
- data/recipes/kde/kde-multimedia.recipe +0 -31
- data/recipes/kde/kde-network.recipe +0 -55
- data/recipes/kde/kde-office.recipe +0 -28
- data/recipes/kde/kde-plasma.recipe +0 -117
- data/recipes/kde/kde-qt.recipe +0 -122
- data/recipes/kde/kde-scripting.recipe +0 -63
- data/recipes/kde/kde-support.recipe +0 -73
- data/recipes/kde/kde-utils.recipe +0 -22
- data/recipes/kde/kde-webdev.recipe +0 -41
- data/recipes/kde/recipe +0 -155
- data/recipes/kde/recipe-local +0 -146
- data/recipes/kde/settings.yaml +0 -69
- data/recipes/kde43/info.yaml +0 -10
- data/recipes/kde43/recipe +0 -256
- data/recipes/kde43/recipe-local +0 -146
- data/recipes/kde43/settings.yaml +0 -32
@@ -9,12 +9,18 @@ module BuildTool; module Commands; module Modules
|
|
9
9
|
|
10
10
|
name "list"
|
11
11
|
description "list modules"
|
12
|
+
long_description [ "Shows a list of modules. Without a parameter all modules are show. With",
|
13
|
+
"parameters list all modules matching them." ]
|
12
14
|
cmdalias "lsmods"
|
13
15
|
|
14
16
|
def initialize_options
|
17
|
+
@options.banner = "Usage: #{Pathname.new($0).basename} #{self.fullname} [MODULE|GROUP]..."
|
18
|
+
|
15
19
|
@template = false
|
16
20
|
@all = false
|
17
21
|
|
22
|
+
@options.separator "Options:"
|
23
|
+
|
18
24
|
options.on( "--all", "Include inactive modules." ) {
|
19
25
|
@all = true
|
20
26
|
}
|
@@ -24,7 +30,6 @@ module BuildTool; module Commands; module Modules
|
|
24
30
|
}
|
25
31
|
|
26
32
|
super
|
27
|
-
|
28
33
|
end
|
29
34
|
|
30
35
|
def do_execute( args )
|
@@ -32,7 +37,7 @@ module BuildTool; module Commands; module Modules
|
|
32
37
|
if args.length == 0
|
33
38
|
configuration.modules.each do |mod|
|
34
39
|
if @template or not mod.is_template?
|
35
|
-
say "%-30s : %s" % [ mod.name, mod.description ] if ( mod.active? || @all )
|
40
|
+
say "%-30s : %s" % [ mod.name, mod.description || "No description specified" ] if ( mod.active? || @all )
|
36
41
|
end
|
37
42
|
end
|
38
43
|
else
|
@@ -40,7 +45,7 @@ module BuildTool; module Commands; module Modules
|
|
40
45
|
mods = complete_modules( arg, @template )
|
41
46
|
next if !mods
|
42
47
|
mods.each do |mod|
|
43
|
-
say "%-30s : %s" % [ mod.name, mod.description ] if ( mod.active? || @all )
|
48
|
+
say "%-30s : %s" % [ mod.name, mod.description || "No description specified" ] if ( mod.active? || @all )
|
44
49
|
end
|
45
50
|
end
|
46
51
|
end
|
@@ -10,9 +10,9 @@ module BuildTool; module Commands; module Modules
|
|
10
10
|
include MJ::Tools::SubProcess
|
11
11
|
|
12
12
|
name "shell"
|
13
|
-
description "open a shell having the modules environment."
|
14
13
|
|
15
14
|
def initialize_options
|
15
|
+
@options.banner = "Usage: #{Pathname.new($0).basename} #{self.fullname} MODULE"
|
16
16
|
super
|
17
17
|
end
|
18
18
|
|
@@ -13,6 +13,7 @@ module BuildTool; module Commands;
|
|
13
13
|
|
14
14
|
name "rebase"
|
15
15
|
description "rebase local checkout against previously fetched remote changes."
|
16
|
+
long_description [ "Invokes the rebase phase for the specified modules." ]
|
16
17
|
|
17
18
|
# Log this command if $noop is not active
|
18
19
|
def log?
|
@@ -23,6 +24,11 @@ module BuildTool; module Commands;
|
|
23
24
|
BuildTool::Application.instance.name != "build-tool"
|
24
25
|
end
|
25
26
|
|
27
|
+
def initialize_options
|
28
|
+
@options.banner = "Usage: #{Pathname.new($0).basename} #{self.fullname} MODULES..."
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
26
32
|
def is_module_ready?( mod )
|
27
33
|
isready = true
|
28
34
|
if !mod.checkedout?
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'build-tool/commands'
|
2
|
+
require 'build-tool/recipe'
|
3
|
+
require 'mj/vcs/git'
|
4
|
+
|
5
|
+
module BuildTool; module Commands; module Recipes
|
6
|
+
|
7
|
+
#
|
8
|
+
# BuildCommand
|
9
|
+
#
|
10
|
+
class Add < Standard
|
11
|
+
|
12
|
+
name "add"
|
13
|
+
description "Add a recipe to build-tool."
|
14
|
+
long_description "Add a new recipe to build-tool from URL with NAME."
|
15
|
+
|
16
|
+
def initialize_options
|
17
|
+
@options.banner = "Usage: #{Pathname.new($0).basename} #{self.fullname} URL NAME"
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def do_execute( args )
|
22
|
+
if ( args.length < 2 )
|
23
|
+
return usage( "Not enough arguments" )
|
24
|
+
elsif (args.length > 2 )
|
25
|
+
return usage( "To many arguments" )
|
26
|
+
end
|
27
|
+
|
28
|
+
path = BuildTool::Application::instance.local_configuration_dir.join( "recipes" )
|
29
|
+
if ! path.exist? && ! $noop
|
30
|
+
FileUtils.mkdir_p( path )
|
31
|
+
end
|
32
|
+
|
33
|
+
repo = MJ::VCS::Git::Repository.new(path.join(args[1]), $noop)
|
34
|
+
repo.clone(args[0])
|
35
|
+
return 0
|
36
|
+
end
|
37
|
+
|
38
|
+
end # class
|
39
|
+
|
40
|
+
end; end # module Commands::Recipes
|
41
|
+
|
42
|
+
end; # module BuildTool
|
43
|
+
|
44
|
+
|
45
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'build-tool/commands'
|
2
|
+
require 'build-tool/recipe'
|
3
|
+
require 'mj/vcs/git'
|
4
|
+
|
5
|
+
module BuildTool; module Commands; module Recipes
|
6
|
+
|
7
|
+
#
|
8
|
+
# BuildCommand
|
9
|
+
#
|
10
|
+
class Fetch < Standard
|
11
|
+
|
12
|
+
name "incoming"
|
13
|
+
description "Show the incoming changes to the recipe from the repository."
|
14
|
+
|
15
|
+
def applicable?
|
16
|
+
BuildTool::Application.instance.name != "build-tool"
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize_options
|
20
|
+
@options.banner = "Usage: #{Pathname.new($0).basename} #{self.fullname}"
|
21
|
+
|
22
|
+
@options.separator "Options:"
|
23
|
+
@rebase = false
|
24
|
+
@fetch = false
|
25
|
+
options.on( "-f", "--[no-]fetch", "Fetch from origin." ) { |t|
|
26
|
+
@fetch = t
|
27
|
+
}
|
28
|
+
options.on( "-r", "--[no-]rebase", "Rebase against master." ) { |t|
|
29
|
+
@rebase = t
|
30
|
+
}
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
def do_execute( args )
|
35
|
+
if ( args.length != 0 )
|
36
|
+
return usage("No arguments expected")
|
37
|
+
end
|
38
|
+
|
39
|
+
recipe = BuildTool::Application::instance.recipe
|
40
|
+
repo = MJ::VCS::Git::Repository.new(recipe.global_path, $noop)
|
41
|
+
|
42
|
+
if @fetch
|
43
|
+
say "Fetching"
|
44
|
+
repo.fetch()
|
45
|
+
end
|
46
|
+
|
47
|
+
repo.log("HEAD..origin/master").each do |line|
|
48
|
+
say line
|
49
|
+
end
|
50
|
+
|
51
|
+
if @rebase
|
52
|
+
say "Rebasing"
|
53
|
+
repo.rebase("master")
|
54
|
+
end
|
55
|
+
return 0
|
56
|
+
end
|
57
|
+
|
58
|
+
end # class
|
59
|
+
|
60
|
+
end; end # module Commands::Recipes
|
61
|
+
|
62
|
+
end; # module BuildTool
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'build-tool/commands'
|
2
2
|
require 'build-tool/recipe'
|
3
3
|
|
4
|
+
require 'ftools'
|
5
|
+
|
4
6
|
module BuildTool; module Commands; module Recipes
|
5
7
|
|
6
8
|
#
|
@@ -10,8 +12,10 @@ module BuildTool; module Commands; module Recipes
|
|
10
12
|
|
11
13
|
name "info"
|
12
14
|
description "show information about a module."
|
15
|
+
long_description [ "Show detailed information about RECIPE." ]
|
13
16
|
|
14
17
|
def initialize_options
|
18
|
+
@options.banner = "Usage: #{Pathname.new($0).basename} #{self.fullname} RECIPE"
|
15
19
|
super
|
16
20
|
end
|
17
21
|
|
@@ -11,8 +11,11 @@ module BuildTool; module Commands; module Recipes
|
|
11
11
|
|
12
12
|
name "install"
|
13
13
|
description "install a build recipe"
|
14
|
+
long_description [ "Prepare a recipe for usage. If SCRIPTNAME is provided the recipe is",
|
15
|
+
"installed as SCRIPTNAME-build instead of RECIPE-build" ]
|
14
16
|
|
15
17
|
def initialize_options
|
18
|
+
@options.banner = "Usage: #{Pathname.new($0).basename} #{self.fullname} RECIPE [SCRIPTNAME]"
|
16
19
|
super
|
17
20
|
end
|
18
21
|
|
@@ -114,7 +117,14 @@ EOS
|
|
114
117
|
if conffile.exist?
|
115
118
|
say "The config file already exists. I will not copy the file."
|
116
119
|
else
|
117
|
-
File.
|
120
|
+
from = File.new(recipe.join("settings.yaml"), "r")
|
121
|
+
to = File.new(conffile, "w")
|
122
|
+
to.write("RECIPE: #{recipename}\n\n")
|
123
|
+
from.each_line do |line|
|
124
|
+
to.write line
|
125
|
+
end
|
126
|
+
to.close
|
127
|
+
from.close
|
118
128
|
end
|
119
129
|
|
120
130
|
say <<EOS
|
@@ -10,8 +10,10 @@ module BuildTool; module Commands; module Recipes
|
|
10
10
|
|
11
11
|
name "list"
|
12
12
|
description "list build recipes"
|
13
|
+
long_description [ "Shows the list of recipes." ]
|
13
14
|
|
14
15
|
def initialize_options
|
16
|
+
@options.banner = "Usage: #{Pathname.new($0).basename} #{self.fullname}"
|
15
17
|
super
|
16
18
|
end
|
17
19
|
|
@@ -2,6 +2,7 @@ require 'build-tool/vcs/git'
|
|
2
2
|
require 'build-tool/vcs/git-svn'
|
3
3
|
require 'build-tool/vcs/svn'
|
4
4
|
require 'build-tool/vcs/archive'
|
5
|
+
require 'build-tool/vcs/mercurial'
|
5
6
|
|
6
7
|
require 'build-tool/build-system/cmake'
|
7
8
|
require 'build-tool/build-system/qt'
|
@@ -102,6 +103,8 @@ module BuildTool
|
|
102
103
|
return BuildTool::VCS::SvnConfiguration.new
|
103
104
|
when "archive"
|
104
105
|
return BuildTool::VCS::ArchiveConfiguration.new
|
106
|
+
when "mercurial"
|
107
|
+
return BuildTool::VCS::MercurialConfiguration.new
|
105
108
|
else
|
106
109
|
raise StandardError, "Unknown Version Control System #{name}"
|
107
110
|
end
|
data/lib/build-tool/module.rb
CHANGED
@@ -14,6 +14,7 @@ module BuildTool
|
|
14
14
|
raise StandardError, "Module name is required!"
|
15
15
|
end
|
16
16
|
@active = nil
|
17
|
+
@patches = Array.new
|
17
18
|
@name = name
|
18
19
|
@parent = parent
|
19
20
|
@local_path = nil
|
@@ -26,6 +27,9 @@ module BuildTool
|
|
26
27
|
@is_template = false
|
27
28
|
@vcs_configuration = nil
|
28
29
|
@feature = nil
|
30
|
+
|
31
|
+
@long_description = nil
|
32
|
+
@description = nil
|
29
33
|
end
|
30
34
|
|
31
35
|
#
|
@@ -33,6 +37,7 @@ module BuildTool
|
|
33
37
|
#
|
34
38
|
attr_writer :feature
|
35
39
|
attr_writer :active
|
40
|
+
attr_reader :patches
|
36
41
|
|
37
42
|
def active?
|
38
43
|
# If the module is activated that wins
|
@@ -49,7 +54,7 @@ module BuildTool
|
|
49
54
|
|
50
55
|
# not inherited
|
51
56
|
def build_directory
|
52
|
-
"
|
57
|
+
build_prefix_required.join("bld", local_path)
|
53
58
|
end
|
54
59
|
|
55
60
|
def build_prefix=( path )
|
@@ -110,8 +115,9 @@ module BuildTool
|
|
110
115
|
end
|
111
116
|
end
|
112
117
|
|
118
|
+
attr_writer :description
|
113
119
|
def description
|
114
|
-
@description
|
120
|
+
@description
|
115
121
|
end
|
116
122
|
|
117
123
|
# Environment
|
@@ -175,6 +181,11 @@ module BuildTool
|
|
175
181
|
@local_path || @name
|
176
182
|
end
|
177
183
|
|
184
|
+
attr_writer :long_description
|
185
|
+
def long_description
|
186
|
+
@long_description
|
187
|
+
end
|
188
|
+
|
178
189
|
# The module name
|
179
190
|
attr_reader :name
|
180
191
|
|
@@ -205,7 +216,7 @@ module BuildTool
|
|
205
216
|
end
|
206
217
|
|
207
218
|
def source_directory
|
208
|
-
"
|
219
|
+
build_prefix_required.join("src", local_path)
|
209
220
|
end
|
210
221
|
alias source_directory_required source_directory
|
211
222
|
|
@@ -265,6 +276,12 @@ module BuildTool
|
|
265
276
|
# Clone the repository.
|
266
277
|
def clone
|
267
278
|
vcs_required.clone
|
279
|
+
if !patches.empty?
|
280
|
+
if !vcs.patches_supported?
|
281
|
+
raise NotImplementedError, "Patch support not implemented for vcs #{vcs.name}"
|
282
|
+
end
|
283
|
+
vcs_required.apply_patches( patches )
|
284
|
+
end
|
268
285
|
end
|
269
286
|
|
270
287
|
# Fetch changes from the remote repository. Do not change the local
|
@@ -277,6 +294,13 @@ module BuildTool
|
|
277
294
|
# from the remote repository.
|
278
295
|
def rebase
|
279
296
|
vcs_required.rebase
|
297
|
+
if !patches.empty?
|
298
|
+
if !vcs.patches_supported?
|
299
|
+
raise NotImplementedError, "Patch support not implemented for vcs #{vcs.name}"
|
300
|
+
end
|
301
|
+
vcs_required.apply_patches( patches )
|
302
|
+
end
|
303
|
+
build_system_required.after_rebase
|
280
304
|
end
|
281
305
|
|
282
306
|
def configure
|
@@ -19,10 +19,10 @@ module BuildTool; module VCS
|
|
19
19
|
|
20
20
|
end # class ArchiveConfiguration
|
21
21
|
|
22
|
-
|
23
22
|
class Archive < Base
|
24
23
|
|
25
24
|
class ArchiveError < BuildTool::Error; end
|
25
|
+
class FileNotFoundError < BuildTool::Error; end
|
26
26
|
|
27
27
|
#
|
28
28
|
### Attributes
|
@@ -35,6 +35,14 @@ module BuildTool; module VCS
|
|
35
35
|
true
|
36
36
|
end
|
37
37
|
|
38
|
+
def patches_supported?
|
39
|
+
true
|
40
|
+
end
|
41
|
+
|
42
|
+
def apply_patches_after_rebase?
|
43
|
+
true
|
44
|
+
end
|
45
|
+
|
38
46
|
def archive_local_path
|
39
47
|
"#{File.dirname( local_path )}/#{archive_name}"
|
40
48
|
end
|
@@ -55,7 +63,25 @@ module BuildTool; module VCS
|
|
55
63
|
File.exist? archive_local_path
|
56
64
|
end
|
57
65
|
|
66
|
+
def apply_patches( patches )
|
67
|
+
patches.each do |patch|
|
68
|
+
full_path = self.recipe.find_first_config_file( "custom/#{config.module.name}/patches/#{patch}.patch" )
|
69
|
+
if full_path.nil?
|
70
|
+
raise FileNotFoundError, "Patch '#{patch}' not found from module #{config.module.name}."
|
71
|
+
end
|
72
|
+
logger.info "Applying patch #{patch}"
|
73
|
+
self.class.execute( "patch -p1 -i #{full_path}", local_path )
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
58
78
|
def clone
|
79
|
+
fetch()
|
80
|
+
rebase()
|
81
|
+
0
|
82
|
+
end
|
83
|
+
|
84
|
+
def fetch()
|
59
85
|
# Check if the archive is already downloaded
|
60
86
|
if File.exist? archive_local_path
|
61
87
|
logger.debug "Archive already fetched. Skipping."
|
@@ -83,33 +109,7 @@ module BuildTool; module VCS
|
|
83
109
|
}
|
84
110
|
target.close()
|
85
111
|
end
|
86
|
-
|
87
|
-
# Determine if the archive has a top level directory
|
88
|
-
topdir = guess_top_level_directory()
|
89
|
-
|
90
|
-
if archive_name =~ /(\.tgz|\.tar\.gz)$/
|
91
|
-
if self.class.execute( "gunzip -c #{archive_local_path} | tar xf -", File.dirname(local_path) ) != 0
|
92
|
-
raise StandardError, "Failed to unpack the archive: $?"
|
93
|
-
end
|
94
|
-
else
|
95
|
-
raise NotImplementedError, "No idea how to unpack the archive"
|
96
|
-
end
|
97
|
-
|
98
|
-
# Rename the top level directory to our desired path
|
99
|
-
logger.trace "mv #{File.dirname(local_path)}/#{topdir} #{local_path}"
|
100
|
-
if !$noop
|
101
|
-
FileUtils.move( "#{File.dirname(local_path)}/#{topdir}", local_path )
|
102
|
-
end
|
103
|
-
0
|
104
|
-
end
|
105
|
-
|
106
|
-
def fetch()
|
107
|
-
if !checkedout?
|
108
|
-
clone
|
109
|
-
else
|
110
|
-
# No update for archives
|
111
|
-
end
|
112
|
-
return true
|
112
|
+
return 0
|
113
113
|
end
|
114
114
|
|
115
115
|
def guess_top_level_directory
|
@@ -123,15 +123,43 @@ module BuildTool; module VCS
|
|
123
123
|
end
|
124
124
|
topdir = rc[1]
|
125
125
|
} != 0
|
126
|
-
|
126
|
+
# No topdir
|
127
|
+
return nil
|
127
128
|
end
|
128
129
|
else
|
129
|
-
raise NotImplementedError, "No idea how to unpack the archive"
|
130
|
+
raise NotImplementedError, "No idea how to unpack the archive '#{archive_name}'."
|
130
131
|
end
|
131
132
|
return topdir
|
132
133
|
end
|
133
134
|
|
134
135
|
def rebase
|
136
|
+
|
137
|
+
# Check if the archive is already downloaded
|
138
|
+
if !File.exist? archive_local_path
|
139
|
+
logger.debug "Archive not fetched. Skipping."
|
140
|
+
return 0
|
141
|
+
end
|
142
|
+
|
143
|
+
if local_path_exist?
|
144
|
+
return 0
|
145
|
+
end
|
146
|
+
|
147
|
+
# Create the directory we want to use to checkout
|
148
|
+
FileUtils.mkdir_p local_path if !$noop
|
149
|
+
|
150
|
+
if archive_name =~ /(\.tgz|\.tar\.gz)$/
|
151
|
+
if guess_top_level_directory()
|
152
|
+
cmd = "gunzip -c #{archive_local_path} | tar --strip-components=1 --extract --file=- --directory=#{local_path}"
|
153
|
+
else
|
154
|
+
cmd = "gunzip -c #{archive_local_path} | tar --strip-components=0 --extract --file=- --directory=#{local_path}"
|
155
|
+
end
|
156
|
+
if self.class.execute( cmd ) != 0
|
157
|
+
raise StandardError, "Failed to unpack the archive: $?"
|
158
|
+
end
|
159
|
+
else
|
160
|
+
raise NotImplementedError, "No idea how to unpack the archive"
|
161
|
+
end
|
162
|
+
|
135
163
|
0
|
136
164
|
end
|
137
165
|
|