Commit 799b0d2a authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Jonathan Corbet
Browse files

scripts/kernel-doc.py: move file lists to the parser function



Instead of setting file lists at __init__ time, move it to
the actual parsing function. This allows adding more files
to be parsed in real time, by calling parse function multiple
times.

With the new way, the export_files logic was rewritten to
avoid parsing twice EXPORT_SYMBOL for partial matches.

Please notice that, with this logic, it can still read the
same file twice when export_file is used.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
Link: https://lore.kernel.org/r/ab10bc94050406ce6536d4944b5d718ecd70812f.1744106242.git.mchehab+huawei@kernel.org
parent 4fa5e411
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -274,14 +274,13 @@ def main():
    else:
        out_style = RestFormat()

    kfiles = KernelFiles(files=args.files, verbose=args.verbose,
    kfiles = KernelFiles(verbose=args.verbose,
                         out_style=out_style, werror=args.werror,
                         wreturn=args.wreturn, wshort_desc=args.wshort_desc,
                         wcontents_before_sections=args.wcontents_before_sections,
                         modulename=args.modulename,
                         export_file=args.export_file)
                         modulename=args.modulename)

    kfiles.parse()
    kfiles.parse(args.files, export_file=args.export_file)

    for t in kfiles.msg(enable_lineno=args.enable_lineno, export=args.export,
                          internal=args.internal, symbol=args.symbol,
+17 −20
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ class KernelFiles():
        self.config.log.error("Cannot find file %s", fname)
        self.config.errors += 1

    def __init__(self, files=None, verbose=False, out_style=None,
    def __init__(self, verbose=False, out_style=None,
                 werror=False, wreturn=False, wshort_desc=False,
                 wcontents_before_sections=False,
                 logger=None, modulename=None, export_file=None):
@@ -181,51 +181,48 @@ class KernelFiles():
        self.config.src_tree = os.environ.get("SRCTREE", None)

        self.out_style = out_style
        self.export_file = export_file

        # Initialize internal variables

        self.config.errors = 0
        self.results = []

        self.file_list = files
        self.files = set()
        self.export_files = set()

    def parse(self):
    def parse(self, file_list, export_file=None):
        """
        Parse all files
        """

        glob = GlobSourceFiles(srctree=self.config.src_tree)

        # Let's use a set here to avoid duplicating files
        # Prevent parsing the same file twice to speedup parsing and
        # avoid reporting errors multiple times

        for fname in glob.parse_files(self.file_list, self.file_not_found_cb):
        for fname in glob.parse_files(file_list, self.file_not_found_cb):
            if fname in self.files:
                continue

            self.files.add(fname)

            res = self.parse_file(fname)
            self.results.append((res.fname, res.entries))

        if not self.files:
            sys.exit(1)
            self.results.append((res.fname, res.entries))
            self.files.add(fname)

        # If a list of export files was provided, parse EXPORT_SYMBOL*
        # from the ones not already parsed
        # from files that weren't fully parsed

        if not export_file:
            return

        if self.export_file:
            files = self.files
        self.export_files |= self.files

        glob = GlobSourceFiles(srctree=self.config.src_tree)

            for fname in glob.parse_files(self.export_file,
                                          self.file_not_found_cb):
                if fname not in files:
                    files.add(fname)

        for fname in glob.parse_files(export_file, self.file_not_found_cb):
            if fname not in self.export_files:
                self.process_export_file(fname)
                self.export_files.add(fname)

    def out_msg(self, fname, name, arg):
        """