old_contents: import logging
  import re
  import sys
  
  logging.basicConfig(format='%(asctime)s %(name)s: %(message)s',
                      level=logging.INFO)
  
  logger = logging.getLogger('check-whitespace')
  
  CR_RE = re.compile(r'\r')
  LEADING_WHITESPACE_RE = re.compile(r'\s+')
  TRAILING_WHITESPACE_RE = re.compile(r'\s+\n\Z')
  NO_NEWLINE_RE = re.compile(r'[^\n]\Z')
  ALL_WHITESPACE_RE = re.compile(r'\s+\Z')
  
  
  def check_whitespace(*filenames):
      errors = 0
      for filename in sorted(filenames):
          whitespace = False
          for lineno, line in enumerate(open(filename, 'rU')):
              if lineno == 0 and LEADING_WHITESPACE_RE.match(line):
                  logger.info('%s:%d: leading whitespace', filename, lineno + 1)
                  errors += 1
              if CR_RE.search(line):
                  logger.info('%s:%d: carriage return character in line',
                              filename, lineno + 1)
                  errors += 1
              if TRAILING_WHITESPACE_RE.search(line):
                  logger.info('%s:%d: trailing whitespace', filename, lineno + 1)
                  errors += 1
              if NO_NEWLINE_RE.search(line):
                  logger.info('%s:%d: no newline at end of file', filename,
                              lineno + 1)
                  errors += 1
              whitespace = ALL_WHITESPACE_RE.match(line)
          if whitespace:
              logger.info('%s: trailing whitespace at end of file', filename)
              errors += 1
      if errors:
          logger.error('%d whitespace errors' % (errors,))
  
  if __name__ == "__main__":
      check_whitespace(*sys.argv[1:])
  
new_contents: import logging
  import re
  import sys
  
  logging.basicConfig(format='%(asctime)s %(name)s: %(message)s',
                      level=logging.INFO)
  
  logger = logging.getLogger('check-whitespace')
  
  CR_RE = re.compile(r'\r')
  LEADING_WHITESPACE_RE = re.compile(r'\s+')
  TRAILING_WHITESPACE_RE = re.compile(r'\s+\n\Z')
  NO_NEWLINE_RE = re.compile(r'[^\n]\Z')
  ALL_WHITESPACE_RE = re.compile(r'\s+\Z')
  
  
  def check_whitespace(*filenames):
      errors = 0
      for filename in sorted(filenames):
          whitespace = False
          for lineno, line in enumerate(open(filename, 'rU')):
              if lineno == 0 and LEADING_WHITESPACE_RE.match(line):
                  logger.info('%s:%d: leading whitespace', filename, lineno + 1)
                  errors += 1
              if CR_RE.search(line):
                  logger.info('%s:%d: carriage return character in line',
                              filename, lineno + 1)
                  errors += 1
              if TRAILING_WHITESPACE_RE.search(line):
                  logger.info('%s:%d: trailing whitespace', filename, lineno + 1)
                  errors += 1
              if NO_NEWLINE_RE.search(line):
                  logger.info('%s:%d: no newline at end of file', filename,
                              lineno + 1)
                  errors += 1
              whitespace = ALL_WHITESPACE_RE.match(line)
          if whitespace:
              logger.info('%s: trailing whitespace at end of file', filename)
              errors += 1
      return errors
  
  if __name__ == "__main__":
      errors = check_whitespace(*sys.argv[1:])
      if errors > 0:
          logger.error('%d whitespace errors' % (errors,))
          sys.exit(1)
  
subject: Make check-whitespace.py exit 1 on whitespace errors