view Documentations/setGPLHeader.py @ 199:ac58a9fb92ac div-fixes-cleaup-2

Bugfix: fix initial CNS data in the logbook header Apparently, there has been confusion in the past about the data format of the CNS data in the logbook. This seems to be partially fixed back in 2015, but this fix forgot that the initial CNS data is also in the logbook header. So, now, the logbook header also stores the initial CNS data in a correct way, which fixes the problem of strange CNS values at the very start of repetitive dives, that get reset in the dive profile after the first CNS sample data comes along. Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
author Jan Mulder <jlmulder@xs4all.nl>
date Fri, 22 Mar 2019 08:36:39 +0100
parents 6237372f76a4
children
line wrap: on
line source

#! /usr/bin/env python3

from __future__ import print_function
import os, sys, glob,re, codecs

##############################################################################

OSTC4=os.getcwd()
if not os.path.exists( os.path.join(OSTC4, 'Discovery') ):
    raise 'Wrong start directory...'

##############################################################################

def walk(OSTC4):
    for dir in ['BootLoader', 'Common', 'Discovery', 'FontPack', 'Small_CPU']:
        # Make sure we have the top directory...
        if not os.path.exists( os.path.join(OSTC4, dir) ):
            raise 'Missing ' + dir

        # Then walk in all its existing source sub-directories...
        for sub in ['.', 'Inc', 'Src']:
            path = os.path.join(OSTC4, dir, sub)
            if not os.path.exists(path):
                continue
            print(path + ':')
            for file in sorted( glob.iglob( os.path.join(path, '*.[chs]') ) ):
                try:
                    work(file)
                except Exception as e:
                    raise RuntimeError('Cannot process ' + file + ':\n\t' + str(e))

##############################################################################

with open(os.path.join(OSTC4, 'Documentations', 'GPL_template.txt')) as f:
    template = f.read()

def work(file):

    # Unclear what is done if encoding is not yet UTF-8...
    with open(file, 'rt', encoding='cp1252') as f:
        lines = f.read().splitlines()

    # Set defaults
    kw = {}
    kw['file']   = file.replace(OSTC4+'/', '')
    kw['brief']  = ''
    kw['date']   = '2018'

    # Try to gather info from existing header, if any:
    for line in lines:
        # Skip files that already have a GNU license:
        if 'GNU General Public License' in line:
            print('(done)\t' + file)
            return

        get(line, 'brief', kw)
        get(line, 'date', kw)

    # Replace kw in header
    header = template
    for k,v in kw.items():
        header = header.replace('$'+k, v)

    # Overwrite resulting file, normalizing EOL
    with open(file, 'wt', encoding='utf-8') as f:
        for line in header.splitlines():
            f.write(line.rstrip() + '\n')
        for line in lines:
            f.write(line.rstrip() + '\n')
    print('+\t' + file)

##############################################################################

def get(line, word, kw):
    m = re.search('(@|\\\\)' + word + '\s*(.*)', line)
    if m:
        kw[word] = m.group(2)

##############################################################################

walk(OSTC4)