Skip to content

Commit

Permalink
Return a message from Kconfig.write_autoconf()
Browse files Browse the repository at this point in the history
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().
  • Loading branch information
ulfalizer committed Jan 31, 2020
1 parent 34a6c21 commit 2a6ac31
Showing 1 changed file with 22 additions and 15 deletions.
37 changes: 22 additions & 15 deletions kconfiglib.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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),
Expand Down

0 comments on commit 2a6ac31

Please sign in to comment.