annotate Mac/scripts/MkDistr.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents e1413fa64b83
children 05189f7cdbeb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
1 #
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
2 # Interactively decide what to distribute
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
3 #
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
4 #
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
5 # The exclude file signals files to always exclude,
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
6 # The pattern file lines are of the form
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
7 # *.c
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
8 # This excludes all files ending in .c.
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
9 #
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
10 # The include file signals files and directories to include.
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
11 # Records are of the form
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
12 # ('Tools:bgen:AE:AppleEvents.py', 'Lib:MacToolbox:AppleEvents.py')
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
13 # This includes the specified file, putting it in the given place, or
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
14 # ('Tools:bgen:AE:AppleEvents.py', None)
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
15 # This excludes the specified file.
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
16 #
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
17 from MkDistr_ui import *
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
18 import fnmatch
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
19 import regex
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
20 import os
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
21 import sys
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
22 import macfs
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
23 import macostools
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
24
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
25 SyntaxError='Include/exclude file syntax error'
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
26
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
27 class Matcher:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
28 """Include/exclude database, common code"""
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
29
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
30 def __init__(self, filename):
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
31 self.filename = filename
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
32 self.rawdata = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
33 self.parse(filename)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
34 self.rawdata.sort()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
35 self.rebuild()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
36 self.modified = 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
37
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
38 def parse(self, dbfile):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
39 try:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
40 fp = open(dbfile)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
41 except IOError:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
42 return
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
43 data = fp.readlines()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
44 fp.close()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
45 for d in data:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
46 d = d[:-1]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
47 if not d or d[0] == '#': continue
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
48 pat = self.parseline(d)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
49 self.rawdata.append(pat)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
50
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
51 def save(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
52 fp = open(self.filename, 'w')
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
53 self.savedata(fp, self.rawdata)
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
54 self.modified = 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
55
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
56 def add(self, value):
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
57 if len(value) == 1:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
58 value = value + ('',)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
59 self.rawdata.append(value)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
60 self.rebuild1(value)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
61 self.modified = 1
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
62
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
63 def delete(self, value):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
64 key = value
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
65 for i in range(len(self.rawdata)):
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
66 if self.rawdata[i][0] == key:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
67 del self.rawdata[i]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
68 self.unrebuild1(i, key)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
69 self.modified = 1
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
70 return
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
71 print 'Not found!', key
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
72
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
73 def getall(self):
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
74 return map(lambda x: x[0], self.rawdata)
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
75
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
76 def get(self, value):
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
77 for src, dst in self.rawdata:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
78 if src == value:
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
79 return src, dst
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
80 print 'Not found!', value
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
81
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
82 def is_modified(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
83 return self.modified
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
84
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
85 class IncMatcher(Matcher):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
86 """Include filename database and matching engine"""
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
87
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
88 def rebuild(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
89 self.idict = {}
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
90 self.edict = {}
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
91 for v in self.rawdata:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
92 self.rebuild1(v)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
93
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
94 def parseline(self, line):
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
95 try:
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
96 data = eval(line)
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
97 except:
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
98 raise SyntaxError, line
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
99 if type(data) <> type(()) or len(data) not in (1,2):
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
100 raise SyntaxError, line
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
101 if len(data) == 1:
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
102 data = data + ('',)
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
103 return data
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
104
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
105 def savedata(self, fp, data):
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
106 for d in self.rawdata:
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
107 fp.write(`d`+'\n')
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
108
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
109 def rebuild1(self, (src, dst)):
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
110 if dst == '':
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
111 dst = src
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
112 if dst == None:
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
113 self.edict[src] = None
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
114 else:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
115 self.idict[src] = dst
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
116
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
117 def unrebuild1(self, num, src):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
118 if self.idict.has_key(src):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
119 del self.idict[src]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
120 else:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
121 del self.edict[src]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
122
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
123 def match(self, patharg):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
124 removed = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
125 # First check the include directory
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
126 path = patharg
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
127 while 1:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
128 if self.idict.has_key(path):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
129 # We know of this path (or initial piece of path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
130 dstpath = self.idict[path]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
131 # We do want it distributed. Tack on the tail.
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
132 while removed:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
133 dstpath = os.path.join(dstpath, removed[0])
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
134 removed = removed[1:]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
135 # Finally, if the resultant string ends in a separator
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
136 # tack on our input filename
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
137 if dstpath[-1] == os.sep:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
138 dir, file = os.path.split(path)
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
139 dstpath = os.path.join(dstpath, file)
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
140 return dstpath
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
141 path, lastcomp = os.path.split(path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
142 if not path:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
143 break
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
144 removed[0:0] = [lastcomp]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
145 # Next check the exclude directory
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
146 path = patharg
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
147 while 1:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
148 if self.edict.has_key(path):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
149 return ''
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
150 path, lastcomp = os.path.split(path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
151 if not path:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
152 break
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
153 removed[0:0] = [lastcomp]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
154 return None
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
155
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
156 def checksourcetree(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
157 rv = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
158 for name in self.idict.keys():
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
159 if not os.path.exists(name):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
160 rv.append(name)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
161 return rv
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
162
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
163 class ExcMatcher(Matcher):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
164 """Exclude pattern database and matching engine"""
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
165
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
166 def rebuild(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
167 self.relist = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
168 for v in self.rawdata:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
169 self.rebuild1(v)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
170
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
171 def parseline(self, data):
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
172 return (data, None)
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
173
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
174 def savedata(self, fp, data):
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
175 for d in self.rawdata:
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
176 fp.write(d[0]+'\n')
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
177
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
178 def rebuild1(self, (src, dst)):
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
179 pat = fnmatch.translate(src)
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
180 self.relist.append(regex.compile(pat))
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
181
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
182 def unrebuild1(self, num, src):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
183 del self.relist[num]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
184
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
185 def match(self, path):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
186 comps = os.path.split(path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
187 file = comps[-1]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
188 for pat in self.relist:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
189 if pat and pat.match(file) == len(file):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
190 return 1
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
191 return 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
192
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
193
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
194 class Main:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
195 """The main program glueing it all together"""
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
196
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
197 def __init__(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
198 InitUI()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
199 fss, ok = macfs.GetDirectory('Source directory:')
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
200 if not ok:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
201 sys.exit(0)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
202 os.chdir(fss.as_pathname())
4473
55fe64c21145 Different default location for distribution templates
Jack Jansen <jack.jansen@cwi.nl>
parents: 4168
diff changeset
203 if not os.path.isdir(':Mac:Distributions'):
55fe64c21145 Different default location for distribution templates
Jack Jansen <jack.jansen@cwi.nl>
parents: 4168
diff changeset
204 os.mkdir(':Mac:Distributions')
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
205 typedist = GetType()
4473
55fe64c21145 Different default location for distribution templates
Jack Jansen <jack.jansen@cwi.nl>
parents: 4168
diff changeset
206 self.inc = IncMatcher(':Mac:Distributions:%s.include'%typedist)
55fe64c21145 Different default location for distribution templates
Jack Jansen <jack.jansen@cwi.nl>
parents: 4168
diff changeset
207 self.exc = ExcMatcher(':Mac:Distributions:%s.exclude'%typedist)
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
208 self.ui = MkDistrUI(self)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
209 self.ui.mainloop()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
210
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
211 def check(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
212 return self.checkdir(':', 1)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
213
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
214 def checkdir(self, path, istop):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
215 files = os.listdir(path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
216 rv = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
217 todo = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
218 for f in files:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
219 if self.exc.match(f):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
220 continue
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
221 fullname = os.path.join(path, f)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
222 if self.inc.match(fullname) == None:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
223 if os.path.isdir(fullname):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
224 todo.append(fullname)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
225 else:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
226 rv.append(fullname)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
227 for d in todo:
5621
e1413fa64b83 Nothing important
Jack Jansen <jack.jansen@cwi.nl>
parents: 4473
diff changeset
228 if len(rv) > 500:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
229 if istop:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
230 rv.append('... and more ...')
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
231 return rv
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
232 rv = rv + self.checkdir(d, 0)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
233 return rv
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
234
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
235 def run(self, destprefix):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
236 missing = self.inc.checksourcetree()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
237 if missing:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
238 print '==== Missing source files ===='
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
239 for i in missing:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
240 print i
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
241 print '==== Fix and retry ===='
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
242 return
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
243 if not self.rundir(':', destprefix, 0):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
244 return
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
245 self.rundir(':', destprefix, 1)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
246
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
247 def rundir(self, path, destprefix, doit):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
248 files = os.listdir(path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
249 todo = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
250 rv = 1
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
251 for f in files:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
252 if self.exc.match(f):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
253 continue
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
254 fullname = os.path.join(path, f)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
255 if os.path.isdir(fullname):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
256 todo.append(fullname)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
257 else:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
258 dest = self.inc.match(fullname)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
259 if dest == None:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
260 print 'Not yet resolved:', fullname
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
261 rv = 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
262 if dest:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
263 if doit:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
264 print 'COPY ', fullname
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
265 print ' -> ', os.path.join(destprefix, dest)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
266 macostools.copy(fullname, os.path.join(destprefix, dest), 1)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
267 for d in todo:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
268 if not self.rundir(d, destprefix, doit):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
269 rv = 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
270 return rv
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
271
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
272 def save(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
273 self.inc.save()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
274 self.exc.save()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
275
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
276 def is_modified(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
277 return self.inc.is_modified() or self.exc.is_modified()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
278
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
279 if __name__ == '__main__':
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
280 Main()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
281