qapi: Touch generated files only when they change
A massive number of objects depends on QAPI-generated headers. In my "build everything" tree, it's roughly 4800 out of 5100. This is particularly annoying when only some of the generated files change, say for a doc fix. Improve qapi-gen.py to touch its output files only if they actually change. Rebuild time for a QAPI doc fix drops from many minutes to a few seconds. Rebuilds get faster for certain code changes, too. For instance, adding a simple QMP event now recompiles less than 200 instead of 4800 objects. But adding a QAPI type is as bad as ever; we've clearly got more work to do. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20180211093607.27351-11-armbru@redhat.com> Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com> [eblake: fix octal constant for python3] Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
3b446a1817
commit
907b846653
@ -1951,9 +1951,16 @@ class QAPIGen(object):
|
||||
except os.error as e:
|
||||
if e.errno != errno.EEXIST:
|
||||
raise
|
||||
f = open(os.path.join(output_dir, fname), 'w')
|
||||
f.write(self._top(fname) + self._preamble + self._body
|
||||
fd = os.open(os.path.join(output_dir, fname),
|
||||
os.O_RDWR | os.O_CREAT, 0o666)
|
||||
f = os.fdopen(fd, 'r+')
|
||||
text = (self._top(fname) + self._preamble + self._body
|
||||
+ self._bottom(fname))
|
||||
oldtext = f.read(len(text) + 1)
|
||||
if text != oldtext:
|
||||
f.seek(0)
|
||||
f.truncate(0)
|
||||
f.write(text)
|
||||
f.close()
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user