示例#1
0
    def repair(path, project='', apiurl='', no_packages=False,
               **package_states):
        """Repair a working copy.

        path is the path to the project working copy.

        Keyword arguments:
        project -- the name of the project (default: '')
        apiurl -- the apiurl of the project (default: '')
        no_packages -- do not repair the project's packages (default: False)
        **package_states -- a package to state mapping (default: {})

        """
        global _PKG_DATA
        missing, xml_data, pkg_data = Project.wc_check(path)
        if '_project' in missing:
            if not project:
                raise ValueError('project argument required')
            wc_write_project(path, project)
        if '_apiurl' in missing:
            if not apiurl:
                raise ValueError('apiurl argument required')
            wc_write_apiurl(path, apiurl)
        if '_packages' in missing or xml_data:
            if not package_states:
                raise ValueError('package states required')
            wc_write_packages(path, '<packages/>')
            packages = wc_read_packages(path)
            for package, st in package_states.items():
                packages.add(package, state=st)
            packages.write()
        if '_version' in missing:
            wc_write_version(path)
        if _PKG_DATA in missing:
            os.mkdir(wc_pkg_data_filename(path, ''))
        if not no_packages:
            project = wc_read_project(path)
            apiurl = wc_read_apiurl(path)
            packages = wc_read_packages(path)
            missing, xml_data, pkg_data = Project.wc_check(path)
            # only pkg data left
            for package in pkg_data:
                package_path = os.path.join(path, package)
                if os.path.isdir(package_path):
                    storedir = wc_pkg_data_mkdir(path, package)
                    Package.repair(package_path, project=project,
                                   package=package, apiurl=apiurl,
                                   ext_storedir=storedir)
                else:
                    packages.remove(package)
                    packages.write()
示例#2
0
    def repair(path, project='', apiurl='', no_packages=False,
               **package_states):
        """Repair a working copy.

        path is the path to the project working copy.

        Keyword arguments:
        project -- the name of the project (default: '')
        apiurl -- the apiurl of the project (default: '')
        no_packages -- do not repair the project's packages (default: False)
        **package_states -- a package to state mapping (default: {})

        """
        global _PKG_DATA
        missing, xml_data, pkg_data = Project.wc_check(path)
        if '_project' in missing:
            if not project:
                raise ValueError('project argument required')
            wc_write_project(path, project)
        if '_apiurl' in missing:
            if not apiurl:
                raise ValueError('apiurl argument required')
            wc_write_apiurl(path, apiurl)
        if '_packages' in missing or xml_data:
            if not package_states:
                raise ValueError('package states required')
            wc_write_packages(path, '<packages/>')
            packages = wc_read_packages(path)
            for package, st in package_states.iteritems():
                packages.add(package, state=st)
            packages.write()
        if '_version' in missing:
            wc_write_version(path)
        if _PKG_DATA in missing:
            os.mkdir(wc_pkg_data_filename(path, ''))
        if not no_packages:
            project = wc_read_project(path)
            apiurl = wc_read_apiurl(path)
            packages = wc_read_packages(path)
            missing, xml_data, pkg_data = Project.wc_check(path)
            # only pkg data left
            for package in pkg_data:
                package_path = os.path.join(path, package)
                if os.path.isdir(package_path):
                    storedir = wc_pkg_data_mkdir(path, package)
                    Package.repair(package_path, project=project,
                                   package=package, apiurl=apiurl,
                                   ext_storedir=storedir)
                else:
                    packages.remove(package)
                    packages.write()
示例#3
0
    def repair(path, ext_storedir=None, revision='latest', **kwargs):
        """Repair a working copy.

        path is the path to the package working copy.

        Keyword arguments:
        project -- name of the project (default: '')
        package -- name of the package (default: '')
        apiurl -- apiurl is the apiurl (default: '')
        revision -- the revision of the package (default: 'latest')
        ext_storedir -- path to the storedir (default: None)

        """
        global _PKG_DATA
        if not os.path.exists(_storedir(path)):
            wc_init(path, ext_storedir=ext_storedir)
        missing, xml_data, pkg_data = Package.wc_check(path)
        for filename in ('_project', '_package', '_apiurl'):
            if filename not in missing:
                continue
            key = filename[1:]
            if key not in kwargs:
                raise ValueError("%s argument required" % key)
            meth_name = 'wc_write_' + key
            globals()[meth_name](path, kwargs[key])
        project = wc_read_project(path)
        package = wc_read_package(path)
        apiurl = wc_read_apiurl(path)
        if '_files' in missing or xml_data:
            spkg = SourcePackage(project, package)
            directory = spkg.list(rev=revision, apiurl=apiurl)
            xml_data = etree.tostring(directory, pretty_print=True)
            wc_write_files(path, xml_data)
        if '_version' in missing:
            wc_write_version(path)
        if _PKG_DATA in missing:
            os.mkdir(wc_pkg_data_filename(path, ''))
        files = wc_read_files(path)
        # check again - only pkg_data left
        missing, xml_data, pkg_data = Package.wc_check(path)
        for filename in pkg_data:
            fname = wc_pkg_data_filename(path, filename)
            f = files.find(filename).file()
            f.write_to(fname)
        # clean unused storefiles
        store = wc_pkg_data_filename(path, '')
        for filename in os.listdir(store):
            if files.find(filename) is None:
                os.unlink(os.path.join(store, filename))
示例#4
0
    def repair(path, ext_storedir=None, revision='latest', **kwargs):
        """Repair a working copy.

        path is the path to the package working copy.

        Keyword arguments:
        project -- name of the project (default: '')
        package -- name of the package (default: '')
        apiurl -- apiurl is the apiurl (default: '')
        revision -- the revision of the package (default: 'latest')
        ext_storedir -- path to the storedir (default: None)

        """
        global _PKG_DATA
        if not os.path.exists(_storedir(path)):
            wc_init(path, ext_storedir=ext_storedir)
        missing, xml_data, pkg_data = Package.wc_check(path)
        for filename in ('_project', '_package', '_apiurl'):
            if filename not in missing:
                continue
            key = filename[1:]
            if key not in kwargs:
                raise ValueError("%s argument required" % key)
            meth_name = 'wc_write_' + key
            globals()[meth_name](path, kwargs[key])
        project = wc_read_project(path)
        package = wc_read_package(path)
        apiurl = wc_read_apiurl(path)
        if '_files' in missing or xml_data:
            spkg = SourcePackage(project, package)
            directory = spkg.list(rev=revision, apiurl=apiurl)
            xml_data = etree.tostring(directory, pretty_print=True)
            wc_write_files(path, xml_data)
        if '_version' in missing:
            wc_write_version(path)
        if _PKG_DATA in missing:
            os.mkdir(wc_pkg_data_filename(path, ''))
        files = wc_read_files(path)
        # check again - only pkg_data left
        missing, xml_data, pkg_data = Package.wc_check(path)
        for filename in pkg_data:
            fname = wc_pkg_data_filename(path, filename)
            f = files.find(filename).file()
            f.write_to(fname)
        # clean unused storefiles
        store = wc_pkg_data_filename(path, '')
        for filename in os.listdir(store):
            if files.find(filename) is None:
                os.unlink(os.path.join(store, filename))