Hello community,

here is the log from the commit of package ghc-file-embed for openSUSE:Factory 
checked in at 2016-04-30 23:30:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-file-embed (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-file-embed.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-file-embed"

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-file-embed/ghc-file-embed.changes    
2016-01-28 17:25:30.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-file-embed.new/ghc-file-embed.changes       
2016-04-30 23:30:19.000000000 +0200
@@ -1,0 +2,6 @@
+Tue Apr 26 08:25:43 UTC 2016 - [email protected]
+
+- update to 0.0.10
+* makeRelativeToProject
+
+-------------------------------------------------------------------

Old:
----
  file-embed-0.0.9.1.tar.gz

New:
----
  file-embed-0.0.10.tar.gz

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

Other differences:
------------------
++++++ ghc-file-embed.spec ++++++
--- /var/tmp/diff_new_pack.V9LzF2/_old  2016-04-30 23:30:20.000000000 +0200
+++ /var/tmp/diff_new_pack.V9LzF2/_new  2016-04-30 23:30:20.000000000 +0200
@@ -21,7 +21,7 @@
 %bcond_without tests
 
 Name:           ghc-file-embed
-Version:        0.0.9.1
+Version:        0.0.10
 Release:        0
 Summary:        Use Template Haskell to embed file contents directly
 License:        BSD-2-Clause

++++++ file-embed-0.0.9.1.tar.gz -> file-embed-0.0.10.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/file-embed-0.0.9.1/ChangeLog.md 
new/file-embed-0.0.10/ChangeLog.md
--- old/file-embed-0.0.9.1/ChangeLog.md 2016-01-20 08:30:52.000000000 +0100
+++ new/file-embed-0.0.10/ChangeLog.md  2016-04-21 17:33:11.000000000 +0200
@@ -1,3 +1,7 @@
+## 0.0.10
+
+* `makeRelativeToProject`
+
 ## 0.0.9
 
 * embedStringFile [#14](https://github.com/snoyberg/file-embed/pull/14)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/file-embed-0.0.9.1/Data/FileEmbed.hs 
new/file-embed-0.0.10/Data/FileEmbed.hs
--- old/file-embed-0.0.9.1/Data/FileEmbed.hs    2016-01-20 08:30:52.000000000 
+0100
+++ new/file-embed-0.0.10/Data/FileEmbed.hs     2016-04-21 17:33:11.000000000 
+0200
@@ -35,6 +35,8 @@
     , injectFile
     , injectWith
     , injectFileWith
+      -- * Relative path manipulation
+    , makeRelativeToProject
       -- * Internal
     , stringToBs
     , bsToExp
@@ -50,12 +52,13 @@
 #endif
     , Q
     , runIO
+    , qLocation, loc_filename
 #if MIN_VERSION_template_haskell(2,7,0)
     , Quasi(qAddDependentFile)
 #endif
     )
 import System.Directory (doesDirectoryExist, doesFileExist,
-                         getDirectoryContents)
+                         getDirectoryContents, canonicalizePath)
 import Control.Exception (throw, ErrorCall(..))
 import Control.Monad (filterM)
 import qualified Data.ByteString as B
@@ -64,7 +67,7 @@
 import Control.Applicative ((<$>))
 import Data.ByteString.Unsafe (unsafePackAddressLen)
 import System.IO.Unsafe (unsafePerformIO)
-import System.FilePath ((</>))
+import System.FilePath ((</>), takeDirectory, takeExtension)
 import Data.String (fromString)
 import Prelude as P
 
@@ -336,3 +339,42 @@
 available, you can use the non-@With@ variants.
 
 -}
+
+-- | Take a relative file path and attach it to the root of the current
+-- project.
+--
+-- The idea here is that, when building with Stack, the build will always be
+-- executed with a current working directory of the root of the project (where
+-- your .cabal file is located). However, if you load up multiple projects with
+-- @stack ghci@, the working directory may be something else entirely.
+--
+-- This function looks at the source location of the Haskell file calling it,
+-- finds the first parent directory with a .cabal file, and uses that as the
+-- root directory for fixing the relative path.
+--
+-- @@@
+-- $(makeRelativeToProject "data/foo.txt" >>= fileEmbed)
+-- @@@
+--
+-- @since 0.0.10
+makeRelativeToProject :: FilePath -> Q FilePath
+makeRelativeToProject rel = do
+    loc <- qLocation
+    runIO $ do
+        srcFP <- canonicalizePath $ loc_filename loc
+        mdir <- findProjectDir srcFP
+        case mdir of
+            Nothing -> error $ "Could not find .cabal file for path: " ++ srcFP
+            Just dir -> return $ dir </> rel
+  where
+    findProjectDir x = do
+        let dir = takeDirectory x
+        if dir == x
+            then return Nothing
+            else do
+                contents <- getDirectoryContents dir
+                if any isCabalFile contents
+                    then return (Just dir)
+                    else findProjectDir dir
+
+    isCabalFile fp = takeExtension fp == ".cabal"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/file-embed-0.0.9.1/file-embed.cabal 
new/file-embed-0.0.10/file-embed.cabal
--- old/file-embed-0.0.9.1/file-embed.cabal     2016-01-20 08:30:52.000000000 
+0100
+++ new/file-embed-0.0.10/file-embed.cabal      2016-04-21 17:33:11.000000000 
+0200
@@ -1,5 +1,5 @@
 name:            file-embed
-version:         0.0.9.1
+version:         0.0.10
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <[email protected]>


Reply via email to