@@ -30,7 +30,10 @@ instance CWrapper TreeBuilder where
3030
3131-- | Get the id of a tree.
3232treeId :: Tree -> OID
33- treeId = undefined -- unsafePerformIO . callRetCons {#call git_tree_id#} OID
33+ treeId (Tree tfp) = unsafePerformIO $
34+ withForeignPtr tfp $ \ t -> do
35+ ptr <- mkFPtr =<< {# call git_tree_id# } t
36+ return $ OID ptr
3437
3538-- | Get the number of entries listed in a tree
3639entryCount :: Tree -> IO Int
@@ -41,16 +44,16 @@ entryCount (Tree tfp) = withForeignPtr tfp $ \t ->
4144entryByName :: Tree -> String -> IO TreeEntry
4245entryByName (Tree tfp) fn =
4346 withForeignPtr tfp $ \ t ->
44- withCString fn $ \ nm ->
45- undefined
46- {- fmap TreeEntry $ {#call git_tree_entry_byname#} t nm -}
47+ withCString fn $ \ nm -> do
48+ ptr <- mkFPtr =<< { # call git_tree_entry_byname # } t nm
49+ return $ TreeEntry ptr
4750
4851-- | Lookup a tree entry by its position in the tree
4952entryByIndex :: Tree -> Int -> IO TreeEntry
5053entryByIndex (Tree tfp) n =
51- withForeignPtr tfp $ \ t ->
52- undefined
53- {- fmap TreeEntry $ {#call git_tree_entry_byindex#} t (fromIntegral n) -}
54+ withForeignPtr tfp $ \ t -> do
55+ ptr <- mkFPtr =<< { # call git_tree_entry_byindex # } t ( fromIntegral n)
56+ return $ TreeEntry ptr
5457
5558-- | Get the UNIX file attributes of a tree entry
5659attributes :: TreeEntry -> IO Int
@@ -66,14 +69,16 @@ name (TreeEntry tfp) =
6669
6770-- | Get the id of the object pointed by the entry
6871entryId :: TreeEntry -> IO OID
69- entryId = undefined -- callRetCons {#call git_tree_entry_id#} OID
72+ entryId (TreeEntry tfp) =
73+ withForeignPtr tfp $ \ t -> do
74+ ptr <- mkFPtr =<< {# call git_tree_entry_id# } t
75+ return $ OID ptr
7076
7177-- | Get the type of the object pointed by the entry
7278entryType :: TreeEntry -> IO OType
7379entryType (TreeEntry tfp) =
74- withForeignPtr tfp $ \ t ->
75- undefined
76- {- fmap (toEnum . fromIntegral) $ {#call git_tree_entry_type#} t-}
80+ withForeignPtr tfp $ \ t -> do
81+ return . toEnum . fromIntegral =<< {# call git_tree_entry_type# } t
7782
7883-- | Convert a tree entry to the git_object it points too.
7984entryToObj :: Repository -> TreeEntry -> IOEitherErr GitObj
@@ -87,9 +92,10 @@ createFromIndex :: OID -> Index -> IO (Maybe GitError)
8792createFromIndex (OID ofp) (Index ifp) =
8893 withForeignPtr ofp $ \ o ->
8994 withForeignPtr ifp $ \ i ->
90- undefined -- retMaybe =<< {#call git_tree_create_fromindex#} o i
95+ retMaybe =<< {# call git_tree_create_fromindex# } o i
9196
9297-- | Create a new tree builder
98+ -- TODO: Finish
9399createTreeBuilder :: Maybe Tree -> IO (Either GitError TreeBuilder )
94100createTreeBuilder tr = alloca $ \ builder -> do
95101 res <- {# call git_treebuilder_create# } builder undefined -- t
@@ -121,14 +127,14 @@ insertTreeBuilder (TreeBuilder tfp) fn (OID ofp) as =
121127 alloca $ \ entry ->
122128 withCString fn $ \ nm -> do
123129 res <- {# call git_treebuilder_insert# } entry b nm o (fromIntegral as)
124- undefined -- retEither res $ fmap (Right . TreeEntry) $ peek entry
130+ retEither res $ fmap (Right . TreeEntry ) $ mkFPtr =<< peek entry
125131
126132-- | Remove an entry from the builder by its filename
127133removeTreeBuilder :: TreeBuilder -> String -> IO (Maybe GitError )
128134removeTreeBuilder (TreeBuilder tfp) fn =
129135 withForeignPtr tfp $ \ t ->
130136 withCString fn $ \ nm ->
131- undefined -- retMaybe =<< {#call git_treebuilder_remove#} t nm
137+ retMaybe =<< {# call git_treebuilder_remove# } t nm
132138
133139{-
134140/**
@@ -155,4 +161,4 @@ writeTreeBuilder (OID ofp) (Repository rfp) (TreeBuilder tfp) =
155161 withForeignPtr ofp $ \ o ->
156162 withForeignPtr rfp $ \ r ->
157163 withForeignPtr tfp $ \ t ->
158- undefined -- retMaybe =<< {#call git_treebuilder_write#} o r t
164+ retMaybe =<< {# call git_treebuilder_write# } o r t
0 commit comments