[darcs-users] darcs patch: Resolve issue1162: makeAbsolute is now a total function
Eric Kow
kowey at darcs.net
Sat Mar 28 15:55:37 UTC 2009
Hi Petr,
Could you review this one? I expect that I'll be gone for the week when
you around to it.
I tried to have a look at it, but now I realise I don't have the time
to think about the key active ingredient, i.e. the checking if not (null
dir), before rushing off.
Thanks!
On Sat, Mar 28, 2009 at 01:25:18 +0100, ben.franksen at online.de wrote:
> I /hope/ that there are no more cases where this issue can come up. It is
> really hard to say, is_relative infects many other functions with its
> partiality. In some of them I documented this by adding a clause that calls
> 'bug'. This should make it easier to to diagnose the problem if happens again.
>
> Sat Mar 28 00:18:21 CET 2009 ben.franksen at online.de
> * Resolve issue1162: makeAbsolute is now a total function
Resolve issue1162: makeAbsolute is now a total function
-------------------------------------------------------
> ben.franksen at online.de**20090327231821
> Ignore-this: d0eb6f94c88610580daa176e39877bc3
> ] hunk ./src/Darcs/Lock.hs 180
> data WithDirKind = Perm | Temp | Delayed
>
> withDir :: WithDirKind -> String -> (AbsolutePath -> IO a) -> IO a
> +withDir _ "" _ = bug "withDir called with empty directory name"
> withDir kind abs_or_relative_name job = do
> absolute_name <- if is_relative abs_or_relative_name
> then fmap (++ abs_or_relative_name) tempdir_loc
> hunk ./src/Darcs/RepoPath.hs 40
> import System.Directory ( doesDirectoryExist )
> import qualified System.FilePath.Posix as FilePath
> import qualified Darcs.Patch.FileName as PatchFileName ( FileName, fp2fn, fn2fp )
> +#include "impossible.h"
>
> class FilePathOrURL a where
> {-# INLINE toPath #-}
> hunk ./src/Darcs/RepoPath.hs 97
> else Nothing
>
> simpleSubPath :: FilePath -> Maybe SubPath
> -simpleSubPath x | is_relative x = Just $ SubPath $ FilePath.normalise $ map cleanup x
> +simpleSubPath x | null x = bug "simpleSubPath called with empty path"
> + | is_relative x = Just $ SubPath $ FilePath.normalise $ map cleanup x
> | otherwise = Nothing
>
> -- | Interpret a possibly relative path wrt the current working directory
> hunk ./src/Darcs/RepoPath.hs 118
> return $ makeAbsolute abs_dir file
>
> makeAbsolute :: AbsolutePath -> FilePath -> AbsolutePath
> -makeAbsolute a dir = if is_absolute dir
> +makeAbsolute a dir = if not (null dir) && is_absolute dir
> then AbsolutePath $
> slashes ++ FilePath.normalise cleandir
> else ma a $ FilePath.normalise cleandir
> hunk ./src/Darcs/URL.hs 63
> is_relative "" = bug "Empty filename in is_relative"
>
> is_absolute :: String -> Bool
> +is_absolute "" = bug "is_absolute called with empty filename"
> is_absolute f = is_file f && (not $ is_relative f)
>
> is_file :: String -> Bool
--
Eric Kow <http://www.nltg.brighton.ac.uk/home/Eric.Kow>
PGP Key ID: 08AC04F9
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://lists.osuosl.org/pipermail/darcs-users/attachments/20090328/b42d5b90/attachment.pgp>
More information about the darcs-users
mailing list