#!/usr/bin/env python import sys, os import vars_init vars_init.init([]) import state from log import err if len(sys.argv[1:]) != 0: err('%s: no arguments expected.\n' % sys.argv[0]) sys.exit(1) for f in state.files(): if f.is_generated and f.read_stamp() != state.STAMP_MISSING: print f.nicename()
os.environ['REDO_DEBUG_LOCKS'] = '1' if opt.debug_pids: os.environ['REDO_DEBUG_PIDS'] = '1' # This is slightly tricky: the log and pretty options default to true. We # want to inherit that 'true' value from parent processes *unless* someone # explicitly specifies the reverse. if opt.no_log: os.environ['REDO_LOG'] = '0' if opt.no_pretty: os.environ['REDO_PRETTY'] = '0' if opt.no_color: os.environ['REDO_COLOR'] = '0' import vars_init vars_init.init(targets) import vars, state, builder, jwack from logs import warn, err try: if vars_init.is_toplevel: builder.start_stdin_log_reader(status=opt.status, details=opt.details, pretty=opt.pretty, color=opt.color, debug_locks=opt.debug_locks, debug_pids=opt.debug_pids) for t in targets: if os.path.exists(t): f = state.File(name=t) if not f.is_generated: warn('%s: exists and not marked as generated; not redoing.\n' % f.nicename())
os.environ['REDO_XTRACE'] = '1' if opt.keep_going: os.environ['REDO_KEEP_GOING'] = '1' if opt.shuffle: os.environ['REDO_SHUFFLE'] = '1' if opt.debug_locks: os.environ['REDO_DEBUG_LOCKS'] = '1' if opt.debug_pids: os.environ['REDO_DEBUG_PIDS'] = '1' if opt.old_args: os.environ['REDO_OLD_ARGS'] = '1' if opt.target_only: os.environ['REDO_TARGET_ONLY'] = '1' import vars_init vars_init.init(targets) import vars, state, builder, jwack from log import warn, err try: for t in targets: if os.path.exists(t): f = state.File(name=t) if not f.is_generated: warn('%s: exists and not marked as generated; not redoing.\n' % f.nicename()) j = atoi(opt.jobs or 1) if j < 1 or j > 1000: err('invalid --jobs value: %r\n' % opt.jobs)
#!/usr/bin/env python import sys, os import vars_init vars_init.init(sys.argv[1:]) import vars, state, builder, jwack, deps from helpers import unlink from log import debug, debug2, err def should_build(t): f = state.File(name=t) if f.is_failed(): raise builder.ImmediateReturn(32) dirty = deps.isdirty(f, depth = '', max_changed = vars.RUNID) return dirty==[f] and deps.DIRTY or dirty rv = 202 try: if vars.TARGET and not vars.UNLOCKED: me = os.path.join(vars.STARTDIR, os.path.join(vars.PWD, vars.TARGET)) f = state.File(name=me) debug2('TARGET: %r %r %r\n' % (vars.STARTDIR, vars.PWD, vars.TARGET)) else: f = me = None debug2('redo-ifchange: not adding depends.\n') try: targets = sys.argv[1:] if f:
u,unchanged show lines for dependencies not needing to be rebuilt f,follow keep watching for more lines to be appended (like tail -f) no-details only show 'redo' recursion trace, not build output no-status don't display build summary line in --follow no-pretty don't pretty-print logs, show raw @@REDO output instead no-color disable ANSI color; --color to force enable (default: auto) debug-locks print messages about file locking (useful for debugging) debug-pids print process ids in log messages (useful for debugging) ack-fd= (internal use only) print REDO-OK to this fd upon starting """ o = options.Options(optspec) (opt, flags, extra) = o.parse(sys.argv[1:]) targets = extra import vars_init vars_init.init(list(targets)) import vars, logs, state topdir = os.getcwd() already = set() queue = [] depth = [] total_lines = 0 status = None start_time = time.time() # regexp for matching "redo" lines in the log, which we use for recursion. # format: # redo path/to/target which might have spaces # redo [unchanged] path/to/target which might have spaces