delta: Code style fixes

Also replace deprecated .has_key() with "in" keyword.
This commit is contained in:
Fatih Aşıcı
2010-06-20 15:32:49 +00:00
parent dc652a3026
commit 8c84f29473
2 changed files with 49 additions and 25 deletions
+18 -11
View File
@@ -1,6 +1,6 @@
# -*- coding:utf-8 -*- # -*- coding:utf-8 -*-
# #
# Copyright (C) 2005 - 2007, TUBITAK/UEKAE # Copyright (C) 2005-2010, TUBITAK/UEKAE
# #
# This program is free software; you can redistribute it and/or modify it under # This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free # the terms of the GNU General Public License as published by the Free
@@ -19,15 +19,21 @@ _ = __trans.ugettext
import pisi.cli.command as command import pisi.cli.command as command
import pisi.context as ctx import pisi.context as ctx
class Delta(command.Command):
__doc__ = _("""Creates delta PiSi packages usage = _("""Creates delta PiSi packages
Usage: delta oldpackage newpackage Usage: delta oldpackage newpackage
Delta command finds the changed files between the given packages by comparing the sha1sum of the files Delta command finds the changed files between the given
and creates a delta pisi package with the changed files between two releases. packages by comparing the sha1sum of the files and creates
a delta pisi package with the changed files between two
releases.
""") """)
class Delta(command.Command):
__doc__ = usage
__metaclass__ = command.autocommand __metaclass__ = command.autocommand
def __init__(self, args): def __init__(self, args):
@@ -36,17 +42,17 @@ and creates a delta pisi package with the changed files between two releases.
name = ("delta", "dt") name = ("delta", "dt")
def options(self): def options(self):
group = optparse.OptionGroup(self.parser, _("delta options")) group = optparse.OptionGroup(self.parser, _("delta options"))
self.add_options(group) self.add_options(group)
self.parser.add_option_group(group) self.parser.add_option_group(group)
def add_options(self, group): def add_options(self, group):
group.add_option("-O", "--output-dir", action="store", default=None, group.add_option("-O", "--output-dir",
help=_("Output directory for produced packages")) action="store",
default=None,
help=_("Output directory for produced packages"))
def run(self): def run(self):
from pisi.operations.delta import create_delta_package from pisi.operations.delta import create_delta_package
self.init(database=False, write=False) self.init(database=False, write=False)
@@ -56,7 +62,8 @@ and creates a delta pisi package with the changed files between two releases.
return return
if ctx.get_option('output_dir'): if ctx.get_option('output_dir'):
ctx.ui.info(_('Output directory: %s') % ctx.config.options.output_dir) ctx.ui.info(_('Output directory: %s')
% ctx.config.options.output_dir)
else: else:
ctx.ui.info(_('Outputting packages in the working directory.')) ctx.ui.info(_('Outputting packages in the working directory.'))
ctx.config.options.output_dir = '.' ctx.config.options.output_dir = '.'
+30 -13
View File
@@ -20,6 +20,7 @@ import pisi.package
import pisi.util as util import pisi.util as util
import pisi.archive as archive import pisi.archive as archive
def create_delta_package(old_package, new_package): def create_delta_package(old_package, new_package):
if old_package == new_package: if old_package == new_package:
@@ -37,18 +38,27 @@ def create_delta_package(old_package, new_package):
files_delta = find_delta(oldfiles, newfiles) files_delta = find_delta(oldfiles, newfiles)
ctx.ui.info(_("Creating delta PiSi package between %s %s") % (old_package, new_package)) ctx.ui.info(_("Creating delta PiSi package between %s %s")
% (old_package, new_package))
# Unpack new package to temp # Unpack new package to temp
newpkg_name = util.package_name(newmd.package.name, newmd.package.version, newmd.package.release, newmd.package.build, False) newpkg_name = util.package_name(newmd.package.name,
newmd.package.version,
newmd.package.release,
newmd.package.build,
False)
newpkg_path = util.join_path(ctx.config.tmp_dir(), newpkg_name) newpkg_path = util.join_path(ctx.config.tmp_dir(), newpkg_name)
newpkg.extract_to(newpkg_path, True) newpkg.extract_to(newpkg_path, True)
tar = archive.ArchiveTar(util.join_path(newpkg_path, ctx.const.install_tar_lzma), "tarlzma", False, False) newpkg_archive = util.join_path(newpkg_path, ctx.const.install_tar_lzma)
tar = archive.ArchiveTar(newpkg_archive, "tarlzma", False, False)
tar.unpack_dir(newpkg_path) tar.unpack_dir(newpkg_path)
# Create delta package # Create delta package
deltaname = "%s-%s-%s%s" % (oldmd.package.name, oldmd.package.build, newmd.package.build, ctx.const.delta_package_suffix) deltaname = "%s-%s-%s%s" % (oldmd.package.name,
oldmd.package.build,
newmd.package.build,
ctx.const.delta_package_suffix)
outdir = ctx.get_option("output_dir") outdir = ctx.get_option("output_dir")
if outdir: if outdir:
@@ -68,16 +78,21 @@ def create_delta_package(old_package, new_package):
deltapkg.add_to_package(ctx.const.metadata_xml) deltapkg.add_to_package(ctx.const.metadata_xml)
deltapkg.add_to_package(ctx.const.files_xml) deltapkg.add_to_package(ctx.const.files_xml)
# only metadata information may change in a package, so no install.tar.lzma added to delta package # only metadata information may change in a package,
# so no install.tar.lzma added to delta package
if files_delta: if files_delta:
# Sort the files in-place according to their path for an ordered # Sort the files in-place according to their path for an ordered
# tarfile layout which dramatically improves the compression performance # tarfile layout which dramatically improves the compression
# of lzma. This improvement is stolen from build.py (commit r23485). # performance of lzma. This improvement is stolen from build.py
# (commit r23485).
files_delta.sort(key=lambda x: x.path) files_delta.sort(key=lambda x: x.path)
ctx.build_leftover = util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma) ctx.build_leftover = util.join_path(ctx.config.tmp_dir(),
ctx.const.install_tar_lzma)
tar = archive.ArchiveTar(util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma), "tarlzma") deltapkg_archive = util.join_path(ctx.config.tmp_dir(),
ctx.const.install_tar_lzma)
tar = archive.ArchiveTar(deltapkg_archive, "tarlzma")
for f in files_delta: for f in files_delta:
tar.add_to_archive(f.path) tar.add_to_archive(f.path)
tar.close() tar.close()
@@ -99,6 +114,7 @@ def create_delta_package(old_package, new_package):
# return delta package name # return delta package name
return deltaname return deltaname
# Hash not equals (these are the deltas) # Hash not equals (these are the deltas)
# Hash equal but path different ones (these are the relocations) # Hash equal but path different ones (these are the relocations)
# Hash and also path equal ones (do nothing) # Hash and also path equal ones (do nothing)
@@ -109,16 +125,17 @@ def find_delta(oldfiles, newfiles):
for f in newfiles.list: for f in newfiles.list:
hashto_files.setdefault(f.hash, []).append(f) hashto_files.setdefault(f.hash, []).append(f)
files_new = set(map(lambda x:x.hash, newfiles.list)) files_new = set(map(lambda x: x.hash, newfiles.list))
files_old = set(map(lambda x:x.hash, oldfiles.list)) files_old = set(map(lambda x: x.hash, oldfiles.list))
files_delta = files_new - files_old files_delta = files_new - files_old
deltas = [] deltas = []
for h in files_delta: for h in files_delta:
deltas.extend(hashto_files[h]) deltas.extend(hashto_files[h])
# Directory hashes are None. There was a bug with PolicyKit that should have an empty directory. # Directory hashes are None. There was a bug with PolicyKit that
if hashto_files.has_key(None): # should have an empty directory.
if None in hashto_files:
deltas.extend(hashto_files[None]) deltas.extend(hashto_files[None])
return deltas return deltas