Commit 907b8466 authored by Markus Armbruster's avatar Markus Armbruster Committed by Eric Blake
Browse files

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: default avatarMarkus Armbruster <armbru@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <20180211093607.27351-11-armbru@redhat.com>
Reviewed-by: default avatarMichael Roth <mdroth@linux.vnet.ibm.com>
[eblake: fix octal constant for python3]
Signed-off-by: default avatarEric Blake <eblake@redhat.com>
parent 3b446a18
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -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()