packo 0.0.1.alpha.1 → 0.0.1.alpha.2

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.
Files changed (48) hide show
  1. data/bin/packo +13 -2
  2. data/lib/packo.rb +16 -52
  3. data/lib/packo/cli.rb +9 -3
  4. data/lib/packo/cli/base.rb +65 -66
  5. data/lib/packo/cli/build.rb +124 -128
  6. data/lib/packo/cli/files.rb +7 -7
  7. data/lib/packo/cli/repository.rb +40 -26
  8. data/lib/packo/do.rb +106 -73
  9. data/lib/packo/environment.rb +2 -2
  10. data/lib/packo/extensions.rb +20 -6
  11. data/lib/packo/host.rb +10 -0
  12. data/lib/packo/models.rb +8 -2
  13. data/lib/packo/models/repository.rb +17 -14
  14. data/lib/packo/package.rb +9 -3
  15. data/lib/packo/profile.rb +2 -2
  16. data/lib/packo/rbuild.rb +0 -2
  17. data/lib/packo/rbuild/behaviors/default.rb +3 -2
  18. data/lib/packo/rbuild/{modules/misc/fetching.rb → behaviors/python.rb} +8 -3
  19. data/lib/packo/rbuild/modules.rb +2 -3
  20. data/lib/packo/rbuild/modules/building.rb +5 -2
  21. data/lib/packo/rbuild/modules/building/autotools.rb +11 -11
  22. data/lib/packo/rbuild/modules/building/rake.rb +71 -7
  23. data/lib/packo/rbuild/modules/building/scons.rb +128 -0
  24. data/lib/packo/rbuild/modules/{misc/fetcher.rb → fetcher.rb} +5 -5
  25. data/lib/packo/rbuild/modules/fetching.rb +29 -0
  26. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/git.rb +15 -9
  27. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/github.rb +1 -1
  28. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/gnu.rb +1 -1
  29. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/mercurial.rb +11 -7
  30. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/sourceforge.rb +1 -1
  31. data/lib/packo/rbuild/modules/{misc/fetching → fetching}/subversion.rb +23 -5
  32. data/lib/packo/rbuild/modules/misc.rb +0 -8
  33. data/lib/packo/rbuild/modules/packager.rb +63 -0
  34. data/lib/packo/rbuild/modules/packaging.rb +2 -0
  35. data/lib/packo/rbuild/modules/packaging/pko.rb +24 -44
  36. data/lib/packo/rbuild/modules/{misc/unpacker.rb → unpacker.rb} +2 -2
  37. data/lib/packo/rbuild/modules/{misc/unpacking.rb → unpacking.rb} +6 -4
  38. data/lib/packo/rbuild/modules/{misc/unpacking → unpacking}/lzma.rb +1 -1
  39. data/lib/packo/rbuild/modules/{misc/unpacking → unpacking}/tar.rb +1 -1
  40. data/lib/packo/rbuild/modules/{misc/unpacking → unpacking}/xz.rb +1 -1
  41. data/lib/packo/rbuild/modules/{misc/unpacking → unpacking}/zip.rb +1 -1
  42. data/lib/packo/rbuild/package.rb +17 -8
  43. data/lib/packo/repository.rb +1 -1
  44. data/lib/packo/repository/virtual.rb +16 -0
  45. data/lib/packo/utils.rb +106 -0
  46. data/lib/packo/version.rb +1 -1
  47. metadata +39 -25
  48. data/lib/packo/rbuild/modules/misc/fetching/wget.rb +0 -57
@@ -20,7 +20,7 @@
20
20
  require 'uri'
21
21
  require 'digest/sha1'
22
22
 
23
- module Packo; module RBuild; module Modules; module Misc
23
+ module Packo; module RBuild; module Modules
24
24
 
25
25
  class Fetcher < Module
26
26
  @@wrappers = {}
@@ -89,7 +89,7 @@ class Fetcher < Module
89
89
  package.distfiles = {}
90
90
 
