blob: 2ff067d0c20257c9fb92ba7970e1462c0f498fec [file] [log] [blame]
Guido van Rossum217a5fa1990-12-26 15:40:07 +00001# Module 'packmail' -- create a shell script out of some files.
2
3import mac
4import macpath
5from stat import ST_MTIME
Guido van Rossumfa540641991-04-07 13:40:56 +00006import string
Guido van Rossum217a5fa1990-12-26 15:40:07 +00007
8# Pack one file
9def pack(outfp, file, name):
10 fp = open(file, 'r')
11 outfp.write('sed "s/^X//" >' + name + ' <<"!"\n')
12 while 1:
13 line = fp.readline()
14 if not line: break
15 if line[-1:] <> '\n':
16 line = line + '\n'
17 outfp.write('X' + line)
18 outfp.write('!\n')
19
20# Pack some files from a directory
21def packsome(outfp, dirname, names):
22 for name in names:
23 print name
Guido van Rossumfbe0a8e1991-08-16 13:27:45 +000024 file = macpath.join(dirname, name)
Guido van Rossum217a5fa1990-12-26 15:40:07 +000025 pack(outfp, file, name)
26
27# Pack all files from a directory
28def packall(outfp, dirname):
29 names = mac.listdir(dirname)
30 names.sort()
31 packsome(outfp, dirname, names)
32
33# Pack all files from a directory that are not older than a give one
34def packnotolder(outfp, dirname, oldest):
35 names = mac.listdir(dirname)
Guido van Rossumfbe0a8e1991-08-16 13:27:45 +000036 oldest = macpath.join(dirname, oldest)
Guido van Rossum217a5fa1990-12-26 15:40:07 +000037 st = mac.stat(oldest)
38 mtime = st[ST_MTIME]
39 todo = []
40 for name in names:
41 print name, '...',
Guido van Rossumfbe0a8e1991-08-16 13:27:45 +000042 st = mac.stat(macpath.join(dirname, name))
Guido van Rossum217a5fa1990-12-26 15:40:07 +000043 if st[ST_MTIME] >= mtime:
44 print 'Yes.'
45 todo.append(name)
46 else:
47 print 'No.'
48 todo.sort()
49 packsome(outfp, dirname, todo)
Guido van Rossumfa540641991-04-07 13:40:56 +000050
51# Pack a whole tree (no exceptions)
52def packtree(outfp, dirname):
53 print 'packtree', dirname
54 outfp.write('mkdir ' + unixfix(dirname) + '\n')
55 names = mac.listdir(dirname)
56 subdirs = []
57 for name in names:
Guido van Rossumfbe0a8e1991-08-16 13:27:45 +000058 fullname = macpath.join(dirname, name)
Guido van Rossumfa540641991-04-07 13:40:56 +000059 if macpath.isdir(fullname):
60 subdirs.append(fullname)
61 else:
62 print 'pack', fullname
63 pack(outfp, fullname, unixfix(fullname))
64 for subdirname in subdirs:
65 packtree(outfp, subdirname)
66
67def unixfix(name):
68 comps = string.splitfields(name, ':')
69 res = ''
70 for comp in comps:
71 if comp:
72 if res: res = res + '/'
73 res = res + comp
74 return res