def component_files(self, element, args): """Format the contents of our <files> tag as a tree with nested lists""" from LibCIA.Web import Template files = XML.dig(args.message.xml, "message", "body", "commit", "files") if not (files and XML.hasChildElements(files)): return [] # First we organize the files into a tree of nested dictionaries. # The dictionary we ultimately have FileTree render maps each node # (file or directory) to a dictionary of its contents. The keys # in these dictionaries can be any Nouvelle-renderable object # produced by format_file. # # As a first step, we build a dictionary mapping path segment to # [fileTag, children] lists. We then create a visual representation # of each fileTag and generate the final dictionary. fileTree = {} for fileTag in XML.getChildElements(files): if fileTag.nodeName == 'file': # Separate the file into path segments and walk into our tree node = [None, fileTree] for segment in XML.shallowText(fileTag).split('/'): if segment: node = node[1].setdefault(segment, [None, {}]) # The leaf node owns this fileTag node[0] = fileTag return [Template.FileTree(self.format_file_tree(fileTree))]
def component_files(self, element, args): """Break up our list of files into a common prefix and a sensibly-sized list of filenames after that prefix. """ files = XML.dig(args.message.xml, "message", "body", "commit", "files") if not (files and XML.hasChildElements(files)): return [Message.MarkAsHidden()] prefix, endings = self.consolidateFiles(files) endingStr = " ".join(endings) if len(endingStr) > self.filesWidthLimit: # If the full file list is too long, give a file summary instead endingStr = self.summarizeFiles(endings) if prefix.startswith('/'): prefix = prefix[1:] if endingStr: return ["%s (%s)" % (prefix, endingStr)] else: return [prefix]