Substantially revise to handle the fact that Python CVS is no longer in a
file-system accessible repository.  Add a little bit of smarts to convert
the cvsroot to an anonymous cvsroot the real one requires an authenticated
login to SourceForge; this avoids the SSH startup delay when doing the
checkout or export to get a fresh copy of the tree.
diff --git a/Doc/tools/mksourcepkg b/Doc/tools/mksourcepkg
index 260ae6d..098bed2 100755
--- a/Doc/tools/mksourcepkg
+++ b/Doc/tools/mksourcepkg
@@ -21,12 +21,17 @@
 import getopt
 import glob
 import os
+import re
 import shutil
 import sys
 import tempfile
 
+import cvsinfo
+
 
 quiet = 0
+rx = re.compile(r":ext:(?:[a-zA-Z0-9]+)@cvs\.([a-zA-Z0-9]+).sourceforge.net:"
+                r"/cvsroot/\1")
 
 
 def main():
@@ -70,33 +75,47 @@
           cvstag = args[1]
      tempdir = tempfile.mktemp()
      os.mkdir(tempdir)
-     os.mkdir(os.path.join(tempdir, "Python-%s" % release))
-     docdir = os.path.join(tempdir, "Python-%s" % release, "Doc")
-     os.mkdir(docdir)
-     mydir = os.getcwd()
+     pkgdir = os.path.join(tempdir, "Python-" + release)
+     os.mkdir(pkgdir)
+     pwd = os.getcwd()
+     mydir = os.path.abspath(os.path.dirname(sys.argv[0]))
+     info = cvsinfo.RepositoryInfo(mydir)
+     cvsroot = info.get_cvsroot()
+     m = rx.match(cvsroot)
+     if m:
+          # If this is an authenticated SourceForge repository, convert to
+          # anonymous usage for the export/checkout, since that avoids the
+          # SSH overhead.
+          group = m.group(1)
+          cvsroot = ":pserver:anonymous@cvs.%s.sourceforge.net:/cvsroot/%s" \
+                    % (group, group)
+          # For some reason, SourceForge/CVS doesn't seem to care that we
+          # might not have done a "cvs login" to the anonymous server.
+          # That avoids a lot of painful gunk here.
+     os.chdir(pkgdir)
+     if not quiet:
+          print "--- current directory is:", pkgdir
      if cvstag:
-          run("cvs export -r %s -d %s/Python-%s/Doc python/dist/src/Doc"
-              % (cvstag, tempdir, release))
+          run("cvs -d%s export -r %s -d Doc python/dist/src/Doc"
+              % (cvsroot, cvstag))
      else:
-          run("cvs checkout -d %s/Python-%s/Doc python/dist/src/Doc"
-              % (tempdir, release))
+          run("cvs -Q -d%s checkout -d Doc python/dist/src/Doc" % cvsroot)
           # remove CVS directories
-          os.chdir("%s/Python-%s" % (tempdir, release))
           for p in ('*/CVS', '*/*/CVS', '*/*/*/CVS'):
                map(shutil.rmtree, glob.glob(p))
-          os.chdir(mydir)
      if tools:
-          archive = "tools-" + release
+          archive = "doctools-" + release
           # we don't want the actual documents in this case:
-          for d in ("api", "doc", "ext", "lib", "mac", "ref", "tut"):
-               shutil.rmtree(os.path.join(docdir, d))
+          for d in ("api", "dist", "doc", "ext", "inst",
+                    "lib", "mac", "ref", "tut"):
+               shutil.rmtree(os.path.join(os.path.join(pkgdir, "Doc"), d))
      else:
           archive = "latex-" + release
 
      # XXX should also remove the .cvsignore files at this point
 
      os.chdir(tempdir)
-     archive = os.path.join(mydir, archive)
+     archive = os.path.join(pwd, archive)
      for format in formats:
           if format == "bzip2":
                run("tar cf - Python-%s | bzip2 -9 >%s.tar.bz2"
@@ -111,7 +130,7 @@
                    % (archive, release))
 
      # clean up the work area:
-     os.chdir(mydir)
+     os.chdir(pwd)
      shutil.rmtree(tempdir)
 
 
@@ -119,7 +138,7 @@
      if quiet < 2:
           print "+++", cmd
      if quiet:
-          cmd = "(%s) >/dev/null" % cmd
+          cmd = "%s >/dev/null" % cmd
      rc = os.system(cmd)
      if rc:
           sys.exit(rc)