{- | 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 patch object. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Ggit.Structs.Patch ( -- * Exported types Patch(..) , noPatch , -- * Methods -- ** getDelta #method:getDelta# #if ENABLE_OVERLOADING PatchGetDeltaMethodInfo , #endif patchGetDelta , -- ** getHunk #method:getHunk# #if ENABLE_OVERLOADING PatchGetHunkMethodInfo , #endif patchGetHunk , -- ** getLineStats #method:getLineStats# #if ENABLE_OVERLOADING PatchGetLineStatsMethodInfo , #endif patchGetLineStats , -- ** getNumHunks #method:getNumHunks# #if ENABLE_OVERLOADING PatchGetNumHunksMethodInfo , #endif patchGetNumHunks , -- ** getNumLinesInHunk #method:getNumLinesInHunk# #if ENABLE_OVERLOADING PatchGetNumLinesInHunkMethodInfo , #endif patchGetNumLinesInHunk , -- ** newFromBlobs #method:newFromBlobs# patchNewFromBlobs , -- ** newFromDiff #method:newFromDiff# patchNewFromDiff , -- ** ref #method:ref# #if ENABLE_OVERLOADING PatchRefMethodInfo , #endif patchRef , -- ** toStream #method:toStream# #if ENABLE_OVERLOADING PatchToStreamMethodInfo , #endif patchToStream , -- ** toString #method:toString# #if ENABLE_OVERLOADING PatchToStringMethodInfo , #endif patchToString , -- ** unref #method:unref# #if ENABLE_OVERLOADING PatchUnrefMethodInfo , #endif patchUnref , ) 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 {-# SOURCE #-} qualified GI.Ggit.Objects.Blob as Ggit.Blob import {-# SOURCE #-} qualified GI.Ggit.Objects.Diff as Ggit.Diff import {-# SOURCE #-} qualified GI.Ggit.Objects.DiffOptions as Ggit.DiffOptions import {-# SOURCE #-} qualified GI.Ggit.Structs.DiffDelta as Ggit.DiffDelta import {-# SOURCE #-} qualified GI.Ggit.Structs.DiffHunk as Ggit.DiffHunk import qualified GI.Gio.Objects.OutputStream as Gio.OutputStream -- | Memory-managed wrapper type. newtype Patch = Patch (ManagedPtr Patch) foreign import ccall "ggit_patch_get_type" c_ggit_patch_get_type :: IO GType instance BoxedObject Patch where boxedType _ = c_ggit_patch_get_type -- | A convenience alias for `Nothing` :: `Maybe` `Patch`. noPatch :: Maybe Patch noPatch = Nothing #if ENABLE_OVERLOADING instance O.HasAttributeList Patch type instance O.AttributeList Patch = PatchAttributeList type PatchAttributeList = ('[ ] :: [(Symbol, *)]) #endif -- method Patch::new_from_blobs -- method type : Constructor -- Args : [Arg {argCName = "old_blob", argType = TInterface (Name {namespace = "Ggit", name = "Blob"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GgitBlob to diff from.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "old_as_path", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "treat @old_blob as if it had this filename, or %NULL,", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "new_blob", argType = TInterface (Name {namespace = "Ggit", name = "Blob"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GgitBlob to diff to.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "new_as_path", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "treat @new_blob as if it had this filename, or %NULL,", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "diff_options", argType = TInterface (Name {namespace = "Ggit", name = "DiffOptions"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GgitDiffOptions, or %NULL.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Ggit", name = "Patch"})) -- throws : True -- Skip return : False foreign import ccall "ggit_patch_new_from_blobs" ggit_patch_new_from_blobs :: Ptr Ggit.Blob.Blob -> -- old_blob : TInterface (Name {namespace = "Ggit", name = "Blob"}) CString -> -- old_as_path : TBasicType TUTF8 Ptr Ggit.Blob.Blob -> -- new_blob : TInterface (Name {namespace = "Ggit", name = "Blob"}) CString -> -- new_as_path : TBasicType TUTF8 Ptr Ggit.DiffOptions.DiffOptions -> -- diff_options : TInterface (Name {namespace = "Ggit", name = "DiffOptions"}) Ptr (Ptr GError) -> -- error IO (Ptr Patch) {- | Directly generate a patch from the difference between two blobs. This is just like 'GI.Ggit.Objects.Diff.diffBlobs' except it generates a patch object for the difference instead of directly making callbacks. You can use the standard ggit_patch accessor functions to read the patch data, and you must call ggit_patch_unref on the patch when done. -} patchNewFromBlobs :: (B.CallStack.HasCallStack, MonadIO m, Ggit.Blob.IsBlob a, Ggit.Blob.IsBlob b, Ggit.DiffOptions.IsDiffOptions c) => Maybe (a) {- ^ /@oldBlob@/: a 'GI.Ggit.Objects.Blob.Blob' to diff from. -} -> Maybe (T.Text) {- ^ /@oldAsPath@/: treat /@oldBlob@/ as if it had this filename, or 'Nothing', -} -> Maybe (b) {- ^ /@newBlob@/: a 'GI.Ggit.Objects.Blob.Blob' to diff to. -} -> Maybe (T.Text) {- ^ /@newAsPath@/: treat /@newBlob@/ as if it had this filename, or 'Nothing', -} -> Maybe (c) {- ^ /@diffOptions@/: a 'GI.Ggit.Objects.DiffOptions.DiffOptions', or 'Nothing'. -} -> m (Maybe Patch) {- ^ __Returns:__ a newly created 'GI.Ggit.Structs.Patch.Patch' or 'Nothing'. /(Can throw 'Data.GI.Base.GError.GError')/ -} patchNewFromBlobs oldBlob oldAsPath newBlob newAsPath diffOptions = liftIO $ do maybeOldBlob <- case oldBlob of Nothing -> return nullPtr Just jOldBlob -> do jOldBlob' <- unsafeManagedPtrCastPtr jOldBlob return jOldBlob' maybeOldAsPath <- case oldAsPath of Nothing -> return nullPtr Just jOldAsPath -> do jOldAsPath' <- textToCString jOldAsPath return jOldAsPath' maybeNewBlob <- case newBlob of Nothing -> return nullPtr Just jNewBlob -> do jNewBlob' <- unsafeManagedPtrCastPtr jNewBlob return jNewBlob' maybeNewAsPath <- case newAsPath of Nothing -> return nullPtr Just jNewAsPath -> do jNewAsPath' <- textToCString jNewAsPath return jNewAsPath' maybeDiffOptions <- case diffOptions of Nothing -> return nullPtr Just jDiffOptions -> do jDiffOptions' <- unsafeManagedPtrCastPtr jDiffOptions return jDiffOptions' onException (do result <- propagateGError $ ggit_patch_new_from_blobs maybeOldBlob maybeOldAsPath maybeNewBlob maybeNewAsPath maybeDiffOptions maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapBoxed Patch) result' return result'' whenJust oldBlob touchManagedPtr whenJust newBlob touchManagedPtr whenJust diffOptions touchManagedPtr freeMem maybeOldAsPath freeMem maybeNewAsPath return maybeResult ) (do freeMem maybeOldAsPath freeMem maybeNewAsPath ) #if ENABLE_OVERLOADING #endif -- method Patch::new_from_diff -- method type : Constructor -- Args : [Arg {argCName = "diff", argType = TInterface (Name {namespace = "Ggit", name = "Diff"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitDiff.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "idx", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "index into diff list.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Ggit", name = "Patch"})) -- throws : True -- Skip return : False foreign import ccall "ggit_patch_new_from_diff" ggit_patch_new_from_diff :: Ptr Ggit.Diff.Diff -> -- diff : TInterface (Name {namespace = "Ggit", name = "Diff"}) Word64 -> -- idx : TBasicType TUInt64 Ptr (Ptr GError) -> -- error IO (Ptr Patch) {- | The 'GI.Ggit.Structs.Patch.Patch' is a newly created object contains the text diffs for the delta. You have to call 'GI.Ggit.Structs.Patch.patchUnref' when you are done with it. You can use the patch object to loop over all the hunks and lines in the diff of the one delta. -} patchNewFromDiff :: (B.CallStack.HasCallStack, MonadIO m, Ggit.Diff.IsDiff a) => a {- ^ /@diff@/: a 'GI.Ggit.Objects.Diff.Diff'. -} -> Word64 {- ^ /@idx@/: index into diff list. -} -> m (Maybe Patch) {- ^ __Returns:__ a newly created 'GI.Ggit.Structs.Patch.Patch' or 'Nothing'. /(Can throw 'Data.GI.Base.GError.GError')/ -} patchNewFromDiff diff idx = liftIO $ do diff' <- unsafeManagedPtrCastPtr diff onException (do result <- propagateGError $ ggit_patch_new_from_diff diff' idx maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapBoxed Patch) result' return result'' touchManagedPtr diff return maybeResult ) (do return () ) #if ENABLE_OVERLOADING #endif -- method Patch::get_delta -- method type : OrdinaryMethod -- Args : [Arg {argCName = "patch", argType = TInterface (Name {namespace = "Ggit", name = "Patch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitPatch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Ggit", name = "DiffDelta"})) -- throws : False -- Skip return : False foreign import ccall "ggit_patch_get_delta" ggit_patch_get_delta :: Ptr Patch -> -- patch : TInterface (Name {namespace = "Ggit", name = "Patch"}) IO (Ptr Ggit.DiffDelta.DiffDelta) {- | Get the diff delta corresponding to the patch. -} patchGetDelta :: (B.CallStack.HasCallStack, MonadIO m) => Patch {- ^ /@patch@/: a 'GI.Ggit.Structs.Patch.Patch'. -} -> m (Maybe Ggit.DiffDelta.DiffDelta) {- ^ __Returns:__ the 'GI.Ggit.Structs.DiffDelta.DiffDelta' of the patch or 'Nothing'. -} patchGetDelta patch = liftIO $ do patch' <- unsafeManagedPtrGetPtr patch result <- ggit_patch_get_delta patch' maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapBoxed Ggit.DiffDelta.DiffDelta) result' return result'' touchManagedPtr patch return maybeResult #if ENABLE_OVERLOADING data PatchGetDeltaMethodInfo instance (signature ~ (m (Maybe Ggit.DiffDelta.DiffDelta)), MonadIO m) => O.MethodInfo PatchGetDeltaMethodInfo Patch signature where overloadedMethod _ = patchGetDelta #endif -- method Patch::get_hunk -- method type : OrdinaryMethod -- Args : [Arg {argCName = "patch", argType = TInterface (Name {namespace = "Ggit", name = "Patch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitPatch", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "idx", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the hunk index.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Ggit", name = "DiffHunk"})) -- throws : True -- Skip return : False foreign import ccall "ggit_patch_get_hunk" ggit_patch_get_hunk :: Ptr Patch -> -- patch : TInterface (Name {namespace = "Ggit", name = "Patch"}) Word64 -> -- idx : TBasicType TUInt64 Ptr (Ptr GError) -> -- error IO (Ptr Ggit.DiffHunk.DiffHunk) {- | Get the /@idx@/\'th hunk in the patch. -} patchGetHunk :: (B.CallStack.HasCallStack, MonadIO m) => Patch {- ^ /@patch@/: a 'GI.Ggit.Structs.Patch.Patch' -} -> Word64 {- ^ /@idx@/: the hunk index. -} -> m (Maybe Ggit.DiffHunk.DiffHunk) {- ^ __Returns:__ a new 'GI.Ggit.Structs.DiffHunk.DiffHunk' or 'Nothing' on error. /(Can throw 'Data.GI.Base.GError.GError')/ -} patchGetHunk patch idx = liftIO $ do patch' <- unsafeManagedPtrGetPtr patch onException (do result <- propagateGError $ ggit_patch_get_hunk patch' idx maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapBoxed Ggit.DiffHunk.DiffHunk) result' return result'' touchManagedPtr patch return maybeResult ) (do return () ) #if ENABLE_OVERLOADING data PatchGetHunkMethodInfo instance (signature ~ (Word64 -> m (Maybe Ggit.DiffHunk.DiffHunk)), MonadIO m) => O.MethodInfo PatchGetHunkMethodInfo Patch signature where overloadedMethod _ = patchGetHunk #endif -- method Patch::get_line_stats -- method type : OrdinaryMethod -- Args : [Arg {argCName = "patch", argType = TInterface (Name {namespace = "Ggit", name = "Patch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitPatch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "total_context", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "return value for the number of context lines.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "total_additions", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "return value for the number of added lines.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "total_deletions", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "return value for the number of deleted lines.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : True -- Skip return : False foreign import ccall "ggit_patch_get_line_stats" ggit_patch_get_line_stats :: Ptr Patch -> -- patch : TInterface (Name {namespace = "Ggit", name = "Patch"}) Ptr Word64 -> -- total_context : TBasicType TUInt64 Ptr Word64 -> -- total_additions : TBasicType TUInt64 Ptr Word64 -> -- total_deletions : TBasicType TUInt64 Ptr (Ptr GError) -> -- error IO CInt {- | Get the line statistics of the patch. -} patchGetLineStats :: (B.CallStack.HasCallStack, MonadIO m) => Patch {- ^ /@patch@/: a 'GI.Ggit.Structs.Patch.Patch'. -} -> m ((Word64, Word64, Word64)) {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -} patchGetLineStats patch = liftIO $ do patch' <- unsafeManagedPtrGetPtr patch totalContext <- allocMem :: IO (Ptr Word64) totalAdditions <- allocMem :: IO (Ptr Word64) totalDeletions <- allocMem :: IO (Ptr Word64) onException (do _ <- propagateGError $ ggit_patch_get_line_stats patch' totalContext totalAdditions totalDeletions totalContext' <- peek totalContext totalAdditions' <- peek totalAdditions totalDeletions' <- peek totalDeletions touchManagedPtr patch freeMem totalContext freeMem totalAdditions freeMem totalDeletions return (totalContext', totalAdditions', totalDeletions') ) (do freeMem totalContext freeMem totalAdditions freeMem totalDeletions ) #if ENABLE_OVERLOADING data PatchGetLineStatsMethodInfo instance (signature ~ (m ((Word64, Word64, Word64))), MonadIO m) => O.MethodInfo PatchGetLineStatsMethodInfo Patch signature where overloadedMethod _ = patchGetLineStats #endif -- method Patch::get_num_hunks -- method type : OrdinaryMethod -- Args : [Arg {argCName = "patch", argType = TInterface (Name {namespace = "Ggit", name = "Patch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitPatch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TUInt64) -- throws : False -- Skip return : False foreign import ccall "ggit_patch_get_num_hunks" ggit_patch_get_num_hunks :: Ptr Patch -> -- patch : TInterface (Name {namespace = "Ggit", name = "Patch"}) IO Word64 {- | Get the number of hunks in the patch. -} patchGetNumHunks :: (B.CallStack.HasCallStack, MonadIO m) => Patch {- ^ /@patch@/: a 'GI.Ggit.Structs.Patch.Patch'. -} -> m Word64 {- ^ __Returns:__ the number of hunks. -} patchGetNumHunks patch = liftIO $ do patch' <- unsafeManagedPtrGetPtr patch result <- ggit_patch_get_num_hunks patch' touchManagedPtr patch return result #if ENABLE_OVERLOADING data PatchGetNumHunksMethodInfo instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo PatchGetNumHunksMethodInfo Patch signature where overloadedMethod _ = patchGetNumHunks #endif -- method Patch::get_num_lines_in_hunk -- method type : OrdinaryMethod -- Args : [Arg {argCName = "patch", argType = TInterface (Name {namespace = "Ggit", name = "Patch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitPatch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "hunk", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the hunk index.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TInt) -- throws : False -- Skip return : False foreign import ccall "ggit_patch_get_num_lines_in_hunk" ggit_patch_get_num_lines_in_hunk :: Ptr Patch -> -- patch : TInterface (Name {namespace = "Ggit", name = "Patch"}) Word64 -> -- hunk : TBasicType TUInt64 IO Int32 {- | Get the number of lines in /@hunk@/. -} patchGetNumLinesInHunk :: (B.CallStack.HasCallStack, MonadIO m) => Patch {- ^ /@patch@/: a 'GI.Ggit.Structs.Patch.Patch'. -} -> Word64 {- ^ /@hunk@/: the hunk index. -} -> m Int32 {- ^ __Returns:__ the number of lines. -} patchGetNumLinesInHunk patch hunk = liftIO $ do patch' <- unsafeManagedPtrGetPtr patch result <- ggit_patch_get_num_lines_in_hunk patch' hunk touchManagedPtr patch return result #if ENABLE_OVERLOADING data PatchGetNumLinesInHunkMethodInfo instance (signature ~ (Word64 -> m Int32), MonadIO m) => O.MethodInfo PatchGetNumLinesInHunkMethodInfo Patch signature where overloadedMethod _ = patchGetNumLinesInHunk #endif -- method Patch::ref -- method type : OrdinaryMethod -- Args : [Arg {argCName = "patch", argType = TInterface (Name {namespace = "Ggit", name = "Patch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitPatch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Ggit", name = "Patch"})) -- throws : False -- Skip return : False foreign import ccall "ggit_patch_ref" ggit_patch_ref :: Ptr Patch -> -- patch : TInterface (Name {namespace = "Ggit", name = "Patch"}) IO (Ptr Patch) {- | Atomically increments the reference count of /@patch@/ by one. This function is MT-safe and may be called from any thread. -} patchRef :: (B.CallStack.HasCallStack, MonadIO m) => Patch {- ^ /@patch@/: a 'GI.Ggit.Structs.Patch.Patch'. -} -> m (Maybe Patch) {- ^ __Returns:__ a 'GI.Ggit.Structs.Patch.Patch' or 'Nothing'. -} patchRef patch = liftIO $ do patch' <- unsafeManagedPtrGetPtr patch result <- ggit_patch_ref patch' maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (newBoxed Patch) result' return result'' touchManagedPtr patch return maybeResult #if ENABLE_OVERLOADING data PatchRefMethodInfo instance (signature ~ (m (Maybe Patch)), MonadIO m) => O.MethodInfo PatchRefMethodInfo Patch signature where overloadedMethod _ = patchRef #endif -- method Patch::to_stream -- method type : OrdinaryMethod -- Args : [Arg {argCName = "patch", argType = TInterface (Name {namespace = "Ggit", name = "Patch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitPatch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "OutputStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GOutputStream.", 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_patch_to_stream" ggit_patch_to_stream :: Ptr Patch -> -- patch : TInterface (Name {namespace = "Ggit", name = "Patch"}) Ptr Gio.OutputStream.OutputStream -> -- stream : TInterface (Name {namespace = "Gio", name = "OutputStream"}) Ptr (Ptr GError) -> -- error IO CInt {- | Write the contents of a patch to the provided stream. -} patchToStream :: (B.CallStack.HasCallStack, MonadIO m, Gio.OutputStream.IsOutputStream a) => Patch {- ^ /@patch@/: a 'GI.Ggit.Structs.Patch.Patch'. -} -> a {- ^ /@stream@/: a 'GI.Gio.Objects.OutputStream.OutputStream'. -} -> m () {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -} patchToStream patch stream = liftIO $ do patch' <- unsafeManagedPtrGetPtr patch stream' <- unsafeManagedPtrCastPtr stream onException (do _ <- propagateGError $ ggit_patch_to_stream patch' stream' touchManagedPtr patch touchManagedPtr stream return () ) (do return () ) #if ENABLE_OVERLOADING data PatchToStreamMethodInfo instance (signature ~ (a -> m ()), MonadIO m, Gio.OutputStream.IsOutputStream a) => O.MethodInfo PatchToStreamMethodInfo Patch signature where overloadedMethod _ = patchToStream #endif -- method Patch::to_string -- method type : OrdinaryMethod -- Args : [Arg {argCName = "patch", argType = TInterface (Name {namespace = "Ggit", name = "Patch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitPatch.", 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_patch_to_string" ggit_patch_to_string :: Ptr Patch -> -- patch : TInterface (Name {namespace = "Ggit", name = "Patch"}) Ptr (Ptr GError) -> -- error IO CString {- | Gets the content of a patch as a single diff text. -} patchToString :: (B.CallStack.HasCallStack, MonadIO m) => Patch {- ^ /@patch@/: a 'GI.Ggit.Structs.Patch.Patch'. -} -> m (Maybe T.Text) {- ^ __Returns:__ the content of a patch as a single diff text or 'Nothing'. /(Can throw 'Data.GI.Base.GError.GError')/ -} patchToString patch = liftIO $ do patch' <- unsafeManagedPtrGetPtr patch onException (do result <- propagateGError $ ggit_patch_to_string patch' maybeResult <- convertIfNonNull result $ \result' -> do result'' <- cstringToText result' freeMem result' return result'' touchManagedPtr patch return maybeResult ) (do return () ) #if ENABLE_OVERLOADING data PatchToStringMethodInfo instance (signature ~ (m (Maybe T.Text)), MonadIO m) => O.MethodInfo PatchToStringMethodInfo Patch signature where overloadedMethod _ = patchToString #endif -- method Patch::unref -- method type : OrdinaryMethod -- Args : [Arg {argCName = "patch", argType = TInterface (Name {namespace = "Ggit", name = "Patch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitPatch.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "ggit_patch_unref" ggit_patch_unref :: Ptr Patch -> -- patch : TInterface (Name {namespace = "Ggit", name = "Patch"}) IO () {- | Atomically decrements the reference count of /@patch@/ by one. If the reference count drops to 0, /@patch@/ is freed. -} patchUnref :: (B.CallStack.HasCallStack, MonadIO m) => Patch {- ^ /@patch@/: a 'GI.Ggit.Structs.Patch.Patch'. -} -> m () patchUnref patch = liftIO $ do patch' <- unsafeManagedPtrGetPtr patch ggit_patch_unref patch' touchManagedPtr patch return () #if ENABLE_OVERLOADING data PatchUnrefMethodInfo instance (signature ~ (m ()), MonadIO m) => O.MethodInfo PatchUnrefMethodInfo Patch signature where overloadedMethod _ = patchUnref #endif #if ENABLE_OVERLOADING type family ResolvePatchMethod (t :: Symbol) (o :: *) :: * where ResolvePatchMethod "ref" o = PatchRefMethodInfo ResolvePatchMethod "toStream" o = PatchToStreamMethodInfo ResolvePatchMethod "toString" o = PatchToStringMethodInfo ResolvePatchMethod "unref" o = PatchUnrefMethodInfo ResolvePatchMethod "getDelta" o = PatchGetDeltaMethodInfo ResolvePatchMethod "getHunk" o = PatchGetHunkMethodInfo ResolvePatchMethod "getLineStats" o = PatchGetLineStatsMethodInfo ResolvePatchMethod "getNumHunks" o = PatchGetNumHunksMethodInfo ResolvePatchMethod "getNumLinesInHunk" o = PatchGetNumLinesInHunkMethodInfo ResolvePatchMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolvePatchMethod t Patch, O.MethodInfo info Patch p) => OL.IsLabel t (Patch -> 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