~sambuddhabasu1/mailman/fix_mailman_run_error

« back to all changes in this revision

Viewing changes to copybump.py

  • Committer: Barry Warsaw
  • Date: 2007-12-08 16:51:36 UTC
  • Revision ID: barry@python.org-20071208165136-gcm3v8d7o3jbb0tt
Reorganize the database subpackage, primarily by removing the 'model'
subdirectory and updating all relevant imports.  Move of the circular
import problems have been eliminated in the process.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /usr/bin/env python3
2
 
 
3
 
import os
4
 
import re
5
 
import sys
6
 
import stat
7
 
import datetime
8
 
 
9
 
 
10
 
FSF = 'by the Free Software Foundation, Inc.'
11
 
this_year = datetime.date.today().year
12
 
pyre = re.compile(r'# Copyright \(C\) ((?P<start>\d{4})-)?(?P<end>\d{4})')
13
 
 
14
 
MODE = (stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
15
 
 
16
 
 
17
 
def do_file(path, owner):
18
 
    permissions = os.stat(path).st_mode & MODE
19
 
    with open(path) as in_file, open(path + '.out', 'w') as out_file:
20
 
        try:
21
 
            for line in in_file:
22
 
                mo = pyre.match(line)
23
 
                if mo is None:
24
 
                    out_file.write(line)
25
 
                    continue
26
 
                start = (mo.group('end')
27
 
                         if mo.group('start') is None
28
 
                         else mo.group('start'))
29
 
                if int(start) == this_year:
30
 
                    out_file.write(line)
31
 
                    continue
32
 
                print('# Copyright (C) {}-{} {}'.format(
33
 
                      start, this_year, owner), file=out_file)
34
 
                print('=>', path)
35
 
                for line in in_file:
36
 
                    out_file.write(line)
37
 
        except UnicodeDecodeError:
38
 
            print('Cannot convert path:', path)
39
 
            os.remove(path + '.out')
40
 
            return
41
 
    os.rename(path + '.out', path)
42
 
    os.chmod(path, permissions)
43
 
 
44
 
 
45
 
def remove(dirs, path):
46
 
    try:
47
 
        dirs.remove(path)
48
 
    except ValueError:
49
 
        pass
50
 
 
51
 
 
52
 
def do_walk():
53
 
    try:
54
 
        owner = sys.argv[1]
55
 
    except IndexError:
56
 
        owner = FSF
57
 
    for root, dirs, files in os.walk('.'):
58
 
        if root == '.':
59
 
            remove(dirs, '.bzr')
60
 
            remove(dirs, 'bin')
61
 
            remove(dirs, 'contrib')
62
 
            remove(dirs, 'develop-eggs')
63
 
            remove(dirs, 'eggs')
64
 
            remove(dirs, 'parts')
65
 
            remove(dirs, 'gnu-COPYING-GPL')
66
 
            remove(dirs, '.installed.cfg')
67
 
            remove(dirs, '.bzrignore')
68
 
            remove(dirs, 'distribute_setup.py')
69
 
        if root == './src':
70
 
            remove(dirs, 'mailman.egg-info')
71
 
        if root == './src/mailman':
72
 
            remove(dirs, 'messages')
73
 
        for file_name in files:
74
 
            if os.path.splitext(file_name)[1] in ('.pyc', '.gz', '.egg'):
75
 
                continue
76
 
            path = os.path.join(root, file_name)
77
 
            if os.path.isfile(path):
78
 
                do_file(path, owner)
79
 
 
80
 
 
81
 
if __name__ == '__main__':
82
 
    do_walk()