diff options
author | Guido van Rossum <guido@python.org> | 1996-11-14 18:24:47 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1996-11-14 18:24:47 (GMT) |
commit | e41d00bb6a503023ee1fe95bfb8ffe9a53b22ca9 (patch) | |
tree | 2390097d08a1fe047a9fc2af76819ac6612d3d47 | |
parent | c59120ba1730b65d1f4b475ebd11f5ecf7780e03 (diff) | |
download | cpython-e41d00bb6a503023ee1fe95bfb8ffe9a53b22ca9.zip cpython-e41d00bb6a503023ee1fe95bfb8ffe9a53b22ca9.tar.gz cpython-e41d00bb6a503023ee1fe95bfb8ffe9a53b22ca9.tar.bz2 |
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).
-rwxr-xr-x | Tools/scripts/ftpmirror.py | 24 |
1 files changed, 24 insertions, 0 deletions
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 @@ 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: |