def retimestamp_and_index_file(inpath, outpath=None, retimestamp=None):
# no retimestamping needed
if retimestamp is None:
return index_file(inpath, outpath)
# retimestamp the input in place and index
elif retimestamp == 'inplace':
from flvlib.scripts.retimestamp_flv import retimestamp_file_inplace
log.debug("Retimestamping file `%s' in place", inpath)
# retimestamp the file inplace
if not retimestamp_file_inplace(inpath):
log.error("Failed to retimestamp `%s' in place", inpath)
return False
return index_file(inpath, outpath)
# retimestamp the input into a temporary file
elif retimestamp == 'atomic':
from flvlib.scripts.retimestamp_flv import retimestamp_file_atomically
log.debug("Retimestamping file `%s' atomically", inpath)
try:
fd, temppath = tempfile.mkstemp()
os.close(fd)
# preserve the permission bits
shutil.copymode(inpath, temppath)
except EnvironmentError, (errno, strerror):
log.error("Failed to create temporary file: %s", strerror)
return False
if not retimestamp_file_atomically(inpath, temppath):
log.error("Failed to retimestamp `%s' atomically", inpath)
# remove the temporary files
force_remove(temppath)
return False
# index the temporary file
if not index_file(temppath, outpath):
force_remove(temppath)
return False
if not outpath:
# If we were not writing directly to the output file
# we need to overwrite the original
try:
shutil.move(temppath, inpath)
except EnvironmentError, (errno, strerror):
log.error("Failed to overwrite the original file with the "
"retimestamped and indexed version: %s", strerror)
return False
else:
# if we were writing directly to the output file we need to remove
# the retimestamped temporary file
force_remove(temppath)
return True
评论列表
文章目录