"""Algorithm that transform an a broken/old bibdoc into a coherent one:
i.e. the corresponding folder will have files named after the bibdoc
name. Proper .recid, .type, .md5 files will be created/updated.
In case of more than one file with the same format revision a new bibdoc
will be created in order to put does files.
Returns the list of newly created bibdocs if any.
"""
bibdoc=self.get_bibdoc(docname)
versions={}
res=[]
new_bibdocs=[]# List of files with the same version/format of
# existing file which need new bibdoc.
counter=0
zero_version_bug=False
ifos.path.exists(bibdoc.basedir):
forfilenameinos.listdir(bibdoc.basedir):
iffilename[0]!='.'and';'infilename:
name,version=filename.split(';')
try:
version=int(version)
exceptValueError:
# Strange name
register_exception()
raiseInvenioWebSubmitFileError,"A file called %s exists under %s. This is not a valid name. After the ';' there must be an integer representing the file revision. Please, manually fix this file either by renaming or by deleting it."%(filename,bibdoc.basedir)
raiseInvenioWebSubmitFileError,"Error in renaming '%s' to '%s': '%s'"%('%s/%s'%(bibdoc.basedir,filename),'%s/%s'%(bibdoc.basedir,new_name),e)
ifversions[version].has_key(format):
new_bibdocs.append((new_name,version))
else:
versions[version][format]=new_name
counter+=1
eliffilename[0]!='.':
# Strange name
register_exception()
raiseInvenioWebSubmitFileError,"A file called %s exists under %s. This is not a valid name. There should be a ';' followed by an integer representing the file revision. Please, manually fix this file either by renaming or by deleting it."%(filename,bibdoc.basedir)
raiseInvenioWebSubmitFileError,"A file for docname '%s' for the recid '%s' already exists for the format '%s'"%(self.docname,self.recid,docfile.get_format())