repomate 0.2.0 → 0.2.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/repomate +10 -3
- data/lib/repomate/base.rb +53 -41
- data/lib/repomate/checkpoint.rb +5 -5
- data/lib/repomate/cli.rb +58 -31
- data/lib/repomate/configuration.rb +3 -2
- data/lib/repomate/metafile.rb +1 -1
- metadata +8 -8
data/bin/repomate
CHANGED
@@ -17,7 +17,7 @@ options = Slop.parse do
|
|
17
17
|
|
18
18
|
Usage: #{$0} add -s squeeze [-c main] <package>
|
19
19
|
#{$0} publish
|
20
|
-
#{$0} listpackages -r
|
20
|
+
#{$0} listpackages -r stage
|
21
21
|
|
22
22
|
Actions:
|
23
23
|
add - Add a package to the staging area
|
@@ -26,7 +26,10 @@ options = Slop.parse do
|
|
26
26
|
load - Load a checkpoint
|
27
27
|
listpackages - List packages
|
28
28
|
setup - Setup the pool
|
29
|
-
|
29
|
+
activate - Activate (link) a package from pool
|
30
|
+
deactivate - Deactivate (unlink) a package from production
|
31
|
+
remove - Removes a package from production and pool
|
32
|
+
|
30
33
|
|
31
34
|
Options:"
|
32
35
|
on :s, :suitename=, "Set the name of the suite (lenny/squeeze...)", :argument => true
|
@@ -60,10 +63,14 @@ elsif ARGV.include?("save")
|
|
60
63
|
cli.save_checkpoint
|
61
64
|
elsif ARGV.include?("load")
|
62
65
|
cli.choose_checkpoint
|
66
|
+
elsif ARGV.include?("activate")
|
67
|
+
cli.choose_package("activate")
|
68
|
+
elsif ARGV.include?("deactivate")
|
69
|
+
cli.choose_package("deactivate")
|
63
70
|
elsif ARGV.include?("remove")
|
64
71
|
cli.choose_package("remove")
|
65
72
|
elsif ARGV.include?("listpackages")
|
66
|
-
cli.
|
73
|
+
cli.listpackages(options)
|
67
74
|
elsif ARGV.include?("setup")
|
68
75
|
cli.setup(options)
|
69
76
|
else
|
data/lib/repomate/base.rb
CHANGED
@@ -104,15 +104,7 @@ module RepoMate
|
|
104
104
|
:category => 'dists'
|
105
105
|
}
|
106
106
|
end
|
107
|
-
|
108
|
-
unlink_workload << {
|
109
|
-
:destination_fullname => fullname,
|
110
|
-
:suitename => package.suitename,
|
111
|
-
:component => package.component,
|
112
|
-
:category => 'pool'
|
113
|
-
}
|
114
|
-
end
|
115
|
-
FileUtils.move(stage_fullname, pool_fullname)
|
107
|
+
FileUtils.move(stage_fullname, pool_fullname) unless File.exists?(pool_fullname)
|
116
108
|
end
|
117
109
|
end
|
118
110
|
@link.destroy(unlink_workload)
|
@@ -120,44 +112,40 @@ module RepoMate
|
|
120
112
|
end
|
121
113
|
|
122
114
|
# Returns a list of packages
|
123
|
-
def
|
115
|
+
def listpackages
|
124
116
|
packages = []
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
source =
|
117
|
+
|
118
|
+
@repository.categories.each do |category|
|
119
|
+
Architecture.dataset(category).each do |entry|
|
120
|
+
source = Architecture.new(entry[:architecture], entry[:component], entry[:suitename], category)
|
129
121
|
source.files.each do |fullname|
|
130
122
|
package = Package.new(fullname, entry[:suitename], entry[:component])
|
131
|
-
|
132
|
-
number += 1
|
133
|
-
|
134
123
|
packages << {
|
135
|
-
:number => number,
|
136
124
|
:fullname => fullname,
|
125
|
+
:category => category,
|
137
126
|
:basename => File.basename(fullname),
|
138
127
|
:controlfile => package.controlfile,
|
139
128
|
:component => entry[:component],
|
140
|
-
:suitename => entry[:suitename]
|
129
|
+
:suitename => entry[:suitename],
|
130
|
+
:architecture => entry[:architecture]
|
141
131
|
}
|
142
132
|
end
|
143
133
|
end
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
:architecture => entry[:architecture]
|
160
|
-
}
|
134
|
+
if category.eql? "stage"
|
135
|
+
Component.dataset(category).each do |entry|
|
136
|
+
source = Component.new(entry[:component], entry[:suitename], category)
|
137
|
+
source.files.each do |fullname|
|
138
|
+
package = Package.new(fullname, entry[:suitename], entry[:component])
|
139
|
+
packages << {
|
140
|
+
:fullname => fullname,
|
141
|
+
:category => category,
|
142
|
+
:basename => File.basename(fullname),
|
143
|
+
:controlfile => package.controlfile,
|
144
|
+
:component => entry[:component],
|
145
|
+
:suitename => entry[:suitename],
|
146
|
+
:architecture => "unknown"
|
147
|
+
}
|
148
|
+
end
|
161
149
|
end
|
162
150
|
end
|
163
151
|
end
|
@@ -165,23 +153,47 @@ module RepoMate
|
|
165
153
|
end
|
166
154
|
|
167
155
|
# Removes a package
|
168
|
-
def
|
156
|
+
def activate(entry)
|
157
|
+
link_workload = []
|
158
|
+
|
159
|
+
package = Package.new(entry[:fullname], entry[:suitename], entry[:component])
|
160
|
+
dists = Architecture.new(package.architecture, entry[:component], entry[:suitename], "dists")
|
161
|
+
dists_fullname = File.join(dists.directory, package.basename)
|
162
|
+
|
163
|
+
link_workload << {
|
164
|
+
:source_fullname => entry[:fullname],
|
165
|
+
:destination_fullname => dists_fullname,
|
166
|
+
:suitename => package.suitename,
|
167
|
+
:component => package.component,
|
168
|
+
:architecture => package.architecture
|
169
|
+
}
|
170
|
+
if File.exists?(dists_fullname)
|
171
|
+
puts "Package already activated"
|
172
|
+
else
|
173
|
+
@link.create(link_workload)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# Removes a package
|
178
|
+
def deactivate(entry, mode)
|
169
179
|
unlink_workload = []
|
170
180
|
|
171
181
|
@repository.categories.each do |category|
|
172
|
-
|
182
|
+
next if mode.eql?("deactivate") && category.eql?("pool")
|
183
|
+
|
184
|
+
path = Dir.glob(File.join(Cfg.rootdir, category, entry[:suitename], entry[:component], "*", entry[:basename]))
|
173
185
|
|
174
186
|
Dir.glob(path).each do |fullname|
|
175
187
|
unlink_workload << {
|
176
188
|
:destination_fullname => fullname,
|
177
189
|
:category => category,
|
178
|
-
:suitename =>
|
179
|
-
:component =>
|
190
|
+
:suitename => entry[:suitename],
|
191
|
+
:component => entry[:component]
|
180
192
|
}
|
181
193
|
end
|
182
194
|
end
|
183
195
|
|
184
|
-
@checkpoint.delete_package(
|
196
|
+
@checkpoint.delete_package(entry) if mode.eql?("remove")
|
185
197
|
@link.destroy(unlink_workload)
|
186
198
|
end
|
187
199
|
end
|
data/lib/repomate/checkpoint.rb
CHANGED
@@ -96,12 +96,12 @@ module RepoMate
|
|
96
96
|
end
|
97
97
|
|
98
98
|
# Deletes a package from checkpoint table
|
99
|
-
def delete_package(
|
99
|
+
def delete_package(entry)
|
100
100
|
sql = "delete from checkpoints where
|
101
|
-
basename = '#{
|
102
|
-
suitename = '#{
|
103
|
-
component = '#{
|
104
|
-
architecture = '#{
|
101
|
+
basename = '#{entry[:basename]}' and
|
102
|
+
suitename = '#{entry[:suitename]}' and
|
103
|
+
component = '#{entry[:component]}' and
|
104
|
+
architecture = '#{entry[:architecture]}'"
|
105
105
|
|
106
106
|
@cpdb.query(sql)
|
107
107
|
end
|
data/lib/repomate/cli.rb
CHANGED
@@ -73,26 +73,9 @@ module RepoMate
|
|
73
73
|
|
74
74
|
# Save a checkpoint
|
75
75
|
def save_checkpoint
|
76
|
-
# Add verification and some output here
|
77
76
|
@checkpoint.create
|
78
77
|
end
|
79
78
|
|
80
|
-
# List all packages, see cli output
|
81
|
-
def list_packages(options)
|
82
|
-
if options.category?
|
83
|
-
architecture = "unknown"
|
84
|
-
|
85
|
-
packages = @repomate.list_packages(options[:category])
|
86
|
-
packages.each do |package|
|
87
|
-
architecture = package[:architecture] if package[:architecture]
|
88
|
-
printf "%-50s%-20s%s\n", package[:controlfile]['Package'], package[:controlfile]['Version'], "#{package[:suitename]}/#{package[:component]}/#{architecture}"
|
89
|
-
end
|
90
|
-
else
|
91
|
-
STDERR.puts "Specify a category with [-r|--category]"
|
92
|
-
exit 1
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
79
|
# Choose a checkpoint to restore.
|
97
80
|
def choose_checkpoint
|
98
81
|
list = @checkpoint.list
|
@@ -126,24 +109,68 @@ Everything between the last two \"publish (-P) commands\" will be lost if you pr
|
|
126
109
|
end
|
127
110
|
end
|
128
111
|
|
129
|
-
#
|
130
|
-
def
|
131
|
-
|
132
|
-
|
133
|
-
|
112
|
+
# List all packages, see cli output
|
113
|
+
def listpackages(options)
|
114
|
+
@repomate.listpackages.each do |entry|
|
115
|
+
next unless entry[:category].eql?(options[:category])
|
116
|
+
architecture = entry[:architecture] if entry[:architecture]
|
117
|
+
printf "%-50s%-20s%-10s%s\n", entry[:controlfile]['Package'], entry[:controlfile]['Version'], "#{entry[:category]}", "#{entry[:suitename]}/#{entry[:component]}/#{architecture}"
|
134
118
|
end
|
119
|
+
end
|
135
120
|
|
136
|
-
|
137
|
-
|
138
|
-
|
121
|
+
# Choose a package
|
122
|
+
def choose_package(mode)
|
123
|
+
packages = []
|
124
|
+
number = 0
|
125
|
+
|
126
|
+
@repomate.listpackages.each do |entry|
|
127
|
+
next if entry[:category].eql?("stage")
|
128
|
+
if mode.eql?("activate")
|
129
|
+
file = File.join(Cfg.rootdir, "dists", entry[:suitename], entry[:component], "binary-#{entry[:architecture]}", entry[:basename])
|
130
|
+
next if File.exists?(file)
|
131
|
+
elsif mode.eql?("deactivate")
|
132
|
+
next unless entry[:category].eql?("dists")
|
133
|
+
elsif mode.eql?("remove")
|
134
|
+
next unless entry[:category].eql?("pool")
|
135
|
+
end
|
136
|
+
number += 1
|
137
|
+
packages << {
|
138
|
+
:number => number,
|
139
|
+
:basename => entry[:basename],
|
140
|
+
:fullname => entry[:fullname],
|
141
|
+
:category => entry[:category],
|
142
|
+
:suitename => entry[:suitename],
|
143
|
+
:component => entry[:component],
|
144
|
+
:architecture => entry[:architecture],
|
145
|
+
:controlfile => entry[:controlfile]
|
146
|
+
}
|
147
|
+
end
|
139
148
|
|
140
|
-
if
|
141
|
-
puts "
|
142
|
-
exit 0
|
149
|
+
if number.zero?
|
150
|
+
puts "There are no packages to #{mode}"
|
143
151
|
else
|
144
|
-
|
145
|
-
|
146
|
-
|
152
|
+
puts "Select a package by entering the appropriate number\n\n"
|
153
|
+
|
154
|
+
packages.each do |entry|
|
155
|
+
printf "%-6s%-50s%-20s%s\n", "#{entry[:number]})", entry[:controlfile]['Package'], entry[:controlfile]['Version'], "#{entry[:suitename]}/#{entry[:component]}"
|
156
|
+
end
|
157
|
+
|
158
|
+
printf "\n%s", "Enter number or [q|quit] to abord: "
|
159
|
+
input = STDIN.gets
|
160
|
+
number = input.to_i
|
161
|
+
|
162
|
+
if input =~ /(q|quit)/
|
163
|
+
puts "Aborting..."
|
164
|
+
exit 0
|
165
|
+
else
|
166
|
+
packages.each do |entry|
|
167
|
+
if entry[:number].eql?(number)
|
168
|
+
if mode.eql?("activate")
|
169
|
+
@repomate.activate(entry)
|
170
|
+
else
|
171
|
+
@repomate.deactivate(entry, mode)
|
172
|
+
end
|
173
|
+
end
|
147
174
|
end
|
148
175
|
end
|
149
176
|
end
|
@@ -34,9 +34,10 @@ module RepoMate
|
|
34
34
|
:architectures => [ "all", "amd64" ],
|
35
35
|
:origin => 'Repository',
|
36
36
|
:label => 'Repository',
|
37
|
-
:
|
37
|
+
:gpg => false,
|
38
|
+
:gpg_enable => false, # obsolete in a while
|
38
39
|
:gpg_email => 'someone@example.net',
|
39
|
-
:gpg_password => 'secret'
|
40
|
+
:gpg_password => 'secret'
|
40
41
|
}
|
41
42
|
|
42
43
|
unless filecontent.empty?
|
data/lib/repomate/metafile.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: repomate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-06-
|
13
|
+
date: 2012-06-09 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: slop
|
17
|
-
requirement: &
|
17
|
+
requirement: &70335555719140 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 3.0.4
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70335555719140
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: gpgme
|
28
|
-
requirement: &
|
28
|
+
requirement: &70335555718620 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 2.0.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70335555718620
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: sqlite3
|
39
|
-
requirement: &
|
39
|
+
requirement: &70335555718120 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
version: 1.3.6
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70335555718120
|
48
48
|
description: A tool to manage Debian repositories
|
49
49
|
email:
|
50
50
|
- flo@doobie.cc
|