Hello community,

here is the log from the commit of package ghc-hsexif for openSUSE:Factory 
checked in at 2017-05-10 20:48:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-hsexif (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-hsexif.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-hsexif"

Wed May 10 20:48:09 2017 rev:2 rq:489356 version:0.6.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-hsexif/ghc-hsexif.changes    2017-04-12 
17:12:28.890982644 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-hsexif.new/ghc-hsexif.changes       
2017-05-10 20:48:10.298708670 +0200
@@ -1,0 +2,20 @@
+Mon Mar 27 12:41:03 UTC 2017 - psim...@suse.com
+
+- Update to version 0.6.1.1 with cabal2obs.
+
+-------------------------------------------------------------------
+Mon Feb 20 08:41:35 UTC 2017 - psim...@suse.com
+
+- Update to version 0.6.1.0 with cabal2obs.
+
+-------------------------------------------------------------------
+Thu Oct 27 15:54:51 UTC 2016 - psim...@suse.com
+
+- Update to version 0.6.0.10 with cabal2obs.
+
+-------------------------------------------------------------------
+Tue Oct 11 08:49:46 UTC 2016 - psim...@suse.com
+
+- Update to version 0.6.0.9 with cabal2obs.
+
+-------------------------------------------------------------------

Old:
----
  hsexif-0.6.0.8.tar.gz

New:
----
  hsexif-0.6.1.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-hsexif.spec ++++++
--- /var/tmp/diff_new_pack.JGH3p5/_old  2017-05-10 20:48:12.142448507 +0200
+++ /var/tmp/diff_new_pack.JGH3p5/_new  2017-05-10 20:48:12.146447942 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package ghc-hsexif
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,15 +19,14 @@
 %global pkg_name hsexif
 %bcond_with tests
 Name:           ghc-%{pkg_name}
-Version:        0.6.0.8
+Version:        0.6.1.1
 Release:        0
 Summary:        EXIF handling library in pure Haskell
 License:        BSD-3-Clause
-Group:          System/Libraries
+Group:          Development/Languages/Other
 Url:            https://hackage.haskell.org/package/%{pkg_name}
 Source0:        
https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
 BuildRequires:  ghc-Cabal-devel
-# Begin cabal-rpm deps:
 BuildRequires:  ghc-binary-devel
 BuildRequires:  ghc-bytestring-devel
 BuildRequires:  ghc-containers-devel
@@ -40,7 +39,6 @@
 BuildRequires:  ghc-HUnit-devel
 BuildRequires:  ghc-hspec-devel
 %endif
-# End cabal-rpm deps
 
 %description
 The hsexif library provides functions for working with EXIF data contained in
@@ -60,20 +58,14 @@
 %prep
 %setup -q -n %{pkg_name}-%{version}
 
-
 %build
 %ghc_lib_build
 
-
 %install
 %ghc_lib_install
 
-
 %check
-%if %{with tests}
-%{cabal} test
-%endif
-
+%cabal_test
 
 %post devel
 %ghc_pkg_recache

++++++ hsexif-0.6.0.8.tar.gz -> hsexif-0.6.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hsexif-0.6.0.8/Graphics/HsExif.hs 
new/hsexif-0.6.1.1/Graphics/HsExif.hs
--- old/hsexif-0.6.0.8/Graphics/HsExif.hs       2016-03-10 23:01:07.000000000 
+0100
+++ new/hsexif-0.6.1.1/Graphics/HsExif.hs       2017-03-20 16:14:21.000000000 
+0100
@@ -185,13 +185,15 @@
 
 getExif :: Get (Map ExifTag ExifValue)
 getExif = do
-    header <- getWord16be
-    unless (header == 0xffd8)
-        $ fail "Not a JPEG file"
-    findAndParseExifBlock
+    firstBytes <- lookAhead $ (,) <$> getWord16be <*> getWord16be
+    case firstBytes of
+        (0xffd8,_ ) -> getWord16be >> findAndParseExifBlockJPEG
+        (0x4d4d,42) -> findAndParseExifBlockNEF
+        (0x4949,42) -> findAndParseExifBlockNEF
+        _           -> fail "Not a JPEG or NEF file"
 
-findAndParseExifBlock :: Get (Map ExifTag ExifValue)
-findAndParseExifBlock = do
+findAndParseExifBlockJPEG :: Get (Map ExifTag ExifValue)
+findAndParseExifBlockJPEG = do
     markerNumber <- getWord16be
     dataSize <- fromIntegral . toInteger <$> getWord16be
     case markerNumber of
@@ -199,7 +201,10 @@
         -- ffda is Start Of Stream => image
         -- I expect no more EXIF data after this point.
         0xffda -> fail "No EXIF in JPEG"
-        _ -> skip (dataSize-2) >> findAndParseExifBlock
+        _ -> skip (dataSize-2) >> findAndParseExifBlockJPEG
+
+findAndParseExifBlockNEF :: Get (Map ExifTag ExifValue)
+findAndParseExifBlockNEF = parseTiff
 
 data ByteAlign = Intel | Motorola
 
@@ -221,6 +226,10 @@
     nul <- toInteger <$> getWord16be
     unless (header == Char8.pack "Exif" && nul == 0)
         $ fail "invalid EXIF header"
+    parseTiff
+
+parseTiff :: Get (Map ExifTag ExifValue)
+parseTiff = do
     tiffHeaderStart <- fromIntegral <$> bytesRead
     byteAlign <- parseTiffHeader
     let subIfdParse = parseSubIFD byteAlign tiffHeaderStart
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hsexif-0.6.0.8/hsexif.cabal 
new/hsexif-0.6.1.1/hsexif.cabal
--- old/hsexif-0.6.0.8/hsexif.cabal     2016-03-10 23:01:07.000000000 +0100
+++ new/hsexif-0.6.1.1/hsexif.cabal     2017-03-20 16:26:35.000000000 +0100
@@ -1,5 +1,5 @@
 name:                hsexif
-version:             0.6.0.8
+version:             0.6.1.1
 synopsis:            EXIF handling library in pure Haskell
 description:         The hsexif library provides functions for working with 
EXIF data
                      contained in JPEG files. Currently it only supports 
reading the data.
@@ -11,7 +11,7 @@
 -- copyright:
 category:            Graphics
 build-type:          Simple
-extra-source-files:  tests/*.jpg tests/*.png
+extra-source-files:  tests/*.jpg tests/*.png tests/*.NEF
 cabal-version:       >=1.10
 
 Flag iconv
@@ -44,7 +44,7 @@
   default-language:    Haskell2010
   build-depends:       base,
                        hspec,
-                       HUnit >= 1.2 && <1.4,
+                       HUnit >= 1.2 && <1.7,
                        binary >=0.7 && <0.9,
                        bytestring >=0.10 && <0.11,
                        containers >= 0.5 && <0.6,
Binary files old/hsexif-0.6.0.8/tests/RAW_NIKON_D1.NEF and 
new/hsexif-0.6.1.1/tests/RAW_NIKON_D1.NEF differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hsexif-0.6.0.8/tests/Tests.hs 
new/hsexif-0.6.1.1/tests/Tests.hs
--- old/hsexif-0.6.0.8/tests/Tests.hs   2016-03-10 23:01:07.000000000 +0100
+++ new/hsexif-0.6.1.1/tests/Tests.hs   2017-03-20 16:14:21.000000000 +0100
@@ -5,6 +5,7 @@
 import qualified Data.ByteString.Lazy as B
 import qualified Data.ByteString as BS
 import Data.Text (Text)
+import qualified Data.Text as T
 import qualified Data.Map as Map
 import Data.Map (Map)
 import Data.Time.LocalTime
@@ -21,16 +22,18 @@
 main = do
     imageContents <- B.readFile "tests/test.jpg"
     noExif <- B.readFile "tests/noexif.jpg"
-    png <- B.readFile "tests/test.png"
-    gps <- B.readFile "tests/gps.jpg"
+    png  <- B.readFile "tests/test.png"
+    gps  <- B.readFile "tests/gps.jpg"
     gps2 <- B.readFile "tests/gps2.jpg"
     gps3 <- B.readFile "tests/gps3.jpg"
     partial <- B.readFile "tests/partial_exif.jpg"
-    let parseExifM = hush . parseExif
-    let exifData = parseExifM imageContents
-    let gpsExifData = parseExifM gps
+    tiff <- B.readFile "tests/RAW_NIKON_D1.NEF"
+    let parseExifM   = hush . parseExif
+    let exifData     = parseExifM imageContents
+    let gpsExifData  = parseExifM gps
     let gps2ExifData = parseExifM gps2
     let gps3ExifData = parseExifM gps3
+    let tiffExifData = parseExifM tiff
     hspec $ do
         describe "not a JPG" $ testNotAJpeg png
         describe "no EXIF" $ testNoExif noExif
@@ -46,10 +49,11 @@
         describe "pretty printing" $ testPrettyPrint gpsExifData exifData 
gps2ExifData
         describe "flash fired" $ testFlashFired exifData
         describe "partial exif data" $ testPartialExif partial
+        describe "tiff file" $ testNef tiffExifData
 
 testNotAJpeg :: B.ByteString -> Spec
 testNotAJpeg imageContents = it "returns empty list if not a JPEG" $
-    assertEqual' (Left "Not a JPEG file") (parseExif imageContents)
+    assertEqual' (Left "Not a JPEG or NEF file") (parseExif imageContents)
 
 testNoExif :: B.ByteString -> Spec
 testNoExif imageContents = it "returns empty list if no EXIF" $
@@ -206,14 +210,69 @@
 testPartialExif imageContents = it "parses a partial exif JPEG" $
     assertEqual' (Right []) (Map.toList <$> parseExif imageContents)
 
+testNef :: Maybe (Map ExifTag ExifValue) -> Spec
+testNef Nothing = it "parses EXIF from a NEF file" $
+                   assertBool "failed to parse EXIF from nef" False
+testNef (Just exifMap) = it "parses EXIF from a NEF file" $ do
+    let makerNoteV = Map.lookup makerNote exifMap >>= getUndefMaybe
+    -- test only the length of the maker note
+    assertEqual' (Just 394) (BS.length <$> makerNoteV)
+    let cleanedExifMap = filter ((/=makerNote) . fst) (Map.toList exifMap)
+    assertEqualListDebug
+        (sort [(exposureTime, ExifRational 10 2500),
+                (fnumber, ExifRational 76 10),
+                (exposureProgram, ExifNumber 2),
+                (dateTimeOriginal, ExifText "2000:11:19 13:01:50"),
+                (dateTimeDigitized, ExifText "2000:11:19 13:01:50"),
+                (exposureBiasValue, ExifRational 0 6),
+                (maxApertureValue, ExifRational 30 10),
+                (meteringMode, ExifNumber 5),
+                (focalLength, ExifRational 200 10),
+                (userComment, ExifUndefined $ BS.concat $ replicate 48 "\NUL"),
+                (subSecTime, ExifText "24"),
+                (subSecTimeOriginal, ExifText "24"),
+                (subSecTimeDigitized, ExifText "24"),
+                (sensingMethod, ExifNumber 2),
+                (fileSource, ExifUndefined "\ETX"),
+                (sceneType, ExifUndefined "\SOH"),
+                (cfaPattern, ExifUndefined "\NUL\STX\NUL\STX\STX\SOH\SOH\NUL"),
+                (ExifTag IFD0 Nothing 0xfe (T.pack . show), ExifNumber 1),
+                (ExifTag IFD0 Nothing 0x100 (T.pack . show), ExifNumber 160),
+                (ExifTag IFD0 Nothing 0x101 (T.pack . show), ExifNumber 120),
+                (ExifTag IFD0 Nothing 0x102 (T.pack . show), ExifNumberList 
[8,8,8]),
+                (ExifTag IFD0 Nothing 0x103 (T.pack . show), ExifNumber 1),
+                (ExifTag IFD0 Nothing 0x106 (T.pack . show), ExifNumber 2),
+                (imageDescription, ExifText "                               "),
+                (make, ExifText "NIKON CORPORATION"),
+                (model, ExifText "NIKON D1 "),
+                (ExifTag IFD0 Nothing 0x111 (T.pack . show), ExifNumber 1280),
+                (ExifTag IFD0 Nothing 0x115 (T.pack . show), ExifNumber 3),
+                (ExifTag IFD0 Nothing 0x116 (T.pack . show), ExifNumber 120),
+                (ExifTag IFD0 Nothing 0x117 (T.pack . show), ExifNumber 57600),
+                (xResolution, ExifRational 300 1),
+                (yResolution, ExifRational 300 1),
+                (ExifTag IFD0 Nothing 0x11c (T.pack . show), ExifNumber 1),
+                (resolutionUnit, ExifNumber 2),
+                (software, ExifText "Ver.1.05\0"),
+                (dateTime, ExifText "2000:11:19 13:01:50"),
+                (ExifTag IFD0 Nothing 0x14a (T.pack . show), ExifNumber 58880),
+                (referenceBlackWhite, ExifRationalList 
[(0,1),(255,1),(0,1),(255,1),(0,1),(255,1)]),
+                (copyright, ExifText "Copyright,NIKON CORPORATION,1999\0"),
+                (exifIfdOffset, ExifNumber 528),
+                (ExifTag IFD0 Nothing 0x9003 (T.pack . show), ExifText 
"2000:11:19 13:01:50"),
+                (ExifTag IFD0 Nothing 0x9216 (T.pack . show), ExifNumberList 
[1,0,0,0])
+              ])
+        (sort cleanedExifMap)
+
 assertEqualListDebug :: (Show a, Eq a) => [a] -> [a] -> Assertion
 assertEqualListDebug = assertEqualListDebug' (0 :: Int)
     where
         assertEqualListDebug' idx (x:xs) (y:ys) = do
-            assertEqual ("index " ++ show idx ++ " differs: " ++ show x ++ " 
/= " ++ show y) x y
+            assertEqual ("lengths are off by " ++ show (length ys - length xs) 
++
+                         "; index " ++ show idx ++ " differs: " ++ show x ++ " 
/= " ++ show y) x y
             assertEqualListDebug' (idx+1) xs ys
-        assertEqualListDebug' _ (x:_) [] = assertBool ("List lengths differ, 
expected " ++ show x) False
-        assertEqualListDebug' _ [] (y:_) = assertBool ("List lengths differ, 
got " ++ show y) False
+        assertEqualListDebug' _ (x:r) [] = assertBool ("List lengths differ by 
" ++ show (length r) ++ ", expected " ++ show x) False
+        assertEqualListDebug' _ [] (y:r) = assertBool ("List lengths differ by 
" ++ show (length r) ++ ", got " ++ show y) False
         assertEqualListDebug' _ [] [] = assertBool "" True
 
 assertEqual' :: (Show a, Eq a) => a -> a -> Assertion


Reply via email to