redo-ifchange can now be run even if there's no parent redo.
This commit is contained in:
parent
e18fa85d58
commit
fba684ee07
4 changed files with 46 additions and 32 deletions
|
|
@ -1,5 +1,11 @@
|
|||
#!/usr/bin/python
|
||||
import sys, os, errno, stat
|
||||
if not sys.argv[1:]:
|
||||
sys.exit(0) # nothing to do, so we can't possibly do it wrong
|
||||
|
||||
import vars_init
|
||||
vars_init.init(sys.argv[1:])
|
||||
|
||||
import vars, state, builder, jwack
|
||||
from helpers import unlink
|
||||
from log import debug, debug2, err
|
||||
|
|
@ -103,13 +109,17 @@ def should_build(t):
|
|||
|
||||
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 not vars.UNLOCKED:
|
||||
if f:
|
||||
for t in targets:
|
||||
f.add_dep('m', t)
|
||||
f.save()
|
||||
|
|
@ -118,4 +128,5 @@ try:
|
|||
jwack.force_return_tokens()
|
||||
except KeyboardInterrupt:
|
||||
sys.exit(200)
|
||||
state.commit()
|
||||
sys.exit(rv)
|
||||
|
|
|
|||
28
redo.py
28
redo.py
|
|
@ -35,36 +35,12 @@ if opt.debug_locks:
|
|||
if opt.debug_pids:
|
||||
os.environ['REDO_DEBUG_PIDS'] = '1'
|
||||
|
||||
is_root = not os.environ.get('REDO', '')
|
||||
|
||||
if is_root:
|
||||
# toplevel call to redo
|
||||
exenames = [os.path.abspath(sys.argv[0]), os.path.realpath(sys.argv[0])]
|
||||
if exenames[0] == exenames[1]:
|
||||
exenames = [exenames[0]]
|
||||
dirnames = [os.path.dirname(p) for p in exenames]
|
||||
os.environ['PATH'] = ':'.join(dirnames) + ':' + os.environ['PATH']
|
||||
|
||||
base = os.path.commonprefix([os.path.abspath(os.path.dirname(t))
|
||||
for t in targets] + [os.getcwd()])
|
||||
bsplit = base.split('/')
|
||||
for i in range(len(bsplit)-1, 0, -1):
|
||||
newbase = '/'.join(bsplit[:i])
|
||||
if os.path.exists(newbase + '/.redo'):
|
||||
base = newbase
|
||||
break
|
||||
os.environ['REDO_BASE'] = base
|
||||
os.environ['REDO_STARTDIR'] = os.getcwd()
|
||||
os.environ['REDO'] = os.path.abspath(sys.argv[0])
|
||||
|
||||
import vars_init
|
||||
vars_init.init(targets)
|
||||
|
||||
import vars, state, builder, jwack
|
||||
from log import err
|
||||
|
||||
|
||||
if is_root:
|
||||
state.init()
|
||||
|
||||
try:
|
||||
j = atoi(opt.jobs or 1)
|
||||
if j < 1 or j > 1000:
|
||||
|
|
|
|||
2
vars.py
2
vars.py
|
|
@ -17,7 +17,7 @@ VERBOSE = os.environ.get('REDO_VERBOSE', '') and 1 or 0
|
|||
XTRACE = os.environ.get('REDO_XTRACE', '') and 1 or 0
|
||||
KEEP_GOING = os.environ.get('REDO_KEEP_GOING', '') and 1 or 0
|
||||
SHUFFLE = os.environ.get('REDO_SHUFFLE', '') and 1 or 0
|
||||
STARTDIR = os.environ['REDO_STARTDIR']
|
||||
STARTDIR = os.environ.get('REDO_STARTDIR', '')
|
||||
RUNID = atoi(os.environ.get('REDO_RUNID')) or None
|
||||
BASE = os.environ['REDO_BASE']
|
||||
while BASE and BASE.endswith('/'):
|
||||
|
|
|
|||
27
vars_init.py
Normal file
27
vars_init.py
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import sys, os
|
||||
|
||||
def init(targets):
|
||||
if not os.environ.get('REDO'):
|
||||
# toplevel call to redo
|
||||
exenames = [os.path.abspath(sys.argv[0]),
|
||||
os.path.realpath(sys.argv[0])]
|
||||
if exenames[0] == exenames[1]:
|
||||
exenames = [exenames[0]]
|
||||
dirnames = [os.path.dirname(p) for p in exenames]
|
||||
os.environ['PATH'] = ':'.join(dirnames) + ':' + os.environ['PATH']
|
||||
os.environ['REDO'] = os.path.abspath(sys.argv[0])
|
||||
|
||||
if not os.environ.get('REDO_BASE'):
|
||||
base = os.path.commonprefix([os.path.abspath(os.path.dirname(t))
|
||||
for t in targets] + [os.getcwd()])
|
||||
bsplit = base.split('/')
|
||||
for i in range(len(bsplit)-1, 0, -1):
|
||||
newbase = '/'.join(bsplit[:i])
|
||||
if os.path.exists(newbase + '/.redo'):
|
||||
base = newbase
|
||||
break
|
||||
os.environ['REDO_BASE'] = base
|
||||
os.environ['REDO_STARTDIR'] = os.getcwd()
|
||||
|
||||
import state
|
||||
state.init()
|
||||
Loading…
Add table
Add a link
Reference in a new issue