91
91
  sources = Hash[package.source.map {|(name, source)|
92
- next if package.digests[url(source)] && (Do.digest("#{package.fetchdir}/#{package.digests[url(source)].name}") rescue false) == package.digests[url(source)].digest
92
+ next if package.digests[url(source)] && (Packo.digest("#{package.fetchdir}/#{package.digests[url(source)].name}") rescue false) == package.digests[url(source)].digest
93
93
 
94
94
  url = Fetcher.url(source, package) or fail "Failed to get the real URL for: #{source}"
95
95
 
@@ -125,7 +125,7 @@ class Fetcher < Module
125
125
  package.distfiles = []
126
126
 
127
127
  sources = [package.source].flatten.compact.map {|source|
128
- next if package.digests[url(source)] && (Do.digest("#{package.fetchdir}/#{package.digests[url(source)].name}") rescue false) == package.digests[url(source)].digest
128
+ next if package.digests[url(source)] && (Packo.digest("#{package.fetchdir}/#{package.digests[url(source)].name}") rescue false) == package.digests[url(source)].digest
129
129
 
130
130
  url = Fetcher.url(source, package) or fail "Failed to get the real URL for: #{source}"
131
131
 
@@ -164,7 +164,7 @@ class Fetcher < Module
164
164
  file ||= name
165
165
 
166
166
  original = package.digests[file.url].digest or next
167
- digest = Do.digest(file.path) or next
167
+ digest = Packo.digest(file.path) or next
168
168
 
169
169
  if digest != original
170
170
  raise ArgumentError.new("#{File.basename(file.path)} digest is #{digest} but should be #{original}")
@@ -174,4 +174,4 @@ class Fetcher < Module
174
174
  end
175
175
  end
176
176
 
177
- end; end; end; end
177
+ end; end; end
@@ -0,0 +1,29 @@
1
+ #--
2
+ # Copyleft meh. [http://meh.doesntexist.org | meh@paranoici.org]
3
+ #
4
+ # This file is part of packo.
5
+ #
6
+ # packo is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # packo is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ require 'packo/rbuild/modules/fetcher'
21
+
22
+ require 'packo/rbuild/modules/fetching/gnu'
23
+ require 'packo/rbuild/modules/fetching/sourceforge'
24
+ require 'packo/rbuild/modules/fetching/github'
25
+
26
+ # Bleeding edge stuff
27
+ require 'packo/rbuild/modules/fetching/git'
28
+ require 'packo/rbuild/modules/fetching/subversion'
29
+ require 'packo/rbuild/modules/fetching/mercurial'
@@ -17,7 +17,7 @@
17
17
  # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
 
20
- module Packo; module RBuild; module Modules; module Misc; module Fetching
20
+ module Packo; module RBuild; module Modules; module Fetching
21
21
 
22
22
  class Git < Module
23
23
  def initialize (package)
@@ -26,32 +26,38 @@ class Git < Module
26
26
  package.avoid [Fetcher, Unpacker]
27
27
 
28
28
  package.stages.add :fetch, self.method(:fetch), after: :beginning
29
+
30
+ package.after :initialize do
31
+ package.dependencies << 'vcs/git!'
32
+ end
29
33
  end
30
34
 
31
35
  def finalize
32
36
  package.stages.delete :fetch, self.method(:fetch)
33
37
  end
34
38
 
39
+ def git (*args)
40
+ Packo.sh 'git', *args
41
+ end
42
+
35
43
  def fetch
36
44
  package.stages.callbacks(:fetch).do {
37
- whole, url, branch, commit = package.source.match(%r[^(\w+://.*?)(?::(.*?))?(?:@(.*?))?$]).to_a
38
-
39
45
  package.clean!
40
46
  package.create!
41
47
 
42
48
  options = []
43
- options << '--branch' << branch if branch
44
- options << '--depth' << '1' if !commit
49
+ options << '--branch' << package.git[:branch].to_s.interpolate(package) if package.git[:branch]
50
+ options << '--depth' << '1' unless package.git[:commit]
45
51
 
46
- Packo.sh 'git', 'clone', *options, url, package.workdir
52
+ git :clone, *options, package.git[:repository].to_s.interpolate(package), package.workdir
47
53
 
48
54
  Do.cd package.workdir
49
55
 
50
- if commit
51
- Packo.sh 'git', 'checkout', commit
56
+ if package.git[:commit] || package.git[:tag]
57
+ git 'checkout', (package.git[:commit] || package.git[:tag]).to_s.interpolate(package)
52
58
  end
53
59
  }
54
60
  end
55
61
  end
56
62
 
57
- end; end; end; end; end
63
+ end; end; end; end
@@ -17,7 +17,7 @@
17
17
  # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
 
20
- module Packo; module RBuild; module Modules; module Misc
20
+ module Packo; module RBuild; module Modules; module Fetching
21
21
 
22
22
  Fetcher.register :github do |url, package|
23
23
  whole, user, project, file = url.interpolate(package).match(%r{^(.*?)/(.*?)/(.*?)$}).to_a
@@ -19,7 +19,7 @@
19
19
 
20
20
  require 'net/http'
21
21
 
22
- module Packo; module RBuild; module Modules; module Misc
22
+ module Packo; module RBuild; module Modules; module Fetching
23
23
 
24
24
  Fetcher.register :gnu do |url, package|
25
25
  whole, name, version = url.interpolate(package).match(%r{^(.*?)/(.*?)$}).to_a
@@ -17,7 +17,7 @@
17
17
  # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
 
20
- module Packo; module RBuild; module Modules; module Misc; module Fetching
20
+ module Packo; module RBuild; module Modules; module Fetching
21
21
 
22
22
  class Mercurial < Module
23
23
  def initialize (package)
@@ -26,26 +26,30 @@ class Mercurial < Module
26
26
  package.avoid [Fetcher, Unpacker]
27
27
 
28
28
  package.stages.add :fetch, self.method(:fetch), after: :beginning
29
+
30
+ package.after :initialize do
31
+ package.dependencies << 'vcs/mercurial!'
32
+ end
29
33
  end
30
34
 
31
35
  def finalize
32
36
  package.stages.delete :fetch, self.method(:fetch)
33
37
  end
34
38
 
39
+ def hg (*args)
40
+ Packo.sh 'hg', *args
41
+ end
42
+
35
43
  def fetch
36
44
  package.stages.callbacks(:fetch).do {
37
- whole, url = package.source.match(%r[^(\w+://.*?)$]).to_a
38
-
39
45
  package.clean!
40
46
  package.create!
41
47
 
42
- options = []
43
-
44
- Packo.sh 'hg', 'clone', *options, url, package.workdir
48
+ hg :clone, package.mercurial[:repository].to_s.interpolate(package), package.workdir
45
49
 
46
50
  Do.cd package.workdir
47
51
  }
48
52
  end
49
53
  end
50
54
 
51
- end; end; end; end; end
55
+ end; end; end; end
@@ -19,7 +19,7 @@
19
19
 
20
20
  require 'net/http'
21
21
 
22
- module Packo; module RBuild; module Modules; module Misc
22
+ module Packo; module RBuild; module Modules; module Fetching
23
23
 
24
24
  Fetcher.register :sourceforge, do |url, package|
25
25
  whole, project, path = url.interpolate(package).match(%r{^(.*?)/(.*?)$}).to_a
@@ -17,7 +17,7 @@
17
17
  # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
 
20
- module Packo; module RBuild; module Modules; module Misc; module Fetching
20
+ module Packo; module RBuild; module Modules; module Fetching
21
21
 
22
22
  class Subversion < Module
23
23
  def initialize (package)
@@ -26,26 +26,44 @@ class Subversion < Module
26
26
  package.avoid [Fetcher, Unpacker]
27
27
 
28
28
  package.stages.add :fetch, self.method(:fetch), after: :beginning
29
+
30
+ package.after :initialize do
31
+ package.dependencies << 'vcs/subversion!'
32
+ end
29
33
  end
30
34
 
31
35
  def finalize
32
36
  package.stages.delete :fetch, self.method(:fetch)
33
37
  end
34
38
 
39
+ def svn (*args)
40
+ Packo.sh 'svn', *args
41
+ end
42
+
35
43
  def fetch
36
44
  package.stages.callbacks(:fetch).do {
37
- whole, url = package.source.match(%r[^(\w+://.*?)$]).to_a
38
-
39
45
  package.clean!
40
46
  package.create!
41
47
 
48
+ repository = package.subversion[:repository].to_s.interpolate(package)
49
+
42
50
  options = []
43
51
 
44
- Packo.sh 'svn', 'checkout', *options, url, package.workdir
52
+ if package.subversion[:revision]
53
+ options << '--revision' << package.subversion[:revision].to_s.interpolate(package)
54
+ end
55
+
56
+ if package.subversion[:tag]
57
+ svn 'checkout', *options, "#{repository}/tags/#{package.subversion[:tag].to_s.interpolate(package)}", package.workdir
58
+ elsif package.subversion[:branch]
59
+ svn 'checkout', *options, "#{repository}/branches/#{package.subversion[:branch].to_s.interpolate(package)}", package.workdir
60
+ else
61
+ svn 'checkout', *options, "#{repository}/trunk", package.workdir
62
+ end
45
63
 
46
64
  Do.cd package.workdir
47
65
  }
48
66
  end
49
67
  end
50
68
 
51
- end; end; end; end; end
69
+ end; end; end; end
@@ -16,11 +16,3 @@
16
16
  # You should have received a copy of the GNU Affero General Public License
17
17
  # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
-
20
- require 'packo/rbuild/modules/misc/fetcher'
21
- require 'packo/rbuild/modules/misc/unpacker'
22
-
23
- # Bleeding edge stuff
24
- require 'packo/rbuild/modules/misc/fetching/git'
25
- require 'packo/rbuild/modules/misc/fetching/mercurial'
26
- require 'packo/rbuild/modules/misc/fetching/subversion'
@@ -0,0 +1,63 @@
1
+ #--
2
+ # Copyleft meh. [http://meh.doesntexist.org | meh@paranoici.org]
3
+ #
4
+ # This file is part of packo.
5
+ #
6
+ # packo is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # packo is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Packo; module RBuild; module Modules
21
+
22
+ class Packager < Module
23
+ @@formats = {}
24
+
25
+ def self.register (type, &block)
26
+ @@formats[type] = block
27
+ end
28
+
29
+ def self.do (package, to=nil)
30
+
31
+ block = @@formats.find {|extension, block|
32
+ (to || '.pko').end_with?(extension)
33
+ }.last rescue nil
34
+
35
+ if block
36
+ block.call(package, to)
37
+ else
38
+ Packo.debug 'Package format unsupported'
39
+ end
40
+ end
41
+
42
+ def initialize (package)
43
+ super(package)
44
+
45
+ package.stages.add :pack, self.method(:pack), at: :end, strict: true
46
+
47
+ before :initialize do |package|
48
+ package.define_singleton_method :pack, &Packager.method(:do)
49
+ end
50
+ end
51
+
52
+ def finalize
53
+ package.stages.delete :pack, self.method(:pack)
54
+ end
55
+
56
+ def pack
57
+ package.stages.callbacks(:pack).do {
58
+ Packager.do(package)
59
+ }
60
+ end
61
+ end
62
+
63
+ end; end; end
@@ -17,4 +17,6 @@
17
17
  # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
 
20
+ require 'packo/rbuild/modules/packager'
21
+
20
22
  require 'packo/rbuild/modules/packaging/pko'
@@ -19,60 +19,40 @@
19
19
 
20
20
  module Packo; module RBuild; module Modules; module Packaging
21
21
 
22
- class PKO < Module
23
- def self.pack (name, *files)
24
- Packo.sh 'tar', 'cJf', name, *files, '--preserve', silent: true
25
- end
26
-
27
- def self.unpack (name, to)
28
- FileUtils.mkpath(to) rescue nil
29
-
30
- Packo.sh 'tar', 'xJf', name, '-C', to, '--preserve', silent: true
31
- end
32
-
33
- def initialize (package)
34
- super(package)
35
-
36
- package.stages.add :pack, self.method(:pack), at: :end, strict: true
37
- end
38
-
39
- def finalize
40
- package.stages.delete :pack, self.method(:pack)
41
- end
22
+ pack = lambda do |name, *files|
23
+ Packo.sh 'tar', 'cJf', name, *files, '--preserve', silent: true
24
+ end
42
25
 
43
- def pack
44
- package.stages.callbacks(:pack).do {
45
- path = "#{package.to_s(:package)}.pko"
26
+ Packager.register('.pko') do |package, to=nil|
27
+ path = to || "#{package.to_s(:package)}.pko"
46
28
 
47
- Dir.chdir package.directory
29
+ Dir.chdir package.directory
48
30
 
49
- FileUtils.mkpath "#{package.directory}/pre"
31
+ FileUtils.mkpath "#{package.directory}/pre"
50
32
 
51
- package.filesystem.pre.each {|name, file|
52
- File.write("pre/#{name}", file.content, 0777)
53
- }
33
+ package.filesystem.pre.each {|name, file|
34
+ File.write("pre/#{name}", file.content, 0777)
35
+ }
54
36
 
55
- FileUtils.mkpath "#{package.directory}/post"
56
- package.filesystem.post.each {|name, file|
57
- File.write("post/#{name}", file.content, 0777)
58
- }
37
+ FileUtils.mkpath "#{package.directory}/post"
38
+ package.filesystem.post.each {|name, file|
39
+ File.write("post/#{name}", file.content, 0777)
40
+ }
59
41
 
60
- FileUtils.mkpath "#{package.directory}/selectors"
61
- package.filesystem.selectors.each {|name, file|
62
- File.write("selectors/#{name}", file.content, 0777)
63
- }
42
+ FileUtils.mkpath "#{package.directory}/selectors"
43
+ package.filesystem.selectors.each {|name, file|
44
+ File.write("selectors/#{name}", file.content, 0777)
45
+ }
64
46
 
65
- Package::Manifest.new(package).save('manifest.xml')
47
+ Package::Manifest.new(package).save('manifest.xml')
66
48
 
67
- package.stages.callbacks(:pack!).do {
68
- Do.clean(package.distdir)
49
+ package.stages.callbacks(:packing).do {
50
+ Do.clean(package.distdir)
69
51
 
70
- PKO.pack(path, 'dist/', 'pre/', 'post/', 'selectors/', 'manifest.xml')
71
- }
52
+ pack.call(path, 'dist/', 'pre/', 'post/', 'selectors/', 'manifest.xml')
53
+ }
72
54
 
73
- path
74
- }
75
- end
55
+ path
76
56
  end
77
57
 
78
58
  end; end; end; end
@@ -17,7 +17,7 @@
17
17
  # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
 
20
- module Packo; module RBuild; module Modules; module Misc
20
+ module Packo; module RBuild; module Modules
21
21
 
22
22
  class Unpacker < Module
23
23
  @@formats = {}
@@ -67,4 +67,4 @@ class Unpacker < Module
67
67
  end
68
68
  end
69
69
 
70
- end; end; end; end
70
+ end; end; end
@@ -17,7 +17,9 @@
17
17
  # along with packo. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
 
20
- require 'packo/rbuild/modules/misc/unpacking/tar'
21
- require 'packo/rbuild/modules/misc/unpacking/zip'
22
- require 'packo/rbuild/modules/misc/unpacking/lzma'
23
- require 'packo/rbuild/modules/misc/unpacking/xz'
20
+ require 'packo/rbuild/modules/unpacker'
21
+
22
+ require 'packo/rbuild/modules/unpacking/tar'
23
+ require 'packo/rbuild/modules/unpacking/zip'
24
+ require 'packo/rbuild/modules/unpacking/lzma'
25
+ require 'packo/rbuild/modules/unpacking/xz'