Example #1
0
    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
Example #2
0
    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
Example #3
0
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
Example #4
0
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
Example #5
0
    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
Example #6
0
    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
Example #7
0
 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
Example #8
0
 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
Example #9
0
    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()
Example #10
0
    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()