diff options
Diffstat (limited to '')
-rwxr-xr-x | portato.py | 90 | ||||
-rw-r--r-- | portato/__init__.py | 110 |
2 files changed, 102 insertions, 98 deletions
@@ -14,93 +14,7 @@ from __future__ import with_statement, absolute_import -import sys, os -import subprocess, threading -import atexit -from optparse import OptionParser, SUPPRESS_HELP - -from portato import get_listener, log, start -from portato.su import detect_su_command -from portato.helper import debug, info, error -from portato.constants import VERSION - -def main (): - start() # the first thing to do :) - - # build the parser - desc = "Portato - A Portage GUI." - usage = "%prog [options] [frontend]" - vers = "%%prog v. %s" % VERSION - - parser = OptionParser(version = vers, prog = "Portato", description = desc, usage = usage) - - parser.add_option("--shm", action = "store", nargs = 3, type="long", dest = "shm", - help = SUPPRESS_HELP) - - parser.add_option("-F", "--no-fork", "-L", action = "store_true", dest = "nofork", default = False, - help = _("do not fork off as root") + (" (%s)" % _("-L is deprecated"))) - - # run parser - (options, args) = parser.parse_args() - - # close listener at exit - atexit.register(get_listener().close) - - if options.nofork or os.getuid() == 0: # start GUI - log.start(file = True) # start logging to file - - from portato.gui import run - info("%s v. %s", _("Starting Portato"), VERSION) - - if options.shm: - get_listener().set_send(*options.shm) - else: - get_listener().set_send() - - try: - run() - except KeyboardInterrupt: - debug("Got KeyboardInterrupt.") - - else: # start us again in root modus and launch listener - - import shm_wrapper as shm - - mem = shm.create_memory(1024, permissions=0600) - sig = shm.create_semaphore(InitialValue = 0, permissions = 0600) - rw = shm.create_semaphore(InitialValue = 1, permissions = 0600) - - # start listener - lt = threading.Thread(target=get_listener().set_recv, args = (mem, sig, rw)) - lt.setDaemon(False) - lt.start() - - try: - # set DBUS_SESSION_BUS_ADDRESS to "" to make dbus work as root ;) - env = os.environ.copy() - env.update(DBUS_SESSION_BUS_ADDRESS="") - - su = detect_su_command() - if su: - debug("Using '%s' as su command.", su.bin) - cmd = su.cmd("%s --no-fork --shm %ld %ld %ld" % (sys.argv[0], mem.key, sig.key, rw.key)) - - sp = subprocess.Popen(cmd, env = env) - - # wait for process to finish - try: - sp.wait() - debug("Subprocess finished") - except KeyboardInterrupt: - debug("Got KeyboardInterrupt.") - - else: - error(_("No valid su command detected. Aborting.")) - - finally: - if lt.isAlive(): - debug("Listener is still running. Close it.") - get_listener().close() +from portato import start if __name__ == "__main__": - main() + start() diff --git a/portato/__init__.py b/portato/__init__.py index f5d7f65..e54354a 100644 --- a/portato/__init__.py +++ b/portato/__init__.py @@ -12,17 +12,16 @@ from __future__ import absolute_import -def start(): - from . import log - import gettext, locale - from portato.constants import LOCALE_DIR, APP - - # set gettext stuff - locale.setlocale(locale.LC_ALL, '') - gettext.install(APP, LOCALE_DIR, unicode = True) +import gettext, locale +import sys, os +import subprocess, threading +import atexit +from optparse import OptionParser, SUPPRESS_HELP - # start logging - log.start(file=False) +from . import log +from .constants import LOCALE_DIR, APP, VERSION +from .su import detect_su_command +from .helper import debug, info, error # listener-handling __listener = None @@ -34,3 +33,94 @@ def get_listener(): __listener = Listener() return __listener + +def get_parser (use_ = False): + # use_ defaults to False, if it is called from outside + # where gettext is not yet initialized + + if not use_: _ = lambda s : s + + desc = "Portato - A Portage GUI." + usage = "%prog [options] [frontend]" + vers = "%%prog v. %s" % VERSION + + parser = OptionParser(version = vers, prog = "Portato", description = desc, usage = usage) + + parser.add_option("--shm", action = "store", nargs = 3, type="long", dest = "shm", + help = SUPPRESS_HELP) + + parser.add_option("-F", "--no-fork", "-L", action = "store_true", dest = "nofork", default = False, + help = _("do not fork off as root") + (" (%s)" % _("-L is deprecated"))) + + return parser + +def start(): + + # set gettext stuff + locale.setlocale(locale.LC_ALL, '') + gettext.install(APP, LOCALE_DIR, unicode = True) + + # start logging + log.start(file=False) + + # run parser + (options, args) = get_parser().parse_args() + + # close listener at exit + atexit.register(get_listener().close) + + if options.nofork or os.getuid() == 0: # start GUI + log.start(file = True) # start logging to file + + from .gui import run + info("%s v. %s", _("Starting Portato"), VERSION) + + if options.shm: + get_listener().set_send(*options.shm) + else: + get_listener().set_send() + + try: + run() + except KeyboardInterrupt: + debug("Got KeyboardInterrupt.") + + else: # start us again in root modus and launch listener + + import shm_wrapper as shm + + mem = shm.create_memory(1024, permissions=0600) + sig = shm.create_semaphore(InitialValue = 0, permissions = 0600) + rw = shm.create_semaphore(InitialValue = 1, permissions = 0600) + + # start listener + lt = threading.Thread(target=get_listener().set_recv, args = (mem, sig, rw)) + lt.setDaemon(False) + lt.start() + + try: + # set DBUS_SESSION_BUS_ADDRESS to "" to make dbus work as root ;) + env = os.environ.copy() + env.update(DBUS_SESSION_BUS_ADDRESS="") + + su = detect_su_command() + if su: + debug("Using '%s' as su command.", su.bin) + cmd = su.cmd("%s --no-fork --shm %ld %ld %ld" % (sys.argv[0], mem.key, sig.key, rw.key)) + + sp = subprocess.Popen(cmd, env = env) + + # wait for process to finish + try: + sp.wait() + debug("Subprocess finished") + except KeyboardInterrupt: + debug("Got KeyboardInterrupt.") + + else: + error(_("No valid su command detected. Aborting.")) + + finally: + if lt.isAlive(): + debug("Listener is still running. Close it.") + get_listener().close() |