Giulio@797: <!-- BEGIN ch09/check_whitespace.py.lst -->
Giulio@797: <programlisting>#!/usr/bin/env python
Giulio@797: #
Giulio@797: # salvate il file come .hg/controllo_spazio_bianco.py e rendetelo eseguibile
Giulio@797: 
Giulio@797: import re
Giulio@797: 
Giulio@797: def spazio_bianco_in_coda(righe_di_diff):
Giulio@797:     # 
Giulio@797:     numriga, intestazione = 0, False
Giulio@797: 
Giulio@797:     for riga in righe_di_diff:
Giulio@797:         if intestazione:
Giulio@797:             # ricorda il nome del file coinvolto in questo diff
Giulio@797:             m = re.match(r'(?:---|\+\+\+) ([^\t]+)', riga)
Giulio@797:             if m and m.group(1) != '/dev/null':
Giulio@797:                 nomefile = m.group(1).split('/', 1)[-1]
Giulio@797:             if riga.startswith('+++ '):
Giulio@797:                 intestazione = False
Giulio@797:             continue
Giulio@797:         if riga.startswith('diff '):
Giulio@797:             intestazione = True
Giulio@797:             continue
Giulio@797:         # intestazione - salva il numero di riga
Giulio@797:         m = re.match(r'@@ -\d+,\d+ \+(\d+),', riga)
Giulio@797:         if m:
Giulio@797:             numriga = int(m.group(1))
Giulio@797:             continue
Giulio@797:         # corpo - cerca una riga aggiunta con spazio bianco in coda
Giulio@797:         m = re.match(r'\+.*\s$', riga)
Giulio@797:         if m:
Giulio@797:             yield nomefile, numriga
Giulio@797:         if riga and riga[0] in ' +':
Giulio@797:             numriga += 1
Giulio@797: 
Giulio@797: if __name__ == '__main__':
Giulio@797:     import os, sys
Giulio@797:     
Giulio@797:     aggiunte = 0
Giulio@797:     for nomefile, numriga in spazio_bianco_in_coda(os.popen('hg export tip')):
Giulio@797:         print &gt;&gt; sys.stderr, ('%s, riga %d: aggiunto spazio bianco in coda' %
Giulio@797:                               (nomefile, numriga))
Giulio@797:         aggiunte += 1
Giulio@797:     if aggiunte:
Giulio@797:         # salva il messaggio di commit in modo da non doverlo digitare di nuovo
Giulio@797:         os.system('hg tip --template "{desc}" &gt; .hg/commit.save')
Giulio@797:         print &gt;&gt; sys.stderr, 'messaggio di commit salvato nel file .hg/commit.save'
Giulio@797:         sys.exit(1)</programlisting>
Giulio@797: <!-- END ch09/check_whitespace.py.lst -->