From d5abc68060010dd0a5e2e1c6caa8c3d94da7e69f Mon Sep 17 00:00:00 2001 From: robk-tahoe <robk-tahoe@allmydata.com> Date: Tue, 22 Jan 2008 20:35:01 -0700 Subject: [PATCH] have mac app write a tahoe upon startup upon startup, the .app will look in '/usr/local/bin', '~/bin', '~/Library/bin' if it finds one of these dirs, and can write into it, and there isn't already a 'tahoe' present, it will write a small bach script which will launch the binary contained within the .app bundle this allows the .app bundle to offer the services of the 'tahoe' script easily and simply --- mac/allmydata_tahoe.py | 47 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/mac/allmydata_tahoe.py b/mac/allmydata_tahoe.py index 6eb828bb..5cdad832 100644 --- a/mac/allmydata_tahoe.py +++ b/mac/allmydata_tahoe.py @@ -5,10 +5,21 @@ _junk = depends # appease pyflakes import sys import os +import stat +import traceback + +TRY_TO_INSTALL_TAHOE_SCRIPT = True +TAHOE_SCRIPT = '''#!/bin/bash +if [ "x${@}x" == "xx" ] +then + %(exe)s --help +else + %(exe)s "${@}" +fi +''' def run_default_node(): import operator - import os basedir = os.path.expanduser('~/.tahoe') if not os.path.isdir(basedir): @@ -70,6 +81,40 @@ def run_default_node(): else: print 'files missing, not opening initial webish root page' + def maybe_install_tahoe_script(): + path_candidates = ['/usr/local/bin', '~/bin', '~/Library/bin'] + env_path = map(os.path.expanduser, os.environ['PATH'].split(':')) + if not sys.executable.endswith('/python'): + print 'not installing tahoe script: unexpected sys.exe "%s"' % (sys.executable,) + return + for path_candidate in map(os.path.expanduser, path_candidates): + if path_candidate not in env_path: + print path_candidate, 'not in', env_path + continue + tahoe_path = path_candidate + '/tahoe' + try: + if os.path.exists(tahoe_path): + print 'not installing "%s": it already exists' % (tahoe_path,) + return + print 'trying to install "%s"' % (tahoe_path,) + bin_path = (sys.executable[:-6] + 'Allmydata Tahoe').replace(' ', '\\ ') + script = TAHOE_SCRIPT % { 'exe': bin_path } + f = file(tahoe_path, 'wb') + f.write(script) + f.close() + mode = stat.S_IRUSR|stat.S_IXUSR|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH|stat.S_IXOTH + os.chmod(tahoe_path, mode) + print 'installed "%s"' % (tahoe_path,) + return + except: + print 'unable to write %s' % (tahoe_path,) + traceback.print_exc() + else: + print 'no remaining candidate paths for installation of tahoe script' + + if TRY_TO_INSTALL_TAHOE_SCRIPT: + maybe_install_tahoe_script() + # run the node itself os.chdir(basedir) c = client.Client(basedir) -- 2.45.2