Merge from trunk

This commit is contained in:
Charles Haley 2010-08-12 15:58:21 +01:00
commit 5158e9ca2a

View File

@ -419,7 +419,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
for format in formats: for format in formats:
# Get data as string (can't use file as source and target files may be the same) # Get data as string (can't use file as source and target files may be the same)
f = self.format(id, format, index_is_id=True, as_file=False) f = self.format(id, format, index_is_id=True, as_file=False)
if not f: if not f:
continue continue
stream = cStringIO.StringIO(f) stream = cStringIO.StringIO(f)
self.add_format(id, format, stream, index_is_id=True, path=tpath) self.add_format(id, format, stream, index_is_id=True, path=tpath)
@ -430,11 +430,12 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
if current_path and os.path.exists(spath): if current_path and os.path.exists(spath):
if self.normpath(spath) != self.normpath(tpath): if self.normpath(spath) != self.normpath(tpath):
self.rmtree(spath, permanent=True) self.rmtree(spath, permanent=True)
parent = os.path.dirname(spath) parent = os.path.dirname(spath)
if len(os.listdir(parent)) == 0: if len(os.listdir(parent)) == 0:
self.rmtree(parent, permanent=True) self.rmtree(parent, permanent=True)
curpath = self.library_path curpath = self.library_path
if not self.is_case_sensitive: c1, c2 = current_path.split('/'), path.split('/')
if not self.is_case_sensitive and len(c1) == len(c2):
# On case-insensitive systems, title and author renames that only # On case-insensitive systems, title and author renames that only
# change case don't cause any changes to the directories in the file # change case don't cause any changes to the directories in the file
# system. This can lead to having the directory names not match the # system. This can lead to having the directory names not match the
@ -444,12 +445,12 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
# the segment to some temp file name, then rename it back to the # the segment to some temp file name, then rename it back to the
# correct name. Note that the code above correctly handles files in # correct name. Note that the code above correctly handles files in
# the directories, so no need to do them here. # the directories, so no need to do them here.
for oldseg,newseg in zip(current_path.split('/'), path.split('/')): for oldseg, newseg in zip(c1, c2):
if oldseg.lower() == newseg.lower() and oldseg != newseg: if oldseg.lower() == newseg.lower() and oldseg != newseg:
while True: while True:
# need a temp name in the current segment for renames # need a temp name in the current segment for renames
tempname = 'TEMP.%f'%time.time() tempname = os.path.join(curpath, 'TEMP.%f'%time.time())
if not os.path.exists(os.path.join(curpath, tempname)): if not os.path.exists(tempname):
break break
os.rename(os.path.join(curpath, oldseg), tempname) os.rename(os.path.join(curpath, oldseg), tempname)
os.rename(tempname, os.path.join(curpath, newseg)) os.rename(tempname, os.path.join(curpath, newseg))