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
|
#!/usr/bin/python
|
||||||
import sys, os, errno, stat
|
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
|
import vars, state, builder, jwack
|
||||||
from helpers import unlink
|
from helpers import unlink
|
||||||
from log import debug, debug2, err
|
from log import debug, debug2, err
|
||||||
|
|
@ -103,13 +109,17 @@ def should_build(t):
|
||||||
|
|
||||||
rv = 202
|
rv = 202
|
||||||
try:
|
try:
|
||||||
|
if vars.TARGET and not vars.UNLOCKED:
|
||||||
me = os.path.join(vars.STARTDIR,
|
me = os.path.join(vars.STARTDIR,
|
||||||
os.path.join(vars.PWD, vars.TARGET))
|
os.path.join(vars.PWD, vars.TARGET))
|
||||||
f = state.File(name=me)
|
f = state.File(name=me)
|
||||||
debug2('TARGET: %r %r %r\n' % (vars.STARTDIR, vars.PWD, vars.TARGET))
|
debug2('TARGET: %r %r %r\n' % (vars.STARTDIR, vars.PWD, vars.TARGET))
|
||||||
|
else:
|
||||||
|
f = me = None
|
||||||
|
debug2('redo-ifchange: not adding depends.\n')
|
||||||
try:
|
try:
|
||||||
targets = sys.argv[1:]
|
targets = sys.argv[1:]
|
||||||
if not vars.UNLOCKED:
|
if f:
|
||||||
for t in targets:
|
for t in targets:
|
||||||
f.add_dep('m', t)
|
f.add_dep('m', t)
|
||||||
f.save()
|
f.save()
|
||||||
|
|
@ -118,4 +128,5 @@ try:
|
||||||
jwack.force_return_tokens()
|
jwack.force_return_tokens()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
sys.exit(200)
|
sys.exit(200)
|
||||||
|
state.commit()
|
||||||
sys.exit(rv)
|
sys.exit(rv)
|
||||||
|
|
|
||||||
28
redo.py
28
redo.py
|
|
@ -35,36 +35,12 @@ if opt.debug_locks:
|
||||||
if opt.debug_pids:
|
if opt.debug_pids:
|
||||||
os.environ['REDO_DEBUG_PIDS'] = '1'
|
os.environ['REDO_DEBUG_PIDS'] = '1'
|
||||||
|
|
||||||
is_root = not os.environ.get('REDO', '')
|
import vars_init
|
||||||
|
vars_init.init(targets)
|
||||||
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, state, builder, jwack
|
import vars, state, builder, jwack
|
||||||
from log import err
|
from log import err
|
||||||
|
|
||||||
|
|
||||||
if is_root:
|
|
||||||
state.init()
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
j = atoi(opt.jobs or 1)
|
j = atoi(opt.jobs or 1)
|
||||||
if j < 1 or j > 1000:
|
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
|
XTRACE = os.environ.get('REDO_XTRACE', '') and 1 or 0
|
||||||
KEEP_GOING = os.environ.get('REDO_KEEP_GOING', '') 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
|
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
|
RUNID = atoi(os.environ.get('REDO_RUNID')) or None
|
||||||
BASE = os.environ['REDO_BASE']
|
BASE = os.environ['REDO_BASE']
|
||||||
while BASE and BASE.endswith('/'):
|
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