FileNode: Add Undeleted state. This fixes test_MoveToSubdirAndRestore.

This commit is contained in:
2018-05-05 22:18:37 +02:00
parent b4608dfcac
commit 90de728726
3 changed files with 26 additions and 15 deletions

View File

@@ -2,12 +2,12 @@
#include <stdlib.h>
#include <string.h>
#include "util.h"
#include "crc.h"
#include "fileutil.h"
#include "filenode.h"
#include "actionfilenode.h"
#include "actionfilenodesync.h"
#include "crc.h"
#include "filenode.h"
#include "fileutil.h"
#include "util.h"
#define MaxDeltaTime 0
@@ -96,6 +96,12 @@ void AccionFileNode_SyncPair(FileNode fileNodeLeft, FileNode fileNodeRight,
if (fileNodeRight->status == FileStatus_Deleted &&
fileNodeLeft->status == FileStatus_Deleted) {
actionFileNodeNew->action = ActionFileCmp_Nothing;
} else if (fileNodeLeft->status == FileStatus_Undeleted &&
fileNodeRight->status == FileStatus_Deleted) {
actionFileNodeNew->action = ActionFileCmp_LeftToRight;
} else if (fileNodeLeft->status == FileStatus_Deleted &&
fileNodeRight->status == FileStatus_Undeleted) {
actionFileNodeNew->action = ActionFileCmp_RightToLeft;
} else if (fileNodeRight->status == FileStatus_Deleted) {
actionFileNodeNew->action = ActionFileCmp_DeleteLeft;
} else if (fileNodeLeft->status == FileStatus_Deleted) {
@@ -161,6 +167,12 @@ void AccionFileNode_SyncPair(FileNode fileNodeLeft, FileNode fileNodeRight,
if (fileNodeRight->status == FileStatus_Deleted &&
fileNodeLeft->status == FileStatus_Deleted) {
actionFileNodeNew->action = ActionFileCmp_Nothing;
} else if (fileNodeLeft->status == FileStatus_Undeleted &&
fileNodeRight->status == FileStatus_Deleted) {
actionFileNodeNew->action = ActionFileCmp_LeftToRight;
} else if (fileNodeLeft->status == FileStatus_Deleted &&
fileNodeRight->status == FileStatus_Undeleted) {
actionFileNodeNew->action = ActionFileCmp_RightToLeft;
} else if (fileNodeRight->status == FileStatus_Deleted) {
actionFileNodeNew->action = ActionFileCmp_DeleteLeft;
} else if (fileNodeLeft->status == FileStatus_Deleted) {

View File

@@ -105,12 +105,7 @@ FileNode FileNode_GetRoot(FileNode fileNode) {
void FileNode_SetStatusRec(FileNode fileNode, FileStatus status) {
FileNode fileNodeChild;
if (status == FileStatus_Deleted && fileNode->status != status) {
FileNode fileNodeRoot = FileNode_GetRoot(fileNode);
fileNode->fileTime = fileNodeRoot->fileTime;
;
fileNode->flags |= FileFlag_HasTime;
}
fileNode->status = status;
fileNodeChild = fileNode->child;
while (fileNodeChild) {
@@ -384,7 +379,10 @@ void FileNode_PrintNode(FileNode fileNode) {
Print(" Modified");
}
if (fileNode->status == FileStatus_Deleted) {
Print(" Deleted!!!");
Print(" Deleted");
}
if (fileNode->status == FileStatus_Undeleted) {
Print(" Undeleted");
}
Print("\n");
@@ -497,7 +495,7 @@ FileNode FileNode_Refresh(FileNode fileNode, char *filePath) {
// Check directory data
fileTime = FileTime_Get(filePath);
if (fileNode->status == FileStatus_Deleted) {
fileNode->status = FileStatus_Modified;
fileNode->status = FileStatus_Undeleted;
fileNode->fileTime = fileTime;
}
if (!(fileNode->flags & FileFlag_Directory)) {
@@ -533,7 +531,7 @@ FileNode FileNode_Refresh(FileNode fileNode, char *filePath) {
// Comprar datos de los ficheros
File_GetSizeAndTime(filePath, &size, &fileTime);
if (fileNode->status == FileStatus_Deleted) {
fileNode->status = FileStatus_Modified;
fileNode->status = FileStatus_Undeleted;
fileNode->fileTime = fileTime;
}
if (!(fileNode->flags & FileFlag_Normal)) {

View File

@@ -5,7 +5,7 @@
#define FileNode_Filename "nodesFile.fs"
#define FileNode_Version 4
#define FileNode_Version 5
#define FileFlag_Root 1
#define FileFlag_Normal 2
@@ -20,7 +20,8 @@ typedef enum EFileStatus {
FileStatus_None,
FileStatus_New,
FileStatus_Modified,
FileStatus_Deleted
FileStatus_Deleted,
FileStatus_Undeleted
} FileStatus;
typedef struct TFileNode TFileNode, *FileNode;