X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fcopy_installer.py;h=2e8a04875fdcd3c5a2a7582f52ee643aa464e5a7;hb=98d086ddda3772fb58c1bfa97478e8044596b569;hp=8e767d2240f67276aed7fe139716521df80de90a;hpb=c435e4347a24df8740c2e052ce5794d29a53c7a7;p=dak.git diff --git a/dak/copy_installer.py b/dak/copy_installer.py old mode 100644 new mode 100755 index 8e767d22..2e8a0487 --- a/dak/copy_installer.py +++ b/dak/copy_installer.py @@ -1,8 +1,70 @@ #!/usr/bin/env python +""" Copies the installer from one suite to another """ +# Copyright (C) 2011 Torsten Werner + +# 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 Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +################################################################################ + from daklib.config import Config -import glob, os.path, re, shutil +import apt_pkg, glob, os.path, re, shutil, sys + +def usage(exit_code = 0): + print """Usage: dak copy-installer [OPTION]... VERSION + -h, --help show this help and exit + -s, --source source suite (defaults to unstable) + -d, --destination destination suite (defaults to testing) + -n, --no-action don't change anything + +Exactly 1 version must be specified.""" + sys.exit(exit_code) + +def main(): + cnf = Config() + Arguments = [ + ('h', "help", "Copy-Installer::Options::Help"), + ('s', "source", "Copy-Installer::Options::Source", "HasArg"), + ('d', "destination", "Copy-Installer::Options::Destination", "HasArg"), + ('n', "no-action", "Copy-Installer::Options::No-Action"), + ] + for option in [ "help", "source", "destination", "no-action" ]: + if not cnf.has_key("Copy-Installer::Options::%s" % (option)): + cnf["Copy-Installer::Options::%s" % (option)] = "" + extra_arguments = apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) + Options = cnf.subtree("Copy-Installer::Options") + + if Options["Help"]: + usage() + if len(extra_arguments) != 1: + usage(1) + + initializer = { "version": extra_arguments[0] } + if Options["Source"] != "": + initializer["source"] = Options["Source"] + if Options["Destination"] != "": + initializer["dest"] = Options["Destination"] + + copier = InstallerCopier(**initializer) + print copier.get_message() + if Options["No-Action"]: + print 'Do nothing because --no-action has been set.' + else: + copier.do_copy() + print 'Installer has been copied successfully.' root_dir = Config()['Dir::Root'] @@ -30,7 +92,7 @@ class InstallerCopier: def check_dir(self, dir, message): if not os.path.isdir(dir): - raise IOError(message) + raise IOError("%s (%s)" % (message, dir)) def check_architecture(self, arch_dir): architecture = re.sub('.*?/installer-(.*?)/.*', r'\1', arch_dir) @@ -59,8 +121,12 @@ Architectures to skip: %(skip_arch_list)s""" % { def do_copy(self): for source, dest in self.trees_to_copy: - shutil.copytree(source, dest) + shutil.copytree(source, dest, symlinks=True) for source, dest in self.symlinks_to_create: if os.path.lexists(dest): os.unlink(dest) os.symlink(source, dest) + + +if __name__ == '__main__': + main()