mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
786a30333e
commit
b68ac88544
|
@ -142,8 +142,8 @@ metaDataEntries = do
|
||||||
)
|
)
|
||||||
$ examples [qc|
|
$ examples [qc|
|
||||||
|
|
||||||
(hbs2:tree:metadata:get :parsed 7J2BZYskBjmDsWZHvVoGGorZDrFYkbbQweRauaYGSTNd)
|
(hbs2:tree:metadata:get 7J2BZYskBjmDsWZHvVoGGorZDrFYkbbQweRauaYGSTNd)
|
||||||
(dict (mime-type: "text/plain; charset=us-ascii") (file-name: "qqq.txt"))
|
((mime-type: "text/plain; charset=us-ascii") (file-name: "qqq.txt"))
|
||||||
|
|
||||||
(hbs2:tree:metadata:get :raw 7J2BZYskBjmDsWZHvVoGGorZDrFYkbbQweRauaYGSTNd
|
(hbs2:tree:metadata:get :raw 7J2BZYskBjmDsWZHvVoGGorZDrFYkbbQweRauaYGSTNd
|
||||||
mime-type: "text/plain; charset=us-ascii"
|
mime-type: "text/plain; charset=us-ascii"
|
||||||
|
@ -151,7 +151,7 @@ file-name: "qqq.txt"
|
||||||
|]
|
|]
|
||||||
$ entry $ bindMatch "hbs2:tree:metadata:get"
|
$ entry $ bindMatch "hbs2:tree:metadata:get"
|
||||||
$ \case
|
$ \case
|
||||||
[ SymbolVal how, StringLike hash ] -> do
|
[ StringLike hash ] -> do
|
||||||
|
|
||||||
r <- flip runContT pure do
|
r <- flip runContT pure do
|
||||||
|
|
||||||
|
@ -187,18 +187,17 @@ file-name: "qqq.txt"
|
||||||
|
|
||||||
_ -> mzero
|
_ -> mzero
|
||||||
|
|
||||||
case (how, r) of
|
maybe1 r (pure nil) $ \case
|
||||||
("parsed", Just (LitStrVal r0)) -> do
|
TextLike r0 -> do
|
||||||
|
|
||||||
|
|
||||||
let xs = parseTop r0
|
let xs = parseTop r0
|
||||||
& either mempty (fmap fixContext)
|
& either mempty (fmap fixContext)
|
||||||
|
|
||||||
pure $ mkForm "dict" xs
|
pure $ mkList xs
|
||||||
|
|
||||||
_ -> pure $ fromMaybe nil r
|
_ -> pure $ fromMaybe nil r
|
||||||
|
|
||||||
_ -> throwIO (BadFormException @c nil)
|
_ -> throwIO (BadFormException @c nil)
|
||||||
|
|
||||||
brief "creates a merkle tree with metadata"
|
brief "creates a merkle tree with metadata"
|
||||||
$ returns "string" "hash"
|
$ returns "string" "hash"
|
||||||
|
@ -220,23 +219,22 @@ $ echo TEST | hbs2-cli hbs2:tree:metadata:create :stdin
|
||||||
|
|
||||||
;; empty metadata
|
;; empty metadata
|
||||||
|
|
||||||
hbs2-cli hbs2:tree:metadata:get :raw 7dGqTtoehsgn7bADcVTyp93tq2FfuQgtBuVvYL46jdyz
|
hbs2-cli hbs2:tree:metadata:get 7dGqTtoehsgn7bADcVTyp93tq2FfuQgtBuVvYL46jdyz
|
||||||
|
|
||||||
Create merkle tree with custom metadata
|
Create merkle tree with custom metadata
|
||||||
|
|
||||||
$ echo TEST | hbs2-cli hbs2:tree:metadata:create :stdin [kw hello world]
|
$ echo TEST | hbs2-cli hbs2:tree:metadata:create :stdin [kw hello world]
|
||||||
2ASBLBPRUMrHoSkNYsRWwJQiiXuSGDZTaCXAdDTdeJY6
|
2ASBLBPRUMrHoSkNYsRWwJQiiXuSGDZTaCXAdDTdeJY6
|
||||||
|
|
||||||
$ hbs2-cli hbs2:tree:metadata:get :raw 2ASBLBPRUMrHoSkNYsRWwJQiiXuSGDZTaCXAdDTdeJY6
|
$ hbs2-cli hbs2:tree:metadata:get 2ASBLBPRUMrHoSkNYsRWwJQiiXuSGDZTaCXAdDTdeJY6
|
||||||
hello: "world"
|
hello: "world"
|
||||||
|
|
||||||
|
$ hbs2-cli hbs2:tree:metadata:get 7YyWZ44sWpHvrqnFxL8G8HJo4o4p659diusZoHyhXCTx
|
||||||
|
((mime-type: "text/plain; charset=us-ascii") (file-name: "MetaData.hs"))
|
||||||
|
|
||||||
$ hbs2-cli hbs2:tree:metadata:create :auto ./lambda.svg
|
$ hbs2-cli hbs2:tree:metadata:create :auto ./lambda.svg
|
||||||
3fv5ym8NhY8zat37NaTvY9PDcwJqMLUD73ewHxtHysWg
|
3fv5ym8NhY8zat37NaTvY9PDcwJqMLUD73ewHxtHysWg
|
||||||
|
|
||||||
$ hbs2-cli hbs2:tree:metadata:get :raw 3fv5ym8NhY8zat37NaTvY9PDcwJqMLUD73ewHxtHysWg
|
|
||||||
mime-type: "image/svg+xml; charset=us-ascii"
|
|
||||||
file-name: "lambda.svg"
|
|
||||||
|
|
||||||
Create encrypted tree metadata with a new groupkey
|
Create encrypted tree metadata with a new groupkey
|
||||||
|
|
||||||
$ hbs2-cli [define pks [list EiwWxY3xwTfnLKJdzzxNMZgA2ZvYAZd9e8B8pFeCtnrn]] \
|
$ hbs2-cli [define pks [list EiwWxY3xwTfnLKJdzzxNMZgA2ZvYAZd9e8B8pFeCtnrn]] \
|
||||||
|
@ -253,7 +251,7 @@ GixS4wssCD4x7LzvHve2JhFCghW1Hwia2tiGTfTTef1u
|
||||||
|
|
||||||
Check metadata
|
Check metadata
|
||||||
|
|
||||||
$ hbs2-cli hbs2:tree:metadata:get :raw BFLcbpNEqngsJ8gzx3ps4ETXfpUMGgjEETNEVgR18KG4y
|
$ hbs2-cli hbs2:tree:metadata:get BFLcbpNEqngsJ8gzx3ps4ETXfpUMGgjEETNEVgR18KG4y
|
||||||
|
|
||||||
mime-type: "image/svg+xml; charset=us-ascii"
|
mime-type: "image/svg+xml; charset=us-ascii"
|
||||||
file-name: "lambda.svg"
|
file-name: "lambda.svg"
|
||||||
|
@ -272,12 +270,12 @@ $ hbs2-cli hbs2:groupkey:list-public-keys [hbs2:groupkey:load GixS4wssCD4x7LzvHv
|
||||||
|
|
||||||
SymbolVal "auto" -> pure [Auto]
|
SymbolVal "auto" -> pure [Auto]
|
||||||
|
|
||||||
ListVal (SymbolVal "dict" : [ListVal [SymbolVal "encrypted", StringLike key]])
|
ListVal [ListVal [SymbolVal "encrypted", StringLike key]]
|
||||||
-> do
|
-> do
|
||||||
pure [Encrypted key]
|
pure [Encrypted key]
|
||||||
|
|
||||||
ListVal (SymbolVal "dict" : w) -> do
|
ListVal ws -> do
|
||||||
pure [MetaDataEntry x y | ListVal [SymbolVal x, StringLike y] <- w ]
|
pure [MetaDataEntry x y | ListVal [SymbolVal x, StringLike y] <- ws ]
|
||||||
|
|
||||||
StringLike rest -> do
|
StringLike rest -> do
|
||||||
pure [MetaDataFile rest]
|
pure [MetaDataFile rest]
|
||||||
|
|
|
@ -7,6 +7,8 @@ import HBS2.CLI.Run.Internal
|
||||||
import HBS2.CLI.Run.Internal.GroupKey as G
|
import HBS2.CLI.Run.Internal.GroupKey as G
|
||||||
import HBS2.CLI.Run.Internal.Merkle
|
import HBS2.CLI.Run.Internal.Merkle
|
||||||
|
|
||||||
|
import HBS2.Defaults
|
||||||
|
|
||||||
import HBS2.Data.Types.Refs
|
import HBS2.Data.Types.Refs
|
||||||
import HBS2.Merkle
|
import HBS2.Merkle
|
||||||
import HBS2.System.Dir
|
import HBS2.System.Dir
|
||||||
|
@ -45,3 +47,18 @@ treeEntries = do
|
||||||
_ -> throwIO (BadFormException @c nil)
|
_ -> throwIO (BadFormException @c nil)
|
||||||
|
|
||||||
|
|
||||||
|
brief "reads merkle tree data from storage"
|
||||||
|
$ args [arg "list of hashes" "trees"]
|
||||||
|
$ desc [qc|hbs2:grove creates a 'grove' - merkle tree of list of hashes of merkle trees
|
||||||
|
It's just an easy way to create a such thing, you may browse it by hbs2 cat -H
|
||||||
|
|]
|
||||||
|
$ returns "hash" "string"
|
||||||
|
$ entry $ bindMatch "hbs2:grove" $ \case
|
||||||
|
HashLikeList hashes@(x:_) -> lift do
|
||||||
|
sto <- getStorage
|
||||||
|
let pt = toPTree (MaxSize defHashListChunk) (MaxNum defTreeChildNum) hashes
|
||||||
|
mkSym . show . pretty <$> liftIO (makeMerkle 0 pt $ \(_,_,bss) -> do
|
||||||
|
void $ putBlock sto bss)
|
||||||
|
|
||||||
|
_ -> throwIO (BadFormException @c nil)
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ import Codec.Serialise(serialise)
|
||||||
import Data.Map (Map)
|
import Data.Map (Map)
|
||||||
import Data.Map qualified as Map
|
import Data.Map qualified as Map
|
||||||
import Data.Data
|
import Data.Data
|
||||||
|
import Data.Maybe
|
||||||
import Data.Text qualified as Text
|
import Data.Text qualified as Text
|
||||||
|
|
||||||
class RefMetaData a where
|
class RefMetaData a where
|
||||||
|
@ -144,5 +145,15 @@ pattern HashLike x <- (
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
-> Just x )
|
-> Just x )
|
||||||
|
|
||||||
|
pattern HashLikeList :: forall {c} . [HashRef] -> [Syntax c]
|
||||||
|
pattern HashLikeList e <- (hashLikeList -> e)
|
||||||
|
|
||||||
|
hashLikeList :: [Syntax c] -> [HashRef]
|
||||||
|
hashLikeList syn = [ hashLike s | s <- syn ] & takeWhile isJust & catMaybes
|
||||||
|
|
||||||
|
hashLike :: Syntax c -> Maybe HashRef
|
||||||
|
hashLike = \case
|
||||||
|
HashLike x -> Just x
|
||||||
|
_ -> Nothing
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1439,8 +1439,7 @@ internalEntries = do
|
||||||
_ -> pure $ mkBool False
|
_ -> pure $ mkBool False
|
||||||
|
|
||||||
entry $ bindMatch "not" $ \case
|
entry $ bindMatch "not" $ \case
|
||||||
[w] -> do
|
[w] -> pure (mkBool (isTrue w))
|
||||||
pure $ if isFalse w then mkBool True else mkBool False
|
|
||||||
_ -> throwIO (BadFormException @c nil)
|
_ -> throwIO (BadFormException @c nil)
|
||||||
|
|
||||||
brief "get system environment"
|
brief "get system environment"
|
||||||
|
|
Loading…
Reference in New Issue