repomate 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/bin/repomate CHANGED
@@ -9,6 +9,9 @@ require 'repomate'
9
9
  require 'rubygems'
10
10
  require 'slop'
11
11
 
12
+ # check for dpkg
13
+ raise "dpkg is not installed or configured" unless File.exists?(RepoMate::Cfg.dpkg)
14
+
12
15
  options = Slop.parse do
13
16
  banner "RepoMate (A simple debian repository management tool)
14
17
 
@@ -23,12 +26,13 @@ options = Slop.parse do
23
26
  load - Load a checkpoint
24
27
  listpackages - List packages
25
28
  setup - Setup the pool
29
+ remove - Removes a package from production
26
30
 
27
31
  Options:"
28
32
  on :s, :suitename=, "Set the name of the suite (lenny/squeeze...)", :argument => true
29
33
  on :c, :component=, "Set the name of the component (main/contrib...)", :default => "main"
30
34
  on :a, :architecture=, "Set the name of the component (main/contrib...)", :argument => true
31
- on :r, :repodir, "Type of pool/category (stage/pool/production)", :argument => true
35
+ on :r, :repodir, "Type of pool/category (stage/pool/dists)", :argument => true
32
36
  on :force, "Force action", :default => false
33
37
  on :h, :help, 'Print this help message', :tail => true do
34
38
  puts help
@@ -56,8 +60,10 @@ elsif ARGV.include?("save")
56
60
  cli.save_checkpoint
57
61
  elsif ARGV.include?("load")
58
62
  cli.choose_checkpoint
63
+ elsif ARGV.include?("remove")
64
+ cli.choose_package("remove")
59
65
  elsif ARGV.include?("listpackages")
60
- cli.list_packages(options)
66
+ cli.list_packages(options[:repodir])
61
67
  elsif ARGV.include?("setup")
62
68
  cli.setup(options)
63
69
  else
data/lib/repomate/base.rb CHANGED
@@ -13,8 +13,8 @@ module RepoMate
13
13
  FileUtils.mkdir_p(Cfg.rootdir)
14
14
 
15
15
  @repository = Repository.new
16
- @checkpoint = Checkpoint.new
17
16
  @link = Link.new
17
+ @checkpoint = Checkpoint.new
18
18
  end
19
19
 
20
20
  # Add's a package to the staging area
@@ -73,20 +73,16 @@ module RepoMate
73
73
  FileUtils.move(entry[:source_fullname], entry[:destination_fullname])
74
74
  end
75
75
  workload = newworkload
76
-
77
- @checkpoint.create
78
76
  check_versions(workload)
79
77
  end
80
78
 
81
79
  # Does the link job after checking versions through dpkg
82
80
  def check_versions(workload)
83
- dpkg = Cfg.dpkg
84
-
85
- raise "dpkg is not installed" unless File.exists?(dpkg)
86
-
87
81
  link_workload = []
88
82
  unlink_workload = []
89
83
 
84
+ dpkg = Cfg.dpkg
85
+
90
86
  workload.each do |entry|
91
87
  source_package = Package.new(entry[:source_fullname], entry[:suitename], entry[:component])
92
88
  destination_fullname = File.join(entry[:destination_dir], source_package.newbasename)
@@ -124,14 +120,19 @@ module RepoMate
124
120
  # Returns a list of packages
125
121
  def list_packages(category)
126
122
  packages = []
123
+ number = 0
127
124
  if category.eql?("stage")
128
125
  Component.dataset(category).each do |entry|
129
126
  source = Component.new(entry[:component], entry[:suitename], category)
130
127
  source.files.each do |fullname|
131
128
  package = Package.new(fullname, entry[:suitename], entry[:component])
132
129
 
