#!/usr/bin/env python3 # `llvm-cov show` prints grouped subviews (e.g. for generic functions) in an # unstable order, which is inconvenient when checking output snapshots with # `diff`. To work around that, this script detects consecutive subviews in its # piped input, and sorts them while preserving their contents. from __future__ import print_function import sys def main(): subviews = [] def flush_subviews(): if not subviews: return # The last "subview" should be just a boundary line on its own, so # temporarily remove it before sorting the accumulated subviews. terminator = subviews.pop() subviews.sort() subviews.append(terminator) for view in subviews: for line in view: print(line, end="") subviews.clear() for line in sys.stdin: if line.startswith(" ------------------"): # This is a subview boundary line, so start a new subview. subviews.append([line]) elif line.startswith(" |"): # Add this line to the current subview. subviews[-1].append(line) else: # This line is not part of a subview, so sort and print any # accumulated subviews, and then print the line as-is. flush_subviews() print(line, end="") flush_subviews() assert not subviews if __name__ == "__main__": main()