- don't re-write a SourceForge authenticated CVS root into the
  anonymous flavor unless the user asks for it on the command line
- decompose SourceForge authenticated CVS roots correctly
diff --git a/Doc/tools/mksourcepkg b/Doc/tools/mksourcepkg
index 9dbb8dc..cad2b44 100755
--- a/Doc/tools/mksourcepkg
+++ b/Doc/tools/mksourcepkg
@@ -36,16 +36,17 @@
 patchlevel_tex = os.path.join(Doc, "commontex", "patchlevel.tex")
 
 quiet = 0
-rx = re.compile(r":ext:(?:[a-zA-Z0-9]+)@cvs\.([a-zA-Z0-9]+).sourceforge.net:"
+rx = re.compile(r":ext:(?:[a-zA-Z0-9]+@)?cvs\.([a-zA-Z0-9]+).sourceforge.net:"
                 r"/cvsroot/\1")
 
 
 def main():
      global quiet
+     anonymous = False
      try:
-          opts, args = getopt.getopt(sys.argv[1:], "abgtzq",
+          opts, args = getopt.getopt(sys.argv[1:], "Aabgtzq",
                                      ["all", "bzip2", "gzip", "tools", "zip",
-                                      "quiet"])
+                                      "quiet", "anonymous"])
      except getopt.error, e:
           usage(warning=str(e))
           sys.exit(2)
@@ -69,6 +70,8 @@
                formats["bzip2"] = 1
                formats["gzip"] = 1
                formats["zip"] = 1
+          elif opt in ("-A", "--anonymous"):
+               anonymous = True
      if formats:
           # make order human-predictable
           formats = formats.keys()
@@ -88,7 +91,7 @@
      info = cvsinfo.RepositoryInfo(mydir)
      cvsroot = info.get_cvsroot()
      m = rx.match(cvsroot)
-     if m:
+     if m and anonymous:
           # If this is an authenticated SourceForge repository, convert to
           # anonymous usage for the export/checkout, since that avoids the
           # SSH overhead.