summaryrefslogtreecommitdiffstats
path: root/Tools/scripts/ftpmirror.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1996-11-14 18:24:47 (GMT)
committerGuido van Rossum <guido@python.org>1996-11-14 18:24:47 (GMT)
commite41d00bb6a503023ee1fe95bfb8ffe9a53b22ca9 (patch)
tree2390097d08a1fe047a9fc2af76819ac6612d3d47 /Tools/scripts/ftpmirror.py
parentc59120ba1730b65d1f4b475ebd11f5ecf7780e03 (diff)
downloadcpython-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).
Diffstat (limited to 'Tools/scripts/ftpmirror.py')
-rwxr-xr-xTools/scripts/ftpmirror.py24
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: