/// <summary> /// A method used to resolve a conflict. /// </summary> /// <param name="col">The collection containing the conflict.</param> /// <param name="node">The conflicting node.</param> /// <param name="localChangesWin">Set to <b>True</b> to overwrite the server node (or file) with the local node (or file), /// set to <b>False</b> to overwrite the local node (or file) with the server node (or file).</param> public static void Resolve(Collection col, Node node, bool localChangesWin) { Simias.Sync.Conflict conflict = new Simias.Sync.Conflict(col, node); if (conflict.IsFileNameConflict) { throw new Exception("Resolve must be called with a new file name in the case of a Name Conflict"); } else { conflict.Resolve(localChangesWin); } }
/// <summary> /// A method used to rename a conflicting (local) file and resolve the conflicted (server) file /// to the same name. /// </summary> /// <param name="col">The collection containing the conflict.</param> /// <param name="node">The conflicted node.</param> /// <param name="newFileName">The new name to assign to the conflicting file.</param> public static void RenameConflictingAndResolve(Collection col, Node node, string newFileName) { Simias.Sync.Conflict conflict = new Simias.Sync.Conflict(col, node); if ((conflict != null) && conflict.IsFileNameConflict) { conflict.RenameConflictingFile(newFileName); conflict.Resolve(Path.GetFileName(conflict.NonconflictedPath)); } else { throw new Exception("RenameConflictingAndResolve can only be called on a name collision conflict."); } }
/// <summary> /// A method used to resolve a name conflict. /// </summary> /// <param name="col">The collection containing the conflict.</param> /// <param name="node">The conflicting node.</param> /// <param name="newNodeName">The new name to assign the node (file).</param> public static void Resolve(Collection col, Node node, string newNodeName) { Simias.Sync.Conflict conflict = new Simias.Sync.Conflict(col, node); if (conflict.IsFileNameConflict) { conflict.Resolve(newNodeName); } else { throw new Exception("Resolve must be called with a boolean option of which version wins, server or local. This call is for Name conflicts"); } }
/// <summary> /// Remove the exitsing conflict for the file /// </summary> public void RemoveConflict(bool commit) { Node DiskNode = collection.GetNodeByID(node.ID); if (DiskNode != null && collection.HasCollisions(DiskNode)) { Log.log.Debug("Disk node has collisions for node:{0}", node.ID); Conflict conflict = new Simias.Sync.Conflict(collection, DiskNode); // version conflict if (collection.GetCollisionType(DiskNode) == CollisionType.Node) { //Since we got a new file from server to discard the old server file, always say localChangeswin=true conflict.Resolve(true); //localChangesWin(true) Log.log.Debug("Conflict removed for the disk node :{0}", node.ID); // Now decrement the local version which was incremented during conflict.Resolve() if (commit == false) { Log.log.Debug("Decrement the local version since commit is false for :{0}", node.ID); Property p = new Property(PropertyTags.Rollback, true); p.LocalProperty = true; DiskNode.Properties.ModifyProperty(p); //This commit will decremet the local incarnation and and remove the property node.Properties.State = PropertyList.PropertyListState.Update; collection.Commit(DiskNode); } } //Name conflict, For name conlfict open will fail, commit=true means(open succeded) name conflict already resolved /*else if(collection.GetCollisionType(DiskNode) == CollisionType.File) * { * //if(commit == true) * //conflict.RenameConflictingFile(true); //localChangesWin(true) * //Log.log.Debug("This is a Name Conflict .....not removed"); * }*/ } else { Log.log.Debug("Disk node has no collisions"); } }
public Conflict(Collection col, Node node) { iFolderID = col.ID; ConflictID = node.ID; Simias.Sync.Conflict conflict = new Simias.Sync.Conflict(col, node); if(conflict.IsFileNameConflict) { IsNameConflict = true; FileNode fileNode = node as FileNode; if (fileNode != null) { string name = Path.GetFileName(conflict.NonconflictedPath); if (name.Equals(Path.GetFileName(conflict.FileNameConflictPath))) { LocalName = name; LocalDate = fileNode.LastWriteTime.ToString(); LocalSize = formatFileSize(fileNode.Length); LocalFullPath = conflict.FileNameConflictPath; } else { ServerName = name; ServerDate = fileNode.LastWriteTime.ToString(); ServerSize = formatFileSize(fileNode.Length); ServerFullPath = conflict.NonconflictedPath; } } else { DirNode dn = node as DirNode; if (dn != null) { if (dn.Name.Equals(Path.GetFileName(conflict.FileNameConflictPath))) { LocalName = dn.Name; LocalDate = null; LocalSize = null; LocalFullPath = conflict.FileNameConflictPath; } else { ServerName = dn.Name; ServerDate = null; ServerSize = null; ServerFullPath = conflict.NonconflictedPath; } } } } else { IsNameConflict = false; FileNode localFileNode = new FileNode(node); Node serverNode = col.GetNodeFromCollision(node); FileNode serverFileNode = new FileNode(serverNode); LocalName = localFileNode.GetFileName(); LocalDate = localFileNode.LastWriteTime.ToString(); LocalSize = formatFileSize(localFileNode.Length); LocalFullPath = conflict.NonconflictedPath; ServerName = serverFileNode.GetFileName(); ServerDate = serverFileNode.LastWriteTime.ToString(); ServerSize = formatFileSize(serverFileNode.Length); ServerFullPath = conflict.UpdateConflictPath; } }
public static void Resolve(Collection col, Node node, string newNodeName) { Simias.Sync.Conflict conflict = new Simias.Sync.Conflict(col, node); if(conflict.IsFileNameConflict) { conflict.Resolve(newNodeName); } else throw new Exception("Resolve must be called with a boolean option of which version wins, server or local. This call is for Name conflicts"); }
public static void Resolve(Collection col, Node node, bool localChangesWin, string conflictBinPath) { Simias.Sync.Conflict conflict = new Simias.Sync.Conflict(col, node); if(conflict.IsFileNameConflict) { throw new Exception("Resolve must be called with a new file name in the case of a Name Conflict"); } else conflict.Resolve(localChangesWin, conflictBinPath); }
public static void RenameConflictingAndResolve(Collection col, Node node, string newFileName) { Simias.Sync.Conflict conflict = new Simias.Sync.Conflict(col, node); if ((conflict != null) && conflict.IsFileNameConflict) { conflict.RenameConflictingFile(newFileName); conflict.Resolve(Path.GetFileName(conflict.NonconflictedPath)); } else { throw new Exception("RenameConflictingAndResolve can only be called on a name collision conflict."); } }
/// <summary> /// Constructs a Conflict object. /// </summary> /// <param name="col">The collection containing the conflict.</param> /// <param name="node">The conflicting node.</param> public Conflict(Collection col, Node node) { iFolderID = col.ID; ConflictID = node.ID; Simias.Sync.Conflict conflict = new Simias.Sync.Conflict(col, node); if (conflict.IsFileNameConflict) { IsNameConflict = true; FileNode fileNode = node as FileNode; if (fileNode != null) { string name = Path.GetFileName(conflict.NonconflictedPath); if (name.Equals(Path.GetFileName(conflict.FileNameConflictPath))) { LocalName = name; LocalDate = fileNode.LastWriteTime.ToString(); LocalSize = formatFileSize(fileNode.Length); LocalFullPath = conflict.FileNameConflictPath; } else { ServerName = name; ServerDate = fileNode.LastWriteTime.ToString(); ServerSize = formatFileSize(fileNode.Length); ServerFullPath = conflict.NonconflictedPath; } } else { DirNode dn = node as DirNode; if (dn != null) { if (dn.Name.Equals(Path.GetFileName(conflict.FileNameConflictPath))) { LocalName = dn.Name; LocalDate = null; LocalSize = null; LocalFullPath = conflict.FileNameConflictPath; } else { ServerName = dn.Name; ServerDate = null; ServerSize = null; ServerFullPath = conflict.NonconflictedPath; } } } } else { IsNameConflict = false; FileNode localFileNode = new FileNode(node); Node serverNode = col.GetNodeFromCollision(node); FileNode serverFileNode = new FileNode(serverNode); LocalName = localFileNode.GetFileName(); LocalDate = localFileNode.LastWriteTime.ToString(); LocalSize = formatFileSize(localFileNode.Length); LocalFullPath = conflict.NonconflictedPath; ServerName = serverFileNode.GetFileName(); ServerDate = serverFileNode.LastWriteTime.ToString(); ServerSize = formatFileSize(serverFileNode.Length); ServerFullPath = conflict.UpdateConflictPath; } }