mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-03-13 08:01:09 +00:00
Whitespace -> PEP-8
This commit is contained in:
parent
04eb3ada8b
commit
b78b21f43e
684
pbuilder-dist
684
pbuilder-dist
@ -12,12 +12,12 @@
|
|||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
# as published by the Free Software Foundation; either version 2
|
# as published by the Free Software Foundation; either version 2
|
||||||
# of the License, or (at your option) any later version.
|
# of the License, or (at your option) any later version.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# See file /usr/share/common-licenses/GPL for more details.
|
# See file /usr/share/common-licenses/GPL for more details.
|
||||||
#
|
#
|
||||||
# ##################################################################
|
# ##################################################################
|
||||||
@ -35,351 +35,363 @@ from sys import exit, argv, stderr
|
|||||||
|
|
||||||
import ubuntutools.misc
|
import ubuntutools.misc
|
||||||
|
|
||||||
debian_distros = ['etch', 'lenny', 'squeeze', 'sid', 'stable', \
|
debian_distros = ['etch', 'lenny', 'squeeze', 'sid', 'stable', 'testing',
|
||||||
'testing', 'unstable', 'experimental']
|
'unstable', 'experimental']
|
||||||
|
|
||||||
class pbuilder_dist:
|
class pbuilder_dist:
|
||||||
|
|
||||||
def __init__(self, builder):
|
|
||||||
|
|
||||||
# Base directory where pbuilder will put all the files it creates.
|
|
||||||
self.base = None
|
|
||||||
|
|
||||||
# Name of the operation which pbuilder should perform.
|
|
||||||
self.operation = None
|
|
||||||
|
|
||||||
# Wheter additional components should be used or not. That is,
|
|
||||||
# 'universe' and 'multiverse' for Ubuntu chroots and 'contrib'
|
|
||||||
# and 'non-free' for Debian.
|
|
||||||
self.extra_components = True
|
|
||||||
|
|
||||||
# File where the log of the last operation will be saved.
|
|
||||||
self.logfile = None
|
|
||||||
|
|
||||||
# System architecture
|
|
||||||
self.system_architecture = None
|
|
||||||
|
|
||||||
# Build architecture
|
|
||||||
self.build_architecture = None
|
|
||||||
|
|
||||||
# System's distribution
|
|
||||||
self.system_distro = None
|
|
||||||
|
|
||||||
# Target distribution
|
|
||||||
self.target_distro = None
|
|
||||||
|
|
||||||
# This is an identificative string which will either take the form
|
|
||||||
# 'distribution' or 'distribution-architecture'.
|
|
||||||
self.chroot_string = None
|
|
||||||
|
|
||||||
# Authentication method
|
|
||||||
self.auth = 'sudo'
|
|
||||||
|
|
||||||
# Builder
|
|
||||||
self.builder = builder
|
|
||||||
|
|
||||||
# Ensure that the used builder is installed
|
|
||||||
paths = set(os.environ['PATH'].split(':'))
|
|
||||||
paths |= set(('/sbin', '/usr/sbin', '/usr/local/sbin'))
|
|
||||||
if not any(os.path.exists(os.path.join(p, builder)) for p in paths):
|
|
||||||
print >> stderr, 'Error: Could not find "%s".' % builder
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
##############################################################
|
|
||||||
|
|
||||||
self.base = os.path.expanduser(os.environ.get('PBUILDFOLDER', '~/pbuilder/'))
|
|
||||||
|
|
||||||
if not os.path.isdir(self.base):
|
def __init__(self, builder):
|
||||||
try:
|
|
||||||
os.makedirs(self.base)
|
|
||||||
except os.OSError:
|
|
||||||
print >> stderr, ('Error: Cannot create base directory "%s"'
|
|
||||||
% self.base)
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
if 'PBUILDAUTH' in os.environ:
|
|
||||||
self.auth = os.environ['PBUILDAUTH']
|
|
||||||
|
|
||||||
self.system_architecture = ubuntutools.misc.host_architecture()
|
|
||||||
self.system_distro = ubuntutools.misc.system_distribution()
|
|
||||||
if not self.system_architecture or not self.system_distro:
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
self.target_distro = self.system_distro
|
|
||||||
|
|
||||||
##############################################################
|
|
||||||
|
|
||||||
def set_target_distro(self, distro):
|
|
||||||
""" pbuilder_dist.set_target_distro(distro) -> None
|
|
||||||
|
|
||||||
Check if the given target distribution name is correct, if it
|
|
||||||
isn't know to the system ask the user for confirmation before
|
|
||||||
proceeding, and finally either save the value into the appropiate
|
|
||||||
variable or finalize pbuilder-dist's execution.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
if not distro.isalpha():
|
|
||||||
print >> stderr, ('Error: "%s" is an invalid distribution codename.'
|
|
||||||
% distro)
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
if not os.path.isfile(os.path.join('/usr/share/debootstrap/scripts/', distro)):
|
|
||||||
if os.path.isdir('/usr/share/debootstrap/scripts/'):
|
|
||||||
# Debian experimental doesn't have a debootstrap file but
|
|
||||||
# should work nevertheless.
|
|
||||||
if distro not in debian_distros:
|
|
||||||
answer = ask('Warning: Unknown distribution "%s". Do you ' \
|
|
||||||
'want to continue [y/N]? ' % distro)
|
|
||||||
if answer not in ('y', 'Y'):
|
|
||||||
exit(0)
|
|
||||||
else:
|
|
||||||
print >> stderr, 'Please install package "debootstrap".'
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
self.target_distro = distro
|
|
||||||
|
|
||||||
def set_operation(self, operation):
|
|
||||||
""" pbuilder_dist.set_operation -> None
|
|
||||||
|
|
||||||
Check if the given string is a valid pbuilder operation and
|
|
||||||
depending on this either save it into the appropiate variable
|
|
||||||
or finalize pbuilder-dist's execution.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
arguments = ('create', 'update', 'build', 'clean', 'login', 'execute')
|
|
||||||
|
|
||||||
if operation not in arguments:
|
|
||||||
if operation.endswith('.dsc'):
|
|
||||||
if os.path.isfile(operation):
|
|
||||||
self.operation = 'build'
|
|
||||||
return [operation]
|
|
||||||
else:
|
|
||||||
print >> stderr, 'Error: Could not find file "%s".' % operation
|
|
||||||
exit(1)
|
|
||||||
else:
|
|
||||||
print >> stderr, 'Error: "%s" is not a recognized argument.' % operation
|
|
||||||
print >> stderr, 'Please use one of these: %s.' % ', '.join(arguments)
|
|
||||||
exit(1)
|
|
||||||
else:
|
|
||||||
self.operation = operation
|
|
||||||
return []
|
|
||||||
|
|
||||||
def get_command(self, remaining_arguments = None):
|
|
||||||
""" pbuilder_dist.get_command -> string
|
|
||||||
|
|
||||||
Generate the pbuilder command which matches the given configuration
|
|
||||||
and return it as a string.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
if not self.build_architecture:
|
|
||||||
self.chroot_string = self.target_distro
|
|
||||||
self.build_architecture = self.system_architecture
|
|
||||||
else:
|
|
||||||
self.chroot_string = self.target_distro + '-' + self.build_architecture
|
|
||||||
|
|
||||||
prefix = os.path.join(self.base, self.chroot_string)
|
|
||||||
result = '%s_result/' % prefix
|
|
||||||
|
|
||||||
if not self.logfile and self.operation != 'login':
|
|
||||||
self.logfile = os.path.normpath('%s/last_operation.log' % result)
|
|
||||||
|
|
||||||
if not os.path.isdir(result):
|
|
||||||
try:
|
|
||||||
os.makedirs(result)
|
|
||||||
except os.OSError:
|
|
||||||
print >> stderr, ('Error: Cannot create results directory "%s"'
|
|
||||||
% result)
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
if self.builder == 'pbuilder':
|
|
||||||
base = '--basetgz "%s-base.tgz"' % prefix
|
|
||||||
elif self.builder == 'cowbuilder':
|
|
||||||
base = '--basepath "%s-base.cow"' % prefix
|
|
||||||
else:
|
|
||||||
print >> stderr, 'Error: Unrecognized builder "%s".' % self.builder
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
arguments = [
|
|
||||||
'--%s' % self.operation,
|
|
||||||
base,
|
|
||||||
'--distribution', self.target_distro,
|
|
||||||
'--buildresult', result,
|
|
||||||
'--aptcache', '/var/cache/apt/archives/',
|
|
||||||
'--override-config',
|
|
||||||
]
|
|
||||||
|
|
||||||
if self.logfile:
|
# Base directory where pbuilder will put all the files it creates.
|
||||||
arguments += ['--logfile', self.logfile]
|
self.base = None
|
||||||
|
|
||||||
if os.path.exists('/var/cache/archive/'):
|
|
||||||
arguments += ['--bindmounts', '/var/cache/archive/']
|
|
||||||
|
|
||||||
localrepo = '/var/cache/archive/' + self.target_distro
|
# Name of the operation which pbuilder should perform.
|
||||||
if os.path.exists(localrepo):
|
self.operation = None
|
||||||
arguments += [
|
|
||||||
'--othermirror ',
|
|
||||||
'deb file:///var/cache/archive/ %s/' % self.target_distro,
|
|
||||||
]
|
|
||||||
|
|
||||||
if self.target_distro in debian_distros:
|
|
||||||
arguments += ['--mirror', 'http://ftp.debian.org/debian']
|
|
||||||
# work around bug #599695
|
|
||||||
arguments += [
|
|
||||||
'--debootstrapopts',
|
|
||||||
'--keyring=/usr/share/keyrings/debian-archive-keyring.gpg',
|
|
||||||
]
|
|
||||||
components = 'main'
|
|
||||||
if self.extra_components:
|
|
||||||
components += ' contrib non-free'
|
|
||||||
else:
|
|
||||||
if self.build_architecture in ('amd64', 'i386'):
|
|
||||||
arguments += ['--mirror', 'http://archive.ubuntu.com/ubuntu/']
|
|
||||||
elif self.build_architecture == 'powerpc' and self.target_distro == 'dapper':
|
|
||||||
arguments += ['--mirror', 'http://archive.ubuntu.com/ubuntu/']
|
|
||||||
else:
|
|
||||||
arguments += ['--mirror',
|
|
||||||
'http://ports.ubuntu.com/ubuntu-ports/']
|
|
||||||
components = 'main restricted'
|
|
||||||
if self.extra_components:
|
|
||||||
components += ' universe multiverse'
|
|
||||||
|
|
||||||
arguments += ['--components', components]
|
# Wheter additional components should be used or not. That is,
|
||||||
|
# 'universe' and 'multiverse' for Ubuntu chroots and 'contrib'
|
||||||
if self.build_architecture != self.system_architecture:
|
# and 'non-free' for Debian.
|
||||||
arguments += ['--debootstrapopts',
|
self.extra_components = True
|
||||||
'--arch=' + self.build_architecture]
|
|
||||||
|
# File where the log of the last operation will be saved.
|
||||||
apt_conf_dir = os.path.join(self.base, 'etc/%s/apt.conf' % self.target_distro)
|
self.logfile = None
|
||||||
if os.path.exists(apt_conf_dir):
|
|
||||||
arguments += ['--aptconfdir', apt_conf_dir]
|
# System architecture
|
||||||
|
self.system_architecture = None
|
||||||
# Append remaining arguments
|
|
||||||
if remaining_arguments:
|
# Build architecture
|
||||||
arguments.extend(remaining_arguments)
|
self.build_architecture = None
|
||||||
|
|
||||||
# Export the distribution and architecture information to the
|
# System's distribution
|
||||||
# environment so that it is accessible to ~/.pbuilderrc (LP: #628933).
|
self.system_distro = None
|
||||||
return [
|
|
||||||
self.auth,
|
# Target distribution
|
||||||
'ARCH=' + self.build_architecture,
|
self.target_distro = None
|
||||||
'DIST=' + self.target_distro,
|
|
||||||
self.builder,
|
# This is an identificative string which will either take the form
|
||||||
] + arguments
|
# 'distribution' or 'distribution-architecture'.
|
||||||
|
self.chroot_string = None
|
||||||
|
|
||||||
|
# Authentication method
|
||||||
|
self.auth = 'sudo'
|
||||||
|
|
||||||
|
# Builder
|
||||||
|
self.builder = builder
|
||||||
|
|
||||||
|
# Ensure that the used builder is installed
|
||||||
|
paths = set(os.environ['PATH'].split(':'))
|
||||||
|
paths |= set(('/sbin', '/usr/sbin', '/usr/local/sbin'))
|
||||||
|
if not any(os.path.exists(os.path.join(p, builder)) for p in paths):
|
||||||
|
print >> stderr, 'Error: Could not find "%s".' % builder
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
##############################################################
|
||||||
|
|
||||||
|
self.base = os.path.expanduser(os.environ.get('PBUILDFOLDER',
|
||||||
|
'~/pbuilder/'))
|
||||||
|
|
||||||
|
if not os.path.isdir(self.base):
|
||||||
|
try:
|
||||||
|
os.makedirs(self.base)
|
||||||
|
except os.OSError:
|
||||||
|
print >> stderr, ('Error: Cannot create base directory "%s"'
|
||||||
|
% self.base)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if 'PBUILDAUTH' in os.environ:
|
||||||
|
self.auth = os.environ['PBUILDAUTH']
|
||||||
|
|
||||||
|
self.system_architecture = ubuntutools.misc.host_architecture()
|
||||||
|
self.system_distro = ubuntutools.misc.system_distribution()
|
||||||
|
if not self.system_architecture or not self.system_distro:
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
self.target_distro = self.system_distro
|
||||||
|
|
||||||
|
##############################################################
|
||||||
|
|
||||||
|
def set_target_distro(self, distro):
|
||||||
|
""" pbuilder_dist.set_target_distro(distro) -> None
|
||||||
|
|
||||||
|
Check if the given target distribution name is correct, if it
|
||||||
|
isn't know to the system ask the user for confirmation before
|
||||||
|
proceeding, and finally either save the value into the appropiate
|
||||||
|
variable or finalize pbuilder-dist's execution.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not distro.isalpha():
|
||||||
|
print >> stderr, ('Error: "%s" is an invalid distribution codename.'
|
||||||
|
% distro)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if not os.path.isfile(os.path.join('/usr/share/debootstrap/scripts/',
|
||||||
|
distro)):
|
||||||
|
if os.path.isdir('/usr/share/debootstrap/scripts/'):
|
||||||
|
# Debian experimental doesn't have a debootstrap file but
|
||||||
|
# should work nevertheless.
|
||||||
|
if distro not in debian_distros:
|
||||||
|
answer = ask(('Warning: Unknown distribution "%s". Do you '
|
||||||
|
'want to continue [y/N]? ') % distro)
|
||||||
|
if answer not in ('y', 'Y'):
|
||||||
|
exit(0)
|
||||||
|
else:
|
||||||
|
print >> stderr, 'Please install package "debootstrap".'
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
self.target_distro = distro
|
||||||
|
|
||||||
|
def set_operation(self, operation):
|
||||||
|
""" pbuilder_dist.set_operation -> None
|
||||||
|
|
||||||
|
Check if the given string is a valid pbuilder operation and
|
||||||
|
depending on this either save it into the appropiate variable
|
||||||
|
or finalize pbuilder-dist's execution.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
arguments = ('create', 'update', 'build', 'clean', 'login', 'execute')
|
||||||
|
|
||||||
|
if operation not in arguments:
|
||||||
|
if operation.endswith('.dsc'):
|
||||||
|
if os.path.isfile(operation):
|
||||||
|
self.operation = 'build'
|
||||||
|
return [operation]
|
||||||
|
else:
|
||||||
|
print >> stderr, ('Error: Could not find file "%s".'
|
||||||
|
% operation)
|
||||||
|
exit(1)
|
||||||
|
else:
|
||||||
|
print >> stderr, (
|
||||||
|
'Error: "%s" is not a recognized argument.\n'
|
||||||
|
'Please use one of these: %s.'
|
||||||
|
) % (operation, ', '.join(arguments))
|
||||||
|
exit(1)
|
||||||
|
else:
|
||||||
|
self.operation = operation
|
||||||
|
return []
|
||||||
|
|
||||||
|
def get_command(self, remaining_arguments = None):
|
||||||
|
""" pbuilder_dist.get_command -> string
|
||||||
|
|
||||||
|
Generate the pbuilder command which matches the given configuration
|
||||||
|
and return it as a string.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not self.build_architecture:
|
||||||
|
self.chroot_string = self.target_distro
|
||||||
|
self.build_architecture = self.system_architecture
|
||||||
|
else:
|
||||||
|
self.chroot_string = (self.target_distro + '-'
|
||||||
|
+ self.build_architecture)
|
||||||
|
|
||||||
|
prefix = os.path.join(self.base, self.chroot_string)
|
||||||
|
result = '%s_result/' % prefix
|
||||||
|
|
||||||
|
if not self.logfile and self.operation != 'login':
|
||||||
|
self.logfile = os.path.normpath('%s/last_operation.log' % result)
|
||||||
|
|
||||||
|
if not os.path.isdir(result):
|
||||||
|
try:
|
||||||
|
os.makedirs(result)
|
||||||
|
except os.OSError:
|
||||||
|
print >> stderr, ('Error: Cannot create results directory "%s"'
|
||||||
|
% result)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if self.builder == 'pbuilder':
|
||||||
|
base = '--basetgz "%s-base.tgz"' % prefix
|
||||||
|
elif self.builder == 'cowbuilder':
|
||||||
|
base = '--basepath "%s-base.cow"' % prefix
|
||||||
|
else:
|
||||||
|
print >> stderr, 'Error: Unrecognized builder "%s".' % self.builder
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
arguments = [
|
||||||
|
'--%s' % self.operation,
|
||||||
|
base,
|
||||||
|
'--distribution', self.target_distro,
|
||||||
|
'--buildresult', result,
|
||||||
|
'--aptcache', '/var/cache/apt/archives/',
|
||||||
|
'--override-config',
|
||||||
|
]
|
||||||
|
|
||||||
|
if self.logfile:
|
||||||
|
arguments += ['--logfile', self.logfile]
|
||||||
|
|
||||||
|
if os.path.exists('/var/cache/archive/'):
|
||||||
|
arguments += ['--bindmounts', '/var/cache/archive/']
|
||||||
|
|
||||||
|
localrepo = '/var/cache/archive/' + self.target_distro
|
||||||
|
if os.path.exists(localrepo):
|
||||||
|
arguments += [
|
||||||
|
'--othermirror ',
|
||||||
|
'deb file:///var/cache/archive/ %s/' % self.target_distro,
|
||||||
|
]
|
||||||
|
|
||||||
|
if self.target_distro in debian_distros:
|
||||||
|
arguments += ['--mirror', 'http://ftp.debian.org/debian']
|
||||||
|
# work around bug #599695
|
||||||
|
arguments += [
|
||||||
|
'--debootstrapopts',
|
||||||
|
'--keyring=/usr/share/keyrings/debian-archive-keyring.gpg',
|
||||||
|
]
|
||||||
|
components = 'main'
|
||||||
|
if self.extra_components:
|
||||||
|
components += ' contrib non-free'
|
||||||
|
else:
|
||||||
|
if self.build_architecture in ('amd64', 'i386'):
|
||||||
|
arguments += ['--mirror', 'http://archive.ubuntu.com/ubuntu/']
|
||||||
|
elif (self.build_architecture == 'powerpc'
|
||||||
|
and self.target_distro == 'dapper'):
|
||||||
|
arguments += ['--mirror', 'http://archive.ubuntu.com/ubuntu/']
|
||||||
|
else:
|
||||||
|
arguments += ['--mirror',
|
||||||
|
'http://ports.ubuntu.com/ubuntu-ports/']
|
||||||
|
components = 'main restricted'
|
||||||
|
if self.extra_components:
|
||||||
|
components += ' universe multiverse'
|
||||||
|
|
||||||
|
arguments += ['--components', components]
|
||||||
|
|
||||||
|
if self.build_architecture != self.system_architecture:
|
||||||
|
arguments += ['--debootstrapopts',
|
||||||
|
'--arch=' + self.build_architecture]
|
||||||
|
|
||||||
|
apt_conf_dir = os.path.join(self.base,
|
||||||
|
'etc/%s/apt.conf' % self.target_distro)
|
||||||
|
if os.path.exists(apt_conf_dir):
|
||||||
|
arguments += ['--aptconfdir', apt_conf_dir]
|
||||||
|
|
||||||
|
# Append remaining arguments
|
||||||
|
if remaining_arguments:
|
||||||
|
arguments.extend(remaining_arguments)
|
||||||
|
|
||||||
|
# Export the distribution and architecture information to the
|
||||||
|
# environment so that it is accessible to ~/.pbuilderrc (LP: #628933).
|
||||||
|
return [
|
||||||
|
self.auth,
|
||||||
|
'ARCH=' + self.build_architecture,
|
||||||
|
'DIST=' + self.target_distro,
|
||||||
|
self.builder,
|
||||||
|
] + arguments
|
||||||
|
|
||||||
def ask(question):
|
def ask(question):
|
||||||
""" ask(question) -> string
|
""" ask(question) -> string
|
||||||
|
|
||||||
Ask the given question and return the answer. Also catch
|
Ask the given question and return the answer. Also catch
|
||||||
KeyboardInterrupt (Ctrl+C) and EOFError (Ctrl+D) exceptions and
|
KeyboardInterrupt (Ctrl+C) and EOFError (Ctrl+D) exceptions and
|
||||||
immediately return None if one of those is found.
|
immediately return None if one of those is found.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
answer = raw_input(question)
|
answer = raw_input(question)
|
||||||
except (KeyboardInterrupt, EOFError):
|
except (KeyboardInterrupt, EOFError):
|
||||||
print
|
print
|
||||||
answer = None
|
answer = None
|
||||||
|
|
||||||
return answer
|
return answer
|
||||||
|
|
||||||
def help(exit_code = 0):
|
def help(exit_code = 0):
|
||||||
""" help() -> None
|
""" help() -> None
|
||||||
|
|
||||||
Print a help message for pbuilder-dist, and exit with the given code.
|
Print a help message for pbuilder-dist, and exit with the given code.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print 'See man pbuilder-dist for more information.'
|
print 'See man pbuilder-dist for more information.'
|
||||||
|
|
||||||
exit(exit_code)
|
exit(exit_code)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
""" main() -> None
|
""" main() -> None
|
||||||
|
|
||||||
This is pbuilder-dist's main function. It creates a pbuilder_dist
|
This is pbuilder-dist's main function. It creates a pbuilder_dist
|
||||||
object, modifies all necessary settings taking data from the
|
object, modifies all necessary settings taking data from the
|
||||||
executable's name and command line options and finally either ends
|
executable's name and command line options and finally either ends
|
||||||
the script and runs pbuilder itself or exists with an error message.
|
the script and runs pbuilder itself or exists with an error message.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
script_name = os.path.basename(argv[0])
|
script_name = os.path.basename(argv[0])
|
||||||
parts = script_name.split('-')
|
parts = script_name.split('-')
|
||||||
|
|
||||||
# Copy arguments into another list for save manipulation
|
# Copy arguments into another list for save manipulation
|
||||||
args = argv[1:]
|
args = argv[1:]
|
||||||
|
|
||||||
if '-' in script_name and (parts[0] != 'pbuilder' and \
|
if ('-' in script_name and parts[0] not in ('pbuilder', 'cowbuilder')
|
||||||
parts[0] != 'cowbuilder') or len(parts) > 3:
|
or len(parts) > 3):
|
||||||
print >> stderr, 'Error: "%s" is not a valid name for a "pbuilder-dist" executable.' % script_name
|
print >> stderr, ('Error: "%s" is not a valid name for a '
|
||||||
exit(1)
|
'"pbuilder-dist" executable.') % script_name
|
||||||
|
exit(1)
|
||||||
if len(args) < 1:
|
|
||||||
print >> stderr, 'Insufficient number of arguments.'
|
if len(args) < 1:
|
||||||
help(1)
|
print >> stderr, 'Insufficient number of arguments.'
|
||||||
|
help(1)
|
||||||
if args[0] in ('-h', '--help', 'help'):
|
|
||||||
help(0)
|
if args[0] in ('-h', '--help', 'help'):
|
||||||
|
help(0)
|
||||||
app = pbuilder_dist(parts[0])
|
|
||||||
|
app = pbuilder_dist(parts[0])
|
||||||
if len(parts) > 1 and parts[1] != 'dist' and '.' not in parts[1]:
|
|
||||||
app.set_target_distro(parts[1])
|
if len(parts) > 1 and parts[1] != 'dist' and '.' not in parts[1]:
|
||||||
else:
|
app.set_target_distro(parts[1])
|
||||||
app.set_target_distro(args.pop(0))
|
else:
|
||||||
|
app.set_target_distro(args.pop(0))
|
||||||
if len(parts) > 2:
|
|
||||||
requested_arch = parts[2]
|
if len(parts) > 2:
|
||||||
elif len(args) > 0 and args[0] in ("alpha", "amd64", "arm", "armeb",
|
requested_arch = parts[2]
|
||||||
"armel", "i386", "lpia", "m68k", "mips", "mipsel", "powerpc", "ppc64",
|
elif len(args) > 0 and args[0] in (
|
||||||
"sh4", "sh4eb", "sparc", "sparc64"):
|
'alpha', 'amd64', 'arm', 'armeb', 'armel', 'i386', 'lpia', 'm68k',
|
||||||
requested_arch = args.pop(0)
|
'mips', 'mipsel', 'powerpc', 'ppc64', 'sh4', 'sh4eb', 'sparc',
|
||||||
else:
|
'sparc64'):
|
||||||
requested_arch = None
|
requested_arch = args.pop(0)
|
||||||
|
else:
|
||||||
if requested_arch:
|
requested_arch = None
|
||||||
app.build_architecture = requested_arch
|
|
||||||
# For some foreign architectures we need to use qemu
|
if requested_arch:
|
||||||
if requested_arch != app.system_architecture and (app.system_architecture,
|
app.build_architecture = requested_arch
|
||||||
requested_arch) not in [("amd64", "i386"), ("amd64", "lpia"),
|
# For some foreign architectures we need to use qemu
|
||||||
("arm", "armel"), ("armel", "arm"), ("i386", "lpia"), ("lpia", "i386"),
|
if (requested_arch != app.system_architecture
|
||||||
("powerpc", "ppc64"), ("ppc64", "powerpc"), ("sparc", "sparc64"),
|
and (app.system_architecture, requested_arch) not in [
|
||||||
("sparc64", "sparc")]:
|
('amd64', 'i386'), ('amd64', 'lpia'), ('arm', 'armel'),
|
||||||
args.append('--debootstrap qemu-debootstrap')
|
('armel', 'arm'), ('i386', 'lpia'), ('lpia', 'i386'),
|
||||||
|
('powerpc', 'ppc64'), ('ppc64', 'powerpc'),
|
||||||
if 'mainonly' in argv or '--main-only' in argv:
|
('sparc', 'sparc64'), ('sparc64', 'sparc')]):
|
||||||
app.extra_components = False
|
args.append('--debootstrap qemu-debootstrap')
|
||||||
if 'mainonly' in argv:
|
|
||||||
args.remove('mainonly')
|
if 'mainonly' in argv or '--main-only' in argv:
|
||||||
else:
|
app.extra_components = False
|
||||||
args.remove('--main-only')
|
if 'mainonly' in argv:
|
||||||
|
args.remove('mainonly')
|
||||||
if len(args) < 1:
|
else:
|
||||||
print >> stderr, 'Insufficient number of arguments.'
|
args.remove('--main-only')
|
||||||
help(1)
|
|
||||||
|
if len(args) < 1:
|
||||||
# Parse the operation
|
print >> stderr, 'Insufficient number of arguments.'
|
||||||
args = app.set_operation(args.pop(0)) + args
|
help(1)
|
||||||
|
|
||||||
if app.operation == 'build' and not '.dsc' in ' '.join(args):
|
# Parse the operation
|
||||||
print >> stderr, 'Error: You have to specify a .dsc file if you want to build.'
|
args = app.set_operation(args.pop(0)) + args
|
||||||
exit(1)
|
|
||||||
|
if app.operation == 'build' and not '.dsc' in ' '.join(args):
|
||||||
# Execute the pbuilder command
|
print >> stderr, ('Error: You have to specify a .dsc file if you want '
|
||||||
if not '--debug-echo' in args:
|
'to build.')
|
||||||
p = subprocess.Popen(app.get_command(args))
|
exit(1)
|
||||||
exit(p.wait())
|
|
||||||
else:
|
# Execute the pbuilder command
|
||||||
print app.get_command([arg for arg in args if arg != '--debug-echo'])
|
if not '--debug-echo' in args:
|
||||||
|
p = subprocess.Popen(app.get_command(args)))
|
||||||
|
exit(p.wait())
|
||||||
|
else:
|
||||||
|
print app.get_command([arg for arg in args if arg != '--debug-echo'])
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
try:
|
try:
|
||||||
main()
|
main()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print >> stderr, 'Manually aborted.'
|
print >> stderr, 'Manually aborted.'
|
||||||
exit(1)
|
exit(1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user