def testrun(args): """testrun subcommand. Runs the command with the tracer using a temporary sqlite3 database, then reads it and dumps it out. Not really useful, except for debugging. """ fd, database = Path.tempfile(prefix='reprozip_', suffix='.sqlite3') os.close(fd) try: if args.arg0 is not None: argv = [args.arg0] + args.cmdline[1:] else: argv = args.cmdline logger.debug("Starting tracer, binary=%r, argv=%r", args.cmdline[0], argv) c = _pytracer.execute(args.cmdline[0], argv, database.path) print("\n\n-----------------------------------------------------------" "--------------------") print_db(database) if c != 0: if c & 0x0100: print("\nWarning: program appears to have been terminated by " "signal %d" % (c & 0xFF)) else: print("\nWarning: program exited with non-zero code %d" % c) return c finally: database.remove()
def trace(binary, argv, directory, append, verbosity=1): """Main function for the trace subcommand. """ cwd = Path.cwd() if (any(cwd.lies_under(c) for c in magic_dirs + system_dirs) and not cwd.lies_under('/usr/local')): logging.warning( "You are running this experiment from a system directory! " "Autodetection of non-system files will probably not work as " "intended") # Trace directory if not append: if directory.exists(): logging.info("Removing existing directory %s", directory) directory.rmtree() directory.mkdir(parents=True) else: if not directory.exists(): logging.warning("--continue was specified but %s does not exist " "-- creating", directory) directory.mkdir(parents=True) # Runs the trace database = directory / 'trace.sqlite3' logging.info("Running program") # Might raise _pytracer.Error c = _pytracer.execute(binary, argv, database.path, verbosity) if c != 0: if c & 0x0100: logging.warning("Program appears to have been terminated by " "signal %d", c & 0xFF) else: logging.warning("Program exited with non-zero code %d", c) logging.info("Program completed")
def testrun(args): """testrun subcommand. Runs the command with the tracer using a temporary sqlite3 database, then reads it and dumps it out. Not really useful, except for debugging. """ fd, database = Path.tempfile(prefix='reprozip_', suffix='.sqlite3') os.close(fd) try: if args.arg0 is not None: argv = [args.arg0] + args.cmdline[1:] else: argv = args.cmdline logging.debug("Starting tracer, binary=%r, argv=%r", args.cmdline[0], argv) c = _pytracer.execute(args.cmdline[0], argv, database.path, args.verbosity) print("\n\n-----------------------------------------------------------" "--------------------") print_db(database) if c != 0: if c & 0x0100: print("\nWarning: program appears to have been terminated by " "signal %d" % (c & 0xFF)) else: print("\nWarning: program exited with non-zero code %d" % c) finally: database.remove()
def trace(binary, argv, directory, append, verbosity=1): """Main function for the trace subcommand. """ cwd = Path.cwd() if (any(cwd.lies_under(c) for c in magic_dirs + system_dirs) and not cwd.lies_under('/usr/local')): logging.warning( "You are running this experiment from a system directory! " "Autodetection of non-system files will probably not work as " "intended") # Trace directory if not append: if directory.exists(): logging.warning("Removing existing directory %s", directory) directory.rmtree() directory.mkdir(parents=True) else: if not directory.exists(): logging.warning("--continue was specified but %s does not exist " "-- creating", directory) directory.mkdir(parents=True) # Runs the trace database = directory / 'trace.sqlite3' logging.info("Running program") # Might raise _pytracer.Error c = _pytracer.execute(binary, argv, database.path, verbosity) if c != 0: if c & 0x0100: logging.warning("Program appears to have been terminated by " "signal %d", c & 0xFF) else: logging.warning("Program exited with non-zero code %d", c) logging.info("Program completed")
def trace(binary, argv, directory, append, verbosity=1): """Main function for the trace subcommand. """ cwd = Path.cwd() if (any(cwd.lies_under(c) for c in magic_dirs + system_dirs) and not cwd.lies_under('/usr/local')): logging.warning( "You are running this experiment from a system directory! " "Autodetection of non-system files will probably not work as " "intended") # Trace directory if directory.exists(): if append is None: r = tty_prompt( "Trace directory %s exists\n" "(a)ppend run to the trace, (d)elete it or (s)top? [a/d/s] " % directory, 'aAdDsS') if r is None: logging.critical( "Trace directory %s exists\n" "Please use either --continue or --overwrite\n", directory) sys.exit(125) elif r in 'sS': sys.exit(125) elif r in 'dD': directory.rmtree() directory.mkdir() logging.warning( "You can use --overwrite to replace the existing trace " "(or --continue to append\nwithout prompt)") elif append is False: logging.info("Removing existing trace directory %s", directory) directory.rmtree() directory.mkdir(parents=True) else: if append is True: logging.warning("--continue was set but trace doesn't exist yet") directory.mkdir() # Runs the trace database = directory / 'trace.sqlite3' logging.info("Running program") # Might raise _pytracer.Error c = _pytracer.execute(binary, argv, database.path, verbosity) if c != 0: if c & 0x0100: logging.warning( "Program appears to have been terminated by " "signal %d", c & 0xFF) else: logging.warning("Program exited with non-zero code %d", c) logging.info("Program completed") return c
def trace(binary, argv, directory, append, verbosity='unset'): """Main function for the trace subcommand. """ if verbosity != 'unset': warnings.warn("The 'verbosity' parameter for trace() is deprecated. " "Please set a level on the 'reprozip' logger instead.", DeprecationWarning) if not isinstance(directory, Path): directory = Path(directory) if isinstance(binary, Path): binary = binary.path cwd = Path.cwd() if (any(cwd.lies_under(c) for c in magic_dirs + system_dirs) and not cwd.lies_under('/usr/local')): logger.warning( "You are running this experiment from a system directory! " "Autodetection of non-system files will probably not work as " "intended") # Trace directory if directory.exists(): if append is None: r = tty_prompt( "Trace directory %s exists\n" "(a)ppend run to the trace, (d)elete it or (s)top? [a/d/s] " % directory, 'aAdDsS') if r is None: logger.critical( "Trace directory %s exists\n" "Please use either --continue or --overwrite\n", directory) sys.exit(125) elif r in 'sS': sys.exit(125) elif r in 'dD': directory.rmtree() directory.mkdir() logger.warning( "You can use --overwrite to replace the existing trace " "(or --continue to append\nwithout prompt)") elif append is False: logger.info("Removing existing trace directory %s", directory) directory.rmtree() directory.mkdir(parents=True) else: if append is True: logger.warning("--continue was set but trace doesn't exist yet") directory.mkdir() # Runs the trace database = directory / 'trace.sqlite3' logger.info("Running program") # Might raise _pytracer.Error c = _pytracer.execute(binary, argv, database.path) if c != 0: if c & 0x0100: logger.warning("Program appears to have been terminated by " "signal %d", c & 0xFF) else: logger.warning("Program exited with non-zero code %d", c) logger.info("Program completed") return c