]> arthur.barton.de Git - bup.git/blobdiff - main.py
Give main.py the a --profile option
[bup.git] / main.py
diff --git a/main.py b/main.py
index feb3013edc1b2ffa64adf77b74bd40d7a6159387..196f6937d51609e0c6b341baa951ae21fdf51e61 100755 (executable)
--- a/main.py
+++ b/main.py
@@ -30,7 +30,7 @@ from bup.helpers import *
 os.environ['WIDTH'] = str(tty_width())
 
 def usage():
-    log('Usage: bup [-?|--help] [-d BUP_DIR] [--debug] '
+    log('Usage: bup [-?|--help] [-d BUP_DIR] [--debug] [--profile]'
         '<command> [options...]\n\n')
     common = dict(
         ftp = 'Browse backup sets using an ftp-like client',
@@ -70,14 +70,15 @@ if len(argv) < 2:
 
 # Handle global options.
 try:
-    global_args, subcmd = getopt.getopt(argv[1:], '?VDd:',
-                                    ['help', 'version', 'debug', 'bup-dir='])
+    optspec = ['help', 'version', 'debug', 'profile', 'bup-dir=']
+    global_args, subcmd = getopt.getopt(argv[1:], '?VDd:', optspec)
 except getopt.GetoptError, ex:
     log('error: ' + ex.msg + '\n')
     usage()
 
 help_requested = None
 dest_dir = None
+do_profile = False
 
 for opt in global_args:
     if opt[0] in ['-?', '--help']:
@@ -87,6 +88,8 @@ for opt in global_args:
     elif opt[0] in ['-D', '--debug']:
         helpers.buglvl += 1
         os.environ['BUP_DEBUG'] = str(helpers.buglvl)
+    elif opt[0] in ['--profile']:
+        do_profile = True
     elif opt[0] in ['-d', '--bup-dir']:
         dest_dir = opt[1]
     else:
@@ -119,7 +122,8 @@ def subpath(s):
         sp = os.path.join(cmdpath, 'bup-%s' % s)
     return sp
 
-if not os.path.exists(subpath(subcmd_name)):
+subcmd[0] = subpath(subcmd_name)
+if not os.path.exists(subcmd[0]):
     log('error: unknown command "%s"\n' % subcmd_name)
     usage()
 
@@ -164,8 +168,8 @@ ret = 95
 p = None
 try:
     try:
-        p = subprocess.Popen([subpath(subcmd_name)] + subcmd[1:],
-                             stdout=outf, stderr=errf, preexec_fn=force_tty)
+        c = (do_profile and [sys.executable, '-m', 'cProfile'] or []) + subcmd
+        p = subprocess.Popen(c, stdout=outf, stderr=errf, preexec_fn=force_tty)
         while 1:
             # if we get a signal while waiting, we have to keep waiting, just
             # in case our child doesn't die.
@@ -177,7 +181,7 @@ try:
                 os.kill(p.pid, e.signum)
                 ret = 94
     except OSError, e:
-        log('%s: %s\n' % (subpath(subcmd_name), e))
+        log('%s: %s\n' % (subcmd[0], e))
         ret = 98
 finally:
     if p and p.poll() == None: