]> code.delx.au - offlineimap/commitdiff
A bit of work on sync stuff
authorJohn Goerzen <jgoerzen@complete.org>
Thu, 29 May 2008 08:31:42 +0000 (03:31 -0500)
committerJohn Goerzen <jgoerzen@complete.org>
Thu, 29 May 2008 08:31:42 +0000 (03:31 -0500)
src/Data/Syncable.hs
testsrc/runtests.hs

index 69841c44d58da1a6fb4340b0958140ee85d455bc..b076c80ef1e1f1236bb765c61826e29fda0c2421 100644 (file)
@@ -216,3 +216,17 @@ unaryApplyChanges collection commands =
         makeChange collection (ModifyContent key val) =
             Map.adjust (\_ -> val) key collection
     in foldl makeChange collection commands
+
+{- | Given the base input and a ModifyContent command, convert this to
+commands to sync.  Ignores anything that is not a ModifyContent command
+by returning an empty list. -}
+modifyToSync :: (Eq k, Ord k, Show k) =>
+                SyncCollection k v
+             -> SyncCommand k v
+             -> [SyncCommand k v]
+modifyToSync base (ModifyContent k v) =
+    case Map.lookup k base of
+      Nothing -> error $ "modifyToSync: attempt to modify on unknown base key " ++ show k
+      Just basev ->
+          diffCollection basev v
+modifyToSync _ _ = []
index 0b7f44aba397cb0bb42463f8a6a19af398f6503c..5d5312e850e7f92da78858c51fcf2288c8aae4ab 100644 (file)
@@ -185,6 +185,13 @@ prop_diffCollection coll1 coll2 =
         newcoll2 = unaryApplyChanges coll1 commands
         in coll2 @=? newcoll2
 
+prop_modifyToSyncSimple :: SyncCollection Int Word8 -> Word8 -> Result
+prop_modifyToSyncSimple base newv
+    | Map.empty base = True @=? True
+    | otherwise = ([], [], [ModifyContent @=?
+    where k = fst . head . Map.toList base
+prop_modifyToSync 
+
 q :: Testable a => String -> a -> HU.Test
 q = qccheck (defaultConfig {configMaxTest = 250})