예제 #1
0
 def __init__(self):
     self.builder = MainBuilder(user='******')
     self.debian_repos = RepRepRo(basedir=DEBIAN_BASEDIR)
     self.local_repos = RepRepRo(basedir=LOCAL_BASEDIR)
     self.srcbuild_opts = ['-S', '-sa', '-us', '-uc']
예제 #2
0
class MainManager(object):
    def __init__(self):
        self.builder = MainBuilder(user='******')
        self.debian_repos = RepRepRo(basedir=DEBIAN_BASEDIR)
        self.local_repos = RepRepRo(basedir=LOCAL_BASEDIR)
        self.srcbuild_opts = ['-S', '-sa', '-us', '-uc']

    def staging_dir(self, dscfile):
        source, version = parse_dsc_filename(dscfile)
        return source

    def get_dscfile_from_changes(self, changes):
        dscfile = ''
        filenames = get_filenames_with_dcmd(changes)
        for filename in filenames:
            if filename.endswith('.dsc'):
                if not dscfile:
                    dscfile = os.path.basename(filename)
                else:
                    print "Already a dscfile", dscfile
                    print "filename", filename
                    raise RuntimeError, "too many .dsc's"
        if not dscfile:
            raise RuntimeError, "No .dsc found."
        return dscfile
    
    def build_source_package(self, dscfile):
        source, version = parse_dsc_filename(dscfile)
        upstream_version = version.split('-')[0]
        dirname = '%s-%s' % (source, upstream_version)
        here = os.getcwd()
        os.chdir(dirname)
        cmd = ['dpkg-buildpackage'] + self.srcbuild_opts
        subprocess.check_call(cmd)
        os.chdir(here)
        #self.builder.stage_resulting_changes(dscfile, 'source')
        changes = '%s_%s_source.changes' % (source, version)
        self.builder.stage_changes(source, changes, 'source', remove=False)
        return source
    
    def build_binary_packages(self, dscfile):
        self.builder.build(dscfile)


    def build(self, dscfile):
        source = self.build_source_package(dscfile)
        basename = os.path.basename(dscfile)
        here = os.getcwd()
        os.chdir(source)
        self.build_binary_packages(basename)
        os.chdir(here)
        
    def install_to_repos(self, dist, changes):
        dscfile = self.get_dscfile_from_changes(changes)
        source, version = parse_dsc_filename(dscfile)
        if os.path.isfile(changes):
            self.local_repos.include(dist, changes)
        self.build_binary_packages(dscfile)
        here = os.getcwd()
        os.chdir(source)
        changes_files = [f for f in os.listdir('.') if f.endswith('.changes')]
        for changes in changes_files:
            self.local_repos.include(dist, changes)
예제 #3
0
class PartialMirrorManager(object):
    def __init__(self):
        self.baseparent = path(config.get('main', 'homedir'))
        self.repos = RepRepRo()
        
    def _main_list_filename(self, dist):
        basename = '%s.pkgs' % dist
        directory = self.baseparent / 'debian/conf/pkgs'
        filename = directory / basename
        return filename

    def main_list_filename(self, dist):
        return str(self._main_list_filename(dist))
    

    def get_selections(self, dist):
        filename = self._main_list_filename(dist)
        if not filename.isfile():
            return {}
        else:
            fileobj = file(filename)
            return selections_to_dictionary(fileobj, install=True)
        

    def update_list(self, dist, data):
        master = self.get_selections(dist)
        filename = self._main_list_filename(dist)
        master.update(data)
        if not filename.isfile():
            print "Creating new file: %s" % filename
        mainlist = file(filename, 'w')
        packages = master.keys()
        packages.sort()
        for package in packages:
            action = master[package]
            line = make_pkg_line(package, action)
            mainlist.write(line)
        mainlist.close()
        return True
    
    def update_repos(self, repos):
        if repos == 'debian':
            basedir = path(config.get('repos_debian', 'basedir'))
        elif repos == 'security':
            basedir = path(config.get('repos_security', 'basedir'))
        else:
            msg = "%s not a valid repository" % repos
            raise RuntimeError , msg
        self.repos.set_basedir(basedir)
        ready = self.is_process_ready()
        if not ready:
            raise RuntimeError , "repos process not ready"
        self.repos.update()
        return True

    def poll_process(self):
        return self.repos.check_proc()

    def is_process_ready(self):
        check = self.repos.check_proc()
        ready = False
        if check and check == 'empty':
            ready = True
        elif check == 0:
            self.repos.clean_proc()
            ready = True
        return ready
예제 #4
0
 def __init__(self):
     self.baseparent = path(config.get('main', 'homedir'))
     self.repos = RepRepRo()
예제 #5
0
 def __init__(self, baseparent):
     self.baseparent = path(baseparent)
     self.repos = RepRepRo()