Print a nicer error message when asked to build an empty string ('').

This happens sometimes, for example, if you do
	whatever | while read x; do
		redo-ifchange "$x"
	done
and the input contains blank lines.

We could ignore the request for blankness, but it seems like that
situation might indicate a more serious bug in your parser, so it's
probably better to just abort with a meaningful error.
This commit is contained in:
Avery Pennarun 2018-11-03 03:36:13 -04:00
commit 2a936a7574
4 changed files with 12 additions and 2 deletions

View file

@ -282,6 +282,10 @@ def main(targets, shouldbuildfunc):
seen = {}
lock = None
for t in targets:
if not t:
err('cannot build the empty target ("").\n')
retcode[0] = 204
break
assert(state.is_flushed())
if t in seen:
continue

View file

@ -9,6 +9,9 @@ try:
os.path.join(vars.PWD, vars.TARGET))
f = state.File(name=me)
for t in sys.argv[1:]:
if not t:
err('cannot build the empty target ("").\n')
sys.exit(204)
if os.path.exists(t):
err('redo-ifcreate: error: %r already exists\n' % t)
sys.exit(1)

View file

@ -12,6 +12,10 @@ if len(sys.argv[1:]) != 1:
sys.exit(1)
want = sys.argv[1]
if not want:
err('cannot build the empty target ("").\n')
sys.exit(204)
abswant = os.path.abspath(want)
for dodir,dofile,basedir,basename,ext in paths.possible_do_files(abswant):
dopath = os.path.join('/', dodir, dofile)

View file

@ -189,8 +189,7 @@ class File(object):
row = d.execute(q, l).fetchone()
if not row:
if not name:
raise Exception('File with id=%r not found and '
'name not given' % id)
raise Exception('No file with id=%r name=%r' % (id, name))
try:
_write('insert into Files (name) values (?)', [name])
except sqlite3.IntegrityError: