[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 10/30] qapi: Touch generated files only when they cha
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PULL 10/30] qapi: Touch generated files only when they change |
Date: |
Thu, 1 Mar 2018 13:42:25 -0600 |
From: Markus Armbruster <address@hidden>
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 <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Michael Roth <address@hidden>
[eblake: fix octal constant for python3]
Signed-off-by: Eric Blake <address@hidden>
---
scripts/qapi/common.py | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index c3ae590202a..47673928dcc 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -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()
--
2.14.3
- [Qemu-devel] [PULL 00/30] QAPI patches for 2018-03-01, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 01/30] Include qapi/qmp/qerror.h exactly where needed, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 04/30] qapi: Rename variable holding the QAPISchemaGenFOOVisitor, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 03/30] qapi: Generate up-to-date copyright notice, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 02/30] qapi: Streamline boilerplate comment generation, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 07/30] qapi: Turn generators into modules, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 09/30] qapi-gen: Convert from getopt to argparse, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 05/30] qapi: New classes QAPIGenC, QAPIGenH, QAPIGenDoc, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 06/30] qapi: Reduce use of global variables in generators some, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 10/30] qapi: Touch generated files only when they change,
Eric Blake <=
- [Qemu-devel] [PULL 12/30] qapi/common: Eliminate QAPISchema.exprs, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 13/30] qapi: Lift error reporting from QAPISchema.__init__() to callers, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 15/30] qapi: Record 'include' directives in parse tree, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 11/30] qapi: Improve include file name reporting in error messages, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 08/30] qapi-gen: New common driver for code and doc generators, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 14/30] qapi: Concentrate QAPISchemaParser.exprs updates in .__init__(), Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 16/30] qapi: Generate in source order, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 17/30] qapi: Record 'include' directives in intermediate representation, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 18/30] qapi: Rename generated qmp-marshal.c to qmp-commands.c, Eric Blake, 2018/03/01
- [Qemu-devel] [PULL 21/30] qapi/common: Fix guardname() for funny filenames, Eric Blake, 2018/03/01