From 2a6ac310125b1780c6aa3f9b74c4baa45035bdaa Mon Sep 17 00:00:00 2001 From: Ulf Magnusson Date: Fri, 31 Jan 2020 06:50:08 +0100 Subject: [PATCH] Return a message from Kconfig.write_autoconf() Like for Kconfig.write_config() and Kconfig.write_min_config(), return a string from Kconfig.write_autoconf() with a message saying that the header got saved, or that there were no changes to it. Can be handy in tools. Also make the "no change" message for the various files more specific, by mentioning what type of file it is (configuration, header, etc.) Return True/False from Kconfig._write_if_changed() to indicate if the file was updated. This also allows it to be reused in Kconfig.write_min_config(). --- kconfiglib.py | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/kconfiglib.py b/kconfiglib.py index e325cd7..a735964 100644 --- a/kconfiglib.py +++ b/kconfiglib.py @@ -1444,12 +1444,18 @@ def write_autoconf(self, filename=None, header=None): KCONFIG_AUTOHEADER_HEADER had when the Kconfig instance was created will be used if it was set, and no header otherwise. See the Kconfig.header_header attribute. + + Returns a string with a message saying that the header got saved, or + that there were no changes to it. This is meant to reduce boilerplate + in tools, which can do e.g. print(kconf.write_autoconf()). """ if filename is None: filename = os.getenv("KCONFIG_AUTOHEADER", "include/generated/autoconf.h") - self._write_if_changed(filename, self._autoconf_contents(header)) + if self._write_if_changed(filename, self._autoconf_contents(header)): + return "Kconfig header saved to '{}'".format(filename) + return "No change to Kconfig header in '{}'".format(filename) def _autoconf_contents(self, header): # write_autoconf() helper. Returns the contents to write as a string, @@ -1564,7 +1570,7 @@ def write_config(self, filename=None, header=None, save_old=True, contents = self._config_contents(header) if self._contents_eq(filename, contents): - return "No change to '{}'".format(filename) + return "No change to configuration in '{}'".format(filename) if save_old: _save_old(filename) @@ -1677,18 +1683,14 @@ def write_min_config(self, filename, header=None): be used if it was set, and no header otherwise. See the Kconfig.config_header attribute. - Returns a string with a message saying which file got saved. This is - meant to reduce boilerplate in tools, which can do e.g. + Returns a string with a message saying the minimal configuration got + saved, or that there were no changes to it. This is meant to reduce + boilerplate in tools, which can do e.g. print(kconf.write_min_config()). """ - contents = self._min_config_contents(header) - if self._contents_eq(filename, contents): - return "No change to '{}'".format(filename) - - with self._open(filename, "w") as f: - f.write(contents) - - return "Minimal configuration saved to '{}'".format(filename) + if self._write_if_changed(filename, self._min_config_contents(header)): + return "Minimal configuration saved to '{}'".format(filename) + return "No change to minimal configuration in '{}'".format(filename) def _min_config_contents(self, header): # write_min_config() helper. Returns the contents to write as a string, @@ -2264,10 +2266,15 @@ def _write_if_changed(self, filename, contents): # differs, but it breaks stuff like write_config("/dev/null"), which is # used out there to force evaluation-related warnings to be generated. # This simple version is pretty failsafe and portable. + # + # Returns True if the file has changed and is updated, and False + # otherwise. - if not self._contents_eq(filename, contents): - with self._open(filename, "w") as f: - f.write(contents) + if self._contents_eq(filename, contents): + return False + with self._open(filename, "w") as f: + f.write(contents) + return True def _contents_eq(self, filename, contents): # Returns True if the contents of 'filename' is 'contents' (a string),