[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 10/29] qapi: Touch generated files only when
From: |
Michael Roth |
Subject: |
Re: [Qemu-devel] [PATCH v2 10/29] qapi: Touch generated files only when they change |
Date: |
Sun, 18 Feb 2018 16:43:54 -0600 |
User-agent: |
alot/0.6 |
Quoting Markus Armbruster (2018-02-11 03:35:48)
> 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>
Reviewed-by: Michael Roth <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 8290795dc1..2e58573a39 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, 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
>