コード例 #1
0
    def generate_control_file(self):
        dsc = Dsc()
        build_deps = []
        packages = OrderedDict()
        self.installs = {}
        self.symlinks = {}

        for item in self.generate_control_content():
            log.debug(repr(item))
            if isinstance(item, SourceControl):
                for key, value in item.items():
                    key = '-'.join([k.capitalize() for k in key.split('_')])
                    if key == 'Description':
                        value = value.strip() \
                                     .replace('\n\n', '\n.\n') \
                                     .replace('\n', '\n ')
                    dsc[key] = value
            elif isinstance(item, BuildDependency):
                build_deps.append(item.dependency)
            elif isinstance(item, Package):
                control = Deb822()
                for key, value in item._asdict().items():
                    key = '-'.join([k.capitalize() for k in key.split('_')])
                    if key == 'Description':
                        value = value.strip() \
                                     .replace('\n\n', '\n.\n') \
                                     .replace('\n', '\n ')
                    control[key] = value
                packages[item.package] = (control, [], [])
                self.installs[item.package] = []
                self.symlinks[item.package] = []
            elif isinstance(item, Dependency):
                packages[item.package][1].append(item.dependency)
            elif isinstance(item, Provide):
                packages[item.package][2].append(item.provide)
            elif isinstance(item, Symlink):
                self.symlinks[item.package].append((item.dest, item.src))
            elif isinstance(item, FastBuild):
                if self.fast_build is None:
                    self.fast_build = item.possible
                else:
                    self.fast_build = self.fast_build and item.possible
            else:
                raise NotImplementedError(
                    'Got unexcepted action item'
                    ' on control generation {!r}'.format(item))
        if self.installs:
            build_deps.append('dh-exec')

        with open(self.debian_file('control'), 'wb') as control_file:
            dsc['Build-Depends'] = ', '.join(build_deps)
            dsc.dump(control_file)

            for control, deps, provides in packages.values():
                if deps:
                    control['Depends'] = ', '.join(deps)
                if provides:
                    control['Provides'] = ', '.join(provides)
                control_file.write(b'\n')
                control.dump(control_file)