annotate Lib/packmail.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 1940892d2fe3
children a8df090a12ba
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
810
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
1 # Module 'packmail' -- create a self-unpacking shell archive.
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
2
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
3 # This module works on UNIX and on the Mac; the archives can unpack
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
4 # themselves only on UNIX.
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
777
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
6 import os
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 from stat import ST_MTIME
194
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
8 import string
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
810
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
10 # Print help
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
11 def help():
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
12 print 'All fns have a file open for writing as first parameter'
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
13 print 'pack(f, fullname, name): pack fullname as name'
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
14 print 'packsome(f, directory, namelist): selected files from directory'
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
15 print 'packall(f, directory): pack all files from directory'
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
16 print 'packnotolder(f, directory, name): pack all files from directory'
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
17 print ' that are not older than a file there'
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
18 print 'packtree(f, directory): pack entire directory tree'
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
19
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 # Pack one file
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 def pack(outfp, file, name):
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 fp = open(file, 'r')
810
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
23 outfp.write('echo ' + name + '\n')
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 outfp.write('sed "s/^X//" >' + name + ' <<"!"\n')
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 while 1:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 line = fp.readline()
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 if not line: break
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 if line[-1:] <> '\n':
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 line = line + '\n'
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 outfp.write('X' + line)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 outfp.write('!\n')
810
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
32 fp.close()
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 # Pack some files from a directory
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 def packsome(outfp, dirname, names):
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 for name in names:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 print name
777
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
38 file = os.path.join(dirname, name)
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 pack(outfp, file, name)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 # Pack all files from a directory
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 def packall(outfp, dirname):
777
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
43 names = os.listdir(dirname)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
44 try:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
45 names.remove('.')
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
46 except:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
47 pass
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
48 try:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
49 names.remove('..')
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
50 except:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
51 pass
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 names.sort()
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 packsome(outfp, dirname, names)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 # Pack all files from a directory that are not older than a give one
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 def packnotolder(outfp, dirname, oldest):
777
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
57 names = os.listdir(dirname)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
58 try:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
59 names.remove('.')
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
60 except:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
61 pass
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
62 try:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
63 names.remove('..')
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
64 except:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
65 pass
777
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
66 oldest = os.path.join(dirname, oldest)
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
67 st = os.stat(oldest)
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 mtime = st[ST_MTIME]
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 todo = []
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 for name in names:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 print name, '...',
777
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
72 st = os.stat(os.path.join(dirname, name))
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 if st[ST_MTIME] >= mtime:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 print 'Yes.'
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 todo.append(name)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 else:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 print 'No.'
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 todo.sort()
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 packsome(outfp, dirname, todo)
194
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
80
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
81 # Pack a whole tree (no exceptions)
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
82 def packtree(outfp, dirname):
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
83 print 'packtree', dirname
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
84 outfp.write('mkdir ' + unixfix(dirname) + '\n')
777
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
85 names = os.listdir(dirname)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
86 try:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
87 names.remove('.')
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
88 except:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
89 pass
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
90 try:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
91 names.remove('..')
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
92 except:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 810
diff changeset
93 pass
194
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
94 subdirs = []
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
95 for name in names:
777
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
96 fullname = os.path.join(dirname, name)
c0d4caa71bda mac -> os
Guido van Rossum <guido@python.org>
parents: 360
diff changeset
97 if os.path.isdir(fullname):
194
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
98 subdirs.append(fullname)
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
99 else:
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
100 print 'pack', fullname
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
101 pack(outfp, fullname, unixfix(fullname))
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
102 for subdirname in subdirs:
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
103 packtree(outfp, subdirname)
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
104
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
105 def unixfix(name):
810
3773b6f6dd53 Added help() fn; use os.sep
Guido van Rossum <guido@python.org>
parents: 777
diff changeset
106 comps = string.splitfields(name, os.sep)
194
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
107 res = ''
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
108 for comp in comps:
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
109 if comp:
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
110 if res: res = res + '/'
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
111 res = res + comp
145f9e14595f Support packing whole trees.
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
112 return res