packages feed

dpkg 0.0.2 → 0.0.3

raw patch · 7 files changed

+90/−90 lines, 7 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Debian.Dpkg.DB: c'versioncompare :: Ptr C'versionrevision -> Ptr C'versionrevision -> IO CInt
- Debian.Dpkg.Types: C'versionrevision :: CInt -> CString -> CString -> C'versionrevision
- Debian.Dpkg.Types: c'versionrevision'epoch :: C'versionrevision -> CInt
- Debian.Dpkg.Types: c'versionrevision'revision :: C'versionrevision -> CString
- Debian.Dpkg.Types: c'versionrevision'version :: C'versionrevision -> CString
- Debian.Dpkg.Types: data C'versionrevision
- Debian.Dpkg.Types: instance Eq C'versionrevision
- Debian.Dpkg.Types: instance Show C'versionrevision
- Debian.Dpkg.Types: instance Storable C'versionrevision
- Debian.Dpkg.Types: p'versionrevision'epoch :: Ptr (C'versionrevision) -> Ptr (CInt)
- Debian.Dpkg.Types: p'versionrevision'revision :: Ptr (C'versionrevision) -> Ptr (CString)
- Debian.Dpkg.Types: p'versionrevision'version :: Ptr (C'versionrevision) -> Ptr (CString)
- Debian.Dpkg.VersionRevision: VersionRevision :: Int -> ByteString -> ByteString -> VersionRevision
- Debian.Dpkg.VersionRevision: data VersionRevision
- Debian.Dpkg.VersionRevision: getConfigVersion :: C'pkginfo -> IO String
- Debian.Dpkg.VersionRevision: instance Eq VersionRevision
- Debian.Dpkg.VersionRevision: instance Ord C'versionrevision
- Debian.Dpkg.VersionRevision: instance Show VersionRevision
- Debian.Dpkg.VersionRevision: peekVersionRevision :: C'versionrevision -> IO VersionRevision
- Debian.Dpkg.VersionRevision: vr_epoch :: VersionRevision -> Int
- Debian.Dpkg.VersionRevision: vr_revision :: VersionRevision -> ByteString
- Debian.Dpkg.VersionRevision: vr_version :: VersionRevision -> ByteString
+ Debian.Dpkg.DB: c'dpkg_version_compare :: Ptr C'dpkg_version -> Ptr C'dpkg_version -> IO CInt
+ Debian.Dpkg.DpkgVersion: DpkgVersion :: Int -> ByteString -> ByteString -> DpkgVersion
+ Debian.Dpkg.DpkgVersion: data DpkgVersion
+ Debian.Dpkg.DpkgVersion: getConfigVersion :: C'pkginfo -> IO String
+ Debian.Dpkg.DpkgVersion: instance Eq DpkgVersion
+ Debian.Dpkg.DpkgVersion: instance Ord C'dpkg_version
+ Debian.Dpkg.DpkgVersion: instance Show DpkgVersion
+ Debian.Dpkg.DpkgVersion: peekDpkgVersion :: C'dpkg_version -> IO DpkgVersion
+ Debian.Dpkg.DpkgVersion: vr_epoch :: DpkgVersion -> Int
+ Debian.Dpkg.DpkgVersion: vr_revision :: DpkgVersion -> ByteString
+ Debian.Dpkg.DpkgVersion: vr_version :: DpkgVersion -> ByteString
+ Debian.Dpkg.Types: C'dpkg_version :: CInt -> CString -> CString -> C'dpkg_version
+ Debian.Dpkg.Types: c'dpkg_version'epoch :: C'dpkg_version -> CInt
+ Debian.Dpkg.Types: c'dpkg_version'revision :: C'dpkg_version -> CString
+ Debian.Dpkg.Types: c'dpkg_version'version :: C'dpkg_version -> CString
+ Debian.Dpkg.Types: data C'dpkg_version
+ Debian.Dpkg.Types: instance Eq C'dpkg_version
+ Debian.Dpkg.Types: instance Show C'dpkg_version
+ Debian.Dpkg.Types: instance Storable C'dpkg_version
+ Debian.Dpkg.Types: p'dpkg_version'epoch :: Ptr (C'dpkg_version) -> Ptr (CInt)
+ Debian.Dpkg.Types: p'dpkg_version'revision :: Ptr (C'dpkg_version) -> Ptr (CString)
+ Debian.Dpkg.Types: p'dpkg_version'version :: Ptr (C'dpkg_version) -> Ptr (CString)
- Debian.Dpkg.DB: c'parseversion :: Ptr C'versionrevision -> CString -> Ptr C'dpkg_error -> IO CInt
+ Debian.Dpkg.DB: c'parseversion :: Ptr C'dpkg_version -> CString -> Ptr C'dpkg_error -> IO CInt
- Debian.Dpkg.DB: parseVersion :: ByteString -> IO (Either String C'versionrevision)
+ Debian.Dpkg.DB: parseVersion :: ByteString -> IO (Either String C'dpkg_version)
- Debian.Dpkg.Types: C'pkginfo :: Ptr C'pkgset -> Ptr C'pkginfo -> C'pkgwant -> C'pkgeflag -> C'pkgstatus -> C'pkgpriority -> CString -> CString -> C'versionrevision -> Ptr C'filedetails -> C'pkgbin -> C'pkgbin -> Ptr C'perpackagestate -> C'pkginfo
+ Debian.Dpkg.Types: C'pkginfo :: Ptr C'pkgset -> Ptr C'pkginfo -> C'pkgwant -> C'pkgeflag -> C'pkgstatus -> C'pkgpriority -> CString -> CString -> C'dpkg_version -> Ptr C'filedetails -> C'pkgbin -> C'pkgbin -> Ptr C'perpackagestate -> C'pkginfo
- Debian.Dpkg.Types: c'pkginfo'configversion :: C'pkginfo -> C'versionrevision
+ Debian.Dpkg.Types: c'pkginfo'configversion :: C'pkginfo -> C'dpkg_version
- Debian.Dpkg.Types: p'pkginfo'configversion :: Ptr (C'pkginfo) -> Ptr (C'versionrevision)
+ Debian.Dpkg.Types: p'pkginfo'configversion :: Ptr (C'pkginfo) -> Ptr (C'dpkg_version)

Files

Debian/Dpkg.hs view
@@ -2,10 +2,10 @@         ( module Debian.Dpkg.DB         , module Debian.Dpkg.Enums         , module Debian.Dpkg.Types-        , module Debian.Dpkg.VersionRevision+        , module Debian.Dpkg.DpkgVersion         ) where  import Debian.Dpkg.DB import Debian.Dpkg.Enums import Debian.Dpkg.Types-import Debian.Dpkg.VersionRevision+import Debian.Dpkg.DpkgVersion
Debian/Dpkg/DB.hsc view
@@ -27,7 +27,7 @@   , pkgList   , parseVersion   , c'parseversion-  , c'versioncompare+  , c'dpkg_version_compare ) where #strict_import @@ -73,10 +73,10 @@ pkgList :: IO [C'pkginfo] pkgList = pkgpList >>= mapM peek -#callconv parseversion , ccall unsafe , Ptr C'versionrevision -> CString -> Ptr C'dpkg_error -> IO CInt-#callconv versioncompare , ccall unsafe , Ptr C'versionrevision -> Ptr C'versionrevision -> IO CInt+#callconv parseversion , ccall unsafe , Ptr C'dpkg_version -> CString -> Ptr C'dpkg_error -> IO CInt+#callconv dpkg_version_compare , ccall unsafe , Ptr C'dpkg_version -> Ptr C'dpkg_version -> IO CInt -parseVersion :: BS.ByteString -> IO (Either String C'versionrevision)+parseVersion :: BS.ByteString -> IO (Either String C'dpkg_version) parseVersion verstr = BS.useAsCString verstr $ \vercstr -> alloca $ \vrptr -> alloca $ \deptr -> do         i <- c'parseversion vrptr vercstr deptr         vr <- peek vrptr
+ Debian/Dpkg/DpkgVersion.hs view
@@ -0,0 +1,77 @@+{-+ DpkgVersion.hs: Haskell bindings to libdpkg+   Copyright (C) 2011-2012 Clint Adams++ This program is free software; you can redistribute it and/or modify+ it under the terms of the GNU General Public License as published by+ the Free Software Foundation; either version 3 of the License, or+ (at your option) any later version.++ This program is distributed in the hope that it will be useful,+ but WITHOUT ANY WARRANTY; without even the implied warranty of+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+ GNU General Public License for more details.++ You should have received a copy of the GNU General Public License+ along with this program; if not, write to the Free Software+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA+-}++module Debian.Dpkg.DpkgVersion (+    peekDpkgVersion+  , getConfigVersion+  , DpkgVersion(DpkgVersion,vr_epoch,vr_version,vr_revision)+) where++import Data.ByteString.Char8 (unpack)+import Foreign.Ptr (Ptr)+import Foreign.Marshal.Utils (with)+import System.IO.Unsafe (unsafePerformIO)++import Debian.Dpkg.Types+import Debian.Dpkg.DB (c'parseversion, c'dpkg_version_compare)++import qualified Data.ByteString as BS++-- #starttype struct dpkg_version+-- #field epoch , CInt+-- #field version , CString+-- #field revision , CString+-- #stoptype++peekDpkgVersion :: C'dpkg_version -> IO DpkgVersion+peekDpkgVersion vr = do+        v <- BS.packCString (c'dpkg_version'version vr)+        r <- BS.packCString (c'dpkg_version'revision vr)+        return $ DpkgVersion (fromIntegral (c'dpkg_version'epoch vr)) v r++getConfigVersion :: C'pkginfo -> IO String+getConfigVersion p = do+		vr <- peekDpkgVersion (c'pkginfo'configversion p)+		let e = fromIntegral (vr_epoch vr)+		let v = vr_version vr+		let r = vr_revision vr+		return $ nonZeroEpoch e ++ (unpack v) ++ nonNativeRevision r+	where+		nonZeroEpoch e = if e == 0 then "" else (show e) ++ ":"+		nonNativeRevision r = if r == BS.empty then (unpack r) else "-" ++ (unpack r)++data DpkgVersion = DpkgVersion {+  vr_epoch :: Int,+  vr_version :: BS.ByteString,+  vr_revision :: BS.ByteString+} deriving (Eq,Show)++cvrpCompare :: Ptr C'dpkg_version -> Ptr C'dpkg_version -> IO Ordering+cvrpCompare x y = do+        r <- c'dpkg_version_compare x y+        case r of+                -1 -> return LT+                0  -> return EQ+                1  -> return GT++cvrCompare :: C'dpkg_version -> C'dpkg_version -> Ordering+cvrCompare = (unsafePerformIO .) . (. ((. cvrpCompare) . with)) . with++instance Ord C'dpkg_version where+  compare = cvrCompare
Debian/Dpkg/Types.hsc view
@@ -1,6 +1,6 @@ {-  Types.hsc: Haskell bindings to libdpkg-   Copyright (C) 2011 Clint Adams+   Copyright (C) 2011-2012 Clint Adams   This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by@@ -29,7 +29,7 @@ #include <dpkg/dpkg-db.h> #include <dpkg/error.h> -#starttype struct versionrevision+#starttype struct dpkg_version #field epoch , CInt #field version , CString #field revision , CString@@ -64,7 +64,7 @@ #field priority , <pkgpriority> #field otherpriority , CString #field section , CString-#field configversion , <versionrevision>+#field configversion , <dpkg_version> #field files , Ptr <filedetails> #field installed , <pkgbin> #field available , <pkgbin>
− Debian/Dpkg/VersionRevision.hs
@@ -1,77 +0,0 @@-{-- VersionRevision.hs: Haskell bindings to libdpkg-   Copyright (C) 2011 Clint Adams-- This program is free software; you can redistribute it and/or modify- it under the terms of the GNU General Public License as published by- the Free Software Foundation; either version 3 of the License, or- (at your option) any later version.-- This program is distributed in the hope that it will be useful,- but WITHOUT ANY WARRANTY; without even the implied warranty of- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the- GNU General Public License for more details.-- You should have received a copy of the GNU General Public License- along with this program; if not, write to the Free Software- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA--}--module Debian.Dpkg.VersionRevision (-    peekVersionRevision-  , getConfigVersion-  , VersionRevision(VersionRevision,vr_epoch,vr_version,vr_revision)-) where--import Data.ByteString.Char8 (unpack)-import Foreign.Ptr (Ptr)-import Foreign.Marshal.Utils (with)-import System.IO.Unsafe (unsafePerformIO)--import Debian.Dpkg.Types-import Debian.Dpkg.DB (c'parseversion, c'versioncompare)--import qualified Data.ByteString as BS---- #starttype struct versionrevision--- #field epoch , CInt--- #field version , CString--- #field revision , CString--- #stoptype--peekVersionRevision :: C'versionrevision -> IO VersionRevision-peekVersionRevision vr = do-        v <- BS.packCString (c'versionrevision'version vr)-        r <- BS.packCString (c'versionrevision'revision vr)-        return $ VersionRevision (fromIntegral (c'versionrevision'epoch vr)) v r--getConfigVersion :: C'pkginfo -> IO String-getConfigVersion p = do-		vr <- peekVersionRevision (c'pkginfo'configversion p)-		let e = fromIntegral (vr_epoch vr)-		let v = vr_version vr-		let r = vr_revision vr-		return $ nonZeroEpoch e ++ (unpack v) ++ nonNativeRevision r-	where-		nonZeroEpoch e = if e == 0 then "" else (show e) ++ ":"-		nonNativeRevision r = if r == BS.empty then (unpack r) else "-" ++ (unpack r)--data VersionRevision = VersionRevision {-  vr_epoch :: Int,-  vr_version :: BS.ByteString,-  vr_revision :: BS.ByteString-} deriving (Eq,Show)--cvrpCompare :: Ptr C'versionrevision -> Ptr C'versionrevision -> IO Ordering-cvrpCompare x y = do-        r <- c'versioncompare x y-        case r of-                -1 -> return LT-                0  -> return EQ-                1  -> return GT--cvrCompare :: C'versionrevision -> C'versionrevision -> Ordering-cvrCompare = (unsafePerformIO .) . (. ((. cvrpCompare) . with)) . with--instance Ord C'versionrevision where-  compare = cvrCompare
dpkg.cabal view
@@ -1,5 +1,5 @@ Name:                dpkg-Version:             0.0.2+Version:             0.0.3 Synopsis:            libdpkg bindings Description:         Haskell bindings to the libdpkg API Copyright:           (C) 2011, 2012 Clint Adams@@ -23,7 +23,7 @@                  , Debian.Dpkg.PkgSpec                  , Debian.Dpkg.Types                  , Debian.Dpkg.Enums-                 , Debian.Dpkg.VersionRevision+                 , Debian.Dpkg.DpkgVersion   other-extensions: ForeignFunctionInterface   pkgconfig-depends: libdpkg >= 1.16.2   cpp-options: -DLIBDPKG_VOLATILE_API=1
test.hs view
@@ -3,7 +3,7 @@ import Debian.Dpkg.Enums import Debian.Dpkg.PkgSpec import Debian.Dpkg.Types-import Debian.Dpkg.VersionRevision+import Debian.Dpkg.DpkgVersion  import Foreign.C.String (peekCString) import Foreign.Storable (peek)@@ -44,7 +44,7 @@         case cvr of              Left msg -> assertString msg              Right v  -> do-                 vr <- peekVersionRevision v+                 vr <- peekDpkgVersion v                  assertEqual "epoch" 9 (vr_epoch vr)                  assertEqual "version" (pack "8.7.6") (vr_version vr)                  assertEqual "revision" (pack "5") (vr_revision vr)