mirror of https://github.com/voidlizard/hbs2
Check if config already exists for hbs2-sync init
This commit is contained in:
parent
aa9355e7d7
commit
dc9a86a603
|
@ -51,11 +51,10 @@ main = do
|
||||||
_ -> display cli
|
_ -> display cli
|
||||||
|
|
||||||
dir <- pwd
|
dir <- pwd
|
||||||
here <- liftIO $ doesFileExist (dir </> ".hbs2-sync/config")
|
here <- liftIO $ doesFileExist (configPath dir)
|
||||||
|
|
||||||
void $ runSyncApp $ recover $ do
|
void $ runSyncApp $ recover $ do
|
||||||
when here $ runM dict do
|
when here $ runM dict do
|
||||||
void $ evalTop [ mkList [mkSym "dir", mkStr dir] ]
|
void $ evalTop [ mkList [mkSym "dir", mkStr dir] ]
|
||||||
|
|
||||||
run dict cli
|
run dict cli
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
module HBS2.Sync.Internal
|
module HBS2.Sync.Internal
|
||||||
( syncEntries
|
( configPath, syncEntries
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import HBS2.Sync.Prelude
|
import HBS2.Sync.Prelude
|
||||||
|
@ -34,10 +34,35 @@ import Data.Ord
|
||||||
|
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
|
|
||||||
|
data ConfigException
|
||||||
|
= ConfigAlreadyExists String
|
||||||
|
deriving (Show)
|
||||||
|
|
||||||
|
instance Exception ConfigException
|
||||||
|
|
||||||
|
configPath :: FilePath -> FilePath
|
||||||
|
configPath directory =
|
||||||
|
directory </> ".hbs2-sync/config"
|
||||||
|
|
||||||
|
findConfig :: (MonadIO m) => m (Maybe FilePath)
|
||||||
|
findConfig =
|
||||||
|
findConfig' =<< pwd
|
||||||
|
where
|
||||||
|
findConfig' level = do
|
||||||
|
let path = configPath level
|
||||||
|
exists <- liftIO $ doesFileExist path
|
||||||
|
if exists
|
||||||
|
then return $ Just path
|
||||||
|
else
|
||||||
|
let parent = takeDirectory level
|
||||||
|
in if parent == level -- we've reached the root directory
|
||||||
|
then return Nothing
|
||||||
|
else findConfig' parent
|
||||||
|
|
||||||
syncEntries :: forall c m . ( MonadUnliftIO m
|
syncEntries :: forall c m . ( MonadUnliftIO m
|
||||||
, IsContext c
|
, IsContext c
|
||||||
, Exception (BadFormException c)
|
, Exception (BadFormException c)
|
||||||
|
, Exception ConfigException
|
||||||
, HasClientAPI PeerAPI UNIX m
|
, HasClientAPI PeerAPI UNIX m
|
||||||
, HasClientAPI RefChanAPI UNIX m
|
, HasClientAPI RefChanAPI UNIX m
|
||||||
, HasClientAPI StorageAPI UNIX m
|
, HasClientAPI StorageAPI UNIX m
|
||||||
|
@ -63,6 +88,8 @@ syncEntries = do
|
||||||
authorKey <- fromStringMay @(PubKey 'Sign HBS2Basic) authorString & orThrowUser "author not found"
|
authorKey <- fromStringMay @(PubKey 'Sign HBS2Basic) authorString & orThrowUser "author not found"
|
||||||
readerKey <- fromStringMay @(PubKey 'Encrypt HBS2Basic) readerString & orThrowUser "reader not found"
|
readerKey <- fromStringMay @(PubKey 'Encrypt HBS2Basic) readerString & orThrowUser "reader not found"
|
||||||
|
|
||||||
|
findConfig >>= maybe (pure ()) (throwIO . ConfigAlreadyExists)
|
||||||
|
|
||||||
peerApi <- getClientAPI @PeerAPI @UNIX
|
peerApi <- getClientAPI @PeerAPI @UNIX
|
||||||
rchanApi <- getClientAPI @RefChanAPI @UNIX
|
rchanApi <- getClientAPI @RefChanAPI @UNIX
|
||||||
storage <- getStorage
|
storage <- getStorage
|
||||||
|
@ -103,10 +130,12 @@ syncEntries = do
|
||||||
]
|
]
|
||||||
let config = unlines $ map (show . pretty) configForms
|
let config = unlines $ map (show . pretty) configForms
|
||||||
display config
|
display config
|
||||||
let path = ".hbs-sync/config"
|
|
||||||
liftIO $ do
|
liftIO $ do
|
||||||
|
path <- configPath <$> pwd
|
||||||
createDirectoryIfMissing True $ takeDirectory path
|
createDirectoryIfMissing True $ takeDirectory path
|
||||||
writeFile path config
|
writeFile path config
|
||||||
|
|
||||||
pure ()
|
pure ()
|
||||||
|
|
||||||
_ -> do
|
_ -> do
|
||||||
|
@ -140,7 +169,7 @@ syncEntries = do
|
||||||
Nothing -> Just (mempty & set dirSyncPath (Just d))
|
Nothing -> Just (mempty & set dirSyncPath (Just d))
|
||||||
Just x -> Just (x & set dirSyncPath (Just d))
|
Just x -> Just (x & set dirSyncPath (Just d))
|
||||||
|
|
||||||
ins <- try @_ @IOError (liftIO $ readFile (d </> ".hbs2-sync/config"))
|
ins <- try @_ @IOError (liftIO $ readFile (configPath d))
|
||||||
<&> fromRight mempty
|
<&> fromRight mempty
|
||||||
<&> parseTop
|
<&> parseTop
|
||||||
<&> either mempty (fmap fixContext)
|
<&> either mempty (fmap fixContext)
|
||||||
|
|
Loading…
Reference in New Issue