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

View File

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

View File

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