Skip to content
This repository has been archived by the owner on Jul 10, 2022. It is now read-only.

Heap codename switch #165

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions lib/deb/s3/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ def list
false, false)
manifest.packages.map do |package|
if options[:long]
package.generate
package.generate(options[:codename])
else
[package.name, package.full_version, package.architecture].tap do |row|
row.each_with_index do |col, i|
Expand Down Expand Up @@ -331,7 +331,7 @@ def show(package_name, version, arch)
error "No such package found."
end

puts package.generate
puts package.generate(options[:codename])
end

desc "copy PACKAGE TO_CODENAME TO_COMPONENT ",
Expand Down Expand Up @@ -515,9 +515,9 @@ def verify
missing_packages = []

manifest.packages.each do |p|
unless Deb::S3::Utils.s3_exists? p.url_filename_encoded
unless Deb::S3::Utils.s3_exists? p.url_filename_encoded(options[:codename])
sublog("The following packages are missing:\n\n") if missing_packages.empty?
puts(p.generate)
puts(p.generate(options[:codename]))
puts("")

missing_packages << p
Expand Down
12 changes: 6 additions & 6 deletions lib/deb/s3/manifest.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,11 @@ def add(pkg, preserve_versions, needs_uploading=true)
packages.each { |p|
next unless p.name == pkg.name && \
p.full_version == pkg.full_version && \
File.basename(p.url_filename(@codename)) != \
File.basename(pkg.url_filename(@codename))
File.basename(p.url_filename(@component)) != \
File.basename(pkg.url_filename(@component))
raise AlreadyExistsError,
"package #{pkg.name}_#{pkg.full_version} already exists " \
"with different filename (#{p.url_filename(@codename)})"
"with different filename (#{p.url_filename(@component)})"
}
end
if preserve_versions
Expand Down Expand Up @@ -96,7 +96,7 @@ def delete_package(pkg, versions=nil)
end

def generate
@packages.collect { |pkg| pkg.generate(@codename) }.join("\n")
@packages.collect { |pkg| pkg.generate(@component) }.join("\n")
end

def write_to_s3
Expand All @@ -105,8 +105,8 @@ def write_to_s3
unless self.skip_package_upload
# store any packages that need to be stored
@packages_to_be_upload.each do |pkg|
yield pkg.url_filename(@codename) if block_given?
s3_store(pkg.filename, pkg.url_filename(@codename), 'application/octet-stream; charset=binary', self.cache_control, self.fail_if_exists)
yield pkg.url_filename(@component) if block_given?
s3_store(pkg.filename, pkg.url_filename(@component), 'application/octet-stream; charset=binary', self.cache_control, self.fail_if_exists)
end
end

Expand Down
29 changes: 20 additions & 9 deletions lib/deb/s3/package.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,20 +59,31 @@ def extract_control(package)
if system("which dpkg > /dev/null 2>&1")
`dpkg -f #{package}`
else
# use ar to determine control file name (control.ext)
package_files = `ar t #{package}`
control_file = package_files.split("\n").select do |file|
file.start_with?("control.")
end.first
if control_file === "control.tar.gz"
compression = "z"
else
compression = "J"
end

# ar fails to find the control.tar.gz tarball within the .deb
# on Mac OS. Try using ar to list the control file, if found,
# use ar to extract, otherwise attempt with tar which works on OS X.
extract_control_tarball_cmd = "ar p #{package} control.tar.gz"
extract_control_tarball_cmd = "ar p #{package} #{control_file}"

begin
safesystem("ar t #{package} control.tar.gz &> /dev/null")
safesystem("ar t #{package} #{control_file} &> /dev/null")
rescue SafeSystemError
warn "Failed to find control data in .deb with ar, trying tar."
extract_control_tarball_cmd = "tar zxf #{package} --to-stdout control.tar.gz"
extract_control_tarball_cmd = "tar #{compression}xf #{package} --to-stdout #{control_file}"
end

Dir.mktmpdir do |path|
safesystem("#{extract_control_tarball_cmd} | tar -zxf - -C #{path}")
safesystem("#{extract_control_tarball_cmd} | tar -#{compression}xf - -C #{path}")
File.read(File.join(path, "control"))
end
end
Expand Down Expand Up @@ -127,15 +138,15 @@ def filename=(f)
@filename
end

def url_filename(codename)
@url_filename || "pool/#{codename}/#{self.name[0]}/#{self.name[0..1]}/#{File.basename(self.filename)}"
def url_filename(component)
@url_filename || "pool/#{component}/#{self.name[0]}/#{self.name[0..1]}/#{File.basename(self.filename)}"
end

def url_filename_encoded(codename)
@url_filename || "pool/#{codename}/#{self.name[0]}/#{self.name[0..1]}/#{s3_escape(File.basename(self.filename))}"
def url_filename_encoded(component)
@url_filename || "pool/#{component}/#{self.name[0]}/#{self.name[0..1]}/#{s3_escape(File.basename(self.filename))}"
end

def generate(codename)
def generate(component)
template("package.erb").result(binding)
end

Expand Down
2 changes: 1 addition & 1 deletion lib/deb/s3/templates/package.erb
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Origin: <%= attributes[:deb_origin] %>
<% end -%>
Priority: <%= attributes[:deb_priority] %>
Homepage: <%= url or "http://nourlgiven.example.com/" %>
Filename: <%= url_filename_encoded(codename) %>
Filename: <%= url_filename_encoded(component) %>
<% if size -%>
Size: <%= size %>
<% end -%>
Expand Down