def write_snap_directory(self): # First migrate the snap directory. It will overwrite any conflicting # files. for root, directories, files in os.walk('snap'): for directory in directories: source = os.path.join(root, directory) destination = os.path.join(self._snap_dir, source) file_utils.create_similar_directory(source, destination) for file_path in files: source = os.path.join(root, file_path) destination = os.path.join(self._snap_dir, source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) # Now copy the hooks contained within the snap directory directly into # meta (they don't get wrappers like the ones that come from parts). snap_hooks_dir = os.path.join('snap', 'hooks') hooks_dir = os.path.join(self._snap_dir, 'meta', 'hooks') if os.path.isdir(snap_hooks_dir): os.makedirs(hooks_dir, exist_ok=True) for hook_name in os.listdir(snap_hooks_dir): source = os.path.join(snap_hooks_dir, hook_name) destination = os.path.join(hooks_dir, hook_name) # First, verify that the hook is actually executable if not os.stat(source).st_mode & stat.S_IEXEC: raise CommandError('hook {!r} is not executable'.format( hook_name)) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination)
def write_snap_directory(self) -> None: # First migrate the snap directory. It will overwrite any conflicting # files. for root, directories, files in os.walk( self._project_config.project._get_snapcraft_assets_dir() ): with contextlib.suppress(ValueError): directories.remove(".snapcraft") with contextlib.suppress(ValueError): # The snapcraft.yaml is migrated later files.remove("snapcraft.yaml") for directory in directories: source = os.path.relpath( os.path.join(root, directory), self._project_config.project._work_dir, ) # Also build-aux from destination destination = os.path.join(self._prime_dir, source.lstrip("build-aux/")) file_utils.create_similar_directory(source, destination) for file_path in files: source = os.path.relpath( os.path.join(root, file_path), self._project_config.project._work_dir, ) # Also build-aux from destination destination = os.path.join(self._prime_dir, source.lstrip("build-aux/")) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) # Now copy the assets contained within the snap directory directly into # meta. for origin in ["gui", "hooks"]: src_dir = os.path.join( self._project_config.project._get_snapcraft_assets_dir(), origin ) dst_dir = os.path.join(self.meta_dir, origin) if os.path.isdir(src_dir): os.makedirs(dst_dir, exist_ok=True) for asset in os.listdir(src_dir): source = os.path.join(src_dir, asset) destination = os.path.join(dst_dir, asset) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination, follow_symlinks=True) # Ensure that the hook is executable if origin == "hooks": _prepare_hook(destination) self._record_manifest_and_source_snapcraft_yaml()
def write_snap_directory(self) -> None: # First migrate the snap directory. It will overwrite any conflicting # files. for root, directories, files in os.walk("snap"): with contextlib.suppress(ValueError): directories.remove(".snapcraft") with contextlib.suppress(ValueError): # The snapcraft.yaml is migrated later files.remove("snapcraft.yaml") for directory in directories: source = os.path.join(root, directory) destination = os.path.join(self._prime_dir, source) file_utils.create_similar_directory(source, destination) for file_path in files: source = os.path.join(root, file_path) destination = os.path.join(self._prime_dir, source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) # Now copy the assets contained within the snap directory directly into # meta. for origin in ["gui", "hooks"]: src_dir = os.path.join("snap", origin) dst_dir = os.path.join(self.meta_dir, origin) if os.path.isdir(src_dir): os.makedirs(dst_dir, exist_ok=True) for asset in os.listdir(src_dir): source = os.path.join(src_dir, asset) destination = os.path.join(dst_dir, asset) # First, verify that the hook is actually executable if origin == "hooks": _validate_hook(source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) self._record_manifest_and_source_snapcraft_yaml()
def write_snap_directory(self) -> None: # First migrate the snap directory. It will overwrite any conflicting # files. for root, directories, files in os.walk("snap"): with contextlib.suppress(ValueError): directories.remove(".snapcraft") with contextlib.suppress(ValueError): # The snapcraft.yaml is migrated later files.remove("snapcraft.yaml") for directory in directories: source = os.path.join(root, directory) destination = os.path.join(self._prime_dir, source) file_utils.create_similar_directory(source, destination) for file_path in files: source = os.path.join(root, file_path) destination = os.path.join(self._prime_dir, source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) # Now copy the assets contained within the snap directory directly into # meta. for origin in ["gui", "hooks"]: src_dir = os.path.join("snap", origin) dst_dir = os.path.join(self.meta_dir, origin) if os.path.isdir(src_dir): os.makedirs(dst_dir, exist_ok=True) for asset in os.listdir(src_dir): source = os.path.join(src_dir, asset) destination = os.path.join(dst_dir, asset) # First, verify that the hook is actually executable if origin == "hooks": _validate_hook(source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) self._record_manifest_and_source_snapcraft_yaml()
def write_snap_directory(self): # First migrate the snap directory. It will overwrite any conflicting # files. for root, directories, files in os.walk('snap'): for directory in directories: source = os.path.join(root, directory) destination = os.path.join(self._snap_dir, source) file_utils.create_similar_directory(source, destination) for file_path in files: source = os.path.join(root, file_path) destination = os.path.join(self._snap_dir, source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) # Now copy the assets contained within the snap directory directly into # meta. for origin in ['gui', 'hooks']: src_dir = os.path.join('snap', origin) dst_dir = os.path.join(self.meta_dir, origin) if os.path.isdir(src_dir): os.makedirs(dst_dir, exist_ok=True) for asset in os.listdir(src_dir): source = os.path.join(src_dir, asset) destination = os.path.join(dst_dir, asset) # First, verify that the hook is actually executable if origin == 'hooks': _validate_hook(source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) # FIXME hide this functionality behind a feature flag for now if os.environ.get('SNAPCRAFT_BUILD_INFO'): self._ensure_snapcraft_yaml() else: self._ensure_no_build_artifacts()
def write_snap_directory(self): # First migrate the snap directory. It will overwrite any conflicting # files. for root, directories, files in os.walk('snap'): for directory in directories: source = os.path.join(root, directory) destination = os.path.join(self._snap_dir, source) file_utils.create_similar_directory(source, destination) for file_path in files: source = os.path.join(root, file_path) destination = os.path.join(self._snap_dir, source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) # Now copy the assets contained within the snap directory directly into # meta. for origin in ['gui', 'hooks']: src_dir = os.path.join('snap', origin) dst_dir = os.path.join(self.meta_dir, origin) if os.path.isdir(src_dir): os.makedirs(dst_dir, exist_ok=True) for asset in os.listdir(src_dir): source = os.path.join(src_dir, asset) destination = os.path.join(dst_dir, asset) # First, verify that the hook is actually executable if origin == 'hooks': _validate_hook(source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) # FIXME hide this functionality behind a feature flag for now if os.environ.get('SNAPCRAFT_BUILD_INFO'): self._ensure_snapcraft_yaml() else: self._ensure_no_build_artifacts()
def write_snap_directory(self): # First migrate the snap directory. It will overwrite any conflicting # files. for root, directories, files in os.walk('snap'): if '.snapcraft' in directories: directories.remove('.snapcraft') for directory in directories: source = os.path.join(root, directory) destination = os.path.join(self._prime_dir, source) file_utils.create_similar_directory(source, destination) for file_path in files: source = os.path.join(root, file_path) destination = os.path.join(self._prime_dir, source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) # Now copy the assets contained within the snap directory directly into # meta. for origin in ['gui', 'hooks']: src_dir = os.path.join('snap', origin) dst_dir = os.path.join(self.meta_dir, origin) if os.path.isdir(src_dir): os.makedirs(dst_dir, exist_ok=True) for asset in os.listdir(src_dir): source = os.path.join(src_dir, asset) destination = os.path.join(dst_dir, asset) # First, verify that the hook is actually executable if origin == 'hooks': _validate_hook(source) with contextlib.suppress(FileNotFoundError): os.remove(destination) file_utils.link_or_copy(source, destination) self._record_snapcraft()