[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH RFC 08/21] qapi: Touch generated files only when the
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH RFC 08/21] qapi: Touch generated files only when they change |
Date: |
Fri, 2 Feb 2018 14:03:23 +0100 |
A massive number of objects depends on QAPI-generated headers. In my
"build everything" tree, it's roughly 4500 out of 4800. 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 4500 objects. But adding a QAPI type is as bad as ever; we
clearly got more work to do.
Signed-off-by: Markus Armbruster <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 cfa2671ca3..be0fcc548a 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -1944,9 +1944,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, 0666)
+ 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.13.6
- Re: [Qemu-devel] [PATCH RFC 21/21] qapi: Empty out qapi-schema.json, (continued)
- [Qemu-devel] [PATCH RFC 04/21] qapi: Reduce use of global variables in generators some, Markus Armbruster, 2018/02/02
- [Qemu-devel] [PATCH RFC 18/21] qapi/common: Fix guardname() for funny filenames, Markus Armbruster, 2018/02/02
- [Qemu-devel] [PATCH RFC 12/21] qapi: Concentrate QAPISchemaParser.exprs updates in .__init__(), Markus Armbruster, 2018/02/02
- [Qemu-devel] [PATCH RFC 08/21] qapi: Touch generated files only when they change,
Markus Armbruster <=
- [Qemu-devel] [PATCH RFC 20/21] Include less of qapi-types.h, Markus Armbruster, 2018/02/02
- [Qemu-devel] [PATCH RFC 16/21] qapi/types qapi/visit: Make visitors use QAPIGen more, Markus Armbruster, 2018/02/02
- [Qemu-devel] [PATCH RFC 05/21] qapi: Turn generators into modules, Markus Armbruster, 2018/02/02