Skip to content

Commit

Permalink
Treat remote livemarks and diverged queries as non-syncable.
Browse files Browse the repository at this point in the history
  • Loading branch information
linabutler committed Feb 23, 2019
1 parent 7758dec commit 6289e75
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions src/merge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use std::{collections::{HashMap, HashSet, VecDeque},
use crate::driver::{DefaultDriver, Driver};
use crate::error::{ErrorKind, Result};
use crate::guid::{Guid, IsValidGuid};
use crate::tree::{Content, MergeState, MergedNode, Node, Tree, Validity};
use crate::tree::{Content, Kind, MergeState, MergedNode, Node, Tree, Validity};

/// Structure change types, used to indicate if a node on one side is moved
/// or deleted on the other.
Expand Down Expand Up @@ -824,7 +824,7 @@ impl <'t, D: Driver> Merger<'t, D> {
return Ok(StructureChange::Unchanged);
}

if !remote_node.is_syncable() {
if !remote_node_is_syncable(&remote_node) {
// If the remote node is known to be non-syncable, we unconditionally
// delete it from the server, even if it's syncable locally.
self.delete_remotely.insert(remote_node.guid.clone());
Expand Down Expand Up @@ -951,7 +951,7 @@ impl <'t, D: Driver> Merger<'t, D> {

if !self.remote_tree.is_deleted(&local_node.guid) {
if let Some(remote_node) = self.remote_tree.node_for_guid(&local_node.guid) {
if !remote_node.is_syncable() {
if !remote_node_is_syncable(&remote_node) {
// The local node is syncable, but the remote node is non-syncable.
// This can happen if we applied an orphaned left pane query in a
// previous sync, and later saw the left pane root on the server.
Expand Down Expand Up @@ -1323,3 +1323,15 @@ impl <'t, D: Driver> Merger<'t, D> {
}
}
}

/// ...
fn remote_node_is_syncable<'t>(remote_node: &Node) -> bool {
if !remote_node.is_syncable() {
return false;
}
match remote_node.kind {
Kind::Livemark => false,
Kind::Query if remote_node.diverged() => false,
_ => true
}
}

0 comments on commit 6289e75

Please sign in to comment.