mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
ce7c1f37c0
commit
e702f3609f
|
@ -38,7 +38,6 @@ commands :: GitPerks m => Parser (GitCLI m ())
|
|||
commands =
|
||||
hsubparser ( command "export" (info pExport (progDesc "export repo to hbs2-git"))
|
||||
<> command "import" (info pImport (progDesc "import repo from reflog"))
|
||||
<> command "subscribe" (info pSubscribe (progDesc "subscribe to repo"))
|
||||
<> command "key" (info pKey (progDesc "key management"))
|
||||
<> command "tools" (info pTools (progDesc "misc tools"))
|
||||
)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{-# Language TemplateHaskell #-}
|
||||
{-# Language UndecidableInstances #-}
|
||||
module HBS2.Git.Client.App.Types.GitEnv where
|
||||
|
||||
import HBS2.Git.Client.Prelude hiding (info)
|
||||
|
@ -23,6 +24,12 @@ data ExportEncryption =
|
|||
|
||||
type Config = [Syntax C]
|
||||
|
||||
class Monad m => HasProgressIndicator m where
|
||||
getProgressIndicator :: m AnyProgress
|
||||
|
||||
class HasAPI api proto m where
|
||||
getAPI :: m (ServiceCaller api proto)
|
||||
|
||||
data GitEnv =
|
||||
GitEnv
|
||||
{ _gitTraceEnabled :: Bool
|
||||
|
@ -42,4 +49,19 @@ data GitEnv =
|
|||
, _keyringCache :: TVar (HashMap HashRef [KeyringEntry HBS2Basic])
|
||||
}
|
||||
|
||||
instance (Monad m, MonadReader GitEnv m) => HasProgressIndicator m where
|
||||
getProgressIndicator = asks _progress
|
||||
|
||||
instance MonadReader GitEnv m => HasStorage m where
|
||||
getStorage = asks _storage
|
||||
|
||||
instance MonadReader GitEnv m => HasAPI PeerAPI UNIX m where
|
||||
getAPI = asks _peerAPI
|
||||
|
||||
instance MonadReader GitEnv m => HasAPI LWWRefAPI UNIX m where
|
||||
getAPI = asks _lwwRefAPI
|
||||
|
||||
instance MonadReader GitEnv m => HasAPI RefLogAPI UNIX m where
|
||||
getAPI = asks _refLogAPI
|
||||
|
||||
makeLenses 'GitEnv
|
||||
|
|
|
@ -148,7 +148,11 @@ storeNewGK0 = do
|
|||
epoch <- getEpoch
|
||||
writeAsMerkle sto (serialise gk) <&> HashRef <&> (,epoch)
|
||||
|
||||
export :: (GitPerks m, MonadReader GitEnv m, GroupKeyOperations m)
|
||||
export :: ( GitPerks m
|
||||
, MonadReader GitEnv m
|
||||
, GroupKeyOperations m
|
||||
, HasAPI PeerAPI UNIX m
|
||||
)
|
||||
=> LWWRefKey HBS2Basic
|
||||
-> [(GitRef,Maybe GitHash)]
|
||||
-> m ()
|
||||
|
|
|
@ -60,13 +60,21 @@ data IState =
|
|||
| IExit
|
||||
|
||||
|
||||
merelySubscribeRepo :: (GitPerks m, MonadReader GitEnv m)
|
||||
-- class
|
||||
|
||||
merelySubscribeRepo :: ( GitPerks m
|
||||
, HasStorage m
|
||||
, HasProgressIndicator m
|
||||
, HasAPI PeerAPI UNIX m
|
||||
, HasAPI LWWRefAPI UNIX m
|
||||
, HasAPI RefLogAPI UNIX m
|
||||
)
|
||||
=> LWWRefKey HBS2Basic
|
||||
-> m (Maybe HashRef)
|
||||
merelySubscribeRepo lwwKey = do
|
||||
|
||||
ip <- asks _progress
|
||||
sto <- asks _storage
|
||||
ip <- getProgressIndicator
|
||||
sto <- getStorage
|
||||
|
||||
subscribeLWWRef lwwKey
|
||||
|
||||
|
@ -116,7 +124,12 @@ merelySubscribeRepo lwwKey = do
|
|||
_ -> pure Nothing
|
||||
|
||||
|
||||
importRepoWait :: (GitPerks m, MonadReader GitEnv m)
|
||||
importRepoWait :: ( GitPerks m
|
||||
, MonadReader GitEnv m
|
||||
, HasAPI PeerAPI UNIX m
|
||||
, HasAPI LWWRefAPI UNIX m
|
||||
, HasAPI RefLogAPI UNIX m
|
||||
)
|
||||
=> LWWRefKey HBS2Basic
|
||||
-> m ()
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ module HBS2.Git.Client.Prelude
|
|||
|
||||
-- peer
|
||||
, module HBS2.Net.Proto.Service
|
||||
, module HBS2.Peer.Proto.LWWRef
|
||||
, module HBS2.Peer.RPC.API.Peer
|
||||
, module HBS2.Peer.RPC.API.RefLog
|
||||
, module HBS2.Peer.RPC.API.LWWRef
|
||||
|
@ -52,6 +53,7 @@ import HBS2.System.Logger.Simple.ANSI
|
|||
import HBS2.Net.Messaging.Unix
|
||||
import HBS2.Net.Proto.Service
|
||||
|
||||
import HBS2.Peer.Proto.LWWRef
|
||||
import HBS2.Peer.RPC.API.Peer
|
||||
import HBS2.Peer.RPC.API.RefLog
|
||||
import HBS2.Peer.RPC.API.LWWRef
|
||||
|
|
|
@ -19,26 +19,25 @@ instance Exception RefLogRequestTimeout
|
|||
|
||||
instance Exception RefLogRequestError
|
||||
|
||||
subscribeRefLog :: (GitPerks m, MonadReader GitEnv m) => RefLogId -> m ()
|
||||
subscribeRefLog :: (GitPerks m, HasAPI PeerAPI UNIX m) => RefLogId -> m ()
|
||||
subscribeRefLog puk = do
|
||||
api <- asks _peerAPI
|
||||
api <- getAPI @PeerAPI @UNIX
|
||||
void $ callService @RpcPollAdd api (puk, "reflog", 13)
|
||||
|
||||
|
||||
subscribeLWWRef :: (GitPerks m, MonadReader GitEnv m) => LWWRefKey HBS2Basic -> m ()
|
||||
subscribeLWWRef :: (GitPerks m, HasAPI PeerAPI UNIX m) => LWWRefKey HBS2Basic -> m ()
|
||||
subscribeLWWRef puk = do
|
||||
api <- asks _peerAPI
|
||||
api <- getAPI @PeerAPI @UNIX
|
||||
void $ callService @RpcPollAdd api (fromLwwRefKey puk, "lwwref", 17)
|
||||
|
||||
fetchLWWRef :: (GitPerks m, MonadReader GitEnv m) => LWWRefKey HBS2Basic -> m ()
|
||||
fetchLWWRef :: (GitPerks m, HasAPI LWWRefAPI UNIX m) => LWWRefKey HBS2Basic -> m ()
|
||||
fetchLWWRef key = do
|
||||
api <- asks _lwwRefAPI
|
||||
api <- getAPI @LWWRefAPI @UNIX
|
||||
void $ race (pause @'Seconds 1) (callService @RpcLWWRefFetch api key)
|
||||
|
||||
getRefLogMerkle :: (GitPerks m, MonadReader GitEnv m) => RefLogId -> m (Maybe HashRef)
|
||||
getRefLogMerkle :: (GitPerks m, HasAPI RefLogAPI UNIX m) => RefLogId -> m (Maybe HashRef)
|
||||
getRefLogMerkle puk = do
|
||||
|
||||
api <- asks _refLogAPI
|
||||
api <- getAPI @RefLogAPI @UNIX
|
||||
|
||||
void $ race (pause @'Seconds 1) (callService @RpcRefLogFetch api puk)
|
||||
>>= orThrow RefLogRequestTimeout
|
||||
|
|
|
@ -124,6 +124,20 @@ library hbs2-git-client-lib
|
|||
hs-source-dirs: hbs2-git-client-lib
|
||||
|
||||
|
||||
executable hbs2-git-subscribe
|
||||
import: shared-properties
|
||||
main-is: Main.hs
|
||||
-- other-modules:
|
||||
-- other-extensions:
|
||||
build-depends:
|
||||
base, hbs2-git-client-lib
|
||||
, binary
|
||||
, vector
|
||||
, optparse-applicative
|
||||
|
||||
hs-source-dirs: git-hbs2-subscribe
|
||||
default-language: GHC2021
|
||||
|
||||
executable git-hbs21
|
||||
import: shared-properties
|
||||
main-is: Main.hs
|
||||
|
|
|
@ -295,11 +295,11 @@
|
|||
"suckless-conf": "suckless-conf_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710495385,
|
||||
"narHash": "sha256-TnbsguspieZr//Wa/L7Fak1tOJis1NFfwYBM1rd462s=",
|
||||
"lastModified": 1710558394,
|
||||
"narHash": "sha256-Io0xjrddivrVznym5rpvwzO0PjP2++dnNlpXtGPyfU0=",
|
||||
"ref": "lwwrepo",
|
||||
"rev": "ec2c1cc3174cec02c5d161374828096958a676ec",
|
||||
"revCount": 984,
|
||||
"rev": "ce7c1f37c046fa5806613a1d3eb67d4d6b00e84c",
|
||||
"revCount": 989,
|
||||
"type": "git",
|
||||
"url": "http://git.hbs2/BTThPdHKF8XnEq4m6wzbKHKA6geLFK4ydYhBXAqBdHSP"
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue