redo-whichdo: a command that explains the .do search path for a target.
For example: $ redo-whichdo a/b/c/.x.y - a/b/c.x.y.do - a/b/default.x.y.do - a/b/default.y.do - a/b/default.do - a/default.x.y.do - a/default.y.do - a/default.do - default.x.y.do - default.y.do + default.do 1 a/b/c.x.y 2 a/b/c.x.y Lines starting with '-' mean a potential .do file that did not exist, so we moved onto the next choice (but consider using redo-ifcreate in case it gets created). '+' means the .do file we actually chose. '1' and '2' are the $1 and $2 to pass along to the given .do file if you want to call it for the given target. (The output format is a little weird to make sure it's parseable with sh 'read x y' calls, even when filenames contain spaces or special characters.)
This commit is contained in:
parent
484ed925ad
commit
61d35d3972
3 changed files with 34 additions and 4 deletions
|
|
@ -13,7 +13,7 @@ def _default_do_files(filename):
|
||||||
yield ("default%s.do" % ext), basename, ext
|
yield ("default%s.do" % ext), basename, ext
|
||||||
|
|
||||||
|
|
||||||
def _possible_do_files(t):
|
def possible_do_files(t):
|
||||||
dirname,filename = os.path.split(t)
|
dirname,filename = os.path.split(t)
|
||||||
yield (os.path.join(vars.BASE, dirname), "%s.do" % filename,
|
yield (os.path.join(vars.BASE, dirname), "%s.do" % filename,
|
||||||
'', filename, '')
|
'', filename, '')
|
||||||
|
|
@ -35,8 +35,8 @@ def _possible_do_files(t):
|
||||||
subdir, os.path.join(subdir, basename), ext)
|
subdir, os.path.join(subdir, basename), ext)
|
||||||
|
|
||||||
|
|
||||||
def _find_do_file(f):
|
def find_do_file(f):
|
||||||
for dodir,dofile,basedir,basename,ext in _possible_do_files(f.name):
|
for dodir,dofile,basedir,basename,ext in possible_do_files(f.name):
|
||||||
dopath = os.path.join(dodir, dofile)
|
dopath = os.path.join(dodir, dofile)
|
||||||
debug2('%s: %s:%s ?\n' % (f.name, dodir, dofile))
|
debug2('%s: %s:%s ?\n' % (f.name, dodir, dofile))
|
||||||
if os.path.exists(dopath):
|
if os.path.exists(dopath):
|
||||||
|
|
@ -126,7 +126,7 @@ class BuildJob:
|
||||||
sf.save()
|
sf.save()
|
||||||
return self._after2(0)
|
return self._after2(0)
|
||||||
sf.zap_deps1()
|
sf.zap_deps1()
|
||||||
(dodir, dofile, basedir, basename, ext) = _find_do_file(sf)
|
(dodir, dofile, basedir, basename, ext) = find_do_file(sf)
|
||||||
if not dofile:
|
if not dofile:
|
||||||
if os.path.exists(t):
|
if os.path.exists(t):
|
||||||
sf.set_static()
|
sf.set_static()
|
||||||
|
|
|
||||||
1
redo-whichdo
Symbolic link
1
redo-whichdo
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
redo-whichdo.py
|
||||||
29
redo-whichdo.py
Executable file
29
redo-whichdo.py
Executable file
|
|
@ -0,0 +1,29 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import sys, os
|
||||||
|
|
||||||
|
import vars_init
|
||||||
|
vars_init.init([])
|
||||||
|
|
||||||
|
import builder
|
||||||
|
from log import err
|
||||||
|
|
||||||
|
if len(sys.argv[1:]) != 1:
|
||||||
|
err('%s: exactly one argument expected.\n' % sys.argv[0])
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
want = sys.argv[1]
|
||||||
|
for dodir,dofile,basedir,basename,ext in builder.possible_do_files(os.path.abspath(want)):
|
||||||
|
dopath = os.path.join('/', dodir, dofile)
|
||||||
|
relpath = os.path.relpath(dopath, '.')
|
||||||
|
exists = os.path.exists(dopath)
|
||||||
|
assert('\n' not in relpath)
|
||||||
|
if exists:
|
||||||
|
print '+', relpath
|
||||||
|
assert('\n' not in basename)
|
||||||
|
assert('\n' not in ext)
|
||||||
|
print '1', basename+ext
|
||||||
|
print '2', basename
|
||||||
|
sys.exit(0)
|
||||||
|
else:
|
||||||
|
print '-', relpath
|
||||||
|
sys.exit(1) # no appropriate dofile found
|
||||||
Loading…
Add table
Add a link
Reference in a new issue