From 5e54e2cd43c5f3c530706291d860ba1bf817986c Mon Sep 17 00:00:00 2001 From: Ulf Magnusson Date: Sun, 7 Jun 2015 06:07:19 +0200 Subject: Unset user values when loading a zero-byte .config. Minor bug due to an early return from load_config(). Piggyback a refactoring of the code. Reading the header is unlikely to be performance-sensitive. Add a testcase too. --- kconfiglib.py | 35 +++++++++++++---------------------- testsuite.py | 4 ++++ 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/kconfiglib.py b/kconfiglib.py index e03935a..dac21f6 100644 --- a/kconfiglib.py +++ b/kconfiglib.py @@ -231,37 +231,28 @@ class Config(object): self.config_filename = filename + # # Read header - - self.config_header = None + # def is_header_line(line): - return line.startswith("#") and not unset_re_match(line) - - first_line = line_feeder.get_next() - if first_line is None: - return - - if not is_header_line(first_line): - line_feeder.go_back() - else: - self.config_header = first_line[1:] + return line is not None and line.startswith("#") and \ + not unset_re_match(line) - # Read remaining header lines - while 1: - line = line_feeder.get_next() - if line is None: - break - if not is_header_line(line): - line_feeder.go_back() - break - self.config_header += line[1:] + self.config_header = None + line = line_feeder.peek_next() + if is_header_line(line): + self.config_header = "" + while is_header_line(line_feeder.peek_next()): + self.config_header += line_feeder.get_next()[1:] # Remove trailing newline if self.config_header.endswith("\n"): self.config_header = self.config_header[:-1] - # Read assignments + # + # Read assignments. Hotspot for some workloads. + # def warn_override(filename, linenr, name, old_user_val, new_user_val): self._warn('overriding the value of {0}. ' diff --git a/testsuite.py b/testsuite.py index e225cbb..3407e0a 100644 --- a/testsuite.py +++ b/testsuite.py @@ -1333,6 +1333,10 @@ def run_selftests(): verify_value("BOOL", "n") verify_value("STRING", "foo bar") + # Loading a completely empty .config should also reset values + c.load_config("Kconfiglib/tests/empty") + verify_value("STRING", "") + # # get_config() # -- cgit v1.2.3