130
+ number += 1
131
+
133
132
  packages << {
133
+ :number => number,
134
134
  :fullname => fullname,
135
+ :basename => File.basename(fullname),
135
136
  :controlfile => package.controlfile,
136
137
  :component => entry[:component],
137
138
  :suitename => entry[:suitename]
@@ -144,8 +145,12 @@ module RepoMate
144
145
  source.files.each do |fullname|
145
146
  package = Package.new(fullname, entry[:suitename], entry[:component])
146
147
 
148
+ number += 1
149
+
147
150
  packages << {
151
+ :number => number,
148
152
  :fullname => fullname,
153
+ :basename => File.basename(fullname),
149
154
  :controlfile => package.controlfile,
150
155
  :component => entry[:component],
151
156
  :suitename => entry[:suitename],
@@ -156,6 +161,20 @@ module RepoMate
156
161
  end
157
162
  packages
158
163
  end
164
+
165
+ # Removes a package
166
+ def remove(package)
167
+ unlink_workload = []
168
+
169
+ path = File.join(Cfg.rootdir, "*", package[:suitename], package[:component], "*", package[:basename])
170
+
171
+ Dir.glob(path).each do |fullname|
172
+ unlink_workload << { :destination_fullname => fullname }
173
+ end
174
+
175
+ @checkpoint.delete_package(package)
176
+ @link.destroy(unlink_workload)
177
+ end
159
178
  end
160
179
  end
161
180
 
@@ -87,6 +87,11 @@ module RepoMate
87
87
  @link.create(link_workload)
88
88
  end
89
89
 
90
+ # Deletes a package from checkpoint table
91
+ def delete_package(package)
92
+ @cpdb.query("delete from checkpoints where basename = '#{package[:basename]}' and suitename = '#{package[:suitename]}' and component = '#{package[:component]}' and architecture = '#{package[:architecture]}'")
93
+ end
94
+
90
95
  # Returns a list of checkpoints for the cli
91
96
  def list
92
97
  order = 0
data/lib/repomate/cli.rb CHANGED
@@ -41,6 +41,7 @@ module RepoMate
41
41
 
42
42
  # Get's all packages from the staging area. Packages need to be confirmed here.
43
43
  def publish(options)
44
+ action = true
44
45
  @repomate.prepare_publish.each do |entry|
45
46
  workload = []
46
47
  basename = File.basename(entry[:source_fullname])
@@ -53,6 +54,10 @@ module RepoMate
53
54
  end
54
55
 
55
56
  if options.force? || input =~ /(y|yes)/
57
+ @checkpoint.create if action
58
+
59
+ action = false
60
+
56
61
  workload << {
57
62
  :source_fullname => entry[:source_fullname],
58
63
  :destination_fullname => entry[:destination_fullname],
@@ -61,6 +66,7 @@ module RepoMate
61
66
  :architecture => entry[:architecture]
62
67
  }
63
68
  end
69
+
64
70
  @repomate.publish(workload) unless workload.empty?
65
71
  end
66
72
  end
@@ -72,11 +78,11 @@ module RepoMate
72
78
  end
73
79
 
74
80
  # List all packages, see cli output
75
- def list_packages(options)
76
- if options.repodir?
81
+ def list_packages(repodir)
82
+ if repodir
77
83
  architecture = "unknown"
78
84
 
79
- packages = @repomate.list_packages(options[:repodir])
85
+ packages = @repomate.list_packages(repodir)
80
86
  packages.each do |package|
81
87
  architecture = package[:architecture] if package[:architecture]
82
88
  printf "%-50s%-20s%s\n", package[:controlfile]['Package'], package[:controlfile]['Version'], "#{package[:suitename]}/#{package[:component]}/#{architecture}"
@@ -119,6 +125,29 @@ Everything between the last two \"publish (-P) commands\" will be lost if you pr
119
125
  @checkpoint.load(number)
120
126
  end
121
127
  end
128
+
129
+ # Choose a package
130
+ def choose_package(action)
131
+ packages = @repomate.list_packages("dists")
132
+ packages.each do |package|
133
+ printf "%d) %-50s%-20s%s\n", package[:number], package[:controlfile]['Package'], package[:controlfile]['Version'], "#{package[:suitename]}/#{package[:component]}"
134
+ end
135
+
136
+ printf "\n%s", "Enter number or [q|quit] to abord: "
137
+ input = STDIN.gets
138
+ number = input.to_i
139
+
140
+ if input =~ /(q|quit)/
141
+ puts "Aborting..."
142
+ exit 0
143
+ else
144
+ packages.each do |package|
145
+ if package[:number].eql?(number)
146
+ @repomate.remove(package) if action.eql?("remove")
147
+ end
148
+ end
149
+ end
150
+ end
122
151
  end
123
152
  end
124
153
 
@@ -28,7 +28,6 @@ module RepoMate
28
28
 
29
29
  defaults = {
30
30
  :rootdir => '/var/lib/repomate/repository',
31
- :logdir => '/var/log/repomate',
32
31
  :dpkg => '/usr/bin/dpkg',
33
32
  :suites => [ "lenny", "squeeze" ],
34
33
  :components => [ "main", "contrib" ],
data/lib/repomate/link.rb CHANGED
@@ -12,6 +12,7 @@ module RepoMate
12
12
  @metafile = Metafile.new
13
13
  end
14
14
 
15
+ # Checks if file exists
15
16
  def exist?(fullname)
16
17
  File.exists?(fullname)
17
18
  end
@@ -45,7 +45,7 @@ module RepoMate
45
45
  destroy
46
46
  create_packages
47
47
 
48
- if Cfg.gpg_enable
48
+ if Cfg.gpg_enable.eql?(true)
49
49
  if Cfg.gpg_password.nil? || Cfg.gpg_email.nil?
50
50
  puts "Configure password and email for GPG!"
51
51
  exit 1
@@ -85,7 +85,6 @@ module RepoMate
85
85
  def create_release
86
86
  source_category = "dists"
87
87
  suites = []
88
-
89
88
  archrelease_template = ERB.new File.new(File.join(File.dirname(__FILE__), "templates/archrelease.erb")).read, nil, "%"
90
89
  suiterelease_template = ERB.new File.new(File.join(File.dirname(__FILE__), "templates/suiterelease.erb")).read, nil, "%"
91
90
 
@@ -118,7 +117,7 @@ module RepoMate
118
117
  rescue
119
118
  destroy
120
119
  create_packages
121
- puts "GPG email/password incorrect"
120
+ puts "GPG email/password incorrect or gpg is not installed!"
122
121
  return
123
122
  end
124
123
  end
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.1.4
4
+ version: 0.1.5
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-05-14 00:00:00.000000000 Z
13
+ date: 2012-06-06 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: slop
17
- requirement: !ruby/object:Gem::Requirement
17
+ requirement: &70248180314500 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,15 +22,10 @@ dependencies:
22
22
  version: 3.0.4
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ~>
29
- - !ruby/object:Gem::Version
30
- version: 3.0.4
25
+ version_requirements: *70248180314500
31
26
  - !ruby/object:Gem::Dependency
32
27
  name: gpgme
33
- requirement: !ruby/object:Gem::Requirement
28
+ requirement: &70248180314020 !ruby/object:Gem::Requirement
34
29
  none: false
35
30
  requirements:
36
31
  - - ~>
@@ -38,15 +33,10 @@ dependencies:
38
33
  version: 2.0.0
39
34
  type: :runtime
40
35
  prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ~>
45
- - !ruby/object:Gem::Version
46
- version: 2.0.0
36
+ version_requirements: *70248180314020
47
37
  - !ruby/object:Gem::Dependency
48
38
  name: sqlite3
49
- requirement: !ruby/object:Gem::Requirement
39
+ requirement: &70248180313420 !ruby/object:Gem::Requirement
50
40
  none: false
51
41
  requirements:
52
42
  - - ~>
@@ -54,12 +44,7 @@ dependencies:
54
44
  version: 1.3.6
55
45
  type: :runtime
56
46
  prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ~>
61
- - !ruby/object:Gem::Version
62
- version: 1.3.6
47
+ version_requirements: *70248180313420
63
48
  description: A tool to manage Debian repositories
64
49
  email:
65
50
  - flo@doobie.cc
@@ -108,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
93
  version: '0'
109
94
  requirements: []
110
95
  rubyforge_project:
111
- rubygems_version: 1.8.21
96
+ rubygems_version: 1.8.6
112
97
  signing_key:
113
98
  specification_version: 3
114
99
  summary: A tool to manage Debian repositories