module Git.Reference where

import Conduit
import Git.Types

listReferences :: MonadGit r m => m [RefName]
listReferences :: m [RefName]
listReferences = ConduitT () Void m [RefName] -> m [RefName]
forall (m :: * -> *) r. Monad m => ConduitT () Void m r -> m r
runConduit (ConduitT () Void m [RefName] -> m [RefName])
-> ConduitT () Void m [RefName] -> m [RefName]
forall a b. (a -> b) -> a -> b
$ ConduitT () RefName m ()
forall r (m :: * -> *) i. MonadGit r m => ConduitT i RefName m ()
sourceReferences ConduitT () RefName m ()
-> ConduitM RefName Void m [RefName]
-> ConduitT () Void m [RefName]
forall (m :: * -> *) a b c r.
Monad m =>
ConduitM a b m () -> ConduitM b c m r -> ConduitM a c m r
.| ConduitM RefName Void m [RefName]
forall (m :: * -> *) a o. Monad m => ConduitT a o m [a]
sinkList

resolveReference :: MonadGit r m => RefName -> m (Maybe (Oid r))
resolveReference :: RefName -> m (Maybe (Oid r))
resolveReference RefName
name = do
    Maybe (RefTarget r)
mref <- RefName -> m (Maybe (RefTarget r))
forall r (m :: * -> *).
MonadGit r m =>
RefName -> m (Maybe (RefTarget r))
lookupReference RefName
name
    m (Maybe (Oid r))
-> (RefTarget r -> m (Maybe (Oid r)))
-> Maybe (RefTarget r)
-> m (Maybe (Oid r))
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Maybe (Oid r) -> m (Maybe (Oid r))
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (Oid r)
forall a. Maybe a
Nothing) RefTarget r -> m (Maybe (Oid r))
forall r (m :: * -> *).
MonadGit r m =>
RefTarget r -> m (Maybe (Oid r))
referenceToOid Maybe (RefTarget r)
mref

referenceToOid :: MonadGit r m => RefTarget r -> m (Maybe (Oid r))
referenceToOid :: RefTarget r -> m (Maybe (Oid r))
referenceToOid (RefObj Oid r
oid)       = Maybe (Oid r) -> m (Maybe (Oid r))
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (Oid r) -> m (Maybe (Oid r)))
-> Maybe (Oid r) -> m (Maybe (Oid r))
forall a b. (a -> b) -> a -> b
$ Oid r -> Maybe (Oid r)
forall a. a -> Maybe a
Just Oid r
oid
referenceToOid (RefSymbolic RefName
name) = RefName -> m (Maybe (Oid r))
forall r (m :: * -> *).
MonadGit r m =>
RefName -> m (Maybe (Oid r))
resolveReference RefName
name