home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyth_os2.zip / python-1.0.2 / Lib / packmail.py < prev    next >
Text File  |  1993-12-29  |  2KB  |  89 lines

  1. # Module 'packmail' -- create a self-unpacking shell archive.
  2.  
  3. # This module works on UNIX and on the Mac; the archives can unpack
  4. # themselves only on UNIX.
  5.  
  6. import os
  7. from stat import ST_MTIME
  8. import string
  9.  
  10. # Print help
  11. def help():
  12.     print 'All fns have a file open for writing as first parameter'
  13.     print 'pack(f, fullname, name): pack fullname as name'
  14.     print 'packsome(f, directory, namelist): selected files from directory'
  15.     print 'packall(f, directory): pack all files from directory'
  16.     print 'packnotolder(f, directory, name): pack all files from directory'
  17.     print '                        that are not older than a file there'
  18.     print 'packtree(f, directory): pack entire directory tree'
  19.  
  20. # Pack one file
  21. def pack(outfp, file, name):
  22.     fp = open(file, 'r')
  23.     outfp.write('echo ' + name + '\n')
  24.     outfp.write('sed "s/^X//" >' + name + ' <<"!"\n')
  25.     while 1:
  26.         line = fp.readline()
  27.         if not line: break
  28.         if line[-1:] <> '\n':
  29.             line = line + '\n'
  30.         outfp.write('X' + line)
  31.     outfp.write('!\n')
  32.     fp.close()
  33.  
  34. # Pack some files from a directory
  35. def packsome(outfp, dirname, names):
  36.     for name in names:
  37.         print name
  38.         file = os.path.join(dirname, name)
  39.         pack(outfp, file, name)
  40.  
  41. # Pack all files from a directory
  42. def packall(outfp, dirname):
  43.     names = os.listdir(dirname)
  44.     names.sort()
  45.     packsome(outfp, dirname, names)
  46.  
  47. # Pack all files from a directory that are not older than a give one
  48. def packnotolder(outfp, dirname, oldest):
  49.     names = os.listdir(dirname)
  50.     oldest = os.path.join(dirname, oldest)
  51.     st = os.stat(oldest)
  52.     mtime = st[ST_MTIME]
  53.     todo = []
  54.     for name in names:
  55.         print name, '...',
  56.         st = os.stat(os.path.join(dirname, name))
  57.         if st[ST_MTIME] >= mtime:
  58.             print 'Yes.'
  59.             todo.append(name)
  60.         else:
  61.             print 'No.'
  62.     todo.sort()
  63.     packsome(outfp, dirname, todo)
  64.  
  65. # Pack a whole tree (no exceptions)
  66. def packtree(outfp, dirname):
  67.     print 'packtree', dirname
  68.     outfp.write('mkdir ' + unixfix(dirname) + '\n')
  69.     names = os.listdir(dirname)
  70.     subdirs = []
  71.     for name in names:
  72.         fullname = os.path.join(dirname, name)
  73.         if os.path.isdir(fullname):
  74.             subdirs.append(fullname)
  75.         else:
  76.             print 'pack', fullname
  77.             pack(outfp, fullname, unixfix(fullname))
  78.     for subdirname in subdirs:
  79.         packtree(outfp, subdirname)
  80.  
  81. def unixfix(name):
  82.     comps = string.splitfields(name, os.sep)
  83.     res = ''
  84.     for comp in comps:
  85.         if comp:
  86.             if res: res = res + '/'
  87.             res = res + comp
  88.     return res
  89.