Fixed a bug: files that no longer exist remotely would never be
removed from .mirrorinfo.  Now they are (even if -r is not specified
-- the files are not removed, just their .mirrorinfo entry).

Added a feature: the -s pattern option is also used to skip local
files when removing (i.e. -r won't remove local files matching the -s
patterns).
diff --git a/Tools/scripts/ftpmirror.py b/Tools/scripts/ftpmirror.py
index ba9335d..10520f9 100755
--- a/Tools/scripts/ftpmirror.py
+++ b/Tools/scripts/ftpmirror.py
@@ -117,6 +117,7 @@
 	listing = []
 	if verbose: print 'Listing remote directory %s...' % pwd
 	f.retrlines('LIST', listing.append)
+	filesfound = []
 	for line in listing:
 		if verbose > 1: print '-->', `line`
 		if mac:
@@ -157,6 +158,7 @@
 				print 'Remembering subdirectory', filename
 			subdirs.append(filename)
 			continue
+		filesfound.append(filename)
 		if info.has_key(filename) and info[filename] == infostuff:
 			if verbose > 1:
 				print 'Already have this version of', filename
@@ -216,6 +218,18 @@
 					  int(round(kbytes/dt),)
 			print
 	#
+	# Remove files from info that are no longer remote
+	deletions = 0
+	for filename in info.keys():
+		if filename not in filesfound:
+			if verbose:
+				print "Removing obsolete info entry for",
+				print filename, "in", localdir or "."
+			del info[filename]
+			deletions = deletions + 1
+	if deletions:
+		writedict(info, infofilename)
+	#
 	# Remove local files that are no longer in the remote directory
 	try:
 	    if not localdir: names = os.listdir(os.curdir)
@@ -225,6 +239,16 @@
 	for name in names:
 		if name[0] == '.' or info.has_key(name) or name in subdirs:
 			continue
+		skip = 0
+		for pat in skippats:
+			if fnmatch(name, pat):
+				if verbose > 1:
+					print 'Skip pattern', pat,
+					print 'matches', name
+				skip = 1
+				break
+		if skip:
+			continue
 		fullname = os.path.join(localdir, name)
 		if not rmok:
 			if verbose: