summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1996-04-09 02:51:23 (GMT)
committerGuido van Rossum <guido@python.org>1996-04-09 02:51:23 (GMT)
commit9a2c546e75cfe2e3c7b193b124de2b92d56938cf (patch)
tree689b45567fbd675ccca863fb47b2de8cea0b2009
parentadf876938a242dc7b476d82565b968471c2919b3 (diff)
downloadcpython-9a2c546e75cfe2e3c7b193b124de2b92d56938cf.zip
cpython-9a2c546e75cfe2e3c7b193b124de2b92d56938cf.tar.gz
cpython-9a2c546e75cfe2e3c7b193b124de2b92d56938cf.tar.bz2
Create files as temp file and move to real location only when complete.
Added some try-except statements around listdir and mkdir operations.
-rwxr-xr-xTools/scripts/ftpmirror.py29
1 files changed, 22 insertions, 7 deletions
diff --git a/Tools/scripts/ftpmirror.py b/Tools/scripts/ftpmirror.py
index 3cbe351..ba9335d 100755
--- a/Tools/scripts/ftpmirror.py
+++ b/Tools/scripts/ftpmirror.py
@@ -1,4 +1,4 @@
-#! /ufs/guido/bin/sgi/python
+#! /usr/local/bin/python
# Mirror a remote ftp subtree into a local directory tree.
# Basic usage: ftpmirror [options] host remotedir localdir
@@ -98,7 +98,11 @@ def mirrorsubdir(f, localdir):
pwd = f.pwd()
if localdir and not os.path.isdir(localdir):
if verbose: print 'Creating local directory', localdir
- makedir(localdir)
+ try:
+ makedir(localdir)
+ except os.error, msg:
+ print "Failed to establish local directory", localdir
+ return
infofilename = os.path.join(localdir, '.mirrorinfo')
try:
text = open(infofilename, 'r').read()
@@ -158,6 +162,7 @@ def mirrorsubdir(f, localdir):
print 'Already have this version of', filename
continue
fullname = os.path.join(localdir, filename)
+ tempname = os.path.join(localdir, '@'+filename)
if interactive:
doit = askabout('file', filename, pwd)
if not doit:
@@ -165,13 +170,13 @@ def mirrorsubdir(f, localdir):
info[filename] = 'Not retrieved'
continue
try:
- os.unlink(fullname)
+ os.unlink(tempname)
except os.error:
pass
try:
- fp = open(fullname, 'w')
+ fp = open(tempname, 'w')
except IOError, msg:
- print "Can't create %s: %s" % (fullname, str(msg))
+ print "Can't create %s: %s" % (tempname, str(msg))
continue
if verbose:
print 'Retrieving %s from %s as %s...' % \
@@ -190,6 +195,13 @@ def mirrorsubdir(f, localdir):
fp.close()
if fp1 != fp:
fp1.close()
+ try:
+ os.rename(tempname, fullname)
+ except os.error, msg:
+ print "Can't rename %s to %s: %s" % (tempname,
+ fullname,
+ str(msg))
+ continue
info[filename] = infostuff
writedict(info, infofilename)
if verbose:
@@ -205,8 +217,11 @@ def mirrorsubdir(f, localdir):
print
#
# Remove local files that are no longer in the remote directory
- if not localdir: names = os.listdir(os.curdir)
- else: names = os.listdir(localdir)
+ try:
+ if not localdir: names = os.listdir(os.curdir)
+ else: names = os.listdir(localdir)
+ except os.error:
+ names = []
for name in names:
if name[0] == '.' or info.has_key(name) or name in subdirs:
continue