summaryrefslogtreecommitdiff
path: root/main/Test.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-08-02 13:50:08 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2025-08-02 18:43:28 +0200
commit49bc432662cb952dc0b2604ff729d1e5931eb6bd (patch)
treeac462b7dab26151e82768302f3137531e9d58be2 /main/Test.hs
parent8b4e0de1aa5a9f1e2da66ba9ab89f24040f6aded (diff)
Function to compute symmetric difference between stored histories
Diffstat (limited to 'main/Test.hs')
-rw-r--r--main/Test.hs14
1 files changed, 14 insertions, 0 deletions
diff --git a/main/Test.hs b/main/Test.hs
index ac76494..fd6258d 100644
--- a/main/Test.hs
+++ b/main/Test.hs
@@ -271,6 +271,7 @@ commands =
, ( "stored-roots", cmdStoredRoots )
, ( "stored-set-add", cmdStoredSetAdd )
, ( "stored-set-list", cmdStoredSetList )
+ , ( "stored-difference", cmdStoredDifference )
, ( "head-create", cmdHeadCreate )
, ( "head-replace", cmdHeadReplace )
, ( "head-watch", cmdHeadWatch )
@@ -388,6 +389,19 @@ cmdStoredSetList = do
cmdOut $ "stored-set-item" ++ concatMap ((' ':) . show . refDigest . storedRef) item
cmdOut $ "stored-set-done"
+cmdStoredDifference :: Command
+cmdStoredDifference = do
+ st <- asks tiStorage
+ ( trefs1, "|" : trefs2 ) <- span (/= "|") <$> asks tiParams
+
+ let loadObjs = mapM (maybe (fail "invalid ref") (return . wrappedLoad @Object) <=< liftIO . readRef st . encodeUtf8)
+ objs1 <- loadObjs trefs1
+ objs2 <- loadObjs trefs2
+
+ forM_ (storedDifference objs1 objs2) $ \item -> do
+ cmdOut $ "stored-difference-item " ++ (show $ refDigest $ storedRef item)
+ cmdOut $ "stored-difference-done"
+
cmdHeadCreate :: Command
cmdHeadCreate = do
[ ttid, tref ] <- asks tiParams