Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9a2c546

Browse files
committed
Create files as temp file and move to real location only when complete.
Added some try-except statements around listdir and mkdir operations.
1 parent adf8769 commit 9a2c546

1 file changed

Lines changed: 22 additions & 7 deletions

File tree

Tools/scripts/ftpmirror.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#! /ufs/guido/bin/sgi/python
1+
#! /usr/local/bin/python
22

33
# Mirror a remote ftp subtree into a local directory tree.
44
# Basic usage: ftpmirror [options] host remotedir localdir
@@ -98,7 +98,11 @@ def mirrorsubdir(f, localdir):
9898
pwd = f.pwd()
9999
if localdir and not os.path.isdir(localdir):
100100
if verbose: print 'Creating local directory', localdir
101-
makedir(localdir)
101+
try:
102+
makedir(localdir)
103+
except os.error, msg:
104+
print "Failed to establish local directory", localdir
105+
return
102106
infofilename = os.path.join(localdir, '.mirrorinfo')
103107
try:
104108
text = open(infofilename, 'r').read()
@@ -158,20 +162,21 @@ def mirrorsubdir(f, localdir):
158162
print 'Already have this version of', filename
159163
continue
160164
fullname = os.path.join(localdir, filename)
165+
tempname = os.path.join(localdir, '@'+filename)
161166
if interactive:
162167
doit = askabout('file', filename, pwd)
163168
if not doit:
164169
if not info.has_key(filename):
165170
info[filename] = 'Not retrieved'
166171
continue
167172
try:
168-
os.unlink(fullname)
173+
os.unlink(tempname)
169174
except os.error:
170175
pass
171176
try:
172-
fp = open(fullname, 'w')
177+
fp = open(tempname, 'w')
173178
except IOError, msg:
174-
print "Can't create %s: %s" % (fullname, str(msg))
179+
print "Can't create %s: %s" % (tempname, str(msg))
175180
continue
176181
if verbose:
177182
print 'Retrieving %s from %s as %s...' % \
@@ -190,6 +195,13 @@ def mirrorsubdir(f, localdir):
190195
fp.close()
191196
if fp1 != fp:
192197
fp1.close()
198+
try:
199+
os.rename(tempname, fullname)
200+
except os.error, msg:
201+
print "Can't rename %s to %s: %s" % (tempname,
202+
fullname,
203+
str(msg))
204+
continue
193205
info[filename] = infostuff
194206
writedict(info, infofilename)
195207
if verbose:
@@ -205,8 +217,11 @@ def mirrorsubdir(f, localdir):
205217
print
206218
#
207219
# Remove local files that are no longer in the remote directory
208-
if not localdir: names = os.listdir(os.curdir)
209-
else: names = os.listdir(localdir)
220+
try:
221+
if not localdir: names = os.listdir(os.curdir)
222+
else: names = os.listdir(localdir)
223+
except os.error:
224+
names = []
210225
for name in names:
211226
if name[0] == '.' or info.has_key(name) or name in subdirs:
212227
continue

0 commit comments

Comments
 (0)