annotate Mac/scripts/MkDistr.py @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents f3fb05bfeeeb
children
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
15696
57a4857430ff Use re in stead of regex.
Jack Jansen <jack.jansen@cwi.nl>
parents: 14502
diff changeset
19 import re
3046
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
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
25 DEBUG=0
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
26
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
27 SyntaxError='Include/exclude file syntax error'
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
28
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
29 class Matcher:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
30 """Include/exclude database, common code"""
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
31
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
32 def __init__(self, filename):
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
33 self.filename = filename
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
34 self.rawdata = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
35 self.parse(filename)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
36 self.rawdata.sort()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
37 self.rebuild()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
38 self.modified = 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
39
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
40 def parse(self, dbfile):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
41 try:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
42 fp = open(dbfile)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
43 except IOError:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
44 return
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
45 data = fp.readlines()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
46 fp.close()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
47 for d in data:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
48 d = d[:-1]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
49 if not d or d[0] == '#': continue
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
50 pat = self.parseline(d)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
51 self.rawdata.append(pat)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
52
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
53 def save(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
54 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
55 self.savedata(fp, self.rawdata)
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
56 self.modified = 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
57
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
58 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
59 if len(value) == 1:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
60 value = value + ('',)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
61 self.rawdata.append(value)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
62 self.rebuild1(value)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
63 self.modified = 1
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
64
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
65 def delete(self, value):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
66 key = value
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
67 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
68 if self.rawdata[i][0] == key:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
69 del self.rawdata[i]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
70 self.unrebuild1(i, key)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
71 self.modified = 1
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
72 return
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
73 print 'Not found!', key
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
74
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
75 def getall(self):
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
76 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
77
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
78 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
79 for src, dst in self.rawdata:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
80 if src == value:
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
81 return src, dst
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
82 print 'Not found!', value
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
83
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
84 def is_modified(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
85 return self.modified
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
86
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
87 class IncMatcher(Matcher):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
88 """Include filename database and matching engine"""
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
89
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
90 def rebuild(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
91 self.idict = {}
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
92 self.edict = {}
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
93 for v in self.rawdata:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
94 self.rebuild1(v)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
95
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
96 def parseline(self, line):
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
97 try:
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
98 data = eval(line)
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
99 except:
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 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
102 raise SyntaxError, line
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
103 if len(data) == 1:
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
104 data = data + ('',)
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
105 return data
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
106
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
107 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
108 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
109 fp.write(`d`+'\n')
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
110
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
111 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
112 if dst == '':
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
113 dst = src
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
114 if dst == None:
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
115 self.edict[src] = None
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
116 else:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
117 self.idict[src] = dst
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
118
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
119 def unrebuild1(self, num, src):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
120 if self.idict.has_key(src):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
121 del self.idict[src]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
122 else:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
123 del self.edict[src]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
124
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
125 def match(self, patharg):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
126 removed = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
127 # First check the include directory
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
128 path = patharg
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
129 while 1:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
130 if self.idict.has_key(path):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
131 # 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
132 dstpath = self.idict[path]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
133 # 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
134 while removed:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
135 dstpath = os.path.join(dstpath, removed[0])
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
136 removed = removed[1:]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
137 # 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
138 # tack on our input filename
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
139 if dstpath[-1] == os.sep:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
140 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
141 dstpath = os.path.join(dstpath, file)
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
142 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
143 print 'include', patharg, dstpath
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
144 return dstpath
14502
eef25730e64d The logic for finding long matches before short ones was wrong (why did I never notice this??!?), fixed.
Jack Jansen <jack.jansen@cwi.nl>
parents: 12598
diff changeset
145 ## path, lastcomp = os.path.split(path)
eef25730e64d The logic for finding long matches before short ones was wrong (why did I never notice this??!?), fixed.
Jack Jansen <jack.jansen@cwi.nl>
parents: 12598
diff changeset
146 ## if not path:
eef25730e64d The logic for finding long matches before short ones was wrong (why did I never notice this??!?), fixed.
Jack Jansen <jack.jansen@cwi.nl>
parents: 12598
diff changeset
147 ## break
eef25730e64d The logic for finding long matches before short ones was wrong (why did I never notice this??!?), fixed.
Jack Jansen <jack.jansen@cwi.nl>
parents: 12598
diff changeset
148 ## removed[0:0] = [lastcomp]
eef25730e64d The logic for finding long matches before short ones was wrong (why did I never notice this??!?), fixed.
Jack Jansen <jack.jansen@cwi.nl>
parents: 12598
diff changeset
149 ## # Next check the exclude directory
eef25730e64d The logic for finding long matches before short ones was wrong (why did I never notice this??!?), fixed.
Jack Jansen <jack.jansen@cwi.nl>
parents: 12598
diff changeset
150 ## path = patharg
eef25730e64d The logic for finding long matches before short ones was wrong (why did I never notice this??!?), fixed.
Jack Jansen <jack.jansen@cwi.nl>
parents: 12598
diff changeset
151 ## while 1:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
152 if self.edict.has_key(path):
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
153 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
154 print 'exclude', patharg, path
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
155 return ''
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
156 path, lastcomp = os.path.split(path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
157 if not path:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
158 break
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
159 removed[0:0] = [lastcomp]
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
160 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
161 print 'nomatch', patharg
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
162 return None
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
163
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
164 def checksourcetree(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
165 rv = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
166 for name in self.idict.keys():
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
167 if not os.path.exists(name):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
168 rv.append(name)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
169 return rv
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
170
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
171 class ExcMatcher(Matcher):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
172 """Exclude pattern database and matching engine"""
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
173
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
174 def rebuild(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
175 self.relist = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
176 for v in self.rawdata:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
177 self.rebuild1(v)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
178
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
179 def parseline(self, data):
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
180 return (data, None)
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
181
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
182 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
183 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
184 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
185
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
186 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
187 pat = fnmatch.translate(src)
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
188 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
189 print 'PATTERN', `src`, 'REGEX', `pat`
15696
57a4857430ff Use re in stead of regex.
Jack Jansen <jack.jansen@cwi.nl>
parents: 14502
diff changeset
190 self.relist.append(re.compile(pat))
4168
74b8aa7f1114 Completely revamped: it now uses separate instruction files per
Jack Jansen <jack.jansen@cwi.nl>
parents: 3046
diff changeset
191
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
192 def unrebuild1(self, num, src):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
193 del self.relist[num]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
194
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
195 def match(self, path):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
196 comps = os.path.split(path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
197 file = comps[-1]
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
198 for pat in self.relist:
15696
57a4857430ff Use re in stead of regex.
Jack Jansen <jack.jansen@cwi.nl>
parents: 14502
diff changeset
199 if pat and pat.match(file):
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
200 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
201 print 'excmatch', file, pat
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
202 return 1
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
203 return 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
204
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
205
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
206 class Main:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
207 """The main program glueing it all together"""
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
208
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
209 def __init__(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
210 InitUI()
12589
2cc6e6dfe9bb Automatically dump distribution folders where I want them, next to the vise scripts.
Jack Jansen <jack.jansen@cwi.nl>
parents: 8157
diff changeset
211 os.chdir(sys.prefix)
4473
55fe64c21145 Different default location for distribution templates
Jack Jansen <jack.jansen@cwi.nl>
parents: 4168
diff changeset
212 if not os.path.isdir(':Mac:Distributions'):
55fe64c21145 Different default location for distribution templates
Jack Jansen <jack.jansen@cwi.nl>
parents: 4168
diff changeset
213 os.mkdir(':Mac:Distributions')
12589
2cc6e6dfe9bb Automatically dump distribution folders where I want them, next to the vise scripts.
Jack Jansen <jack.jansen@cwi.nl>
parents: 8157
diff changeset
214 self.typedist = GetType()
2cc6e6dfe9bb Automatically dump distribution folders where I want them, next to the vise scripts.
Jack Jansen <jack.jansen@cwi.nl>
parents: 8157
diff changeset
215 self.inc = IncMatcher(':Mac:Distributions:%s.include'%self.typedist)
2cc6e6dfe9bb Automatically dump distribution folders where I want them, next to the vise scripts.
Jack Jansen <jack.jansen@cwi.nl>
parents: 8157
diff changeset
216 self.exc = ExcMatcher(':Mac:Distributions:%s.exclude'%self.typedist)
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
217 self.ui = MkDistrUI(self)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
218 self.ui.mainloop()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
219
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
220 def check(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
221 return self.checkdir(':', 1)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
222
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
223 def checkdir(self, path, istop):
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
224 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
225 print 'checkdir', path
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
226 files = os.listdir(path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
227 rv = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
228 todo = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
229 for f in files:
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
230 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
231 print 'checkfile', f
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
232 if self.exc.match(f):
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
233 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
234 print 'exclude match', f
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
235 continue
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
236 fullname = os.path.join(path, f)
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
237 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
238 print 'checkpath', fullname
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
239 matchvalue = self.inc.match(fullname)
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
240 if matchvalue == None:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
241 if os.path.isdir(fullname):
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
242 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
243 print 'do dir', fullname
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
244 todo.append(fullname)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
245 else:
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
246 if DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
247 print 'include', fullname
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
248 rv.append(fullname)
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
249 elif DEBUG:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
250 print 'badmatch', matchvalue
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
251 for d in todo:
5621
e1413fa64b83 Nothing important
Jack Jansen <jack.jansen@cwi.nl>
parents: 4473
diff changeset
252 if len(rv) > 500:
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
253 if istop:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
254 rv.append('... and more ...')
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
255 return rv
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
256 rv = rv + self.checkdir(d, 0)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
257 return rv
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
258
12589
2cc6e6dfe9bb Automatically dump distribution folders where I want them, next to the vise scripts.
Jack Jansen <jack.jansen@cwi.nl>
parents: 8157
diff changeset
259 def run(self):
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
260 missing = self.inc.checksourcetree()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
261 if missing:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
262 print '==== Missing source files ===='
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
263 for i in missing:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
264 print i
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
265 print '==== Fix and retry ===='
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
266 return
12598
92d1ddc1c57f Put the install folders in (vise), not vise, so the include files aren't accidentally picked up by the normal build process.
Jack Jansen <jack.jansen@cwi.nl>
parents: 12589
diff changeset
267 destprefix = os.path.join(sys.prefix, ':Mac:Distributions:(vise)')
12589
2cc6e6dfe9bb Automatically dump distribution folders where I want them, next to the vise scripts.
Jack Jansen <jack.jansen@cwi.nl>
parents: 8157
diff changeset
268 destprefix = os.path.join(destprefix, '%s Distribution'%self.typedist)
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
269 if not self.rundir(':', destprefix, 0):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
270 return
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
271 self.rundir(':', destprefix, 1)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
272
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
273 def rundir(self, path, destprefix, doit):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
274 files = os.listdir(path)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
275 todo = []
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
276 rv = 1
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
277 for f in files:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
278 if self.exc.match(f):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
279 continue
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
280 fullname = os.path.join(path, f)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
281 if os.path.isdir(fullname):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
282 todo.append(fullname)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
283 else:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
284 dest = self.inc.match(fullname)
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
285 if dest == None:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
286 print 'Not yet resolved:', fullname
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
287 rv = 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
288 if dest:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
289 if doit:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
290 print 'COPY ', fullname
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
291 print ' -> ', os.path.join(destprefix, dest)
7442
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
292 try:
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
293 macostools.copy(fullname, os.path.join(destprefix, dest), 1)
05189f7cdbeb Added some debug prints (if enabled by setting DEBUG)
Jack Jansen <jack.jansen@cwi.nl>
parents: 5621
diff changeset
294 except: #DBG
17002
f3fb05bfeeeb Re-try the file copy once if it fails. This works around an obscure and non-reproducibe bug in GUSI.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15696
diff changeset
295 print '*** Copy failed mysteriously, try again'
f3fb05bfeeeb Re-try the file copy once if it fails. This works around an obscure and non-reproducibe bug in GUSI.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15696
diff changeset
296 print '*** cwd', os.getcwd() #DBG
f3fb05bfeeeb Re-try the file copy once if it fails. This works around an obscure and non-reproducibe bug in GUSI.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15696
diff changeset
297 print '*** fsspec', macfs.FSSpec(fullname) #DBG
f3fb05bfeeeb Re-try the file copy once if it fails. This works around an obscure and non-reproducibe bug in GUSI.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15696
diff changeset
298 # Get rid of open files
f3fb05bfeeeb Re-try the file copy once if it fails. This works around an obscure and non-reproducibe bug in GUSI.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15696
diff changeset
299 try:
f3fb05bfeeeb Re-try the file copy once if it fails. This works around an obscure and non-reproducibe bug in GUSI.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15696
diff changeset
300 i = 1 / 0
f3fb05bfeeeb Re-try the file copy once if it fails. This works around an obscure and non-reproducibe bug in GUSI.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15696
diff changeset
301 except:
f3fb05bfeeeb Re-try the file copy once if it fails. This works around an obscure and non-reproducibe bug in GUSI.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15696
diff changeset
302 pass
f3fb05bfeeeb Re-try the file copy once if it fails. This works around an obscure and non-reproducibe bug in GUSI.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15696
diff changeset
303 macostools.copy(fullname, os.path.join(destprefix, dest), 1)
3046
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
304 for d in todo:
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
305 if not self.rundir(d, destprefix, doit):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
306 rv = 0
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
307 return rv
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
308
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
309 def save(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
310 self.inc.save()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
311 self.exc.save()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
312
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
313 def is_modified(self):
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
314 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
315
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
316 if __name__ == '__main__':
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
317 Main()
94835b3edf3e Interactively create a distribution from a sourcetree.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
318