gi-ggit-1.0.4: GI/Ggit/Objects/Branch.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
Represents a branch object.
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.Ggit.Objects.Branch
(
-- * Exported types
Branch(..) ,
IsBranch ,
toBranch ,
noBranch ,
-- * Methods
-- ** delete #method:delete#
#if ENABLE_OVERLOADING
BranchDeleteMethodInfo ,
#endif
branchDelete ,
-- ** getName #method:getName#
#if ENABLE_OVERLOADING
BranchGetNameMethodInfo ,
#endif
branchGetName ,
-- ** getUpstream #method:getUpstream#
#if ENABLE_OVERLOADING
BranchGetUpstreamMethodInfo ,
#endif
branchGetUpstream ,
-- ** isHead #method:isHead#
#if ENABLE_OVERLOADING
BranchIsHeadMethodInfo ,
#endif
branchIsHead ,
-- ** move #method:move#
#if ENABLE_OVERLOADING
BranchMoveMethodInfo ,
#endif
branchMove ,
) where
import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P
import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.Ggit.Flags as Ggit.Flags
import {-# SOURCE #-} qualified GI.Ggit.Objects.Native as Ggit.Native
import {-# SOURCE #-} qualified GI.Ggit.Objects.ObjectFactoryBase as Ggit.ObjectFactoryBase
import {-# SOURCE #-} qualified GI.Ggit.Objects.Ref as Ggit.Ref
-- | Memory-managed wrapper type.
newtype Branch = Branch (ManagedPtr Branch)
foreign import ccall "ggit_branch_get_type"
c_ggit_branch_get_type :: IO GType
instance GObject Branch where
gobjectType = c_ggit_branch_get_type
-- | Type class for types which can be safely cast to `Branch`, for instance with `toBranch`.
class (GObject o, O.IsDescendantOf Branch o) => IsBranch o
instance (GObject o, O.IsDescendantOf Branch o) => IsBranch o
instance O.HasParentTypes Branch
type instance O.ParentTypes Branch = '[Ggit.Ref.Ref, Ggit.Native.Native, Ggit.ObjectFactoryBase.ObjectFactoryBase, GObject.Object.Object]
-- | Cast to `Branch`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toBranch :: (MonadIO m, IsBranch o) => o -> m Branch
toBranch = liftIO . unsafeCastTo Branch
-- | A convenience alias for `Nothing` :: `Maybe` `Branch`.
noBranch :: Maybe Branch
noBranch = Nothing
#if ENABLE_OVERLOADING
type family ResolveBranchMethod (t :: Symbol) (o :: *) :: * where
ResolveBranchMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
ResolveBranchMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
ResolveBranchMethod "delete" o = BranchDeleteMethodInfo
ResolveBranchMethod "deleteLog" o = Ggit.Ref.RefDeleteLogMethodInfo
ResolveBranchMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
ResolveBranchMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
ResolveBranchMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
ResolveBranchMethod "hasLog" o = Ggit.Ref.RefHasLogMethodInfo
ResolveBranchMethod "isBranch" o = Ggit.Ref.RefIsBranchMethodInfo
ResolveBranchMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
ResolveBranchMethod "isHead" o = BranchIsHeadMethodInfo
ResolveBranchMethod "isNote" o = Ggit.Ref.RefIsNoteMethodInfo
ResolveBranchMethod "isRemote" o = Ggit.Ref.RefIsRemoteMethodInfo
ResolveBranchMethod "isTag" o = Ggit.Ref.RefIsTagMethodInfo
ResolveBranchMethod "lookup" o = Ggit.Ref.RefLookupMethodInfo
ResolveBranchMethod "move" o = BranchMoveMethodInfo
ResolveBranchMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
ResolveBranchMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
ResolveBranchMethod "ref" o = GObject.Object.ObjectRefMethodInfo
ResolveBranchMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
ResolveBranchMethod "rename" o = Ggit.Ref.RefRenameMethodInfo
ResolveBranchMethod "resolve" o = Ggit.Ref.RefResolveMethodInfo
ResolveBranchMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
ResolveBranchMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
ResolveBranchMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
ResolveBranchMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
ResolveBranchMethod "toString" o = Ggit.Ref.RefToStringMethodInfo
ResolveBranchMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
ResolveBranchMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
ResolveBranchMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
ResolveBranchMethod "getLog" o = Ggit.Ref.RefGetLogMethodInfo
ResolveBranchMethod "getName" o = BranchGetNameMethodInfo
ResolveBranchMethod "getOwner" o = Ggit.Ref.RefGetOwnerMethodInfo
ResolveBranchMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
ResolveBranchMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
ResolveBranchMethod "getReferenceType" o = Ggit.Ref.RefGetReferenceTypeMethodInfo
ResolveBranchMethod "getShorthand" o = Ggit.Ref.RefGetShorthandMethodInfo
ResolveBranchMethod "getSymbolicTarget" o = Ggit.Ref.RefGetSymbolicTargetMethodInfo
ResolveBranchMethod "getTarget" o = Ggit.Ref.RefGetTargetMethodInfo
ResolveBranchMethod "getUpstream" o = BranchGetUpstreamMethodInfo
ResolveBranchMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
ResolveBranchMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
ResolveBranchMethod "setSymbolicTarget" o = Ggit.Ref.RefSetSymbolicTargetMethodInfo
ResolveBranchMethod "setTarget" o = Ggit.Ref.RefSetTargetMethodInfo
ResolveBranchMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveBranchMethod t Branch, O.MethodInfo info Branch p) => OL.IsLabel t (Branch -> p) where
#if MIN_VERSION_base(4,10,0)
fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif
#endif
#if ENABLE_OVERLOADING
instance O.HasAttributeList Branch
type instance O.AttributeList Branch = BranchAttributeList
type BranchAttributeList = ('[ '("native", Ggit.Native.NativeNativePropertyInfo)] :: [(Symbol, *)])
#endif
#if ENABLE_OVERLOADING
#endif
#if ENABLE_OVERLOADING
type instance O.SignalList Branch = BranchSignalList
type BranchSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
#endif
-- method Branch::delete
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "branch", argType = TInterface (Name {namespace = "Ggit", name = "Branch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitBranch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : True
-- Skip return : False
foreign import ccall "ggit_branch_delete" ggit_branch_delete ::
Ptr Branch -> -- branch : TInterface (Name {namespace = "Ggit", name = "Branch"})
Ptr (Ptr GError) -> -- error
IO ()
{- |
Deletes an existing branch reference.
If the branch is successfully deleted, this object is
not useful anymore and if should be freed with 'GI.GObject.Objects.Object.objectUnref'.
-}
branchDelete ::
(B.CallStack.HasCallStack, MonadIO m, IsBranch a) =>
a
{- ^ /@branch@/: a 'GI.Ggit.Objects.Branch.Branch'. -}
-> m ()
{- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
branchDelete branch = liftIO $ do
branch' <- unsafeManagedPtrCastPtr branch
onException (do
propagateGError $ ggit_branch_delete branch'
touchManagedPtr branch
return ()
) (do
return ()
)
#if ENABLE_OVERLOADING
data BranchDeleteMethodInfo
instance (signature ~ (m ()), MonadIO m, IsBranch a) => O.MethodInfo BranchDeleteMethodInfo a signature where
overloadedMethod _ = branchDelete
#endif
-- method Branch::get_name
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "branch", argType = TInterface (Name {namespace = "Ggit", name = "Branch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitBranch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : True
-- Skip return : False
foreign import ccall "ggit_branch_get_name" ggit_branch_get_name ::
Ptr Branch -> -- branch : TInterface (Name {namespace = "Ggit", name = "Branch"})
Ptr (Ptr GError) -> -- error
IO CString
{- |
Gets the name of the given local or remote branch.
-}
branchGetName ::
(B.CallStack.HasCallStack, MonadIO m, IsBranch a) =>
a
{- ^ /@branch@/: a 'GI.Ggit.Objects.Branch.Branch'. -}
-> m (Maybe T.Text)
{- ^ __Returns:__ the name of the given local or remote branch or 'Nothing'. /(Can throw 'Data.GI.Base.GError.GError')/ -}
branchGetName branch = liftIO $ do
branch' <- unsafeManagedPtrCastPtr branch
onException (do
result <- propagateGError $ ggit_branch_get_name branch'
maybeResult <- convertIfNonNull result $ \result' -> do
result'' <- cstringToText result'
return result''
touchManagedPtr branch
return maybeResult
) (do
return ()
)
#if ENABLE_OVERLOADING
data BranchGetNameMethodInfo
instance (signature ~ (m (Maybe T.Text)), MonadIO m, IsBranch a) => O.MethodInfo BranchGetNameMethodInfo a signature where
overloadedMethod _ = branchGetName
#endif
-- method Branch::get_upstream
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "branch", argType = TInterface (Name {namespace = "Ggit", name = "Branch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitBranch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Ggit", name = "Ref"}))
-- throws : True
-- Skip return : False
foreign import ccall "ggit_branch_get_upstream" ggit_branch_get_upstream ::
Ptr Branch -> -- branch : TInterface (Name {namespace = "Ggit", name = "Branch"})
Ptr (Ptr GError) -> -- error
IO (Ptr Ggit.Ref.Ref)
{- |
Gets the reference supporting the remote tracking branch,
given a local branch reference.
-}
branchGetUpstream ::
(B.CallStack.HasCallStack, MonadIO m, IsBranch a) =>
a
{- ^ /@branch@/: a 'GI.Ggit.Objects.Branch.Branch'. -}
-> m (Maybe Ggit.Ref.Ref)
{- ^ __Returns:__ the reference supporting the remote tracking branch or 'Nothing'. /(Can throw 'Data.GI.Base.GError.GError')/ -}
branchGetUpstream branch = liftIO $ do
branch' <- unsafeManagedPtrCastPtr branch
onException (do
result <- propagateGError $ ggit_branch_get_upstream branch'
maybeResult <- convertIfNonNull result $ \result' -> do
result'' <- (wrapObject Ggit.Ref.Ref) result'
return result''
touchManagedPtr branch
return maybeResult
) (do
return ()
)
#if ENABLE_OVERLOADING
data BranchGetUpstreamMethodInfo
instance (signature ~ (m (Maybe Ggit.Ref.Ref)), MonadIO m, IsBranch a) => O.MethodInfo BranchGetUpstreamMethodInfo a signature where
overloadedMethod _ = branchGetUpstream
#endif
-- method Branch::is_head
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "branch", argType = TInterface (Name {namespace = "Ggit", name = "Branch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitBranch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False
foreign import ccall "ggit_branch_is_head" ggit_branch_is_head ::
Ptr Branch -> -- branch : TInterface (Name {namespace = "Ggit", name = "Branch"})
Ptr (Ptr GError) -> -- error
IO CInt
{- |
Determines if the current local branch is pointed at by HEAD.
-}
branchIsHead ::
(B.CallStack.HasCallStack, MonadIO m, IsBranch a) =>
a
{- ^ /@branch@/: a 'GI.Ggit.Objects.Branch.Branch'. -}
-> m ()
{- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
branchIsHead branch = liftIO $ do
branch' <- unsafeManagedPtrCastPtr branch
onException (do
_ <- propagateGError $ ggit_branch_is_head branch'
touchManagedPtr branch
return ()
) (do
return ()
)
#if ENABLE_OVERLOADING
data BranchIsHeadMethodInfo
instance (signature ~ (m ()), MonadIO m, IsBranch a) => O.MethodInfo BranchIsHeadMethodInfo a signature where
overloadedMethod _ = branchIsHead
#endif
-- method Branch::move
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "branch", argType = TInterface (Name {namespace = "Ggit", name = "Branch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitBranch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "new_branch_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "target name of the branch once the move is performed; this name is validated for consistency.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "Ggit", name = "CreateFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitCreateFlags.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Ggit", name = "Branch"}))
-- throws : True
-- Skip return : False
foreign import ccall "ggit_branch_move" ggit_branch_move ::
Ptr Branch -> -- branch : TInterface (Name {namespace = "Ggit", name = "Branch"})
CString -> -- new_branch_name : TBasicType TUTF8
CUInt -> -- flags : TInterface (Name {namespace = "Ggit", name = "CreateFlags"})
Ptr (Ptr GError) -> -- error
IO (Ptr Branch)
{- |
Moves\/renames an existing branch reference.
-}
branchMove ::
(B.CallStack.HasCallStack, MonadIO m, IsBranch a) =>
a
{- ^ /@branch@/: a 'GI.Ggit.Objects.Branch.Branch'. -}
-> T.Text
{- ^ /@newBranchName@/: target name of the branch once the move is performed; this name is validated for consistency. -}
-> [Ggit.Flags.CreateFlags]
{- ^ /@flags@/: a 'GI.Ggit.Flags.CreateFlags'. -}
-> m (Maybe Branch)
{- ^ __Returns:__ the new branch or 'Nothing'. /(Can throw 'Data.GI.Base.GError.GError')/ -}
branchMove branch newBranchName flags = liftIO $ do
branch' <- unsafeManagedPtrCastPtr branch
newBranchName' <- textToCString newBranchName
let flags' = gflagsToWord flags
onException (do
result <- propagateGError $ ggit_branch_move branch' newBranchName' flags'
maybeResult <- convertIfNonNull result $ \result' -> do
result'' <- (wrapObject Branch) result'
return result''
touchManagedPtr branch
freeMem newBranchName'
return maybeResult
) (do
freeMem newBranchName'
)
#if ENABLE_OVERLOADING
data BranchMoveMethodInfo
instance (signature ~ (T.Text -> [Ggit.Flags.CreateFlags] -> m (Maybe Branch)), MonadIO m, IsBranch a) => O.MethodInfo BranchMoveMethodInfo a signature where
overloadedMethod _ = branchMove
#endif