def run(args, project_options): # noqa lifecycle_command = _get_lifecycle_command(args) argless_command = _get_command_from_arg(args) if lifecycle_command: lifecycle.execute( lifecycle_command, project_options, args['<part>']) elif argless_command: argless_command() elif args['clean']: _run_clean(args, project_options) elif args['cleanbuild']: lifecycle.cleanbuild(project_options), elif _is_store_command(args): _run_store_command(args) elif args['tour']: _scaffold_examples(args['<directory>'] or _SNAPCRAFT_TOUR_DIR) elif args['help']: snapcraft.topic_help(args['<topic>'] or args['<plugin>'], args['--devel'], args['topics']) elif args['update']: parts.update() elif args['define']: parts.define(args['<part-name>']) elif args['search']: parts.search(' '.join(args['<query>'])) else: # snap by default: lifecycle.snap(project_options, args['<directory>'], args['--output']) return project_options
def run(args, project_options): # noqa lifecycle_command = _get_lifecycle_command(args) argless_command = _get_command_from_arg(args) if lifecycle_command: lifecycle.execute(lifecycle_command, project_options, args['<part>']) elif argless_command: argless_command() elif args['clean']: _run_clean(args, project_options) elif args['cleanbuild']: lifecycle.cleanbuild(project_options, remote=args['--remote']), elif _is_store_command(args): _run_store_command(args) elif args['tour']: _scaffold_examples(args['<directory>'] or _SNAPCRAFT_TOUR_DIR) elif args['help']: snapcraft.topic_help(args['<topic>'] or args['<plugin>'], args['--devel'], args['topics']) elif args['enable-ci']: enable_ci(args['<ci-system>'], args['--refresh']) elif args['update']: parts.update() elif args['define']: parts.define(args['<part-name>']) elif args['search']: parts.search(' '.join(args['<query>'])) else: # snap by default: lifecycle.snap(project_options, args['<directory>'], args['--output']) return project_options
def test_config_composes_with_remote_parts(self, mock_loadPlugin): self.make_snapcraft_yaml("""name: test version: "1" summary: test description: test confinement: strict parts: part1: stage-packages: [fswebcam] """) parts.update() internal_yaml.Config() mock_loadPlugin.assert_called_with('part1', 'go', { 'source': 'http://source.tar.gz', 'stage-packages': ['fswebcam'], 'stage': [], 'snap': []})
def test_config_composes_with_remote_parts(self, mock_loadPlugin): self.useFixture(fixture_setup.FakeParts()) self.make_snapcraft_yaml("""name: test version: "1" summary: test description: test confinement: strict parts: part1: stage-packages: [fswebcam] """) parts.update() project_loader.Config() mock_loadPlugin.assert_called_with('part1', 'go', { 'source': 'http://source.tar.gz', 'stage-packages': ['fswebcam'], 'stage': [], 'snap': []})
def test_config_composes_with_a_non_existent_remote_part(self): self.make_snapcraft_yaml("""name: test version: "1" summary: test description: test confinement: strict parts: non-existing-part: stage-packages: [fswebcam] """) parts.update() with self.assertRaises(internal_yaml.SnapcraftLogicError) as raised: internal_yaml.Config() self.assertEqual( str(raised.exception), '{!r} is missing the `plugin` entry and is not defined in the ' 'current remote parts cache, try to run `snapcraft update` ' 'to refresh'.format('non-existing-part'))
def test_config_uses_remote_part_from_after(self, mock_load): self.useFixture(fixture_setup.FakeParts()) self.make_snapcraft_yaml("""name: test version: "1" summary: test description: test confinement: strict parts: part1: after: - curl plugin: go stage-packages: [fswebcam] """) def load_effect(*args, **kwargs): mock_part = unittest.mock.Mock() mock_part.code.build_packages = [] mock_part.deps = [] mock_part.name = args[0] return mock_part mock_load.side_effect = load_effect project_options = snapcraft.ProjectOptions() parts.update() internal_yaml.Config(project_options) call1 = unittest.mock.call('part1', 'go', { 'stage': [], 'snap': [], 'stage-packages': ['fswebcam']}, project_options, self.part_schema) call2 = unittest.mock.call('curl', 'autotools', { 'source': 'http://curl.org'}, project_options, self.part_schema) mock_load.assert_has_calls([call1, call2])
def test_config_uses_remote_part_from_after(self, mock_load): self.make_snapcraft_yaml("""name: test version: "1" summary: test description: test confinement: strict parts: part1: after: - curl plugin: go stage-packages: [fswebcam] """) def load_effect(*args, **kwargs): mock_part = unittest.mock.Mock() mock_part.code.build_packages = [] mock_part.deps = [] mock_part.name = args[0] return mock_part mock_load.side_effect = load_effect project_options = snapcraft.ProjectOptions() parts.update() internal_yaml.Config(project_options) call1 = unittest.mock.call('part1', 'go', { 'stage': [], 'snap': [], 'stage-packages': ['fswebcam'] }, project_options, self.part_schema) call2 = unittest.mock.call('curl', 'autotools', {'source': 'http://curl.org'}, project_options, self.part_schema) mock_load.assert_has_calls([call1, call2])
def test_config_after_is_an_undefined_part(self): self.make_snapcraft_yaml("""name: test version: "1" summary: test description: test confinement: strict parts: part1: plugin: nil after: [non-existing-part] """) parts.update() with self.assertRaises(internal_yaml.SnapcraftLogicError) as raised: internal_yaml.Config() self.assertEqual( str(raised.exception), 'Cannot find definition for part {!r}. It may be a ' 'remote part, run `snapcraft update` to ' 'refresh the remote parts cache'.format('non-existing-part'))
def test_config_composes_with_remote_subpart(self, mock_loadPlugin): self.make_snapcraft_yaml("""name: test version: "1" summary: test description: test confinement: strict parts: project-part/part1: stage-packages: [fswebcam] """) parts.update() internal_yaml.Config() mock_loadPlugin.assert_called_with( 'project-part/part1', 'go', { 'source': 'http://source.tar.gz', 'stage-packages': ['fswebcam'], 'stage': [], 'snap': [] })
def run(args, project_options): # noqa lifecycle_command = _get_lifecycle_command(args) argless_command = _get_command_from_arg(args) if lifecycle_command: if _is_containerbuild(): lifecycle.containerbuild(lifecycle_command, project_options, args['<part>']) else: lifecycle.execute( lifecycle_command, project_options, args['<part>']) elif argless_command: argless_command() elif args['clean']: if _is_containerbuild(): step = args['--step'] or 'pull' lifecycle.containerbuild('clean', project_options, args=['--step', step] + args['<part>']) else: _run_clean(args, project_options) elif args['cleanbuild']: lifecycle.cleanbuild(project_options, remote=args['--remote']), elif _is_store_command(args): _run_store_command(args) elif args['tour']: _scaffold_examples(args['<directory>'] or _SNAPCRAFT_TOUR_DIR) elif args['help']: snapcraft.topic_help(args['<topic>'] or args['<plugin>'], args['--devel'], args['topics']) elif args['enable-ci']: enable_ci(args['<ci-system>'], args['--refresh']) elif args['update']: if _is_containerbuild(): lifecycle.containerbuild('update', project_options) else: parts.update() elif args['define']: if _is_containerbuild(): lifecycle.containerbuild('update', project_options, args=args['<part-name>']) else: parts.define(args['<part-name>']) elif args['search']: if _is_containerbuild(): lifecycle.containerbuild('search', project_options, args=' '.join(args['<query>'])) else: parts.search(' '.join(args['<query>'])) else: # snap by default: if _is_containerbuild(): lifecycle.containerbuild('snap', project_options, args['--output'], args['<directory>']) elif os.getenv('SNAPCRAFT_COLLABORATE'): # this is only for testing snapcraft.collaborate( os.getenv('SNAPCRAFT_COLLABORATORS_SNAP_NAME'), os.getenv('SNAPCRAFT_COLLABORATORS_SIGN_KEY')) else: lifecycle.snap(project_options, args['<directory>'], args['--output']) return project_options
def update(ctx): """Updates the parts listing from the cloud.""" parts.update()