in app/services/NewProjectBackup.scala [124:165]
def ascertainTarget(maybeSourceFileEntry:Option[FileEntry], maybePrevDestEntry:Option[FileEntry], destStorage:StorageEntry):Future[FileEntry] = {
logger.warn(s"In ascertainTarget. maybePrevDestEntry - ${maybePrevDestEntry}")
(maybeSourceFileEntry, maybePrevDestEntry) match {
case (Some(sourceEntry), Some(prevDestEntry))=>
logger.debug(s"${sourceEntry.filepath}: prevDestEntry is $prevDestEntry")
if(destStorage.supportsVersions) {
val intendedTarget = prevDestEntry.copy(id=None,
storageId=destStorage.id.get,
version = prevDestEntry.version+1,
mtime=Timestamp.from(Instant.now()),
atime=Timestamp.from(Instant.now()),
hasContent = false,
hasLink = true,
backupOf = sourceEntry.id) // check
findAvailableVersion(destStorage, intendedTarget)
.map(correctedTarget=>{
logger.debug(s"Destination storage ${destStorage.id} ${destStorage.rootpath} supports versioning, nothing will be over-written. Target version number is ${correctedTarget.version+1}")
correctedTarget
})
} else {
logger.warn(s"Backup destination storage ${destStorage.id} ${destStorage.rootpath} does not support versioning, so last backup will get over-written")
Future(prevDestEntry.copy(
mtime=Timestamp.from(Instant.now()),
atime=Timestamp.from(Instant.now())
))
}
case (Some(sourceEntry), None)=>
logger.debug(s"${sourceEntry.filepath}: no prev dest entry")
Future(
sourceEntry.copy(id=None,
storageId=destStorage.id.get,
version=1,
mtime=Timestamp.from(Instant.now()),
atime=Timestamp.from(Instant.now()),
hasContent=false,
hasLink=true,
backupOf = sourceEntry.id)
)
case (None, _)=>
throw new RuntimeException("Can't back up as source file was not found") //fail the Future
}
}