packo 0.0.1.alpha.1
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/bin/packo +78 -0
- data/bin/packo-base +24 -0
- data/bin/packo-build +24 -0
- data/bin/packo-db +24 -0
- data/bin/packo-env +24 -0
- data/bin/packo-files +24 -0
- data/bin/packo-profile +24 -0
- data/bin/packo-repository +24 -0
- data/bin/packo-select +24 -0
- data/lib/packo.rb +186 -0
- data/lib/packo/cli.rb +79 -0
- data/lib/packo/cli/base.rb +554 -0
- data/lib/packo/cli/build.rb +488 -0
- data/lib/packo/cli/database.rb +55 -0
- data/lib/packo/cli/database/definition.rb +65 -0
- data/lib/packo/cli/database/helpers.rb +20 -0
- data/lib/packo/cli/environment.rb +45 -0
- data/lib/packo/cli/files.rb +153 -0
- data/lib/packo/cli/profile.rb +31 -0
- data/lib/packo/cli/repository.rb +561 -0
- data/lib/packo/cli/repository/binary.rb +74 -0
- data/lib/packo/cli/repository/helpers.rb +20 -0
- data/lib/packo/cli/repository/repository.rb +48 -0
- data/lib/packo/cli/repository/source.rb +91 -0
- data/lib/packo/cli/repository/virtual.rb +53 -0
- data/lib/packo/cli/select.rb +61 -0
- data/lib/packo/do.rb +249 -0
- data/lib/packo/environment.rb +269 -0
- data/lib/packo/extensions.rb +70 -0
- data/lib/packo/flags.rb +64 -0
- data/lib/packo/host.rb +121 -0
- data/lib/packo/models.rb +171 -0
- data/lib/packo/models/installed_package.rb +190 -0
- data/lib/packo/models/installed_package/content.rb +50 -0
- data/lib/packo/models/installed_package/dependency.rb +39 -0
- data/lib/packo/models/repository.rb +209 -0
- data/lib/packo/models/repository/binary.rb +32 -0
- data/lib/packo/models/repository/binary/mirror.rb +35 -0
- data/lib/packo/models/repository/package.rb +73 -0
- data/lib/packo/models/repository/package/binary.rb +34 -0
- data/lib/packo/models/repository/package/binary/build.rb +36 -0
- data/lib/packo/models/repository/package/source.rb +36 -0
- data/lib/packo/models/repository/package/source/feature.rb +36 -0
- data/lib/packo/models/repository/package/source/flavor.rb +36 -0
- data/lib/packo/models/repository/package/virtual.rb +32 -0
- data/lib/packo/models/repository/source.rb +30 -0
- data/lib/packo/models/repository/virtual.rb +30 -0
- data/lib/packo/models/selector.rb +34 -0
- data/lib/packo/models/tag.rb +30 -0
- data/lib/packo/package.rb +239 -0
- data/lib/packo/package/blocker.rb +100 -0
- data/lib/packo/package/blockers.rb +40 -0
- data/lib/packo/package/dependencies.rb +40 -0
- data/lib/packo/package/dependency.rb +100 -0
- data/lib/packo/package/feature.rb +55 -0
- data/lib/packo/package/features.rb +105 -0
- data/lib/packo/package/flavor.rb +101 -0
- data/lib/packo/package/tags.rb +60 -0
- data/lib/packo/package/tags/expression.rb +130 -0
- data/lib/packo/package/tags/expression/group.rb +28 -0
- data/lib/packo/package/tags/expression/logic.rb +48 -0
- data/lib/packo/package/tags/expression/name.rb +28 -0
- data/lib/packo/profile.rb +174 -0
- data/lib/packo/rbuild.rb +22 -0
- data/lib/packo/rbuild/behaviors.rb +20 -0
- data/lib/packo/rbuild/behaviors/default.rb +27 -0
- data/lib/packo/rbuild/feature.rb +64 -0
- data/lib/packo/rbuild/features.rb +65 -0
- data/lib/packo/rbuild/flavor.rb +67 -0
- data/lib/packo/rbuild/module.rb +40 -0
- data/lib/packo/rbuild/modules.rb +27 -0
- data/lib/packo/rbuild/modules/building.rb +24 -0
- data/lib/packo/rbuild/modules/building/autotools.rb +315 -0
- data/lib/packo/rbuild/modules/building/cmake.rb +38 -0
- data/lib/packo/rbuild/modules/building/patch.rb +84 -0
- data/lib/packo/rbuild/modules/building/rake.rb +74 -0
- data/lib/packo/rbuild/modules/building/strip.rb +41 -0
- data/lib/packo/rbuild/modules/misc.rb +26 -0
- data/lib/packo/rbuild/modules/misc/fetcher.rb +177 -0
- data/lib/packo/rbuild/modules/misc/fetching.rb +22 -0
- data/lib/packo/rbuild/modules/misc/fetching/git.rb +57 -0
- data/lib/packo/rbuild/modules/misc/fetching/github.rb +31 -0
- data/lib/packo/rbuild/modules/misc/fetching/gnu.rb +59 -0
- data/lib/packo/rbuild/modules/misc/fetching/mercurial.rb +51 -0
- data/lib/packo/rbuild/modules/misc/fetching/sourceforge.rb +47 -0
- data/lib/packo/rbuild/modules/misc/fetching/subversion.rb +51 -0
- data/lib/packo/rbuild/modules/misc/fetching/wget.rb +57 -0
- data/lib/packo/rbuild/modules/misc/unpacker.rb +70 -0
- data/lib/packo/rbuild/modules/misc/unpacking.rb +23 -0
- data/lib/packo/rbuild/modules/misc/unpacking/lzma.rb +34 -0
- data/lib/packo/rbuild/modules/misc/unpacking/tar.rb +35 -0
- data/lib/packo/rbuild/modules/misc/unpacking/xz.rb +34 -0
- data/lib/packo/rbuild/modules/misc/unpacking/zip.rb +26 -0
- data/lib/packo/rbuild/modules/packaging.rb +20 -0
- data/lib/packo/rbuild/modules/packaging/pko.rb +78 -0
- data/lib/packo/rbuild/package.rb +281 -0
- data/lib/packo/rbuild/package/manifest.rb +169 -0
- data/lib/packo/rbuild/stages.rb +171 -0
- data/lib/packo/rbuild/stages/callbacks.rb +96 -0
- data/lib/packo/rbuild/stages/stage.rb +50 -0
- data/lib/packo/repository.rb +95 -0
- data/lib/packo/repository/binary.rb +116 -0
- data/lib/packo/repository/source.rb +77 -0
- data/lib/packo/repository/virtual.rb +66 -0
- data/lib/packo/system.rb +53 -0
- data/lib/packo/version.rb +26 -0
- metadata +276 -0
data/lib/packo/models.rb
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
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 'dm-core'
|
|
21
|
+
require 'dm-constraints'
|
|
22
|
+
require 'dm-migrations'
|
|
23
|
+
require 'dm-types'
|
|
24
|
+
require 'dm-transactions'
|
|
25
|
+
|
|
26
|
+
require 'versionomy'
|
|
27
|
+
|
|
28
|
+
require 'packo'
|
|
29
|
+
|
|
30
|
+
module DataMapper
|
|
31
|
+
|
|
32
|
+
module Adapters
|
|
33
|
+
class DataObjectsAdapter < AbstractAdapter
|
|
34
|
+
private
|
|
35
|
+
def operation_statement(operation, qualify)
|
|
36
|
+
statements = []
|
|
37
|
+
bind_values = []
|
|
38
|
+
|
|
39
|
+
operation.each do |operand|
|
|
40
|
+
statement, values = conditions_statement(operand, qualify)
|
|
41
|
+
next unless statement
|
|
42
|
+
statements << statement
|
|
43
|
+
bind_values.concat(values) if values
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
statement = statements.join(" #{operation.slug.to_s.upcase} ")
|
|
47
|
+
|
|
48
|
+
if statements.size > 1
|
|
49
|
+
statement = "(#{statement})"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
return (statement.empty? ? nil : statement), bind_values
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
if Packo::System.env[:DEBUG].to_i > 2
|
|
58
|
+
Logger.new($stdout, :debug)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
Model.raise_on_save_failure = true
|
|
62
|
+
|
|
63
|
+
class Property
|
|
64
|
+
class Version < String
|
|
65
|
+
# Hopefully the max length of a version won't go over 255 chars
|
|
66
|
+
length 255
|
|
67
|
+
|
|
68
|
+
def custom?
|
|
69
|
+
true
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def primitive? (value)
|
|
73
|
+
value.is_a?(Versionomy::Value)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def valid? (value, negated = false)
|
|
77
|
+
super || primitive?(value) || value.is_a?(::String)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def load (value)
|
|
81
|
+
Versionomy.parse(value.to_s) unless value.to_s.empty?
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def dump (value)
|
|
85
|
+
value.to_s unless value.nil?
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def typecast_to_primitive (value)
|
|
89
|
+
load(value)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
begin
|
|
95
|
+
setup :default, Packo::System.env[:DATABASE]
|
|
96
|
+
rescue Exception => e
|
|
97
|
+
Packo::CLI.warn "Could not setup a connection with #{Packo::System.env[:DATABASE]}: #{e.message}"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
require 'packo/models/installed_package'
|
|
101
|
+
require 'packo/models/repository'
|
|
102
|
+
require 'packo/models/selector'
|
|
103
|
+
|
|
104
|
+
finalize
|
|
105
|
+
|
|
106
|
+
begin
|
|
107
|
+
auto_upgrade!
|
|
108
|
+
rescue Exception => e
|
|
109
|
+
Packo::CLI.warn "Could not migrate the database: #{e.message}"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
module Packo
|
|
115
|
+
|
|
116
|
+
module Models
|
|
117
|
+
def self.transactions
|
|
118
|
+
@@transactions ||= []
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def self.transaction (&block)
|
|
122
|
+
transaction = DataMapper::Transaction.new(DataMapper.repository)
|
|
123
|
+
transaction.begin
|
|
124
|
+
|
|
125
|
+
Models.transactions << transaction
|
|
126
|
+
|
|
127
|
+
begin
|
|
128
|
+
transaction.within &block
|
|
129
|
+
rescue Exception => e
|
|
130
|
+
transaction.rollback unless transaction.rollback?
|
|
131
|
+
|
|
132
|
+
raise e
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
transaction.commit
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def self.search_installed (expression, name=nil, type=nil)
|
|
139
|
+
Models::InstalledPackage.search(expression, true, type && name ? "#{type}/#{name}" : nil).map {|pkg|
|
|
140
|
+
Package.wrap(pkg)
|
|
141
|
+
}
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def self.search (expression, name=nil, type=nil, exact=false)
|
|
145
|
+
packages = []
|
|
146
|
+
|
|
147
|
+
if name && !name.empty?
|
|
148
|
+
repository = Packo::Repository.parse(name)
|
|
149
|
+
repository.type = type if type && Packo::Repository::Types.member?(type.to_sym)
|
|
150
|
+
repository = Models::Repository.first(repository.to_hash)
|
|
151
|
+
|
|
152
|
+
if repository
|
|
153
|
+
packages << repository.search(expression, exact)
|
|
154
|
+
end
|
|
155
|
+
else
|
|
156
|
+
Packo::Repository::Types.each {|t|
|
|
157
|
+
if type.nil? || type == 'all' || type == t
|
|
158
|
+
Models::Repository.all(type: t).each {|repository|
|
|
159
|
+
packages << repository.search(expression, exact)
|
|
160
|
+
}
|
|
161
|
+
end
|
|
162
|
+
}
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
return packages.flatten.compact.map {|package|
|
|
166
|
+
Package.wrap(package)
|
|
167
|
+
}
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
end
|
|
@@ -0,0 +1,190 @@
|
|
|
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/models/tag'
|
|
21
|
+
require 'packo/models/installed_package/dependency'
|
|
22
|
+
require 'packo/models/installed_package/content'
|
|
23
|
+
|
|
24
|
+
module Packo; module Models
|
|
25
|
+
|
|
26
|
+
class InstalledPackage
|
|
27
|
+
include DataMapper::Resource
|
|
28
|
+
|
|
29
|
+
property :id, Serial
|
|
30
|
+
|
|
31
|
+
property :repo, String
|
|
32
|
+
has n, :tags, through: Resource, constraint: :destroy
|
|
33
|
+
|
|
34
|
+
property :tags_hashed, String, length: 40, required: true, unique_index: :a
|
|
35
|
+
property :name, String, length: 255, required: true, unique_index: :a
|
|
36
|
+
property :version, Version, required: true
|
|
37
|
+
property :slot, String, default: '', unique_index: :a
|
|
38
|
+
property :revision, Integer, default: 0
|
|
39
|
+
|
|
40
|
+
property :flavor, Text
|
|
41
|
+
property :features, Text
|
|
42
|
+
|
|
43
|
+
property :description, Text
|
|
44
|
+
property :homepage, Text
|
|
45
|
+
property :license, Text
|
|
46
|
+
|
|
47
|
+
property :maintainer, String
|
|
48
|
+
|
|
49
|
+
property :manual, Boolean, default: false
|
|
50
|
+
property :type, Enum[:both, :runtime, :build], default: :both
|
|
51
|
+
|
|
52
|
+
property :destination, Text
|
|
53
|
+
|
|
54
|
+
property :created_at, DateTime
|
|
55
|
+
|
|
56
|
+
has n, :dependencies, constraint: :destroy
|
|
57
|
+
has n, :contents, constraint: :destroy
|
|
58
|
+
|
|
59
|
+
def self.search (expression, exact=false, repository=nil)
|
|
60
|
+
if expression.start_with?('[') && expression.end_with?(']')
|
|
61
|
+
expression = expression[1, expression.length - 2]
|
|
62
|
+
|
|
63
|
+
if DataMapper.repository.adapter.respond_to? :select
|
|
64
|
+
result = self._find_by_expression(expression).map {|id|
|
|
65
|
+
InstalledPackage.get(id)
|
|
66
|
+
}
|
|
67
|
+
else
|
|
68
|
+
expression = Packo::Package::Tags::Expression.parse(expression)
|
|
69
|
+
|
|
70
|
+
result = packages.all.select {|pkg|
|
|
71
|
+
expression.evaluate(Packo::Package.wrap(pkg))
|
|
72
|
+
}
|
|
73
|
+
end
|
|
74
|
+
else
|
|
75
|
+
if matches = expression.match(/^([<>]?=?)/)
|
|
76
|
+
validity = ((matches[1] && !matches[1].empty?) ? matches[1] : nil)
|
|
77
|
+
expression = expression.sub(/^([<>]?=?)/, '')
|
|
78
|
+
|
|
79
|
+
validity = nil if validity == '='
|
|
80
|
+
else
|
|
81
|
+
validity = nil
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
package = Packo::Package.parse(expression)
|
|
85
|
+
|
|
86
|
+
conditions = { order: [:name.asc] }
|
|
87
|
+
|
|
88
|
+
if exact
|
|
89
|
+
conditions[:name] = package.name if package.name
|
|
90
|
+
conditions[:version] = package.version if package.version
|
|
91
|
+
conditions[:slot] = package.slot if package.slot
|
|
92
|
+
else
|
|
93
|
+
conditions[:name.like] = "%#{package.name}%" if package.name
|
|
94
|
+
conditions[:version.like] = package.version if package.version
|
|
95
|
+
conditions[:slot.like] = "%#{package.slot}%" if package.slot
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
result = InstalledPackage.all(conditions)
|
|
99
|
+
|
|
100
|
+
if !package.tags.empty?
|
|
101
|
+
result = result.to_a.select {|pkg|
|
|
102
|
+
Packo::Package.wrap(pkg).tags == package.tags
|
|
103
|
+
}
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
if validity
|
|
107
|
+
result = result.select {|pkg|
|
|
108
|
+
case validity
|
|
109
|
+
when '>'; pkg.version > package.version
|
|
110
|
+
when '>='; pkg.version >= package.version
|
|
111
|
+
when '<'; pkg.version < package.version
|
|
112
|
+
when '<='; pkg.version <= package.version
|
|
113
|
+
end
|
|
114
|
+
}
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
if repository
|
|
119
|
+
result.delete_if {|pkg|
|
|
120
|
+
pkg.repo != repository
|
|
121
|
+
}
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
return result
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
private
|
|
128
|
+
|
|
129
|
+
def self._expression_to_sql (value)
|
|
130
|
+
value.downcase!
|
|
131
|
+
value.gsub!(/(\s+and\s+|\s*&&\s*)/i, ' && ')
|
|
132
|
+
value.gsub!(/(\s+or\s+|\s*\|\|\s*)/i, ' || ')
|
|
133
|
+
value.gsub!(/(\s+not\s+|\s*!\s*)/i, ' !')
|
|
134
|
+
value.gsub!(/\(\s*!/, '(!')
|
|
135
|
+
|
|
136
|
+
joins = String.new
|
|
137
|
+
names = []
|
|
138
|
+
expression = value.clone
|
|
139
|
+
|
|
140
|
+
expression.scan(/(("(([^\\"]|\\.)*)")|([^\s&!|()]+))/) {|match|
|
|
141
|
+
names.push((match[2] || match[4]).downcase)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
names.compact!
|
|
145
|
+
names.uniq!
|
|
146
|
+
|
|
147
|
+
names.each_index {|index|
|
|
148
|
+
joins << %{
|
|
149
|
+
LEFT JOIN (
|
|
150
|
+
SELECT _used_tag_#{index}.package_id
|
|
151
|
+
|
|
152
|
+
FROM packo_models_installed_package_tags AS _used_tag_#{index}
|
|
153
|
+
|
|
154
|
+
INNER JOIN packo_models_tags AS _tag_#{index}
|
|
155
|
+
ON _used_tag_#{index}.tag_id = _tag_#{index}.id AND _tag_#{index}.name = ?
|
|
156
|
+
) AS _tag_check_#{index}
|
|
157
|
+
ON packo_models_installed_packages.id = _tag_check_#{index}.package_id
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (replace = names[index]).match(/[\s&!|]/)
|
|
161
|
+
replace = %{"#{replace}"}
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
expression.gsub!(/([\s()]|\G)!\s*#{Regexp.escape(replace)}([\s()]|$)/, "\\1 (_tag_check_#{index}.package_id IS NULL) \\2")
|
|
165
|
+
expression.gsub!(/([\s()]|\G)#{Regexp.escape(replace)}([\s()]|$)/, "\\1 (_tag_check_#{index}.package_id IS NOT NULL) \\2")
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
expression.gsub!(/([\G\s()])&&([\s()\A])/, '\1 AND \2')
|
|
169
|
+
expression.gsub!(/([\G\s()])\|\|([\s()\A])/, '\1 OR \2')
|
|
170
|
+
expression.gsub!(/([\G\s()])!([\s()\A])/, '\1 NOT \2')
|
|
171
|
+
|
|
172
|
+
return joins, names, expression
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def self._find_by_expression (expression)
|
|
176
|
+
joins, names, expression = self._expression_to_sql(expression)
|
|
177
|
+
|
|
178
|
+
repository.adapter.select(%{
|
|
179
|
+
SELECT DISTINCT packo_models_installed_packages.id
|
|
180
|
+
|
|
181
|
+
FROM packo_models_installed_packages
|
|
182
|
+
|
|
183
|
+
#{joins}
|
|
184
|
+
|
|
185
|
+
WHERE #{expression}
|
|
186
|
+
}, *names) rescue []
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
end; end
|
|
@@ -0,0 +1,50 @@
|
|
|
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 Models; class InstalledPackage
|
|
21
|
+
|
|
22
|
+
class Content
|
|
23
|
+
include DataMapper::Resource
|
|
24
|
+
|
|
25
|
+
belongs_to :installed_package
|
|
26
|
+
|
|
27
|
+
property :id, Serial
|
|
28
|
+
|
|
29
|
+
property :type, Enum[:dir, :obj, :sym]
|
|
30
|
+
|
|
31
|
+
property :path, Text
|
|
32
|
+
|
|
33
|
+
property :meta, Object, required: false
|
|
34
|
+
|
|
35
|
+
def check!
|
|
36
|
+
return if self.type
|
|
37
|
+
|
|
38
|
+
if File.directory?(self.path)
|
|
39
|
+
self.type = :dir
|
|
40
|
+
elsif File.symlink?(self.path)
|
|
41
|
+
self.type = :sym
|
|
42
|
+
elsif File.file?(self.path)
|
|
43
|
+
self.type = :obj
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
self.save
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end; end; end
|
|
@@ -0,0 +1,39 @@
|
|
|
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 Models; class InstalledPackage
|
|
21
|
+
|
|
22
|
+
class Dependency
|
|
23
|
+
include DataMapper::Resource
|
|
24
|
+
|
|
25
|
+
belongs_to :installed_package
|
|
26
|
+
|
|
27
|
+
property :id, Serial
|
|
28
|
+
|
|
29
|
+
property :tags, Text, unique_index: :a
|
|
30
|
+
property :name, String, unique_index: :a
|
|
31
|
+
property :version, String, unique_index: :a
|
|
32
|
+
property :slot, String, default: ''
|
|
33
|
+
property :revision, Integer, default: 0
|
|
34
|
+
|
|
35
|
+
property :flavor, Text, default: ''
|
|
36
|
+
property :features, Text, default: ''
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end; end; end
|