fix up all the dumb bugs I introduced and clearly never tested when I tweaked the remove file/dir after if you move files on the FS out from under PA

This commit is contained in:
2021-09-21 00:37:39 +10:00
parent 79c7e5a2a8
commit 9f90cdaaac

View File

@@ -854,17 +854,17 @@ def ResetExistsOnFS(job, path):
####################################################################################################################################
def RemoveEmtpyDirFromFS( job, del_me ):
try:
os.rmdir( del_me.FullPathOnFS() )
os.rmdir( del_me.PathOnFS() )
except Exception as e:
print( f"ERROR: Failed to remove file from filesystem - which={del_me.name}, err: {e}")
print( f"ERROR: Failed to remove dir from filesystem - which={del_me.PathOnFS()}, err: {e}")
return
def RemoveEmptyDirFromDB( job, del_me ):
session.query(EntryDirLink).filter(EntryDirLink.entry_id==del_me.id).delete()
session.query(PathDirLink).filter(PathDirLink.dir_eid==del_me.id).delete()
session.query(Dir).filter(Dir.eid==del_me.id).delete()
session.query(Entry).filter(Entry.id==del_me.id).delete()
AddLogForJob( job, f"INFO: Removing {del_me.name} from system as removing duplicates has left it empty" )
session.query(EntryDirLink).filter(EntryDirLink.entry_id==del_me.eid).delete()
session.query(PathDirLink).filter(PathDirLink.dir_eid==del_me.eid).delete()
session.query(Dir).filter(Dir.eid==del_me.eid).delete()
session.query(Entry).filter(Entry.id==del_me.eid).delete()
AddLogForJob( job, f"INFO: Removing {del_me.PathOnFS()} from system as removing duplicates has left it empty" )
return
####################################################################################################################################
@@ -874,20 +874,20 @@ def RemoveEmptyDirFromDB( job, del_me ):
####################################################################################################################################
def CleanUpDirInDB(job, d):
session.commit()
print( f"CleanUpDirInDB(): checking dir: {d.name} ({d.id})" )
content = session.query(Entry).join(EntryDirLink).filter(EntryDirLink.dir_eid==d.id).first()
print( f"CleanUpDirInDB(): checking dir: {d.PathOnFS()} ({d.eid})" )
content = session.query(Entry).join(EntryDirLink).filter(EntryDirLink.dir_eid==d.eid).first()
if not content:
print( f" Dir {d.name} - {d.id} is empty - removing it" )
print( f" Dir {d.PathOnFS()} - {d.eid} is empty - removing it" )
# get an Entry from DB (in_dir is a Dir)
parent_dir = session.query(Entry).get(d.in_dir.eid)
# okay remove this empty dir
RemoveEmtpyDirFromFS( job, d )
RemoveEmptyDirFromDB( job, d)
print( f" Dir {d.name} is in {parent_dir.name} ({parent_dir.id}) -> check next" )
print( f" Dir {d.PathOnFS()} is in {parent_dir.PathOnFS()} ({parent_dir.eid}) -> check next" )
# check to see if removing the empty dir has left the parent dir empty
CleanUpDirInDB(job, parent_dir)
else:
print( f"There is content (first entry: {content.name}) in {d.name} - finished for this dir" )
print( f"There is content (first entry: {content.name}) in {d.PathOnFS()} - finished for this dir" )
return
####################################################################################################################################
@@ -897,9 +897,13 @@ def CleanUpDirInDB(job, d):
def RemoveFileFromDB(job, del_me):
parent_dir=del_me.in_dir
session.query(EntryDirLink).filter(EntryDirLink.entry_id==del_me.id).delete()
connected_faces=session.query(FaceFileLink).filter(FaceFileLink.file_eid==del_me.id).all()
for ffl in connected_faces:
session.query(FaceRefimgLink).filter(FaceRefimgLink.face_id==ffl.face_id).delete()
session.query(Face).filter(Face.id==ffl.face_id).delete()
session.query(File).filter(File.eid==del_me.id).delete()
session.query(Entry).filter(Entry.id==del_me.id).delete()
AddLogForJob( job, f"INFO: Removing {rm.name} from system as it is no longer on the file system")
AddLogForJob( job, f"INFO: Removing {del_me.name} from system as it is no longer on the file system")
CleanUpDirInDB(job, parent_dir)
return
@@ -1058,7 +1062,7 @@ def HandleAnyFSDeletions(job):
RemoveFileFromDB(job, rm)
rm_cnt+=1
rmdirs = session.query(Entry).filter(Entry.exists_on_fs==False,Entry.type_id==1).order_by(Entry.id.desc()).all()
rmdirs = session.query(Entry).filter(Entry.exists_on_fs==False,Entry.type_id==dtype.id).order_by(Entry.id.desc()).all()
for rmdir in rmdirs:
RemoveFileFromDB(job, rmdir)
rm_cnt+=1