12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #!/usr/bin/env python
- #
- # Walk through a pair of textfiles looking for where they begin to differ.
- # May be useful for comparing logs when regression tests break.
- #
- # This file is Copyright (c) 2010-2019 by the GPSD project
- # BSD terms apply: see the file COPYING in the distribution root for details.
- #
- # This code runs compatibly under Python 2 and 3.x for x >= 2.
- # Preserve this property!
- from __future__ import absolute_import, print_function, division
- import sys
- class BufferedFile(object):
- def __init__(self, name):
- self.file = open(name)
- self.linebuffer = []
- self.lineno = 0
- def readline(self):
- self.lineno += 1
- if self.linebuffer:
- return self.linebuffer.pop()
- else:
- return self.file.readline()
- def pushback(self, line):
- self.lineno -= 1
- self.linebuffer.append(line)
- def peek(self):
- return self.linebuffer[-1]
- def eatspan(f1, f2):
- consumed = 0
- while True:
- line1 = f1.readline()
- line2 = f2.readline()
- if line1 and line2 and line1 == line2:
- consumed += 1
- continue
- f1.pushback(line1)
- f2.pushback(line2)
- return consumed
- if __name__ == "__main__":
- f1 = BufferedFile(sys.argv[1])
- f2 = BufferedFile(sys.argv[2])
- eaten = eatspan(f1, f2)
- print("First %d lines match" % eaten)
- print(f1.peek())
- print(f2.peek())
|