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()
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()
def convert_package(path, ext_storedir=None, **kwargs): """Convert working copy to the new format. 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: '') ext_storedir -- path to the external storedir (default: None) """ data_path = wc_pkg_data_filename(path, '') if not os.path.exists(data_path): os.mkdir(data_path) if missing_storepaths(path, '_project'): project = kwargs.get('project', '') if not project: raise ValueError('project argument required') else: project = wc_read_project(path) deleted = [] added = [] conflicted = [] if os.path.exists(_storefile(path, '_to_be_deleted')): deleted = _read_storefile(path, '_to_be_deleted').split() os.unlink(_storefile(path, '_to_be_deleted')) if os.path.exists(_storefile(path, '_to_be_added')): added = _read_storefile(path, '_to_be_added').split() os.unlink(_storefile(path, '_to_be_added')) if os.path.exists(_storefile(path, '_in_conflict')): conflicted = _read_storefile(path, '_in_conflict').split() os.unlink(_storefile(path, '_in_conflict')) try: files = wc_read_files(path) except ValueError: files = None if files is not None: files._xml.set('project', project) for entry in files: filename = entry.get('name') store = _storefile(path, filename) data = wc_pkg_data_filename(path, filename) if os.path.exists(store): os.rename(store, data) if filename in added: files.set(filename, 'A') elif filename in deleted: files.set(filename, 'D') elif filename in conflicted: files.set(filename, 'C') else: files.set(filename, ' ') for filename in added: if files.find(filename) is None: files.add(filename, 'A') files.write() if _storefile(path, '_osclib_version'): os.unlink(_storefile(path, '_osclib_version')) if ext_storedir is not None: # move all files to the new location storedir = _storedir(path) for filename in os.listdir(_storefile(path, '')): old = os.path.join(storedir, filename) new = os.path.join(ext_storedir, filename) os.rename(old, new) os.rmdir(storedir) os.symlink(os.path.relpath(ext_storedir, path), storedir) Package.repair(path, ext_storedir=ext_storedir, **kwargs)