Procházet zdrojové kódy

Merge branch 'dotzborro-aux-files'

Valentin Niess před 1 rokem
rodič
revize
0c66562ad4

+ 7 - 0
python_appimage/__main__.py

@@ -7,6 +7,11 @@ import sys
 __all__ = ['main']
 
 
+def exists(path):
+    if not os.path.exists(path):
+        raise argparse.ArgumentTypeError("could not find: {}".format(path))
+    return os.path.abspath(path)
+
 def main():
     '''Entry point for the CLI
     '''
@@ -73,6 +78,8 @@ def main():
                                   help='force pip in-tree-build',
                                   action='store_true',
                                   default=False)
+    build_app_parser.add_argument('-x', '--extra-data', type=exists,
+        help='extra application data (bundled under $APPDIR/)', nargs='+')
 
     list_parser = subparsers.add_parser('list',
         description='List Python versions installed in a manylinux image')

+ 13 - 2
python_appimage/commands/build/app.py

@@ -26,14 +26,16 @@ def _unpack_args(args):
     '''Unpack command line arguments
     '''
     return args.appdir, args.name, args.python_version, args.linux_tag,        \
-           args.python_tag, args.base_image, args.in_tree_build
+           args.python_tag, args.base_image, args.in_tree_build,               \
+           args.extra_data
 
 
 _tag_pattern = re.compile('python([^-]+)[-]([^.]+)[.]AppImage')
 _linux_pattern = re.compile('manylinux([0-9]+)_' + platform.machine())
 
 def execute(appdir, name=None, python_version=None, linux_tag=None,
-            python_tag=None, base_image=None, in_tree_build=False):
+            python_tag=None, base_image=None, in_tree_build=False,
+            extra_data=None):
     '''Build a Python application using a base AppImage
     '''
 
@@ -287,6 +289,15 @@ def execute(appdir, name=None, python_version=None, linux_tag=None,
                        '--no-warn-script-location', requirement),
                        exclude=(deprecation + git_warnings))
 
+        # Bundle auxilliary application data
+        if extra_data is not None:
+            for path in extra_data:
+                basename = os.path.basename(path)
+                log('BUNDLE', basename)
+                if os.path.isdir(path):
+                    copy_tree(path, 'AppDir/' + basename)
+                else:
+                    copy_file(path, 'AppDir/')
 
         # Bundle the entry point
         entrypoint_path = glob.glob(appdir + '/entrypoint.*')