+ tag = self.image
+ if config.has('docker_hub_repository'):
+ tag = '%s:%s' % (config.get('docker_hub_repository'), tag)
+
+ self.container = command_and_read('%s run %s %s -itd %s /bin/bash' % (config.docker(), self._user_tag(), opts, tag))[0].strip()
+
+ def command(self, cmd):
+ dir = os.path.join(self.directory, os.path.relpath(os.getcwd(), self.directory))
+ interactive_flag = '-i ' if sys.stdin.isatty() else ''
+ command('%s exec %s %s -t %s /bin/bash -c \'export %s; cd %s; %s\'' % (config.docker(), self._user_tag(), interactive_flag, self.container, self.variables_string(), dir, cmd))
+
+ def cleanup(self):
+ super(DockerTarget, self).cleanup()
+ command('%s kill %s' % (config.docker(), self.container))
+
+ def mount(self, m):
+ self.mounts.append(m)
+
+
+class FlatpakTarget(Target):
+ def __init__(self, project, checkout):
+ super(FlatpakTarget, self).__init__('flatpak')
+ self.build_dependencies = False
+ self.project = project
+ self.checkout = checkout
+
+ def setup(self):
+ pass
+
+ def command(self, cmd):
+ command(cmd)
+
+ def checkout_dependencies(self):
+ tree = globals.trees.get(self.project, self.checkout, self)
+ return tree.checkout_dependencies()
+
+ def flatpak(self):
+ return 'flatpak'
+
+ def flatpak_builder(self):
+ b = 'flatpak-builder'
+ if config.has('flatpak_state_dir'):
+ b += ' --state-dir=%s' % config.get('flatpak_state_dir')
+ return b
+
+
+class WindowsTarget(DockerTarget):