diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-08-02 13:50:08 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-08-02 18:43:28 +0200 |
commit | 49bc432662cb952dc0b2604ff729d1e5931eb6bd (patch) | |
tree | ac462b7dab26151e82768302f3137531e9d58be2 /main/Test.hs | |
parent | 8b4e0de1aa5a9f1e2da66ba9ab89f24040f6aded (diff) |
Function to compute symmetric difference between stored histories
Diffstat (limited to 'main/Test.hs')
-rw-r--r-- | main/Test.hs | 14 |
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 |