diff --git a/pmb/helpers/frontend.py b/pmb/helpers/frontend.py
new file mode 100644
index 00000000..dbf9aff3
--- /dev/null
+++ b/pmb/helpers/frontend.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python3
+
+"""
+Copyright 2017 Oliver Smith
+
+This file is part of pmbootstrap.
+
+pmbootstrap is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+pmbootstrap is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with pmbootstrap. If not, see .
+"""
+
+import json
+import pmb.aportgen
+import pmb.build
+import pmb.config
+import pmb.challenge
+import pmb.chroot
+import pmb.chroot.initfs
+import pmb.chroot.other
+import pmb.flasher
+import pmb.helpers.logging
+import pmb.helpers.other
+import pmb.helpers.run
+import pmb.install
+import pmb.parse
+
+
+def aportgen(args):
+ pmb.aportgen.generate(args, args.package)
+
+
+def build(args):
+ pmb.build.package(args, args.package, args.arch, args.force,
+ args.buildinfo)
+
+
+def build_init(args):
+ pmb.build.init(args, args.suffix)
+
+
+def challenge(args):
+ pmb.challenge.frontend(args)
+
+
+def checksum(args):
+ pmb.build.checksum(args, args.package)
+
+
+def chroot(args):
+ pmb.chroot.apk.check_min_version(args, args.suffix)
+ pmb.chroot.root(args, args.command, args.suffix, log=False)
+
+
+def index(args):
+ pmb.build.index_repo(args)
+
+
+def initfs(args):
+ pmb.chroot.initfs.frontend(args)
+
+
+def install(args):
+ pmb.install.install(args)
+
+
+def flasher(args):
+ pmb.flasher.frontend(args)
+
+
+def menuconfig(args):
+ pmb.build.menuconfig(args, args.package, args.deviceinfo["arch"])
+
+
+def parse_apkbuild(args):
+ build_path = args.aports + "/" + args.package + "/APKBUILD"
+ print(json.dumps(pmb.parse.apkbuild(args, build_path), indent=4))
+
+
+def parse_apkindex(args):
+ result = pmb.parse.apkindex.parse(args, args.apkindex_path)
+ print(json.dumps(result, indent=4))
+
+
+def shutdown(args):
+ pmb.chroot.shutdown(args)
+
+
+def stats(args):
+ pmb.build.ccache_stats(args, args.arch)
+
+
+def log(args):
+ pmb.helpers.run.user(args, ["tail", "-f", args.log, "-n", args.lines],
+ log=False)
+
+
+def log_distccd(args):
+ logpath = "/home/user/distccd.log"
+ pmb.chroot.user(args, ["tail", "-f", logpath, "-n", args.lines], log=False)
+
+
+def zap(args):
+ pmb.chroot.zap(args)
diff --git a/pmbootstrap.py b/pmbootstrap.py
index e9e3d4ee..87e31431 100755
--- a/pmbootstrap.py
+++ b/pmbootstrap.py
@@ -22,100 +22,12 @@ along with pmbootstrap. If not, see .
import sys
import logging
import os
-import json
import traceback
-
-import pmb.aportgen
-import pmb.build
import pmb.config
-import pmb.challenge
-import pmb.chroot
-import pmb.chroot.initfs
-import pmb.chroot.other
-import pmb.flasher
+import pmb.helpers.frontend
import pmb.helpers.logging
import pmb.helpers.other
-import pmb.helpers.run
import pmb.parse
-import pmb.install
-
-
-def action_aportgen(args):
- pmb.aportgen.generate(args, args.package)
-
-
-def action_build(args):
- pmb.build.package(args, args.package, args.arch, args.force,
- args.buildinfo)
-
-
-def action_build_init(args):
- pmb.build.init(args, args.suffix)
-
-
-def action_challenge(args):
- pmb.challenge.frontend(args)
-
-
-def action_checksum(args):
- pmb.build.checksum(args, args.package)
-
-
-def action_chroot(args):
- pmb.chroot.apk.check_min_version(args, args.suffix)
- pmb.chroot.root(args, args.command, args.suffix, log=False)
-
-
-def action_index(args):
- pmb.build.index_repo(args)
-
-
-def action_initfs(args):
- pmb.chroot.initfs.frontend(args)
-
-
-def action_install(args):
- pmb.install.install(args)
-
-
-def action_flasher(args):
- pmb.flasher.frontend(args)
-
-
-def action_menuconfig(args):
- pmb.build.menuconfig(args, args.package, args.deviceinfo["arch"])
-
-
-def action_parse_apkbuild(args):
- build_path = args.aports + "/" + args.package + "/APKBUILD"
- print(json.dumps(pmb.parse.apkbuild(args, build_path), indent=4))
-
-
-def action_parse_apkindex(args):
- result = pmb.parse.apkindex.parse(args, args.apkindex_path)
- print(json.dumps(result, indent=4))
-
-
-def action_shutdown(args):
- pmb.chroot.shutdown(args)
-
-
-def action_stats(args):
- pmb.build.ccache_stats(args, args.arch)
-
-
-def action_log(args):
- pmb.helpers.run.user(args, ["tail", "-f", args.log, "-n", args.lines],
- log=False)
-
-
-def action_log_distccd(args):
- logpath = "/home/user/distccd.log"
- pmb.chroot.user(args, ["tail", "-f", logpath, "-n", args.lines], log=False)
-
-
-def action_zap(args):
- pmb.chroot.zap(args)
def main():
@@ -136,12 +48,12 @@ def main():
" 'pmbootstrap init' to generate one.")
return 1
- # If an action_xxx function is defined in local scope, run it with args
- func = globals().get('action_' + args.action)
- if func:
- func(args)
+ # Run the function with the action's name (in pmb/helpers/frontend.py)
+ if args.action:
+ getattr(pmb.helpers.frontend, args.action)(args)
else:
logging.info("Run pmbootstrap -h for usage information.")
+
# Print finish timestamp
logging.info("Done")