]> granicus.if.org Git - python/commitdiff
Fixed a bug: files that no longer exist remotely would never be
authorGuido van Rossum <guido@python.org>
Thu, 14 Nov 1996 18:24:47 +0000 (18:24 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 14 Nov 1996 18:24:47 +0000 (18:24 +0000)
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).

Tools/scripts/ftpmirror.py

index ba9335d7b19de86b523bd0d27c267880f4d86fd2..10520f91d5ce9d02343d5946f5fa059c89b11658 100755 (executable)
@@ -117,6 +117,7 @@ def mirrorsubdir(f, localdir):
        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 @@ def mirrorsubdir(f, localdir):
                                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 @@ def mirrorsubdir(f, localdir):
                                          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 @@ def mirrorsubdir(f, localdir):
        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: