Example #1
0
    def wc_resolve(self, path=''):
        """Try to read components from path.

        If path is specified it overrides the path which was passed
        to __init__.
        If all conditions are met (see class description for details)
        a dict is returned which contains the matches
        (some optional and _non_optional matches might be None).
        Otherwise None is returned.

        """
        path = path or self._path
        if not path:
            return None
        unresolved = dict([(comp.name, None) for comp in self._components])
        has_prj = 'project' in unresolved
        has_pkg = 'package' in unresolved and 'project' in unresolved
        if has_pkg:
            if wc_is_package(path):
                ret = {'apiurl': wc_read_apiurl(path),
                       'project': wc_read_project(path),
                       'package': wc_read_package(path)}
                unresolved.update(ret)
                return unresolved
        pkg_opt = True
        for comp in self._components:
            if comp.name == 'package':
                pkg_opt = comp.opt
        if has_prj and pkg_opt:
            if wc_is_project(path):
                ret = {'apiurl': wc_read_apiurl(path),
                       'project': wc_read_project(path)}
                unresolved.update(ret)
                return unresolved
        return None
Example #2
0
 def test27(self):
     """test wc_parent (package/non_existent - no parent)"""
     path = self.fixture_file('package', 'non_existent')
     self.assertFalse(os.path.exists(path))
     par_dir = wc_parent(path)
     self.assertIsNotNone(par_dir)
     self.assertTrue(wc_is_package(par_dir))
     self.assertEqual(wc_read_package(par_dir), 'package')
Example #3
0
 def test24(self):
     """test wc_parent (package/file)"""
     path = self.fixture_file('prj1', 'added', 'foo')
     self.assertTrue(os.path.isfile(path))
     par_dir = wc_parent(path)
     self.assertIsNotNone(par_dir)
     self.assertTrue(wc_is_package(par_dir))
     self.assertEqual(wc_read_package(par_dir), 'added')
Example #4
0
 def test27(self):
     """test wc_parent (package/non_existent - no parent)"""
     path = self.fixture_file('package', 'non_existent')
     self.assertFalse(os.path.exists(path))
     par_dir = wc_parent(path)
     self.assertIsNotNone(par_dir)
     self.assertTrue(wc_is_package(par_dir))
     self.assertEqual(wc_read_package(par_dir), 'package')
Example #5
0
 def test24(self):
     """test wc_parent (package/file)"""
     path = self.fixture_file('prj1', 'added', 'foo')
     self.assertTrue(os.path.isfile(path))
     par_dir = wc_parent(path)
     self.assertIsNotNone(par_dir)
     self.assertTrue(wc_is_package(par_dir))
     self.assertEqual(wc_read_package(par_dir), 'added')
Example #6
0
 def test28(self):
     """test wc_parent cwd (package/non_existent - no parent)"""
     pkg_path = self.fixture_file('package')
     path = 'non_existent'
     cwd = os.getcwd()
     try:
         os.chdir(pkg_path)
         self.assertFalse(os.path.exists(path))
         par_dir = wc_parent(path)
         self.assertIsNotNone(par_dir)
         self.assertTrue(wc_is_package(par_dir))
         self.assertEqual(wc_read_package(par_dir), 'package')
     finally:
         os.chdir(cwd)
Example #7
0
 def test28(self):
     """test wc_parent cwd (package/non_existent - no parent)"""
     pkg_path = self.fixture_file('package')
     path = 'non_existent'
     cwd = os.getcwd()
     try:
         os.chdir(pkg_path)
         self.assertFalse(os.path.exists(path))
         par_dir = wc_parent(path)
         self.assertIsNotNone(par_dir)
         self.assertTrue(wc_is_package(par_dir))
         self.assertEqual(wc_read_package(par_dir), 'package')
     finally:
         os.chdir(cwd)
Example #8
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))
Example #9
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))
Example #10
0
    def __init__(self,
                 path,
                 skip_handlers=None,
                 commit_policies=None,
                 merge_class=Merge,
                 verify_format=True,
                 **kwargs):
        """Constructs a new package object.

        path is the path to the working copy.
        Raises a ValueError exception if path is
        no valid package working copy.
        Raises a WCInconsistentError if the wc's
        metadata is corrupt.

        Keyword arguments:
        skip_handlers -- list of FileSkipHandler objects
                         (default: [])
        commit_policies -- list of FileCommitPolicy objects
                           (default: None)
        merge_class -- class which is used for a file merge
                       (default: Merge)
        verify_format -- verify working copy format (default: True)
        **kwargs -- see class WorkingCopy for the details

        """
        if verify_format:
            wc_verify_format(path)
        (meta, xml_data, pkg_data) = self.wc_check(path)
        if meta or xml_data or pkg_data:
            raise WCInconsistentError(path, meta, xml_data, pkg_data)
        self.apiurl = wc_read_apiurl(path)
        self.project = wc_read_project(path)
        self.name = wc_read_package(path)
        self.skip_handlers = skip_handlers or []
        self.commit_policies = commit_policies or []
        self.merge_class = merge_class
        with wc_lock(path):
            self._files = wc_read_files(path)
        # call super at the end due to finish_pending_transaction
        super(Package, self).__init__(path, PackageUpdateState,
                                      PackageCommitState, **kwargs)
Example #11
0
    def __init__(self, project_path, package_path, filename_path):
        """Constructs a new WCPath object.

        project_path is the path to the project wc. package_path is
        the path to the package wc. filename_path is the path to
        the wc filename. Either project_path or package_path or
        both aren't None.

        """
        self.project_path = project_path
        self.package_path = package_path
        self.filename_path = filename_path
        self.project = self.package = self.filename = None
        if self.project_path is not None:
            self.project = wc_read_project(self.project_path)
        if self.package_path is not None:
            if wc_is_package(self.package_path):
                self.package = wc_read_package(self.package_path)
            else:
                self.package = os.path.basename(self.package_path)
        if self.filename_path is not None:
            self.filename = os.path.basename(self.filename_path)
Example #12
0
    def __init__(self, path, skip_handlers=None, commit_policies=None,
                 merge_class=Merge, verify_format=True, **kwargs):
        """Constructs a new package object.

        path is the path to the working copy.
        Raises a ValueError exception if path is
        no valid package working copy.
        Raises a WCInconsistentError if the wc's
        metadata is corrupt.

        Keyword arguments:
        skip_handlers -- list of FileSkipHandler objects
                         (default: [])
        commit_policies -- list of FileCommitPolicy objects
                           (default: None)
        merge_class -- class which is used for a file merge
                       (default: Merge)
        verify_format -- verify working copy format (default: True)
        **kwargs -- see class WorkingCopy for the details

        """
        if verify_format:
            wc_verify_format(path)
        (meta, xml_data, pkg_data) = self.wc_check(path)
        if meta or xml_data or pkg_data:
            raise WCInconsistentError(path, meta, xml_data, pkg_data)
        self.apiurl = wc_read_apiurl(path)
        self.project = wc_read_project(path)
        self.name = wc_read_package(path)
        self.skip_handlers = skip_handlers or []
        self.commit_policies = commit_policies or []
        self.merge_class = merge_class
        with wc_lock(path):
            self._files = wc_read_files(path)
        # call super at the end due to finish_pending_transaction
        super(Package, self).__init__(path, PackageUpdateState,
                                      PackageCommitState, **kwargs)
Example #13
0
 def info(self):
     """Return the FileCommitInfo object."""
     name = wc_read_package(self._path)
     lists = self._lists()
     return FileCommitInfo(name, **lists)
Example #14
0
 def info(self):
     """Return the FileCommitInfo object."""
     name = wc_read_package(self._path)
     lists = self._lists()
     return FileCommitInfo(name, **lists)
Example #15
0
 def test11(self):
     """test wc_read_package"""
     path = self.fixture_file('package')
     self.assertEqual(wc_read_package(path), 'package')
Example #16
0
 def test11(self):
     """test wc_read_package"""
     path = self.fixture_file('package')
     self.assertEqual(wc_read_package(path), 'package')