def check_for_conflict(self, name, version): if not self.conflicts: self._generate_installed() conflict_packagenames = [] # Is there a conflict for package named <name> at all? if not name in self.conflicts.keys(): return conflict_packagenames # There is one or more conflicts, check them. for conflict in self.conflicts[name]: ((flag, conflict_version), conflict_package) = conflict if not flag: conflict_packagenames.append(conflict_package) continue comp = utils.version_cmp((version, ""), (conflict_version, "")) flag = map(None, flag) if (comp < 0) and ("<" in flag): conflict_packagenames.append(conflict_package) continue if (comp == 0) and ("=" in flag): conflict_packagenames.append(conflict_package) continue if (comp > 0) and (">" in flag): conflict_packagenames.append(conflict_package) continue return conflict_packagenames
def check_for_conflict( self, name, version ): if not self.conflicts: self._generate_installed() conflict_packagenames = [] # Is there a conflict for package named <name> at all? if not name in self.conflicts.keys(): return conflict_packagenames # There is one or more conflicts, check them. for conflict in self.conflicts[name]: ((flag, conflict_version), conflict_package) = conflict if not flag: conflict_packagenames.append(conflict_package) continue comp = utils.version_cmp( (version, ""), (conflict_version, "") ) flag = map( None, flag ) if (comp < 0) and ("<" in flag): conflict_packagenames.append(conflict_package) continue if (comp == 0) and ("=" in flag): conflict_packagenames.append(conflict_package) continue if (comp > 0) and (">" in flag): conflict_packagenames.append(conflict_package) continue return conflict_packagenames
def check_version(offered, operator, required): """check_version(offered, operator, required) Check if an offered version and release of a package fullfills a version requirement. <offered> and <required> must both contain the two elements version and release. Operator is one of <=> or a combinaton. Returns 1 if offered version and release are adequate, returns 0 if not adequate.""" offered_version, offered_release = offered req_version, req_release = required retval = false if req_version == "None": return true test = utils.version_cmp((offered_version, offered_release), (req_version, req_release)) if (test == 0) and (operator == "="): retval = true elif (test == 0 or test == 1) and (operator == ">="): retval = true elif (test == 1) and (operator == ">"): retval = true elif (test == -1) and (operator == "<"): retval = true elif (test ==- 1 or test == 0) and (operator == "<="): retval = true else: retval = false return retval
def _check_conflict_versions(version_a, flag, version_b): comp = utils.version_cmp((version_a, ""), (version_b, "")) flag = map(None, flag) if (comp < 0) and ("<" in flag): return true elif (comp == 0) and ("=" in flag): return true elif (comp > 0) and (">" in flag): return true else: return false
def check_package( self, package ): '''Given a package info dictionary, return true if package is accepted for upgrade or install, return false if not. Function is used by create_resolver_input. Can be overloaded for install-purposes.''' if not package: return name = package["name"] uri = package["name"] version = package["version"] release = package["release"] # Check if package is a valid upgrade for an installed package. local_packages = self.get_local_info() if local_packages.has_key( name ): if len( local_packages[name] ) > 1: message = "Multiple versions installed." \ " Skipping package %s" % name self.log.write_stderr( message ) self.log.write_log( message ) return false for local_pkg in local_packages[name]: current_version, current_release = local_pkg[:2] comparison = utils.version_cmp( (version, release), (current_version, current_release) ) if comparison > 0: return true elif comparison == 0: #Package is already installed, notify the user, #if all packages are already installed exit. message = "Package %s" % name +\ " is already at newest version (%s-%s)."\ % (current_version, current_release) self.log.write_log( message ) self.log.write_stderr( message ) return false # Check if package obsoletes an installed package, and should # therefore be set to upgrade. if package.has_key( "obsoletes" ): obsoletes = package["obsoletes"] for obs_name in obsoletes: if local_packages.has_key( obs_name ): return true # Package is not an upgrade or obsoletes an installed package. return false
def check_package(self, package): '''Given a package info dictionary, return true if package is accepted for upgrade or install, return false if not. Function is used by create_resolver_input. Can be overloaded for install-purposes.''' if not package: return name = package["name"] uri = package["name"] version = package["version"] release = package["release"] # Check if package is a valid upgrade for an installed package. local_packages = self.get_local_info() if local_packages.has_key(name): if len(local_packages[name]) > 1: message = "Multiple versions installed." \ " Skipping package %s" % name self.log.write_stderr(message) self.log.write_log(message) return false for local_pkg in local_packages[name]: current_version, current_release = local_pkg[:2] comparison = utils.version_cmp( (version, release), (current_version, current_release)) if comparison > 0: return true elif comparison == 0: #Package is already installed, notify the user, #if all packages are already installed exit. message = "Package %s" % name +\ " is already at newest version (%s-%s)."\ % (current_version, current_release) self.log.write_log(message) self.log.write_stderr(message) return false # Check if package obsoletes an installed package, and should # therefore be set to upgrade. if package.has_key("obsoletes"): obsoletes = package["obsoletes"] for obs_name in obsoletes: if local_packages.has_key(obs_name): return true # Package is not an upgrade or obsoletes an installed package. return false
def select_packages(self): 'Returns a list of names of packages to upgrade.' local_packages = self.get_local_info() latest, obsoletes = self.get_latest_lists() selection = [] for name in local_packages.keys(): packages = local_packages[name] if not latest.has_key(name): continue # Do not touch packages that are multiply installed. if len(packages) > 1: continue version, release, group = packages[0] latest_package = latest[name] latest_version = latest_package["version"] latest_release = latest_package["release"] if self.regexp_filter(name, group): if utils.version_cmp( (latest_version, latest_release), (version, release)) > 0: selection.append(name) return selection
def select_packages(self): 'Returns a list of names of packages to upgrade.' local_packages = self.get_local_info() latest, obsoletes = self.get_latest_lists() selection = [] for name in local_packages.keys(): packages = local_packages[name] if not latest.has_key(name): continue # Do not touch packages that are multiply installed. if len(packages) > 1: continue version, release, group = packages[0] latest_package = latest[name] latest_version = latest_package["version"] latest_release = latest_package["release"] if self.regexp_filter(name, group): if utils.version_cmp((latest_version, latest_release), (version, release)) > 0: selection.append(name) return selection
def __init__(self, build=None, latestAvailable=False): """Any .txt logs present in the build directory are compressed into a combined .txt.gz (one per package).""" if latestAvailable: # Look for the latest build. build = int(build_number.todays_build()) while not os.path.exists(os.path.join(config.EVENT_DIR, 'build%i' % build)): build -= 1 if build == 0: raise Exception("No builds available") if build is None: # Use today's build number. self.name = 'build' + build_number.todays_build() self.num = int(self.name[5:]) elif type(build) == int: self.name = 'build' + str(build) self.num = build elif type(build) == str: if build[:5] != 'build': raise Exception("Event build name must begin with 'build'") self.name = build self.num = int(build[5:]) # Where the build is located. self.buildDir = os.path.join(config.EVENT_DIR, self.name) self.packages = ['doomsday', 'fmod'] self.packageName = {'doomsday': 'Doomsday', 'fmod': 'FMOD Ex Audio Plugin'} if self.num >= 816: # Added Mac OS X 10.8. # Platforms: Name File ext sys_id() self.oses = [('Windows (x86)', '.exe', 'win32-32bit'), ('Mac OS X 10.8+ (x86_64)', '.dmg', 'macx8-64bit'), ('Mac OS X 10.6+ (x86_64/i386)', 'mac10_6.dmg', 'darwin-64bit'), ('Mac OS X 10.4+ (ppc/i386)', '32bit.dmg', 'darwin-32bit'), ('Ubuntu (x86_64)', 'amd64.deb', 'linux2-64bit'), ('Ubuntu (x86)', 'i386.deb', 'linux2-32bit')] if self.has_version() and utils.version_cmp(self.version_base(), '1.11') >= 0: del self.oses[3] # no more OS X 10.4 elif self.num >= 778: # Mac distribution naming was changed. # Platforms: Name File ext sys_id() self.oses = [('Windows (x86)', '.exe', 'win32-32bit'), ('Mac OS X 10.6+ (x86_64/i386)', '.dmg', 'darwin-64bit'), ('Mac OS X 10.4+ (ppc/i386)', '32bit.dmg', 'darwin-32bit'), ('Ubuntu (x86_64)', 'amd64.deb', 'linux2-64bit'), ('Ubuntu (x86)', 'i386.deb', 'linux2-32bit')] else: # Platforms: Name File ext sys_id() self.oses = [('Windows (x86)', '.exe', 'win32-32bit'), ('Mac OS X 10.4+ (ppc/i386)', '.dmg', 'darwin-32bit'), ('Mac OS X 10.6+ (x86_64/i386)', '64bit.dmg', 'darwin-64bit'), ('Ubuntu (x86)', 'i386.deb', 'linux2-32bit'), ('Ubuntu (x86_64)', 'amd64.deb', 'linux2-64bit')] self.platId = {'win32-32bit': 'win-x86', 'darwin-32bit': 'mac10_4-x86-ppc', 'darwin-64bit': 'mac10_6-x86-x86_64', 'macx8-64bit': 'mac10_8-x86_64', 'linux2-32bit': 'linux-x86', 'linux2-64bit': 'linux-x86_64'} # Prepare compiler logs present in the build dir. self.compress_logs()
def __init__(self, build=None, latestAvailable=False): """Any .txt logs present in the build directory are compressed into a combined .txt.gz (one per package).""" if latestAvailable: # Look for the latest build. build = int(build_number.todays_build()) while not os.path.exists( os.path.join(config.EVENT_DIR, 'build%i' % build)): build -= 1 if build == 0: raise Exception("No builds available") if build is None: # Use today's build number. self.name = 'build' + build_number.todays_build() self.num = int(self.name[5:]) elif type(build) == int: self.name = 'build' + str(build) self.num = build elif type(build) == str: if build[:5] != 'build': raise Exception("Event build name must begin with 'build'") self.name = build self.num = int(build[5:]) # Where the build is located. self.buildDir = os.path.join(config.EVENT_DIR, self.name) self.packages = [ 'doomsday', 'doomsday_app', 'doomsday_shell_app', 'fmod' ] self.packageName = { 'doomsday': 'Doomsday', 'doomsday_apps': 'OS X Apps', 'doomsday_app': 'Doomsday Engine.app', 'doomsday_shell_app': 'Doomsday Shell.app', 'fmod': 'FMOD Ex Audio Plugin' } if self.num >= 816: # Added Mac OS X 10.8. # Platforms: Name File ext sys_id() self.oses = [ ('Windows (x86)', '.exe', 'win32-32bit'), ('OS X 10.8+ (x86_64)', ('.dmg', 'macx8.dmg'), 'macx8-64bit'), ('OS X 10.6+ (x86_64/i386)', ('mac10_6.dmg', 'macx6.dmg'), 'darwin-64bit'), ('OS X 10.4+ (ppc/i386)', '32bit.dmg', 'darwin-32bit'), ('Ubuntu (x86_64)', 'amd64.deb', 'linux2-64bit'), ('Ubuntu (x86)', 'i386.deb', 'linux2-32bit'), ('Source', '.tar.gz', 'source') ] # Remove obsolete OS X versions: if self.has_version(): if utils.version_cmp(self.version_base(), '1.11') >= 0: del self.oses[3] # no more OS X 10.4 if self.num >= 1212 and utils.version_cmp( self.version_base(), '1.15') >= 0: del self.oses[2] # no more OS X 10.6 elif self.num >= 778: # Mac distribution naming was changed. # Platforms: Name File ext sys_id() self.oses = [ ('Windows (x86)', '.exe', 'win32-32bit'), ('Mac OS X 10.6+ (x86_64/i386)', '.dmg', 'darwin-64bit'), ('Mac OS X 10.4+ (ppc/i386)', '32bit.dmg', 'darwin-32bit'), ('Ubuntu (x86_64)', 'amd64.deb', 'linux2-64bit'), ('Ubuntu (x86)', 'i386.deb', 'linux2-32bit') ] else: # Platforms: Name File ext sys_id() self.oses = [('Windows (x86)', '.exe', 'win32-32bit'), ('Mac OS X 10.4+ (ppc/i386)', '.dmg', 'darwin-32bit'), ('Mac OS X 10.6+ (x86_64/i386)', '64bit.dmg', 'darwin-64bit'), ('Ubuntu (x86)', 'i386.deb', 'linux2-32bit'), ('Ubuntu (x86_64)', 'amd64.deb', 'linux2-64bit')] self.platId = { 'win32-32bit': 'win-x86', 'darwin-32bit': 'mac10_4-x86-ppc', 'darwin-64bit': 'mac10_6-x86-x86_64', 'macx8-64bit': 'mac10_8-x86_64', 'linux2-32bit': 'linux-x86', 'linux2-64bit': 'linux-x86_64', 'source': 'source' } # Prepare compiler logs present in the build dir. self.compress_logs()