If a user manually changes a generated file, don't ever overwrite it.

That way the user can modify an auto-generated 'compile' script, for
example, and it'll stay modified.

If they delete the file, we can then generate it for them again.

Also, we have to warn whenever we're doing this, or people might think it's
a bug.
This commit is contained in:
Avery Pennarun 2010-12-10 22:42:33 -08:00
commit f6d11d5411
4 changed files with 44 additions and 11 deletions

View file

@ -42,6 +42,10 @@ def _try_stat(filename):
raise
def warn_override(name):
warn('%s - you modified it; skipping\n' % name)
class ImmediateReturn(Exception):
def __init__(self, rv):
Exception.__init__(self, "immediate return with exit code %d" % rv)
@ -69,6 +73,16 @@ class BuildJob:
return self._after2(0)
except ImmediateReturn, e:
return self._after2(e.rv)
newstamp = sf.read_stamp()
if (sf.is_generated and
not sf.failed_runid and
newstamp != state.STAMP_MISSING and
(sf.stamp != newstamp or sf.is_override)):
warn_override(_nice(t))
sf.set_override()
sf.set_checked()
sf.save()
return self._after2(0)
if (os.path.exists(t) and not os.path.exists(t + '/.')
and not sf.is_generated):
# an existing source file that was not generated by us.
@ -87,7 +101,6 @@ class BuildJob:
(dofile, basename, ext) = _find_do_file(sf)
if not dofile:
if os.path.exists(t):
sf.is_generated = False
sf.set_static()
sf.save()
return self._after2(0)
@ -176,7 +189,7 @@ class BuildJob:
else:
unlink(tmpname)
sf = self.sf
sf.is_generated=True
sf.is_generated = True
sf.update_stamp()
sf.set_changed()
sf.save()