{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) A structure allowing control over commits. -} module GI.OSTree.Structs.RepoCommitModifier ( -- * Exported types RepoCommitModifier(..) , noRepoCommitModifier , -- * Methods -- ** new #method:new# repoCommitModifierNew , -- ** ref #method:ref# RepoCommitModifierRefMethodInfo , repoCommitModifierRef , -- ** setDevinoCache #method:setDevinoCache# RepoCommitModifierSetDevinoCacheMethodInfo, repoCommitModifierSetDevinoCache , -- ** setSepolicy #method:setSepolicy# RepoCommitModifierSetSepolicyMethodInfo , repoCommitModifierSetSepolicy , -- ** setXattrCallback #method:setXattrCallback# RepoCommitModifierSetXattrCallbackMethodInfo, repoCommitModifierSetXattrCallback , -- ** unref #method:unref# RepoCommitModifierUnrefMethodInfo , repoCommitModifierUnref , ) 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.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack 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 GI.GLib.Callbacks as GLib.Callbacks import qualified GI.OSTree.Callbacks as OSTree.Callbacks import {-# SOURCE #-} qualified GI.OSTree.Flags as OSTree.Flags import {-# SOURCE #-} qualified GI.OSTree.Objects.SePolicy as OSTree.SePolicy import {-# SOURCE #-} qualified GI.OSTree.Structs.RepoDevInoCache as OSTree.RepoDevInoCache newtype RepoCommitModifier = RepoCommitModifier (ManagedPtr RepoCommitModifier) foreign import ccall "ostree_repo_commit_modifier_get_type" c_ostree_repo_commit_modifier_get_type :: IO GType instance BoxedObject RepoCommitModifier where boxedType _ = c_ostree_repo_commit_modifier_get_type noRepoCommitModifier :: Maybe RepoCommitModifier noRepoCommitModifier = Nothing instance O.HasAttributeList RepoCommitModifier type instance O.AttributeList RepoCommitModifier = RepoCommitModifierAttributeList type RepoCommitModifierAttributeList = ('[ ] :: [(Symbol, *)]) -- method RepoCommitModifier::new -- method type : Constructor -- Args : [Arg {argCName = "flags", argType = TInterface (Name {namespace = "OSTree", name = "RepoCommitModifierFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Control options for filter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "commit_filter", argType = TInterface (Name {namespace = "OSTree", name = "RepoCommitFilter"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Function that can inspect individual files", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "User data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDestroyNotify", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"})) -- throws : False -- Skip return : False foreign import ccall "ostree_repo_commit_modifier_new" ostree_repo_commit_modifier_new :: CUInt -> -- flags : TInterface (Name {namespace = "OSTree", name = "RepoCommitModifierFlags"}) FunPtr OSTree.Callbacks.C_RepoCommitFilter -> -- commit_filter : TInterface (Name {namespace = "OSTree", name = "RepoCommitFilter"}) Ptr () -> -- user_data : TBasicType TPtr FunPtr GLib.Callbacks.C_DestroyNotify -> -- destroy_notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"}) IO (Ptr RepoCommitModifier) {- | /No description available in the introspection data./ -} repoCommitModifierNew :: (B.CallStack.HasCallStack, MonadIO m) => [OSTree.Flags.RepoCommitModifierFlags] {- ^ /@flags@/: Control options for filter -} -> Maybe (OSTree.Callbacks.RepoCommitFilter) {- ^ /@commitFilter@/: Function that can inspect individual files -} -> m RepoCommitModifier {- ^ __Returns:__ A new commit modifier. -} repoCommitModifierNew flags commitFilter = liftIO $ do let flags' = gflagsToWord flags maybeCommitFilter <- case commitFilter of Nothing -> return (castPtrToFunPtr nullPtr) Just jCommitFilter -> do jCommitFilter' <- OSTree.Callbacks.mk_RepoCommitFilter (OSTree.Callbacks.wrap_RepoCommitFilter Nothing (OSTree.Callbacks.drop_closures_RepoCommitFilter jCommitFilter)) return jCommitFilter' let userData = castFunPtrToPtr maybeCommitFilter let destroyNotify = safeFreeFunPtrPtr result <- ostree_repo_commit_modifier_new flags' maybeCommitFilter userData destroyNotify checkUnexpectedReturnNULL "repoCommitModifierNew" result result' <- (wrapBoxed RepoCommitModifier) result return result' -- method RepoCommitModifier::ref -- method type : OrdinaryMethod -- Args : [Arg {argCName = "modifier", argType = TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"})) -- throws : False -- Skip return : False foreign import ccall "ostree_repo_commit_modifier_ref" ostree_repo_commit_modifier_ref :: Ptr RepoCommitModifier -> -- modifier : TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}) IO (Ptr RepoCommitModifier) {- | /No description available in the introspection data./ -} repoCommitModifierRef :: (B.CallStack.HasCallStack, MonadIO m) => RepoCommitModifier -> m RepoCommitModifier repoCommitModifierRef modifier = liftIO $ do modifier' <- unsafeManagedPtrGetPtr modifier result <- ostree_repo_commit_modifier_ref modifier' checkUnexpectedReturnNULL "repoCommitModifierRef" result result' <- (wrapBoxed RepoCommitModifier) result touchManagedPtr modifier return result' data RepoCommitModifierRefMethodInfo instance (signature ~ (m RepoCommitModifier), MonadIO m) => O.MethodInfo RepoCommitModifierRefMethodInfo RepoCommitModifier signature where overloadedMethod _ = repoCommitModifierRef -- method RepoCommitModifier::set_devino_cache -- method type : OrdinaryMethod -- Args : [Arg {argCName = "modifier", argType = TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Modifier", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cache", argType = TInterface (Name {namespace = "OSTree", name = "RepoDevInoCache"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A hash table caching device,inode to checksums", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "ostree_repo_commit_modifier_set_devino_cache" ostree_repo_commit_modifier_set_devino_cache :: Ptr RepoCommitModifier -> -- modifier : TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}) Ptr OSTree.RepoDevInoCache.RepoDevInoCache -> -- cache : TInterface (Name {namespace = "OSTree", name = "RepoDevInoCache"}) IO () {- | See the documentation for @ostree_repo_devino_cache_new()@. This function can then be used for later calls to @ostree_repo_write_directory_to_mtree()@ to optimize commits. Note if your process has multiple writers, you should use separate @OSTreeRepo@ instances if you want to also use this API. This function will add a reference to /@cache@/ without copying - you should avoid further mutation of the cache. -} repoCommitModifierSetDevinoCache :: (B.CallStack.HasCallStack, MonadIO m) => RepoCommitModifier {- ^ /@modifier@/: Modifier -} -> OSTree.RepoDevInoCache.RepoDevInoCache {- ^ /@cache@/: A hash table caching device,inode to checksums -} -> m () repoCommitModifierSetDevinoCache modifier cache = liftIO $ do modifier' <- unsafeManagedPtrGetPtr modifier cache' <- unsafeManagedPtrGetPtr cache ostree_repo_commit_modifier_set_devino_cache modifier' cache' touchManagedPtr modifier touchManagedPtr cache return () data RepoCommitModifierSetDevinoCacheMethodInfo instance (signature ~ (OSTree.RepoDevInoCache.RepoDevInoCache -> m ()), MonadIO m) => O.MethodInfo RepoCommitModifierSetDevinoCacheMethodInfo RepoCommitModifier signature where overloadedMethod _ = repoCommitModifierSetDevinoCache -- method RepoCommitModifier::set_sepolicy -- method type : OrdinaryMethod -- Args : [Arg {argCName = "modifier", argType = TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An #OstreeRepoCommitModifier", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sepolicy", argType = TInterface (Name {namespace = "OSTree", name = "SePolicy"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Policy to use for labeling", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "ostree_repo_commit_modifier_set_sepolicy" ostree_repo_commit_modifier_set_sepolicy :: Ptr RepoCommitModifier -> -- modifier : TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}) Ptr OSTree.SePolicy.SePolicy -> -- sepolicy : TInterface (Name {namespace = "OSTree", name = "SePolicy"}) IO () {- | If /@policy@/ is non-'Nothing', use it to look up labels to use for \"security.selinux\" extended attributes. Note that any policy specified this way operates in addition to any extended attributes provided via 'GI.OSTree.Structs.RepoCommitModifier.repoCommitModifierSetXattrCallback'. However if both specify a value for \"security.selinux\", then the one from the policy wins. -} repoCommitModifierSetSepolicy :: (B.CallStack.HasCallStack, MonadIO m, OSTree.SePolicy.IsSePolicy a) => RepoCommitModifier {- ^ /@modifier@/: An 'GI.OSTree.Structs.RepoCommitModifier.RepoCommitModifier' -} -> Maybe (a) {- ^ /@sepolicy@/: Policy to use for labeling -} -> m () repoCommitModifierSetSepolicy modifier sepolicy = liftIO $ do modifier' <- unsafeManagedPtrGetPtr modifier maybeSepolicy <- case sepolicy of Nothing -> return nullPtr Just jSepolicy -> do jSepolicy' <- unsafeManagedPtrCastPtr jSepolicy return jSepolicy' ostree_repo_commit_modifier_set_sepolicy modifier' maybeSepolicy touchManagedPtr modifier whenJust sepolicy touchManagedPtr return () data RepoCommitModifierSetSepolicyMethodInfo instance (signature ~ (Maybe (a) -> m ()), MonadIO m, OSTree.SePolicy.IsSePolicy a) => O.MethodInfo RepoCommitModifierSetSepolicyMethodInfo RepoCommitModifier signature where overloadedMethod _ = repoCommitModifierSetSepolicy -- method RepoCommitModifier::set_xattr_callback -- method type : OrdinaryMethod -- Args : [Arg {argCName = "modifier", argType = TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An #OstreeRepoCommitModifier", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "OSTree", name = "RepoCommitModifierXattrCallback"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Function to be invoked, should return extended attributes for path", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 3, argDestroy = 2, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Destroy notification", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Data for @callback:", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "ostree_repo_commit_modifier_set_xattr_callback" ostree_repo_commit_modifier_set_xattr_callback :: Ptr RepoCommitModifier -> -- modifier : TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}) FunPtr OSTree.Callbacks.C_RepoCommitModifierXattrCallback -> -- callback : TInterface (Name {namespace = "OSTree", name = "RepoCommitModifierXattrCallback"}) FunPtr GLib.Callbacks.C_DestroyNotify -> -- destroy : TInterface (Name {namespace = "GLib", name = "DestroyNotify"}) Ptr () -> -- user_data : TBasicType TPtr IO () {- | If set, this function should return extended attributes to use for the given path. This is useful for things like ACLs and SELinux, where a build system can label the files as it\'s committing to the repository. -} repoCommitModifierSetXattrCallback :: (B.CallStack.HasCallStack, MonadIO m) => RepoCommitModifier {- ^ /@modifier@/: An 'GI.OSTree.Structs.RepoCommitModifier.RepoCommitModifier' -} -> OSTree.Callbacks.RepoCommitModifierXattrCallback {- ^ /@callback@/: Function to be invoked, should return extended attributes for path -} -> m () repoCommitModifierSetXattrCallback modifier callback = liftIO $ do modifier' <- unsafeManagedPtrGetPtr modifier callback' <- OSTree.Callbacks.mk_RepoCommitModifierXattrCallback (OSTree.Callbacks.wrap_RepoCommitModifierXattrCallback Nothing (OSTree.Callbacks.drop_closures_RepoCommitModifierXattrCallback callback)) let userData = castFunPtrToPtr callback' let destroy = safeFreeFunPtrPtr ostree_repo_commit_modifier_set_xattr_callback modifier' callback' destroy userData touchManagedPtr modifier return () data RepoCommitModifierSetXattrCallbackMethodInfo instance (signature ~ (OSTree.Callbacks.RepoCommitModifierXattrCallback -> m ()), MonadIO m) => O.MethodInfo RepoCommitModifierSetXattrCallbackMethodInfo RepoCommitModifier signature where overloadedMethod _ = repoCommitModifierSetXattrCallback -- method RepoCommitModifier::unref -- method type : OrdinaryMethod -- Args : [Arg {argCName = "modifier", argType = TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "ostree_repo_commit_modifier_unref" ostree_repo_commit_modifier_unref :: Ptr RepoCommitModifier -> -- modifier : TInterface (Name {namespace = "OSTree", name = "RepoCommitModifier"}) IO () {- | /No description available in the introspection data./ -} repoCommitModifierUnref :: (B.CallStack.HasCallStack, MonadIO m) => RepoCommitModifier -> m () repoCommitModifierUnref modifier = liftIO $ do modifier' <- unsafeManagedPtrGetPtr modifier ostree_repo_commit_modifier_unref modifier' touchManagedPtr modifier return () data RepoCommitModifierUnrefMethodInfo instance (signature ~ (m ()), MonadIO m) => O.MethodInfo RepoCommitModifierUnrefMethodInfo RepoCommitModifier signature where overloadedMethod _ = repoCommitModifierUnref type family ResolveRepoCommitModifierMethod (t :: Symbol) (o :: *) :: * where ResolveRepoCommitModifierMethod "ref" o = RepoCommitModifierRefMethodInfo ResolveRepoCommitModifierMethod "unref" o = RepoCommitModifierUnrefMethodInfo ResolveRepoCommitModifierMethod "setDevinoCache" o = RepoCommitModifierSetDevinoCacheMethodInfo ResolveRepoCommitModifierMethod "setSepolicy" o = RepoCommitModifierSetSepolicyMethodInfo ResolveRepoCommitModifierMethod "setXattrCallback" o = RepoCommitModifierSetXattrCallbackMethodInfo ResolveRepoCommitModifierMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveRepoCommitModifierMethod t RepoCommitModifier, O.MethodInfo info RepoCommitModifier p) => O.IsLabelProxy t (RepoCommitModifier -> p) where fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveRepoCommitModifierMethod t RepoCommitModifier, O.MethodInfo info RepoCommitModifier p) => O.IsLabel t (RepoCommitModifier -> p) where fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif