packages feed

git-annex 5.20150731 → 5.20150812

raw patch · 134 files changed

+3606/−3179 lines, 134 filesdep +cryptonitedep ~optparse-applicativesetup-changedbinary-added

Dependencies added: cryptonite

Dependency ranges changed: optparse-applicative

Files

+ Annex/Action.hs view
@@ -0,0 +1,35 @@+{- git-annex actions+ -+ - Copyright 2010-2015 Joey Hess <id@joeyh.name>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++{-# LANGUAGE CPP #-}++module Annex.Action where++import qualified Data.Map as M+#ifndef mingw32_HOST_OS+import System.Posix.Signals+#endif++import Common.Annex+import qualified Annex+import Annex.Content++{- Actions to perform each time ran. -}+startup :: Annex ()+startup =+#ifndef mingw32_HOST_OS+	liftIO $ void $ installHandler sigINT Default Nothing+#else+	return ()+#endif++{- Cleanup actions. -}+shutdown :: Bool -> Annex ()+shutdown nocommit = do+	saveState nocommit+	sequence_ =<< M.elems <$> Annex.getState Annex.cleanup+	liftIO reapZombies -- zombies from long-running git processes
Annex/Content.hs view
@@ -176,8 +176,6 @@ 		(const $ a $ ContentLock key )   where 	alreadylocked = error "content is locked"-	failedtolock e = error $ "failed to lock content: " ++ show e-	trylock locker = locker `catchIO` failedtolock 	cleanuplockfile lockfile = modifyContent lockfile $ 		void $ liftIO $ tryIO $ 			nukeFile lockfile@@ -197,6 +195,9 @@ 	unlock mlockfile lck = do 		maybe noop cleanuplockfile mlockfile 		liftIO $ dropLock lck+	+	failedtolock e = error $ "failed to lock content: " ++ show e+	trylock locker = locker `catchIO` failedtolock #else 	lock _ (Just lockfile) = do 		modifyContent lockfile $
Annex/Direct.hs view
@@ -230,7 +230,7 @@  mergeDirectCleanup :: FilePath -> Git.Ref -> Annex () mergeDirectCleanup d oldref = do-	updateWorkTree d oldref+	updateWorkTree d oldref False 	liftIO $ removeDirectoryRecursive d  {- Updates the direct mode work tree to reflect the changes staged in the@@ -247,8 +247,8 @@  - order, but we cannot add the directory until the file with the  - same name is removed.)  -}-updateWorkTree :: FilePath -> Git.Ref -> Annex ()-updateWorkTree d oldref = do+updateWorkTree :: FilePath -> Git.Ref -> Bool -> Annex ()+updateWorkTree d oldref force = do 	(items, cleanup) <- inRepo $ DiffTree.diffIndex oldref 	makeabs <- flip fromTopFilePath <$> gitRepo 	let fsitems = zip (map (makeabs . DiffTree.file) items) items@@ -281,7 +281,7 @@ 	 - Otherwise, create the symlink and then if possible, replace it 	 - with the content. -} 	movein item makeabs k f = unlessM (goodContent k f) $ do-		preserveUnannexed item makeabs f oldref+		unless force $ preserveUnannexed item makeabs f oldref 		l <- calcRepo $ gitAnnexLink f k 		replaceFile f $ makeAnnexLink l 		toDirect k f@@ -289,7 +289,7 @@ 	{- Any new, modified, or renamed files were written to the temp 	 - directory by the merge, and are moved to the real work tree. -} 	movein_raw item makeabs f = do-		preserveUnannexed item makeabs f oldref+		unless force $ preserveUnannexed item makeabs f oldref 		liftIO $ do 			createDirectoryIfMissing True $ parentDir f 			void $ tryIO $ rename (d </> getTopFilePath (DiffTree.file item)) f
Annex/Ssh.hs view
@@ -266,9 +266,9 @@  - to set GIT_SSH=git-annex, and sets sshOptionsEnv. -} sshOptionsTo :: Git.Repo -> RemoteGitConfig -> Git.Repo -> Annex Git.Repo sshOptionsTo remote gc g -	| not (Git.repoIsUrl remote) || Git.repoIsHttp remote = uncached+	| not (Git.repoIsUrl remote) || Git.repoIsHttp remote = unchanged 	| otherwise = case Git.Url.hostuser remote of-		Nothing -> uncached+		Nothing -> unchanged 		Just host -> do 			(msockfile, _) <- sshCachingInfo (host, Git.Url.port remote) 			case msockfile of@@ -277,17 +277,21 @@ 					prepSocket sockfile 					use (sshConnectionCachingParams sockfile)   where-	uncached = return g+	unchanged = return g  	use opts = do-		let val = toSshOptionsEnv $ concat+		let sshopts = concat 			[ opts 			, map Param (remoteAnnexSshOptions gc) 			]-		command <- liftIO programPath-		liftIO $ do-			g' <- addGitEnv g sshOptionsEnv val-			addGitEnv g' "GIT_SSH" command+		if null sshopts+			then unchanged+			else do+				command <- liftIO programPath+				liftIO $ do+					g' <- addGitEnv g sshOptionsEnv+						(toSshOptionsEnv sshopts)+					addGitEnv g' "GIT_SSH" command  runSshOptions :: [String] -> String -> IO () runSshOptions args s = do
Annex/TaggedPush.hs view
@@ -45,7 +45,6 @@ 	("refs":"synced":u:_base) -> 		Just (toUUID u, Nothing) 	_ -> Nothing-  where  taggedPush :: UUID -> Maybe String -> Git.Ref -> Remote -> Git.Repo -> IO Bool taggedPush u info branch remote = Git.Command.runBool
Assistant/Gpg.hs view
@@ -5,8 +5,6 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-}- module Assistant.Gpg where  import Utility.Gpg
Backend/Hash.hs view
@@ -1,10 +1,12 @@-{- git-tnnex hashing backends+{- git-annex hashing backends  -- - Copyright 2011-2013 Joey Hess <id@joeyh.name>+ - Copyright 2011-2015 Joey Hess <id@joeyh.name>  -  - Licensed under the GNU GPL version 3 or higher.  -} +{-# LANGUAGE CPP #-}+ module Backend.Hash ( 	backends, 	testKeyBackend,@@ -22,21 +24,30 @@ import qualified Data.ByteString.Lazy as L import Data.Char -data Hash = SHAHash HashSize | SkeinHash HashSize | MD5Hash+data Hash+	= MD5Hash+	| SHA1Hash+	| SHA2Hash HashSize+	| SHA3Hash HashSize+	| SkeinHash HashSize type HashSize = Int  {- Order is slightly significant; want SHA256 first, and more general  - sizes earlier. -} hashes :: [Hash] hashes = concat -	[ map SHAHash [256, 1, 512, 224, 384]+	[ map SHA2Hash [256, 512, 224, 384]+#ifdef WITH_CRYPTONITE+	, map SHA3Hash [256, 512, 224, 384]+#endif 	, map SkeinHash [256, 512]+	, [SHA1Hash] 	, [MD5Hash] 	]  {- The SHA256E backend is the default, so genBackendE comes first. -} backends :: [Backend]-backends = map genBackendE hashes ++ map genBackend hashes+backends = concatMap (\h -> [genBackendE h, genBackend h]) hashes  genBackend :: Hash -> Backend genBackend hash = Backend@@ -55,9 +66,11 @@ 	}  hashName :: Hash -> String-hashName (SHAHash size) = "SHA" ++ show size-hashName (SkeinHash size) = "SKEIN" ++ show size hashName MD5Hash = "MD5"+hashName SHA1Hash = "SHA1"+hashName (SHA2Hash size) = "SHA" ++ show size+hashName (SHA3Hash size) = "SHA3_" ++ show size+hashName (SkeinHash size) = "SKEIN" ++ show size  hashNameE :: Hash -> String hashNameE hash = hashName hash ++ "E"@@ -153,7 +166,15 @@ hashFile :: Hash -> FilePath -> Integer -> Annex String hashFile hash file filesize = go hash   where-	go (SHAHash hashsize) = case shaHasher hashsize filesize of+	go MD5Hash = use md5Hasher+	go SHA1Hash = usehasher 1+	go (SHA2Hash hashsize) = usehasher hashsize+	go (SHA3Hash hashsize) = use (sha3Hasher hashsize)+	go (SkeinHash hashsize) = use (skeinHasher hashsize)+	+	use hasher = liftIO $ hasher <$> L.readFile file+	+	usehasher hashsize = case shaHasher hashsize filesize of 		Left sha -> use sha 		Right (external, internal) -> do 			v <- liftIO $ externalSHA external hashsize file@@ -164,19 +185,15 @@ 					-- fall back to internal since 					-- external command failed 					use internal-	go (SkeinHash hashsize) = use (skeinHasher hashsize)-	go MD5Hash = use md5Hasher-	-	use hasher = liftIO $ hasher <$> L.readFile file  shaHasher :: HashSize -> Integer -> Either (L.ByteString -> String) (String, L.ByteString -> String) shaHasher hashsize filesize 	| hashsize == 1 = use SysConfig.sha1 sha1-	| hashsize == 256 = use SysConfig.sha256 sha256-	| hashsize == 224 = use SysConfig.sha224 sha224-	| hashsize == 384 = use SysConfig.sha384 sha384-	| hashsize == 512 = use SysConfig.sha512 sha512-	| otherwise = error $ "unsupported sha size " ++ show hashsize+	| hashsize == 256 = use SysConfig.sha256 sha2_256+	| hashsize == 224 = use SysConfig.sha224 sha2_224+	| hashsize == 384 = use SysConfig.sha384 sha2_384+	| hashsize == 512 = use SysConfig.sha512 sha2_512+	| otherwise = error $ "unsupported SHA size " ++ show hashsize   where 	use Nothing hasher = Left $ usehasher hasher 	use (Just c) hasher@@ -189,11 +206,21 @@ 		| otherwise = Right (c, usehasher hasher) 	usehasher hasher = show . hasher +sha3Hasher :: HashSize -> (L.ByteString -> String)+sha3Hasher hashsize+#ifdef WITH_CRYPTONITE+	| hashsize == 256 = show . sha3_256+	| hashsize == 224 = show . sha3_224+	| hashsize == 384 = show . sha3_384+	| hashsize == 512 = show . sha3_512+#endif+	| otherwise = error $ "unsupported SHA3 size " ++ show hashsize+ skeinHasher :: HashSize -> (L.ByteString -> String) skeinHasher hashsize  	| hashsize == 256 = show . skein256 	| hashsize == 512 = show . skein512-	| otherwise = error $ "unsupported skein size " ++ show hashsize+	| otherwise = error $ "unsupported SKEIN size " ++ show hashsize  md5Hasher :: L.ByteString -> String md5Hasher = show . md5@@ -207,7 +234,7 @@  -} testKeyBackend :: Backend testKeyBackend = -	let b = genBackendE (SHAHash 256)+	let b = genBackendE (SHA2Hash 256) 	in b { getKey = (fmap addE) <$$> getKey b }    where 	addE k = k { keyName = keyName k ++ longext }
CHANGELOG view
@@ -1,3 +1,46 @@+git-annex (5.20150812) unstable; urgency=medium++  * Added support for SHA3 hashed keys (in 8 varieties), when git-annex is+    built using the cryptonite library.+  * metadata: Fix reversion introduced in 5.20150727 that caused recursive+    display of metadata to not work.+  * Windows: Fix bug that caused git-annex sync to fail due to missing+    environment variable.+  * Fix setting/setting/viewing metadata that contains unicode or other+    special characters, when in a non-unicode locale.+  * Simplify setup process for a ssh remote. Now it suffices to run git+    remote add, followed by git-annex sync. Now the remote is automatically+    initialized for use by git-annex, where before the git-annex branch had+    to manually be pushed before using git-annex sync. Note that this+    involved changes to git-annex-shell, so if the remote is using an old+    version, the manual push is still needed.+  * git-annex-shell: Don't let configlist auto-init repository when in+    readonly mode.+  * Perform a clean shutdown when --time-limit is reached.+    This includes running queued git commands, and cleanup actions normally+    run when a command is finished.+  * fsck: Commit incremental fsck database when --time-limit is reached.+    Previously, some of the last files fscked did not make it into the+    database when using --time-limit.+  * fsck: Commit incremental fsck database after every 1000 files+    fscked, or every 5 minutes, whichever comes first. Previously,+    commits were made every 1000 files fscked.+  * Linux standalone: Work around problem that prevented it from working+    properly if unpacked into a directory that contains ":" or ";" in its+    name.+  * proxy: Fix proxy git commit of non-annexed files in direct mode. +  * proxy: If a non-proxied git command, such as git revert+    would normally fail because of unstaged files in the work tree,+    make the proxied command fail the same way.+  * proxy: Fix removal of files deleted by the proxied command.+  * proxy: Fix behavior when run in subdirectory of git repo.+  * Improve Setup.hs file so that cabal copy --destdir works.+    Thanks, Magnus Therning.+  * Tighten dependency on optparse-applicative to 0.11.0.+  * Added back debian/cabal-wrapper, since it still seems needed after all.++ -- Joey Hess <id@joeyh.name>  Wed, 12 Aug 2015 11:14:58 -0400+ git-annex (5.20150731) unstable; urgency=medium    * webapp: Support enabling known gitlab.com remotes.
CmdLine.hs view
@@ -5,29 +5,22 @@  - Licensed under the GNU GPL version 3 or higher.  -} -{-# LANGUAGE CPP #-}- module CmdLine ( 	dispatch, 	usage,-	shutdown ) where  import qualified Options.Applicative as O import qualified Options.Applicative.Help as H import qualified Control.Exception as E-import qualified Data.Map as M import Control.Exception (throw)-#ifndef mingw32_HOST_OS-import System.Posix.Signals-#endif  import Common.Annex import qualified Annex import qualified Git import qualified Git.AutoCorrect import qualified Git.Config-import Annex.Content+import Annex.Action import Annex.Environment import Command import Types.Messages@@ -117,19 +110,3 @@ 	inexactcmds = case name of 		Nothing -> [] 		Just n -> Git.AutoCorrect.fuzzymatches n cmdname cmds--{- Actions to perform each time ran. -}-startup :: Annex ()-startup =-#ifndef mingw32_HOST_OS-	liftIO $ void $ installHandler sigINT Default Nothing-#else-	return ()-#endif--{- Cleanup actions. -}-shutdown :: Bool -> Annex ()-shutdown nocommit = do-	saveState nocommit-	sequence_ =<< M.elems <$> Annex.getState Annex.cleanup-	liftIO reapZombies -- zombies from long-running git processes
CmdLine/GitAnnexShell.hs view
@@ -7,8 +7,6 @@  module CmdLine.GitAnnexShell where -import System.Environment- import Common.Annex import qualified Git.Construct import qualified Git.Config@@ -16,11 +14,9 @@ import CmdLine.GlobalSetter import Command import Annex.UUID+import CmdLine.GitAnnexShell.Checks import CmdLine.GitAnnexShell.Fields-import Utility.UserInfo import Remote.GCrypt (getGCryptUUID)-import qualified Annex-import Annex.Init  import qualified Command.ConfigList import qualified Command.InAnnex@@ -34,7 +30,7 @@  cmds_readonly :: [Command] cmds_readonly =-	[ gitAnnexShellCheck Command.ConfigList.cmd+	[ Command.ConfigList.cmd 	, gitAnnexShellCheck Command.InAnnex.cmd 	, gitAnnexShellCheck Command.SendKey.cmd 	, gitAnnexShellCheck Command.TransferInfo.cmd@@ -96,7 +92,8 @@  builtin :: String -> String -> [String] -> IO () builtin cmd dir params = do-	checkNotReadOnly cmd+	unless (cmd `elem` map cmdname cmds_readonly)+		checkNotReadOnly 	checkDirectory $ Just dir 	let (params', fieldparams, opts) = partitionParams params 	    rsyncopts = ("RsyncOptions", unwords opts)@@ -146,63 +143,10 @@ 	| field == fieldName remoteUUID = fieldCheck remoteUUID val 	| field == fieldName associatedFile = fieldCheck associatedFile val 	| field == fieldName direct = fieldCheck direct val+	| field == fieldName autoInit = fieldCheck autoInit val 	| otherwise = False  failure :: IO () failure = error $ "bad parameters\n\n" ++ usage h cmds   where 	h = "git-annex-shell [-c] command [parameters ...] [option ...]"--checkNotLimited :: IO ()-checkNotLimited = checkEnv "GIT_ANNEX_SHELL_LIMITED"--checkNotReadOnly :: String -> IO ()-checkNotReadOnly cmd-	| cmd `elem` map cmdname cmds_readonly = noop-	| otherwise = checkEnv "GIT_ANNEX_SHELL_READONLY"--checkDirectory :: Maybe FilePath -> IO ()-checkDirectory mdir = do-	v <- catchMaybeIO $ getEnv "GIT_ANNEX_SHELL_DIRECTORY"-	case (v, mdir) of-		(Nothing, _) -> noop-		(Just d, Nothing) -> req d Nothing-		(Just d, Just dir)-			|  d `equalFilePath` dir -> noop-			| otherwise -> do-				home <- myHomeDir-				d' <- canondir home d-				dir' <- canondir home dir-				if d' `equalFilePath` dir'-					then noop-					else req d' (Just dir')-  where-	req d mdir' = error $ unwords -		[ "Only allowed to access"-		, d-		, maybe "and could not determine directory from command line" ("not " ++) mdir'-		]--	{- A directory may start with ~/ or in some cases, even /~/,-	 - or could just be relative to home, or of course could-	 - be absolute. -}-	canondir home d-		| "~/" `isPrefixOf` d = return d-		| "/~/" `isPrefixOf` d = return $ drop 1 d-		| otherwise = relHome $ absPathFrom home d--checkEnv :: String -> IO ()-checkEnv var = do-	v <- catchMaybeIO $ getEnv var-	case v of-		Nothing -> noop-		Just "" -> noop-		Just _ -> error $ "Action blocked by " ++ var--{- Modifies a Command to check that it is run in either a git-annex- - repository, or a repository with a gcrypt-id set. -}-gitAnnexShellCheck :: Command -> Command-gitAnnexShellCheck = addCheck okforshell . dontCheck repoExists-  where-	okforshell = unlessM (isInitialized <||> isJust . gcryptId <$> Annex.getGitConfig) $-		error "Not a git-annex or gcrypt repository."
+ CmdLine/GitAnnexShell/Checks.hs view
@@ -0,0 +1,67 @@+{- git-annex-shell checks+ -+ - Copyright 2012 Joey Hess <id@joeyh.name>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++module CmdLine.GitAnnexShell.Checks where++import Common.Annex+import Command+import qualified Annex+import Annex.Init+import Utility.UserInfo+import Utility.Env++checkNotLimited :: IO ()+checkNotLimited = checkEnv "GIT_ANNEX_SHELL_LIMITED"++checkNotReadOnly :: IO ()+checkNotReadOnly = checkEnv "GIT_ANNEX_SHELL_READONLY"++checkEnv :: String -> IO ()+checkEnv var = do+	v <- getEnv var+	case v of+		Nothing -> noop+		Just "" -> noop+		Just _ -> error $ "Action blocked by " ++ var++checkDirectory :: Maybe FilePath -> IO ()+checkDirectory mdir = do+	v <- getEnv "GIT_ANNEX_SHELL_DIRECTORY"+	case (v, mdir) of+		(Nothing, _) -> noop+		(Just d, Nothing) -> req d Nothing+		(Just d, Just dir)+			|  d `equalFilePath` dir -> noop+			| otherwise -> do+				home <- myHomeDir+				d' <- canondir home d+				dir' <- canondir home dir+				if d' `equalFilePath` dir'+					then noop+					else req d' (Just dir')+  where+	req d mdir' = error $ unwords +		[ "Only allowed to access"+		, d+		, maybe "and could not determine directory from command line" ("not " ++) mdir'+		]++	{- A directory may start with ~/ or in some cases, even /~/,+	 - or could just be relative to home, or of course could+	 - be absolute. -}+	canondir home d+		| "~/" `isPrefixOf` d = return d+		| "/~/" `isPrefixOf` d = return $ drop 1 d+		| otherwise = relHome $ absPathFrom home d++{- Modifies a Command to check that it is run in either a git-annex+ - repository, or a repository with a gcrypt-id set. -}+gitAnnexShellCheck :: Command -> Command+gitAnnexShellCheck = addCheck okforshell . dontCheck repoExists+  where+	okforshell = unlessM (isInitialized <||> isJust . gcryptId <$> Annex.getGitConfig) $+		error "Not a git-annex or gcrypt repository."
CmdLine/GitAnnexShell/Fields.hs view
@@ -34,3 +34,6 @@  direct :: Field direct = Field "direct" $ \f -> f == "1"++autoInit :: Field+autoInit = Field "autoinit" $ \f -> f == "1"
CmdLine/Seek.hs view
@@ -33,11 +33,11 @@ withFilesInGit a params = seekActions $ prepFiltered a $ 	seekHelper LsFiles.inRepo params -withFilesInGitNonRecursive :: (FilePath -> CommandStart) -> CmdParams -> CommandSeek-withFilesInGitNonRecursive a params = ifM (Annex.getState Annex.force)+withFilesInGitNonRecursive :: String -> (FilePath -> CommandStart) -> CmdParams -> CommandSeek+withFilesInGitNonRecursive needforce a params = ifM (Annex.getState Annex.force) 	( withFilesInGit a params 	, if null params-		then needforce+		then error needforce 		else seekActions $ prepFiltered a (getfiles [] params) 	)   where@@ -51,8 +51,7 @@ 			[] -> do 				void $ liftIO $ cleanup 				getfiles c ps-			_ -> needforce-	needforce = error "Not recursively setting metadata. Use --force to do that."+			_ -> error needforce  withFilesNotInGit :: Bool -> (FilePath -> CommandStart) -> CmdParams -> CommandSeek withFilesNotInGit skipdotfiles a params
Command/ConfigList.hs view
@@ -14,9 +14,11 @@ import qualified Annex.Branch import qualified Git.Config import Remote.GCrypt (coreGCryptId)+import qualified CmdLine.GitAnnexShell.Fields as Fields+import CmdLine.GitAnnexShell.Checks  cmd :: Command-cmd = noCommit $ +cmd = noCommit $ dontCheck repoExists $ 	command "configlist" SectionPlumbing  		"outputs relevant git configuration" 		paramNothing (withParams seek)@@ -34,14 +36,16 @@ 	showConfig k v = liftIO $ putStrLn $ k ++ "=" ++ v  {- The repository may not yet have a UUID; automatically initialize it- - when there's a git-annex branch available. -}+ - when there's a git-annex branch available or if the autoinit field was+ - set. -} findOrGenUUID :: Annex UUID findOrGenUUID = do 	u <- getUUID 	if u /= NoUUID 		then return u-		else ifM Annex.Branch.hasSibling+		else ifM (Annex.Branch.hasSibling <||> (isJust <$> Fields.getField Fields.autoInit)) 			( do+				liftIO checkNotReadOnly 				initialize Nothing 				getUUID 			, return NoUUID
Command/Fsck.hs view
@@ -457,18 +457,12 @@  {- Check if a key needs to be fscked, with support for incremental fscks. -} needFsck :: Incremental -> Key -> Annex Bool+needFsck (ScheduleIncremental _ _ i) k = needFsck i k #ifdef WITH_DATABASE needFsck (ContIncremental h) key = liftIO $ not <$> FsckDb.inDb h key #endif needFsck _ _ = return True -#ifdef WITH_DATABASE-withFsckDb :: Incremental -> (FsckDb.FsckHandle -> Annex ()) -> Annex ()-withFsckDb (ContIncremental h) a = a h-withFsckDb (StartIncremental h) a = a h-withFsckDb NonIncremental _ = noop-#endif- recordFsckTime :: Incremental -> Key -> Annex () #ifdef WITH_DATABASE recordFsckTime inc key = withFsckDb inc $ \h -> liftIO $ FsckDb.addDb h key@@ -527,7 +521,8 @@ 	= NonIncremental #ifdef WITH_DATABASE 	| StartIncremental FsckDb.FsckHandle -	| ContIncremental FsckDb.FsckHandle +	| ContIncremental FsckDb.FsckHandle+	| ScheduleIncremental Duration UUID Incremental #endif  prepIncremental :: UUID -> Maybe IncrementalOpt -> Annex Incremental@@ -536,31 +531,44 @@ prepIncremental u (Just StartIncrementalO) = do 	recordStartTime u 	ifM (FsckDb.newPass u)-		( StartIncremental <$> FsckDb.openDb u+		( StartIncremental <$> openFsckDb u 		, error "Cannot start a new --incremental fsck pass; another fsck process is already running." 		) prepIncremental u (Just MoreIncrementalO) =-	ContIncremental <$> FsckDb.openDb u+	ContIncremental <$> openFsckDb u prepIncremental u (Just (ScheduleIncrementalO delta)) = do-	Annex.addCleanup FsckCleanup $ do-		v <- getStartTime u-		case v of-			Nothing -> noop-			Just started -> do-				now <- liftIO getPOSIXTime-				when (now - realToFrac started >= durationToPOSIXTime delta) $-					resetStartTime u 	started <- getStartTime u-	prepIncremental u $ Just $ case started of+	i <- prepIncremental u $ Just $ case started of 		Nothing -> StartIncrementalO 		Just _ -> MoreIncrementalO+	return (ScheduleIncremental delta u i) #else prepIncremental _ _ = error "This git-annex was not built with database support; incremental fsck not supported" #endif  cleanupIncremental :: Incremental -> Annex ()-#ifdef WITH_DATABASE-cleanupIncremental i = withFsckDb i FsckDb.closeDb-#else+cleanupIncremental (ScheduleIncremental delta u i) = do+	v <- getStartTime u+	case v of+		Nothing -> noop+		Just started -> do+			now <- liftIO getPOSIXTime+			when (now - realToFrac started >= durationToPOSIXTime delta) $+				resetStartTime u+	cleanupIncremental i cleanupIncremental _ = return ()++#ifdef WITH_DATABASE+openFsckDb :: UUID -> Annex FsckDb.FsckHandle+openFsckDb u = do+	h <- FsckDb.openDb u+	Annex.addCleanup FsckCleanup $+		FsckDb.closeDb h+	return h++withFsckDb :: Incremental -> (FsckDb.FsckHandle -> Annex ()) -> Annex ()+withFsckDb (ContIncremental h) a = a h+withFsckDb (StartIncremental h) a = a h+withFsckDb NonIncremental _ = noop+withFsckDb (ScheduleIncremental _ _ i) a = withFsckDb i a #endif
Command/MetaData.hs view
@@ -27,12 +27,12 @@ 	, keyOptions :: Maybe KeyOptions 	} -data GetSet = Get MetaField | Set [ModMeta]+data GetSet = Get MetaField | GetAll | Set [ModMeta]  optParser :: CmdParamsDesc -> Parser MetaDataOptions optParser desc = MetaDataOptions 	<$> cmdParams desc-	<*> ((Get <$> getopt) <|> (Set <$> many modopts))+	<*> ((Get <$> getopt) <|> (Set <$> some modopts) <|> pure GetAll) 	<*> optional (parseKeyOptions False)   where 	getopt = option (eitherReader mkMetaField)@@ -57,7 +57,9 @@ 	now <- liftIO getPOSIXTime 	let seeker = case getSet o of 		Get _ -> withFilesInGit+		GetAll -> withFilesInGit 		Set _ -> withFilesInGitNonRecursive+			"Not recursively setting metadata. Use --force to do that." 	withKeyOptions (keyOptions o) False 		(startKeys now o) 		(seeker $ whenAnnexed $ start now o)@@ -71,23 +73,24 @@  start' :: AssociatedFile -> POSIXTime -> MetaDataOptions -> Key -> CommandStart start' afile now o k = case getSet o of-	Set ms -> do-		showStart' "metadata" k afile-		next $ perform now ms k 	Get f -> do 		l <- S.toList . currentMetaDataValues f <$> getCurrentMetaData k 		liftIO $ forM_ l $ 			putStrLn . fromMetaValue 		stop+	_ -> do+		showStart' "metadata" k afile+		next $ perform now o k -perform :: POSIXTime -> [ModMeta] -> Key -> CommandPerform-perform _ [] k = next $ cleanup k-perform now ms k = do-	oldm <- getCurrentMetaData k-	let m = combineMetaData $ map (modMeta oldm) ms-	addMetaData' k m now-	next $ cleanup k-	+perform :: POSIXTime -> MetaDataOptions -> Key -> CommandPerform+perform now o k = case getSet o of+	Set ms -> do+		oldm <- getCurrentMetaData k+		let m = combineMetaData $ map (modMeta oldm) ms+		addMetaData' k m now+		next $ cleanup k+	_ -> next $ cleanup k+ cleanup :: Key -> CommandCleanup cleanup k = do 	l <- map unwrapmeta . fromMetaData <$> getCurrentMetaData k
Command/Proxy.hs view
@@ -13,9 +13,13 @@ import Utility.Tmp import Utility.Env import Annex.Direct+import qualified Git import qualified Git.Sha import qualified Git.Ref import qualified Git.Branch+import qualified Git.LsFiles+import Git.FilePath+import Utility.CopyFile  cmd :: Command cmd = notBareRepo $@@ -37,13 +41,41 @@   where 	go tmp = do 		oldref <- fromMaybe Git.Sha.emptyTree-			<$> inRepo Git.Ref.headSha+			<$> (inRepo . maybe Git.Ref.headSha Git.Ref.sha+				=<< inRepo Git.Branch.currentUnsafe)+		 		exitcode <- proxy tmp-		mergeDirectCleanup tmp oldref++		cleanupproxy tmp oldref+ 		return exitcode+	 	proxy tmp = do 		usetmp <- liftIO $ Just . addEntry "GIT_WORK_TREE" tmp  <$> getEnvironment++		-- Set up the tmp work tree, to contain both a checkout of all+		-- staged files as well as hard links (or copies) of any+		-- unstaged files. 		unlessM (isNothing <$> inRepo Git.Branch.current) $ 			unlessM (liftIO $ boolSystemEnv "git" [Param "checkout", Param "--", Param "."] usetmp) $ 				error "Failed to set up proxy work tree."+		top <- fromRepo Git.repoPath+		(fs, cleanup) <- inRepo $ Git.LsFiles.notInRepo True [top]+		forM_ fs $ \f -> do+			tf <- inRepo $ toTopFilePath f+			let tmpf = tmp </> getTopFilePath tf+			liftIO $ do+				createDirectoryIfMissing True (takeDirectory tmpf)+				createLinkOrCopy f tmpf+		liftIO $ void cleanup+ 		liftIO $ safeSystemEnv c (map Param ps) usetmp+		+	-- To merge the changes made by the proxied command into+	-- the work tree is similar to cleaning up after a+	-- direct mode merge. But, here we force updates of any+	-- non-annxed files that were changed by the proxied+	-- command.+	cleanupproxy tmp oldref = do+		updateWorkTree tmp oldref True+		liftIO $ removeDirectoryRecursive tmp
Command/RecvKey.hs view
@@ -9,8 +9,8 @@  import Common.Annex import Command-import CmdLine import Annex.Content+import Annex.Action import Annex import Utility.Rsync import Logs.Transfer
Command/Sync.hs view
@@ -137,19 +137,24 @@ remoteBranch remote = Git.Ref.underBase $ "refs/remotes/" ++ Remote.name remote  syncRemotes :: [String] -> Annex [Remote]-syncRemotes rs = ifM (Annex.getState Annex.fast) ( nub <$> pickfast , wanted )+syncRemotes ps = do+	-- Get remote list first, doing automatic initialization+	-- of remotes when possible.+	syncRemotes' ps =<< Remote.remoteList' True++syncRemotes' :: [String] -> [Remote] -> Annex [Remote]+syncRemotes' ps remotelist = ifM (Annex.getState Annex.fast) ( nub <$> pickfast , wanted )   where-	pickfast = (++) <$> listed <*> (filterM good =<< fastest <$> available)+	pickfast = (++) <$> listed <*> (filterM good (fastest available)) 	 	wanted-		| null rs = filterM good =<< concat . Remote.byCost <$> available+		| null ps = filterM good (concat $ Remote.byCost available) 		| otherwise = listed 	-	listed = concat <$> mapM Remote.byNameOrGroup rs+	listed = concat <$> mapM Remote.byNameOrGroup ps 	 	available = filter (remoteAnnexSync . Remote.gitconfig)-		. filter (not . Remote.isXMPPRemote)-		<$> Remote.remoteList+		$ filter (not . Remote.isXMPPRemote) remotelist 	 	good r 		| Remote.gitSyncableRemote r = Remote.Git.repoAvail $ Remote.repo r
Database/Fsck.hs view
@@ -34,6 +34,7 @@  import Database.Persist.TH import Database.Esqueleto hiding (Key)+import Data.Time.Clock  data FsckHandle = FsckHandle H.DbHandle UUID @@ -84,10 +85,17 @@ 	unlockFile =<< fromRepo (gitAnnexFsckDbLock u)  addDb :: FsckHandle -> Key -> IO ()-addDb (FsckHandle h _) k = H.queueDb h 1000 $ +addDb (FsckHandle h _) k = H.queueDb h checkcommit $  	void $ insertUnique $ Fscked sk   where 	sk = toSKey k++	-- commit queue after 1000 files or 5 minutes, whichever comes first+	checkcommit sz lastcommittime+		| sz > 1000 = return True+		| otherwise = do+			now <- getCurrentTime+			return $ diffUTCTime lastcommittime now > 300  inDb :: FsckHandle -> Key -> IO Bool inDb (FsckHandle h _) = H.queryDb h . inDb' . toSKey
Database/Handle.hs view
@@ -20,6 +20,7 @@ ) where  import Utility.Exception+import Utility.Monad import Messages  import Database.Persist.Sqlite@@ -33,6 +34,7 @@ import Control.Monad.Trans.Resource (runResourceT) import Control.Monad.Logger (runNoLoggingT) import Data.List+import Data.Time.Clock  {- A DbHandle is a reference to a worker thread that communicates with  - the database. It has a MVar which Jobs are submitted to. -}@@ -64,7 +66,7 @@ openDb db tablename = do 	jobs <- newEmptyMVar 	worker <- async (workerThread (T.pack db) tablename jobs)-	q <- newMVar emptyDbQueue+	q <- newMVar =<< emptyDbQueue 	return $ DbHandle worker jobs q  data Job@@ -145,16 +147,19 @@  type Size = Int +type LastCommitTime = UTCTime+ {- A queue of actions to perform, with a count of the number of actions- - queued. -}-data DbQueue = DbQueue Size (SqlPersistM ())+ - queued, and a last commit time. -}+data DbQueue = DbQueue Size LastCommitTime (SqlPersistM ()) -emptyDbQueue :: DbQueue-emptyDbQueue = DbQueue 0 (return ())+emptyDbQueue :: IO DbQueue+emptyDbQueue = do+	now <- getCurrentTime+	return $ DbQueue 0 now (return ())  {- Queues a change to be made to the database. It will be buffered- - to be committed later, unless the queue gets larger than the specified- - size.+ - to be committed later, unless the commitchecker action returns true.  -  - (Be sure to call closeDb or flushQueueDb to ensure the change  - gets committed.)@@ -164,25 +169,32 @@  - process, the transaction is put back in the queue. This solves  - the sqlite multiple writer problem.  -}-queueDb :: DbHandle -> Size -> SqlPersistM () -> IO ()-queueDb h@(DbHandle _ _ qvar) maxsz a = do-	DbQueue sz qa <- takeMVar qvar+queueDb +	:: DbHandle+	-> (Size -> LastCommitTime -> IO Bool) +	-> SqlPersistM ()+	-> IO ()+queueDb h@(DbHandle _ _ qvar) commitchecker a = do+	DbQueue sz lastcommittime qa <- takeMVar qvar 	let !sz' = sz + 1 	let qa' = qa >> a-	let enqueue newsz = putMVar qvar (DbQueue newsz qa')-	if sz' > maxsz-		then do+	let enqueue = putMVar qvar+	ifM (commitchecker sz' lastcommittime)+		( do 			r <- commitDb h qa' 			case r of-				Left _ -> enqueue 0-				Right _ -> putMVar qvar emptyDbQueue-		else enqueue sz'+				Left _ -> enqueue $ DbQueue sz' lastcommittime qa'+				Right _ -> do+					now <- getCurrentTime+					enqueue $ DbQueue 0 now (return ())+		, enqueue $ DbQueue sz' lastcommittime qa'+		)  {- If flushing the queue fails, this could be because there is another  - writer to the database. Retry repeatedly for up to 10 seconds. -} flushQueueDb :: DbHandle -> IO () flushQueueDb h@(DbHandle _ _ qvar) = do-	DbQueue sz qa <- takeMVar qvar	+	DbQueue sz _ qa <- takeMVar qvar	 	when (sz > 0) $ 		robustly Nothing 100 (commitDb h qa)   where
Git/UnionMerge.hs view
@@ -93,7 +93,7 @@ 	-- FileSystemEncoding for this is a hack, but ensures there 	-- are no decoding errors. Note that this works because 	-- hashObject sets fileEncoding on its write handle.-	getcontents s = lines . encodeW8 . L.unpack <$> catObject h s+	getcontents s = lines . encodeW8NUL . L.unpack <$> catObject h s  {- Calculates a union merge between a list of refs, with contents.  -
Limit.hs view
@@ -13,6 +13,7 @@ import qualified Remote import qualified Backend import Annex.Content+import Annex.Action import Annex.UUID import Logs.Trust import Annex.NumCopies@@ -271,6 +272,7 @@ 		if now > cutoff 			then do 				warning $ "Time limit (" ++ s ++ ") reached!"+				shutdown True 				liftIO $ exitWith $ ExitFailure 101 			else return True 
Makefile view
@@ -212,7 +212,7 @@ # and not overwritten.) 	cp -uR tmp/splices/* tmp/androidtree || true # Some additional dependencies needed by the expanded splices.-	sed -i 's/^  Build-Depends: */  Build-Depends: yesod-core, shakespeare, blaze-markup, file-embed, wai-app-static, wai, unordered-containers, /' tmp/androidtree/git-annex.cabal+	sed -i 's/^  Build-Depends: */  Build-Depends: yesod-core, yesod-routes, shakespeare, blaze-markup, file-embed, wai-app-static, wai, unordered-containers, /' tmp/androidtree/git-annex.cabal # Avoid warnings due to sometimes unused imports added for the splices. 	sed -i 's/GHC-Options: \(.*\)-Wall/GHC-Options: \1-Wall -fno-warn-unused-imports /i' tmp/androidtree/git-annex.cabal 	sed -i 's/Extensions: /Extensions: MagicHash /i' tmp/androidtree/git-annex.cabal
Remote.hs view
@@ -20,6 +20,7 @@  	remoteTypes, 	remoteList,+	remoteList', 	gitSyncableRemote, 	remoteMap, 	remoteMap',
Remote/BitTorrent.hs view
@@ -43,8 +43,8 @@ }  -- There is only one bittorrent remote, and it always exists.-list :: Annex [Git.Repo]-list = do+list :: Bool -> Annex [Git.Repo]+list _autoinit = do 	r <- liftIO $ Git.Construct.remoteNamed "bittorrent" (pure Git.Construct.fromUnknown) 	return [r] 
Remote/Bup.hs view
@@ -36,7 +36,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "bup",-	enumerate = findSpecialRemotes "buprepo",+	enumerate = const (findSpecialRemotes "buprepo"), 	generate = gen, 	setup = bupSetup }@@ -270,7 +270,7 @@ bupRef :: Key -> String bupRef k 	| Git.Ref.legal True shown = shown-	| otherwise = "git-annex-" ++ show (sha256 (fromString shown))+	| otherwise = "git-annex-" ++ show (sha2_256 (fromString shown))   where 	shown = key2file k 
Remote/Ddar.hs view
@@ -31,7 +31,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "ddar",-	enumerate = findSpecialRemotes "ddarrepo",+	enumerate = const (findSpecialRemotes "ddarrepo"), 	generate = gen, 	setup = ddarSetup }
Remote/Directory.hs view
@@ -33,7 +33,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "directory",-	enumerate = findSpecialRemotes "directory",+	enumerate = const (findSpecialRemotes "directory"), 	generate = gen, 	setup = directorySetup }
Remote/External.hs view
@@ -34,7 +34,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "external",-	enumerate = findSpecialRemotes "externaltype",+	enumerate = const (findSpecialRemotes "externaltype"), 	generate = gen, 	setup = externalSetup }
Remote/GCrypt.hs view
@@ -54,7 +54,7 @@ 	typename = "gcrypt", 	-- Remote.Git takes care of enumerating gcrypt remotes too, 	-- and will call our gen on them.-	enumerate = return [],+	enumerate = const (return []), 	generate = gen, 	setup = gCryptSetup }
Remote/Git.hs view
@@ -67,11 +67,11 @@ 	setup = gitSetup } -list :: Annex [Git.Repo]-list = do+list :: Bool -> Annex [Git.Repo]+list autoinit = do 	c <- fromRepo Git.config 	rs <- mapM (tweakurl c) =<< fromRepo Git.remotes-	mapM configRead rs+	mapM (configRead autoinit) rs   where 	annexurl n = "remote." ++ n ++ ".annexurl" 	tweakurl c r = do@@ -116,14 +116,14 @@  -  - Conversely, the config of an URL remote is only read when there is no  - cached UUID value. -}-configRead :: Git.Repo -> Annex Git.Repo-configRead r = do+configRead :: Bool -> Git.Repo -> Annex Git.Repo+configRead autoinit r = do 	gc <- Annex.getRemoteGitConfig r 	u <- getRepoUUID r 	case (repoCheap r, remoteAnnexIgnore gc, u) of 		(_, True, _) -> return r-		(True, _, _) -> tryGitConfigRead r-		(False, _, NoUUID) -> tryGitConfigRead r+		(True, _, _) -> tryGitConfigRead autoinit r+		(False, _, NoUUID) -> tryGitConfigRead autoinit r 		_ -> return r  gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)@@ -196,11 +196,12 @@  {- Tries to read the config for a specified remote, updates state, and  - returns the updated repo. -}-tryGitConfigRead :: Git.Repo -> Annex Git.Repo-tryGitConfigRead r +tryGitConfigRead :: Bool -> Git.Repo -> Annex Git.Repo+tryGitConfigRead autoinit r  	| haveconfig r = return r -- already read 	| Git.repoIsSsh r = store $ do-		v <- Ssh.onRemote r (pipedconfig, return (Left $ error "configlist failed")) "configlist" [] []+		liftIO $ print autoinit+		v <- Ssh.onRemote r (pipedconfig, return (Left $ error "configlist failed")) "configlist" [] configlistfields 		case v of 			Right r' 				| haveconfig r' -> return r'@@ -302,6 +303,10 @@ 			Annex.BranchState.disableUpdate 			void $ tryNonAsync $ ensureInitialized 			Annex.getState Annex.repo+		+	configlistfields = if autoinit+		then [(Fields.autoInit, "1")]+		else []  {- Checks if a given remote has the content for a key in its annex. -} inAnnex :: Remote -> Key -> Annex Bool
Remote/Glacier.hs view
@@ -31,7 +31,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "glacier",-	enumerate = findSpecialRemotes "glacier",+	enumerate = const (findSpecialRemotes "glacier"), 	generate = gen, 	setup = glacierSetup }
Remote/Hook.hs view
@@ -27,7 +27,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "hook",-	enumerate = findSpecialRemotes "hooktype",+	enumerate = const (findSpecialRemotes "hooktype"), 	generate = gen, 	setup = hookSetup }
Remote/List.hs view
@@ -72,14 +72,19 @@ remoteList = do 	rs <- Annex.getState Annex.remotes 	if null rs-		then do-			m <- readRemoteLog-			rs' <- concat <$> mapM (process m) remoteTypes-			Annex.changeState $ \s -> s { Annex.remotes = rs' }-			return rs'+		then remoteList' False 		else return rs++remoteList' :: Bool -> Annex [Remote]+remoteList' autoinit = do+	m <- readRemoteLog+	rs <- concat <$> mapM (process m) remoteTypes+	Annex.changeState $ \s -> s { Annex.remotes = rs }+	return rs   where-	process m t = enumerate t >>= mapM (remoteGen m t) >>= return . catMaybes+	process m t = enumerate t autoinit +		>>= mapM (remoteGen m t) +		>>= return . catMaybes  {- Forces the remoteList to be re-generated, re-reading the git config. -} remoteListRefresh :: Annex [Remote]@@ -109,7 +114,7 @@   where 	updaterepo r 		| Git.repoIsLocal r || Git.repoIsLocalUnknown r =-			Remote.Git.configRead r+			Remote.Git.configRead False r 		| otherwise = return r  {- Checks if a remote is syncable using git. -}
Remote/Rsync.hs view
@@ -33,8 +33,6 @@ import Utility.CopyFile import Messages.Progress import Utility.Metered-import Utility.PID-import Annex.Perms import Logs.Transfer import Types.Creds import Types.Key (isChunkKey)@@ -46,7 +44,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "rsync",-	enumerate = findSpecialRemotes "rsyncurl",+	enumerate = const (findSpecialRemotes "rsyncurl"), 	generate = gen, 	setup = rsyncSetup }
Remote/S3.hs view
@@ -54,7 +54,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "S3",-	enumerate = findSpecialRemotes "s3",+	enumerate = const (findSpecialRemotes "s3"), 	generate = gen, 	setup = s3Setup }
Remote/Tahoe.hs view
@@ -53,7 +53,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "tahoe",-	enumerate = findSpecialRemotes "tahoe",+	enumerate = const (findSpecialRemotes "tahoe"), 	generate = gen, 	setup = tahoeSetup }
Remote/Web.hs view
@@ -36,8 +36,8 @@ -- There is only one web remote, and it always exists. -- (If the web should cease to exist, remove this module and redistribute -- a new release to the survivors by carrier pigeon.)-list :: Annex [Git.Repo]-list = do+list :: Bool -> Annex [Git.Repo]+list _autoinit = do 	r <- liftIO $ Git.Construct.remoteNamed "web" (pure Git.Construct.fromUnknown) 	return [r] 
Remote/WebDAV.hs view
@@ -36,7 +36,7 @@ remote :: RemoteType remote = RemoteType { 	typename = "webdav",-	enumerate = findSpecialRemotes "webdav",+	enumerate = const (findSpecialRemotes "webdav"), 	generate = gen, 	setup = webdavSetup }
Setup.hs view
@@ -27,13 +27,13 @@ 	}  myPostCopy :: Args -> CopyFlags -> PackageDescription -> LocalBuildInfo -> IO ()-myPostCopy _ (CopyFlags { copyVerbosity }) pkg lbi = do+myPostCopy _ flags pkg lbi = do 	installGitAnnexShell dest verbosity pkg lbi 	installManpages      dest verbosity pkg lbi 	installDesktopFile   dest verbosity pkg lbi   where-	dest      = NoCopyDest-	verbosity = fromFlag copyVerbosity+	dest      = fromFlag $ copyDest flags+	verbosity = fromFlag $ copyVerbosity flags  installGitAnnexShell :: CopyDest -> Verbosity -> PackageDescription -> LocalBuildInfo -> IO () installGitAnnexShell copyDest verbosity pkg lbi =@@ -62,7 +62,9 @@ 	srcManDir   = "man"  installDesktopFile :: CopyDest -> Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()-installDesktopFile copyDest _verbosity pkg lbi =-	DesktopFile.install $ dstBinDir </> "git-annex"+installDesktopFile copyDest _verbosity pkg lbi+	| progfile copyDest == progfile NoCopyDest =+		DesktopFile.install (progfile copyDest)+	| otherwise = return ()   where-	dstBinDir = bindir $ absoluteInstallDirs pkg lbi copyDest+	progfile cd = bindir (absoluteInstallDirs pkg lbi cd) </> "git-annex"
Types/MetaData.hs view
@@ -270,10 +270,16 @@ 		legal k _v = legalField $ fromMetaField k  instance Arbitrary MetaValue where-	arbitrary = MetaValue <$> arbitrary <*> arbitrary+	arbitrary = MetaValue +		<$> arbitrary+		-- Avoid non-ascii metavalues because fully arbitrary+		-- strings may not be encoded using the filesystem+		-- encoding, which is norally applied to all input.+		<*> arbitrary `suchThat` all isAscii  instance Arbitrary MetaField where-	arbitrary = MetaField . CI.mk <$> arbitrary `suchThat` legalField +	arbitrary = MetaField . CI.mk +		<$> arbitrary `suchThat` legalField   prop_metadata_sane :: MetaData -> MetaField -> MetaValue -> Bool prop_metadata_sane m f v = and
Types/Remote.hs view
@@ -40,7 +40,8 @@ 	-- human visible type name 	typename :: String, 	-- enumerates remotes of this type-	enumerate :: a [Git.Repo],+	-- The Bool is True if automatic initialization of remotes is desired+	enumerate :: Bool -> a [Git.Repo], 	-- generates a remote of this type 	generate :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> a (Maybe (RemoteA a)), 	-- initializes or changes a remote
Utility/Base64.hs view
@@ -1,5 +1,8 @@ {- Simple Base64 encoding of Strings  -+ - Note that this uses the FileSystemEncoding, so it can be used on Strings+ - that repesent filepaths containing arbitrarily encoded characters.+ -  - Copyright 2011, 2015 Joey Hess <id@joeyh.name>  -  - License: BSD-2-clause@@ -7,15 +10,19 @@  module Utility.Base64 (toB64, fromB64Maybe, fromB64, prop_b64_roundtrips) where +import Utility.FileSystemEncoding+ import qualified "sandi" Codec.Binary.Base64 as B64 import Data.Maybe+import qualified Data.ByteString.Lazy as L import Data.ByteString.UTF8 (fromString, toString)+import Data.Char  toB64 :: String -> String	-toB64 = toString . B64.encode . fromString+toB64 = toString . B64.encode . L.toStrict . encodeBS  fromB64Maybe :: String -> Maybe String-fromB64Maybe s = either (const Nothing) (Just . toString)+fromB64Maybe s = either (const Nothing) (Just . decodeBS . L.fromStrict) 	(B64.decode $ fromString s)  fromB64 :: String -> String@@ -23,5 +30,10 @@   where 	bad = error "bad base64 encoded data" +-- Only ascii strings are tested, because an arbitrary string may contain+-- characters not encoded using the FileSystemEncoding, which would thus+-- not roundtrip, as fromB64 always generates an output encoded that way. prop_b64_roundtrips :: String -> Bool-prop_b64_roundtrips s = s == fromB64 (toB64 s)+prop_b64_roundtrips s+	| all (isAscii) s = s == fromB64 (toB64 s)+	| otherwise = True
Utility/Directory.hs view
@@ -13,7 +13,6 @@ import System.IO.Error import System.Directory import Control.Monad-import Control.Monad.IfElse import System.FilePath import Control.Applicative import Control.Concurrent@@ -25,10 +24,11 @@ import qualified System.Win32 as Win32 #else import qualified System.Posix as Posix+import Utility.SafeCommand+import Control.Monad.IfElse #endif  import Utility.PosixFiles-import Utility.SafeCommand import Utility.Tmp import Utility.Exception import Utility.Monad@@ -126,7 +126,7 @@ #else 			r <- tryIO $ copyFile src tmp 			let (ok, e') = case r of-				Left e' -> (False, e')+				Left err -> (False, err) 				Right _ -> (True, e) #endif 			unless ok $ do
Utility/FileSystemEncoding.hs view
@@ -13,6 +13,7 @@ 	withFilePath, 	md5FilePath, 	decodeBS,+	encodeBS, 	decodeW8, 	encodeW8, 	encodeW8NUL,@@ -34,6 +35,8 @@ import qualified Data.ByteString.Lazy.UTF8 as L8 #endif +import Utility.Exception+ {- Sets a Handle to use the filesystem encoding. This causes data  - written or read from it to be encoded/decoded the same  - as ghc 7.4 does to filenames etc. This special encoding@@ -67,12 +70,16 @@  - only allows doing this conversion with CStrings, and the CString buffer  - is allocated, used, and deallocated within the call, with no side  - effects.+ -+ - If the FilePath contains a value that is not legal in the filesystem+ - encoding, rather than thowing an exception, it will be returned as-is.  -} {-# NOINLINE _encodeFilePath #-} _encodeFilePath :: FilePath -> String _encodeFilePath fp = unsafePerformIO $ do 	enc <- Encoding.getFileSystemEncoding-	GHC.withCString enc fp $ GHC.peekCString Encoding.char8+	GHC.withCString enc fp (GHC.peekCString Encoding.char8)+		`catchNonAsync` (\_ -> return fp)  {- Encodes a FilePath into a Md5.Str, applying the filesystem encoding. -} md5FilePath :: FilePath -> MD5.Str@@ -81,11 +88,19 @@ {- Decodes a ByteString into a FilePath, applying the filesystem encoding. -} decodeBS :: L.ByteString -> FilePath #ifndef mingw32_HOST_OS-decodeBS = encodeW8 . L.unpack+decodeBS = encodeW8NUL . L.unpack #else {- On Windows, we assume that the ByteString is utf-8, since Windows  - only uses unicode for filenames. -} decodeBS = L8.toString+#endif++{- Encodes a FilePath into a ByteString, applying the filesystem encoding. -}+encodeBS :: FilePath -> L.ByteString+#ifndef mingw32_HOST_OS+encodeBS = L.pack . decodeW8NUL+#else+encodeBS = L8.fromString #endif  {- Converts a [Word8] to a FilePath, encoding using the filesystem encoding.
Utility/Hash.hs view
@@ -1,11 +1,23 @@-{- Convenience wrapper around cryptohash. -}+{- Convenience wrapper around cryptohash/cryptonite.+ -+ - SHA3 hashes are currently only enabled when using cryptonite,+ - because of https://github.com/vincenthz/hs-cryptohash/issues/36+ -} +{-# LANGUAGE CPP #-}+ module Utility.Hash ( 	sha1,-	sha224,-	sha256,-	sha384,-	sha512,+	sha2_224,+	sha2_256,+	sha2_384,+	sha2_512,+#ifdef WITH_CRYPTONITE+	sha3_224,+	sha3_256,+	sha3_384,+	sha3_512,+#endif 	skein256, 	skein512, 	md5,@@ -20,26 +32,39 @@ import qualified Data.Text.Encoding as T import qualified Data.ByteString as S import Crypto.Hash+#ifdef WITH_CRYPTONITE+import Crypto.MAC.HMAC+#endif  sha1 :: L.ByteString -> Digest SHA1 sha1 = hashlazy -sha224 :: L.ByteString -> Digest SHA224-sha224 = hashlazy+sha2_224 :: L.ByteString -> Digest SHA224+sha2_224 = hashlazy -sha256 :: L.ByteString -> Digest SHA256-sha256 = hashlazy+sha2_256 :: L.ByteString -> Digest SHA256+sha2_256 = hashlazy -sha384 :: L.ByteString -> Digest SHA384-sha384 = hashlazy+sha2_384 :: L.ByteString -> Digest SHA384+sha2_384 = hashlazy -sha512 :: L.ByteString -> Digest SHA512-sha512 = hashlazy+sha2_512 :: L.ByteString -> Digest SHA512+sha2_512 = hashlazy --- sha3 is not yet fully standardized---sha3 :: L.ByteString -> Digest SHA3---sha3 = hashlazy+#ifdef WITH_CRYPTONITE+sha3_224 :: L.ByteString -> Digest SHA3_224+sha3_224 = hashlazy +sha3_256 :: L.ByteString -> Digest SHA3_256+sha3_256 = hashlazy++sha3_384 :: L.ByteString -> Digest SHA3_384+sha3_384 = hashlazy++sha3_512 :: L.ByteString -> Digest SHA3_512+sha3_512 = hashlazy+#endif+ skein256 :: L.ByteString -> Digest Skein256_256 skein256 = hashlazy @@ -53,12 +78,18 @@ prop_hashes_stable :: Bool prop_hashes_stable = all (\(hasher, result) -> hasher foo == result) 	[ (show . sha1, "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33")-	, (show . sha224, "0808f64e60d58979fcb676c96ec938270dea42445aeefcd3a4e6f8db")-	, (show . sha256, "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae")-	, (show . sha384, "98c11ffdfdd540676b1a137cb1a22b2a70350c9a44171d6b1180c6be5cbb2ee3f79d532c8a1dd9ef2e8e08e752a3babb")-	, (show . sha512, "f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc6638326e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7")+	, (show . sha2_224, "0808f64e60d58979fcb676c96ec938270dea42445aeefcd3a4e6f8db")+	, (show . sha2_256, "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae")+	, (show . sha2_384, "98c11ffdfdd540676b1a137cb1a22b2a70350c9a44171d6b1180c6be5cbb2ee3f79d532c8a1dd9ef2e8e08e752a3babb")+	, (show . sha2_512, "f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc6638326e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7") 	, (show . skein256, "a04efd9a0aeed6ede40fe5ce0d9361ae7b7d88b524aa19917b9315f1ecf00d33") 	, (show . skein512, "fd8956898113510180aa4658e6c0ac85bd74fb47f4a4ba264a6b705d7a8e8526756e75aecda12cff4f1aca1a4c2830fbf57f458012a66b2b15a3dd7d251690a7")+#ifdef WITH_CRYPTONITE+	, (show . sha3_224, "f4f6779e153c391bbd29c95e72b0708e39d9166c7cea51d1f10ef58a")+	, (show . sha3_256, "76d3bc41c9f588f7fcd0d5bf4718f8f84b1c41b20882703100b9eb9413807c01")+	, (show . sha3_384, "665551928d13b7d84ee02734502b018d896a0fb87eed5adb4c87ba91bbd6489410e11b0fbcc06ed7d0ebad559e5d3bb5")+	, (show . sha3_512, "4bca2b137edc580fe50a88983ef860ebaca36c857b1f492839d6d7392452a63c82cbebc68e3b70a2a1480b4bb5d437a7cba6ecf9d89f9ff3ccd14cd6146ea7e7")+#endif 	, (show . md5, "acbd18db4cc2f85cedef654fccc4a4d8") 	]   where@@ -83,7 +114,10 @@ 	HmacSha384 -> use SHA384 	HmacSha512 -> use SHA512   where-	use alg k m = show (hmacGetDigest (hmacAlg alg k m))+	use alg k m = show (hmacGetDigest (hmacWitnessAlg alg k m))++	hmacWitnessAlg :: HashAlgorithm a => a -> S.ByteString -> S.ByteString -> HMAC a+	hmacWitnessAlg _ = hmac  -- Check that all the MACs continue to produce the same. prop_mac_stable :: Bool
Utility/LockPool/Windows.hs view
@@ -16,14 +16,7 @@ import qualified Utility.LockFile.Windows as F import qualified Utility.LockPool.STM as P import Utility.LockPool.LockHandle-import Utility.LockPool.STM (LockPool, LockFile, LockMode(..))-import Utility.Monad--import Control.Concurrent.STM-import System.IO-import Data.Maybe-import Control.Applicative-import Prelude+import Utility.LockPool.STM (LockFile, LockMode(..))  {- Tries to lock a file with a shared lock, which allows other processes to  - also lock it shared. Fails if the file is exclusively locked. -}
Utility/Path.hs view
@@ -30,8 +30,8 @@ import Utility.Monad import Utility.UserInfo -{- Simplifies a path, removing any ".." or ".", and removing the trailing- - path separator.+{- Simplifies a path, removing any "." component, collapsing "dir/..", + - and removing the trailing path separator.  -  - On Windows, preserves whichever style of path separator might be used in  - the input FilePaths. This is done because some programs in Windows@@ -50,7 +50,8 @@  	norm c [] = reverse c 	norm c (p:ps)-		| p' == ".." = norm (drop 1 c) ps+		| p' == ".." && not (null c) && dropTrailingPathSeparator (c !! 0) /= ".." = +			norm (drop 1 c) ps 		| p' == "." = norm c ps 		| otherwise = norm (p:c) ps 	  where
Utility/WebApp.hs view
@@ -185,7 +185,7 @@ fromAuthToken = id #endif -{- Generates a random sha512 string, encapsulated in a SecureMem,+{- Generates a random sha2_512 string, encapsulated in a SecureMem,  - suitable to be used for an authentication secret. -} genAuthToken :: IO AuthToken genAuthToken = do@@ -193,7 +193,7 @@ 	return $ 		case genBytes 512 g of 			Left e -> error $ "failed to generate auth token: " ++ show e-			Right (s, _) -> toAuthToken $ T.pack $ show $ sha512 $ L.fromChunks [s]+			Right (s, _) -> toAuthToken $ T.pack $ show $ sha2_512 $ L.fromChunks [s]  {- A Yesod isAuthorized method, which checks the auth cgi parameter  - against a token extracted from the Yesod application.
Utility/Yesod.hs view
@@ -17,7 +17,7 @@ 	, widgetFile 	, hamletTemplate #endif-#if ! MIN_VERSION_yesod(1,4,0)+#if ! MIN_VERSION_yesod_core(1,2,20) 	, withUrlRenderer #endif 	) where
+ debian/.changelog.swp view

binary file changed (absent → 4096 bytes)

+ debian/cabal-wrapper view
@@ -0,0 +1,16 @@+#!/bin/sh+# It would be more usual to use:+#   export CABAL=./Setup+# But Setup currently has a very bad dependency resolver, and very bad+# debugging output, and tends to eat all memory and die on small buildds.+#+# This should be revisited once Debian has a newer ghc than 7.6.3,+# and hopefully gets the improved dependency resolver from cabal.+set -e++# Avoid cabal writing to HOME, and avoid local cabal settings+# influencing the build.+HOME=$(mktemp -d)+export HOME++cabal "$@"
debian/changelog view
@@ -1,3 +1,46 @@+git-annex (5.20150812) unstable; urgency=medium++  * Added support for SHA3 hashed keys (in 8 varieties), when git-annex is+    built using the cryptonite library.+  * metadata: Fix reversion introduced in 5.20150727 that caused recursive+    display of metadata to not work.+  * Windows: Fix bug that caused git-annex sync to fail due to missing+    environment variable.+  * Fix setting/setting/viewing metadata that contains unicode or other+    special characters, when in a non-unicode locale.+  * Simplify setup process for a ssh remote. Now it suffices to run git+    remote add, followed by git-annex sync. Now the remote is automatically+    initialized for use by git-annex, where before the git-annex branch had+    to manually be pushed before using git-annex sync. Note that this+    involved changes to git-annex-shell, so if the remote is using an old+    version, the manual push is still needed.+  * git-annex-shell: Don't let configlist auto-init repository when in+    readonly mode.+  * Perform a clean shutdown when --time-limit is reached.+    This includes running queued git commands, and cleanup actions normally+    run when a command is finished.+  * fsck: Commit incremental fsck database when --time-limit is reached.+    Previously, some of the last files fscked did not make it into the+    database when using --time-limit.+  * fsck: Commit incremental fsck database after every 1000 files+    fscked, or every 5 minutes, whichever comes first. Previously,+    commits were made every 1000 files fscked.+  * Linux standalone: Work around problem that prevented it from working+    properly if unpacked into a directory that contains ":" or ";" in its+    name.+  * proxy: Fix proxy git commit of non-annexed files in direct mode. +  * proxy: If a non-proxied git command, such as git revert+    would normally fail because of unstaged files in the work tree,+    make the proxied command fail the same way.+  * proxy: Fix removal of files deleted by the proxied command.+  * proxy: Fix behavior when run in subdirectory of git repo.+  * Improve Setup.hs file so that cabal copy --destdir works.+    Thanks, Magnus Therning.+  * Tighten dependency on optparse-applicative to 0.11.0.+  * Added back debian/cabal-wrapper, since it still seems needed after all.++ -- Joey Hess <id@joeyh.name>  Wed, 12 Aug 2015 11:14:58 -0400+ git-annex (5.20150731) unstable; urgency=medium    * webapp: Support enabling known gitlab.com remotes.
debian/control view
@@ -4,12 +4,13 @@ Build-Depends:  	debhelper (>= 9), 	ghc (>= 7.4),+	cabal-install, 	libghc-mtl-dev (>= 2.1.1), 	libghc-missingh-dev, 	libghc-data-default-dev, 	libghc-hslogger-dev, 	libghc-pcre-light-dev,-	libghc-cryptohash-dev (>= 0.11.0),+	libghc-cryptonite-dev | libghc-cryptohash-dev (>= 0.11.0), 	libghc-sandi-dev, 	libghc-utf8-string-dev, 	libghc-aws-dev (>= 0.9.2-2~),@@ -69,7 +70,7 @@ 	libghc-tasty-hunit-dev, 	libghc-tasty-quickcheck-dev, 	libghc-tasty-rerun-dev,-	libghc-optparse-applicative-dev (>= 0.10),+	libghc-optparse-applicative-dev (>= 0.11.0), 	lsof [linux-any], 	ikiwiki, 	perlmagick,
debian/rules view
@@ -1,7 +1,6 @@ #!/usr/bin/make -f -# Avoid using cabal, as it writes to $HOME-export CABAL=./Setup+export CABAL=debian/cabal-wrapper  STANDALONE_BUILD=$(shell grep -qe '^Package: git-annex-standalone' debian/control \                          && echo 1 || echo 0)
doc/backends.mdwn view
@@ -10,24 +10,29 @@   verifying that the file content is right, and can avoid duplicates of   files with the same content. Its need to generate checksums   can make it slower for large files. -* `SHA256` -- Does not include the file extension in the key, which can-  lead to better deduplication but can confuse some programs.-* `WORM` ("Write Once, Read Many") This assumes that any file with-  the same filename, size, and modification time has the same content.-  This is the least expensive backend, recommended for really large-  files or slow systems.+* `SHA256` -- SHA-2 hash that does not include the file extension in the+  key, which can lead to better deduplication but can confuse some programs. * `SHA512`, `SHA512E` -- Best SHA-2 hash, for the very paranoid.-* `SHA1`, `SHA1E`, `MD5`, `MD5E` -- Smaller hashes than `SHA256`-   for those who want a checksum but are not concerned about security.-* `SHA384`, `SHA384E`, `SHA224`, `SHA224E` -- Hashes for people who like-  unusual sizes.+* `SHA384`, `SHA384E`, `SHA224`, `SHA224E` -- SHA-2 hashes for+  people who like unusual sizes.+* `SHA3_512`, `SHA_512E`, `SHA3_384`, `SHA3_384E`, `SHA3_256`, `SHA3_256E`, `SHA3_224`, `SHA3_224E`+  -- SHA-3 hashes, for bleeding edge fun. * `SKEIN512`, `SKEIN512E`, `SKEIN256`, `SKEIN256E`   -- [Skein hash](http://en.wikipedia.org/wiki/Skein_hash),   a well-regarded SHA3 hash competition finalist.+* `SHA1`, `SHA1E`, `MD5`, `MD5E` -- Smaller hashes than `SHA256`+   for those who want a checksum but are not concerned about security.+* `WORM` ("Write Once, Read Many") -- This assumes that any file with+  the same filename, size, and modification time has the same content.+  This is the least expensive backend, recommended for really large+  files or slow systems.+* `URL` -- This is a key that is generated from the url to a file.+  It's generated when using eg, `git annex addurl --fast`, when the file+  content is not available for hashing. -Note that the SHA512, SKEIN512 and SHA384 generate long paths,+Note that the various 512 and 384 length hashes result in long paths, which are known to not work on Windows. If interoperability on Windows is a-concern, avoid those backends.+concern, avoid those.  The `annex.backends` git-config setting can be used to list the backends git-annex should use. The first one listed will be used by default when
doc/bugs.mdwn view
@@ -2,6 +2,6 @@  [[!inline pages="./bugs/* and !./bugs/*/* and !./bugs/done and !link(done)  and !./bugs/moreinfo and !./bugs/confirmed and !./bugs/forwarded and !*/Discussion"-actions=yes postform=yes show=0 archive=yes template=buglist]]+actions=yes postform=yes postformtext="Report a new bug titled:" show=0 archive=yes template=buglist]]  [[!edittemplate template=templates/bugtemplate match="bugs/*" silent=yes]]
+ doc/bugs/Error_writing_log_message_when_filename_contains_Unicode_chars.mdwn view
@@ -0,0 +1,25 @@+### Please describe the problem.+I’ve noticed that daemon.log will sometimes contain error messages arising from logging a file name during transfer. Additionally, I’ve occasionally noticed that certain files get «stuck» after being added to the objects store, i. e., they will never be committed by the assistant and have to be staged manually; it appears there is a correlation between files where the logger errors out and files getting stuck.++I can reproduce this using the en-dash (U+2013).++### What steps will reproduce the problem?+1. Create a file named «Behold – the majestic en-dash» in a repository where the assistant is running.+2. Observe file has not been added by the assistant and daemon.log contains no message pertaining to new file.+3. Restart assistant.+4. Observe in daemon.log that the logger has errored out with «hPutChar: invalid argument» and gives the Unicode replacement character thrice for each en-dash.+5. Observe that file is added to object store, but the symlink is not staged or committed by the assistant.++### What version of git-annex are you using? On what operating system?+git-annex 5.20150731+Linux 4.0.9++### Please provide any additional information below.+[[!format sh """+# After restarting the assistant.+[2015-07-28 14:24:58 CEST] Committer: Adding 978Error writing log message: <stderr>: hPutChar: invalid argument (invalid character) (original message: [2015-07-28 14:24:58 CEST] Committer: Adding 978\65533\65533\655330\65533\65533..1\65533\65533\655330.pdf)+[2015-07-28 14:24:59 CEST] Transferrer: Uploaded 978Error writing log message: <stderr>: hPutChar: invalid argument (invalid character) (original message: [2015-07-28 14:24:59 CEST] Transferrer: Uploaded 978\65533\65533\655330\65533\65533..1\65533\65533\655330.pdf)+"""]]++> Closing this because the main bug is fixed in hinotify git and will+> percolate to the git-annex builds eventually. [[done]] --[[Joey]]
+ doc/bugs/__39__copy_destdir__61____60__path__62____39___fails.mdwn view
@@ -0,0 +1,56 @@+### Please describe the problem.++Using `copy --destdir=<path>` fails.++### What steps will reproduce the problem?++~~~+% ./Setup.hs configure --prefix=/usr+% ./Setup.hs build+% ./Setup.hs copy --destdir=my/pkg/dir+~~~++### What version of git-annex are you using? On what operating system?++5.20150731 on Linux (Arch Linux)++### Please provide any additional information below.++The steps in `myPostCopy` doesn't consider the destination directory, the following change is enough for my uses:++~~~+Index: habs/git-annex/src/git-annex-5.20150731/Setup.hs+===================================================================+--- habs.orig/git-annex/src/git-annex-5.20150731/Setup.hs++++ habs/git-annex/src/git-annex-5.20150731/Setup.hs+@@ -27,13 +27,13 @@ main = defaultMainWithHooks simpleUserHo+ 	}+ + myPostCopy :: Args -> CopyFlags -> PackageDescription -> LocalBuildInfo -> IO ()+-myPostCopy _ (CopyFlags { copyVerbosity }) pkg lbi = do++myPostCopy _ flags pkg lbi = do+ 	installGitAnnexShell dest verbosity pkg lbi+ 	installManpages      dest verbosity pkg lbi+-	installDesktopFile   dest verbosity pkg lbi++	-- installDesktopFile   dest verbosity pkg lbi+   where+-	dest      = NoCopyDest+-	verbosity = fromFlag copyVerbosity++	dest      = fromFlag $ copyDest flags++	verbosity = fromFlag $ copyVerbosity flags+ + installGitAnnexShell :: CopyDest -> Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()+ installGitAnnexShell copyDest verbosity pkg lbi =+~~~++As you see I commented out installation of desktop files completely for the moment.  I don't really need them, and they require larger changes to be correct.++> So, by "fails", you mean it installs to ~/.cabal instead of the speficied+> location.+> +> And, the issue with the desktop file installation is that it's not inside+> ~/.cabal at all.+> +> I've applied your patch, thanks. And dealt with the desktop file by+> making it not install it anywhere, unless it's installing to the regular+> ~/.cabal location. [[done]] --[[Joey]]
doc/bugs/cannot_change_locale___40__en__95__US.UTF-8__41__.mdwn view
@@ -27,4 +27,6 @@ he_IL.utf8 POSIX -+> Closing since I've seen nothing to indicate this is anything other than a+> misconfigured OS that doesn't have the requested locale available.+> [[done]] --[[Joey]]
+ doc/bugs/git-annex_get_with_umlaut_characters_in_filenames.mdwn view
@@ -0,0 +1,59 @@+### Please describe the problem.++Files with umlauts were not copied from local system, all other files were copied successfully.++### What steps will reproduce the problem?++Trying to sync content from a repository on the same machine.++### What version of git-annex are you using? On what operating system?++git-annex version: 5.20150727 / Darwin tba.lan 14.4.0 Darwin Kernel Version 14.4.0: Thu May 28 11:35:04 PDT 2015; root:xnu-2782.30.5~1/RELEASE_X86_64 x86_64++### Please provide any additional information below.++[[!format sh """+$ git annex get .+get Die Sterne/Flucht in die Flucht (Bonus Track Version)/03 Ihr wollt mich töten.m4a+  Unable to access these remotes: tba++  Try making some of these repositories available:+  	2cabf5e0-00ae-4cc6-b9b7-5d303a7f3f06 -- Music [tba]+   	8e315ed0-f318-45f7-98ca-1a791f9c92df -- jan@hostname:/srv/annex-Music+failed+get Die Sterne/Flucht in die Flucht (Bonus Track Version)/03 Ihr wollt mich töten.m4a+  Unable to access these remotes: tba++  Try making some of these repositories available:+  	2cabf5e0-00ae-4cc6-b9b7-5d303a7f3f06 -- Music [tba]+   	8e315ed0-f318-45f7-98ca-1a791f9c92df -- jan@hostname:/srv/annex-Music+failed+get Die Sterne/Flucht in die Flucht (Bonus Track Version)/10 Der Bär.m4a+  Unable to access these remotes: tba++  Try making some of these repositories available:+  	2cabf5e0-00ae-4cc6-b9b7-5d303a7f3f06 -- Music [tba]+   	8e315ed0-f318-45f7-98ca-1a791f9c92df -- jan@hostname:/srv/annex-Music+failed+get Die Sterne/Flucht in die Flucht (Bonus Track Version)/10 Der Bär.m4a+  Unable to access these remotes: tba++  Try making some of these repositories available:+  	2cabf5e0-00ae-4cc6-b9b7-5d303a7f3f06 -- Music [tba]+   	8e315ed0-f318-45f7-98ca-1a791f9c92df -- jan@hostname:/srv/annex-Music+failed+"""]]++the *tba* repository is accessible since all the other files were synced correctly.++Git status reports untracked files which look like they were renamed.++[[!format sh """+$ git status+Untracked files:+  (use "git add <file>..." to include in what will be committed)++	"Ant\303\263nio Varia\303\247\303\265es/"+	"B Fachada/B Fachada/01 sozinho no r\303\263que.mp3"+	"B Fachada/B Fachada/03 D\303\241 mais m\303\272sica \303\240 b\303\263fia.mp3"+"""]]
+ doc/bugs/git_annex_assistant_failing_with_ARM_NAS.mdwn view
@@ -0,0 +1,29 @@+I'm trying to use a Synology NAS (ARM architecture, DiskStation 214+) as a remote repository for my laptop, but I'm failing to get a convenient configuration to work.++I already set-up git-annex on the NAS following the explanations found [here](http://git-annex.branchable.com/tips/Synology_NAS_and_git_annex/). I installed version **5.20150714-g8695533**.++On my laptop I have the version provided with Ubuntu 14.04: **5.20140412ubuntu1**.++If calling git annex from my laptop's command line and doing everything manually (git remote add, copy file to the dir, git annex add, git commit, git push, git annex copy), then it works properly.++But when trying with the assistant I get this error:++```+fatal: unrecognized command 'sh -c 'mkdir -p '"'"'annex'"'"'&&cd '"'"'annex'"'"'&&if [ ! -d .git ]; then git init --bare --shared && git config receive.denyNonFastforwards false; fi&&git annex init''+git-annex-shell: git-shell failed+```++This is the content of daemon.log:+[[!format sh """+[2015-08-04 00:51:41 CEST] main: starting assistant version 5.20140412ubuntu1+[2015-08-04 00:51:41 CEST] Cronner: You should enable consistency checking to protect your data. +(Recording state in git...)+(scanning...) [2015-08-04 00:51:41 CEST] Watcher: Performing startup scan+(started...) [2015-08-04 00:52:41 CEST] Cronner: Consistency check in progress+[2015-08-04 00:59:12 CEST] read: ssh-keygen ["-F","git-annex-trusted"]+[2015-08-04 00:59:12 CEST] read: ssh ["-oNumberOfPasswordPrompts=0","-oStrictHostKeyChecking=no","-n","-p","22","git-annex@git-annex-trusted","sh -c 'echo git-annex-probe loggedin;if which git-annex-shell; then echo git-annex-probe git-annex-shell; fi;if which git; then echo git-annex-probe git; fi;if which rsync; then echo git-annex-probe rsync; fi;if which ~/.ssh/git-annex-shell; then echo git-annex-probe ~/.ssh/git-annex-shell; fi;cd '\"'\"'annex'\"'\"' && git config --list'"]+[2015-08-04 00:59:13 CEST] read: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--with-colons","--list-secret-keys","--fixed-list-mode"]+[2015-08-04 00:59:15 CEST] read: ssh ["-p","22","git-annex@git-annex-trusted","sh -c 'mkdir -p '\"'\"'annex'\"'\"'&&cd '\"'\"'annex'\"'\"'&&if [ ! -d .git ]; then git init --bare --shared && git config receive.denyNonFastforwards false; fi&&git annex init'"]+"""]]++Is there any problem with the version provided by Ubuntu that is producing this strange behavior?
doc/bugs/gitlab_repos_cannot_use_gcrypt.mdwn view
@@ -20,3 +20,14 @@ > and has not had any opportunity to get a git-annex uuid set.. >  > I wonder what version of git-annex gitlab.com is running? --[[Joey]]++>> gitlab tells me their version is 5.20140412ubuntu1. +>> I tried installing git-annex-shell from 5.20140412, but+>> was not able to reproduce the problem using it. This makes me think the+>> problem is somehow in gitlab's git-annex-shell integration code.+>>+>> Update: Root-caused and filed a bug:+>> <https://gitlab.com/gitlab-org/gitlab-shell/issues/24+>>+>> This will need to be fixed on the gitlab side, so closing it here.+>> [[done]] --[[Joey]]
+ doc/bugs/sync_content_has_really_suboptimal_behavior.mdwn view
@@ -0,0 +1,50 @@+### Please describe the problem.++In a client, backup, smallarchive setup, new non-archive files will be copied to backup, copied to smallarchive, then dropped from smallarchive.++### What steps will reproduce the problem?++Create three repos, assign them groups client, backup, smallarchive.++Add files to the client, not in the archive folder.++Run sync --content++### What version of git-annex are you using? On what operating system?++git-annex version: 5.20150710++### Please provide any additional information below.++[[!format sh """+copy SOMEFILE copy SOMEFILE (checking BACKUP...) (to BACKUP...)+SHA256E-s309049--00bb4f52d3d9af507eaf8c837ce29ad133cf1964c0f8fbf586906b1e5676f0af.pdf+        309,049 100%   87.83MB/s    0:00:00 (xfr#1, to-chk=0/1)+ok+copy SOMEFILE copy SOMEFILE (checking SMALLARCHIVE...) (to SMALLARCHIVE...)+ok+drop SMALLARCHIVE SOMEFILE (checking BACKUP...) ok+""" ]]++> Indeed, but this was fixed in version 5.20150727.+> From the changelog:+>>+>>   * sync --content: Fix bug that caused files to be uploaded to eg,+>>    more archive remotes than wanted copies, only to later be dropped+>>    to satisfy the preferred content settings.+> +> [[done]] --[[Joey]]++>> Oh, sorry about the noise then. I assumed the version I was running was the latest since it was pretty recent.+>> Thanks. -- [[filippo]]++Note: it's extremely and unnecessarily hard to report a bug. There are no+links leading to instructions or anything on the home page. The "bugs" link+leads to a list of pages with no instructions. Please at least add+explanation to the bugs page. I had to edit an existing bug and change the+edit URL.++> Eh? The first thing on the bugs page is a form to add a new post to the+> list of bugs. --[[Joey]]++>> I'm an idiot. I mistook that for a search box. -- [[filippo]]
doc/bugs/view_fails_with___34__invalid_character__34__.mdwn view
@@ -28,3 +28,29 @@ supported repository version: 5 upgrade supported from repository versions: 0 1 2 4 """]]++> I'm assuming the setlocale part of this is a misconfigured system locale;+> as also seen by an arch linux user in+> <http://git-annex.branchable.com/bugs/cannot_change_locale___40__en__95__US.UTF-8__41__/>+> +> So, disregarding that part of the bug report, we still have the actual+> failure. +> +> With LANG=C, setting and getting metadata like "Rondò Veneziano" fails,+> as does generating views of that metadata.+> +> In all cases, it's an IO encoding failure, "commitBuffer: invalid argument (invalid character)"+> +> This only occurs when there's a space in the metadata; in this case the++> value is base64ed. While the 'ò' comes back out as "\242", which is the right+> character, it's not encoded using the filesystem encoding. This means that+> the IO layer can't handle it, when not in a unicode locale. Instead, it+> needs to come back out as "\56515\56498".+> +> Apparently this is a reversion; it worked in an earlier version of+> git-annex. Commits such as 9b93278e8abe1163d53fbf56909d0fe6d7de69e9+> or the conversion to Sandi may have caused the reversion, unsure.+> +> Fix is to apply the filesystem encoding when decoding base64ed values.+> [[done]] --[[Joey]]
doc/design/external_special_remote_protocol.mdwn view
@@ -274,7 +274,9 @@   Gets any state that has been stored for the key.     (git-annex replies with VALUE followed by the state.) * `SETURLPRESENT Key Url`  -  Records an URL where the Key can be downloaded from.+  Records an URL where the Key can be downloaded from.  +  Note that this does not make git-annex think that the url is present on+  the web special remote. * `SETURLMISSING Key Url`     Records that the key can no longer be downloaded from the specified   URL.
+ doc/devblog/day_307__two_release_week.mdwn view
@@ -0,0 +1,11 @@+Made a release this morning, mostly because the release earlier this week+turns out to have accidentially removed several options from `git annex copy`.++Spent some time this afternoon improving how git-annex shuts down when+--time-limit is used. This used to be a quick and dirty shutdown, similar+to if git-annex were ctrl-c'd, but I reworked things so it does a clean+shutdown, including running any buffered git commands. +This made incremental fsck with --time-limit resume much better, since+it saves the incremental fsck database on shutdown. Also tuned when the+database gets checkpointed during an incremental fsck, to resume better after+it's interrupted.
+ doc/devblog/day_308__other_peoples_bugs.mdwn view
@@ -0,0 +1,11 @@+Work today has started in the git-annex bug tracker, but the real bugs were+elsewhere. Got a patch into hinotify to fix its handling of filenames+received from inotify events when used in a non-unicode locale. Tracked+down why gitlab's git-annex-shell fails to initialize gcrypt repositories,+and filed a bug on gitlab-shell.++Yesterday, I got the Android autobuilder fixed. I had started upgrading it+to new versions of yesod etc, 2 months ago, and something in those new+versions led to character encoding problems that broke the template haskell+splicing. Had to throw away the work done for that upgrade, but at least+it's building again, at last.
+ doc/devblog/day_309__proxy.mdwn view
@@ -0,0 +1,5 @@+Ended up sending most of today working on `git annex proxy`. It had a lot+of buggy edge cases, which are all cleaned up now.++Spent another couple hours catching up on recent traffic and fixing a+couple other misc bugs.
+ doc/devblog/day_310__half_day.mdwn view
@@ -0,0 +1,7 @@+Took a half day and worked on making it simpler to set up ssh remotes.+The complexity I've gotten rid of is there's no need to take any action to+get a ssh remote initialized as a git-annex repository. Where before,+either git-annex init needed to be ran on the remote, or a git-annex branch+manually pushed to it, now the remote can simply be added and `git annex sync`+will do the rest. This needed git-annex-shell changes, so will only work+once servers are upgraded to use a newer version of git-annex.
+ doc/devblog/day_311__SHA-3.mdwn view
@@ -0,0 +1,6 @@+The SHA-3 specification was released yesterday; git-annex got support for+using SHA-3 hashes today. I had to add support for building with the new+cryptonite library, as cryptohash doesn't (correctly) implement SHA-3 yet.+Of course, nobody is likely to find a use for this for years, since SHA-2+is still prefectly fine, but it's nice to get support for new hashes+in early. :)
+ doc/devblog/day_312__release_prep.mdwn view
@@ -0,0 +1,12 @@+Catching up on weekend's traffic, and preparing for a release tomorrow.++Found another place where the optparse-applicative conversion broke some+command-line parsing; using git-annex metadata to dump metadata recursively+got broken. This is the second known bug caused by that transition, which+is not too surpising given how large it was.++Tracked down and fixed a [very tricky encoding problem with metadata values](http://git-annex.branchable.com/bugs/view_fails_with___34__invalid_character__34__/).++The arm autobuilder broke so it won't boot; got a serial console hooked up+to it and looks like a botched upgrade resulting in a udev/systemd/linux+version mismatch.
+ doc/forum/Remote__39__s_git-annex-shell_not_detected.mdwn view
@@ -0,0 +1,20 @@+When doing `git annex get fname` in a repo A with 2 remotes on LAN (B and C), it says they don't have git annex installed so it sets the `annex-ignore` flag. However, they do have it, and I can `annex-get` files from C to B. Versions of git and git-annex vary between the machines. Any idea what could be causing it? Perhaps A's git needs an update?+++A:++* Ubuntu. +* git 1.9.1+* git-annex 5.20140412ubuntu1++B: ++* Fedora 22+* git 2.3.2 (installed through Nix package manager, so its in a nonstandard path)+* git-annex 5.20140717 (installed normally, in /usr/bin)++C: ++* Fedora 22+* git 2.3.2 (installed through Nix package manager, so its in a nonstandard path)+* git-annex 5.20150219 (installed through Nix
+ doc/forum/can__39__t_sync_content.mdwn view
@@ -0,0 +1,35 @@+Hi,++I'm completely new to git-annex, I'm trying to follow this guide:++https://git-annex.branchable.com/tips/centralized_git_repository_tutorial/on_GitLab/++All steps succeeded except the `git annex sync --content` which results in the following message:++'Remote origin not usable by git-annex; setting annex-ignore'++Here is an example of the output I receive:++    $ git status+    On branch master+    Your branch is up-to-date with 'origin/master'.+    nothing to commit, working directory clean+    $+    $ git push origin master git-annex+    Everything up-to-date+    $+    $ git annex sync --content+    +      Remote origin not usable by git-annex; setting annex-ignore+    commit  ok+    pull origin+    ok+    pull origin+    ok+    $+    $ git config remote.origin.url+    https://user:pass@gitlab.com/user/repname.git++Is it required to use the ssh protocol in order to get annex working?++I'm using https since I'm behind a firewall, and the ssh protocol always time out. Is there anything I can do?
+ doc/forum/checkout_view_to_directory_outside_of_annex.mdwn view
@@ -0,0 +1,23 @@+i am working on a project where i need to copy many subsets of files stored in a single annex repo to separate folders outside of the annex repo (each subset to a separate folder).++to select each subset, i'm using `git annex metadata --set <tag>=<value> <path>`.++what i would like to do, ideally, is to leverage each `git annex view <tag>=<value>` invocation to directly check out the view's files to a specific directory outside of the annex repo.++the use case is basically the "Copying objects" strategy of the [syncthing special remote discussion](http://git-annex.branchable.com/todo/syncthing_special_remote/), although rather than having the 'directory' special remote contain files in that remote's specific layout, i would like them to be checked out simply with their original file names.++say i have these files in my main annex repo:++    a.pdf (metadata: topic=haskell)+    b.pdf (metadata: topic=haskell)+    c.pdf (metadata: topic=iojs)+    d.pdf (metadata: topic=python)+    e.pdf (metadata: topic=haskell)++if i issue `git annex view topic=haskell`, i have the files i want in my annex' root:++    a.pdf+    b.pdf+    e.pdf++obviously i could then simply run `rsync --exclude .git -aL --delete . ../other/dir`, which is totally fine, but maybe i'm just blindly missing something obvious and i could simply use something like `git annex --work-tree=../other/dir view topic=haskell` and see `a.pdf`, `b.pdf` and `e.pdf` appear in the target directory (i don't need any metadata in that directory, so only the plain files and no .git folder for a remote is fine).
doc/git-annex-fsck.mdwn view
@@ -37,7 +37,12 @@  * `--more` -  Continue the last incremental fsck pass, where it left off.+  Resume the last incremental fsck pass, where it left off.++  Resuming may redundantly check some files that were checked+  before. Any files that fsck found problems with before will be re-checked+  on resume. Also, checkpoints are made every 1000 files or every 5 minutes+  during a fsck, and it resumes from the last checkpoint.  * `--incremental-schedule=time` 
doc/git-annex-proxy.mdwn view
@@ -31,6 +31,14 @@ 	git annex add myfile 	git annex proxy -- git commit myfile -m foo +The temporary work tree that the git command is run in is set up by+checking out all files that are in the index, and copying (or hard linking)+any unstaged files from the real work tree. Since the git command is run+using this temporary work tree, it won't see eg, local modifications to+files. So, it probably is not useful to proxy a command like "git add".+However, you can use the proxy with any git command you like, as long as+you think about how it will interact with the temporary work tree.+ # SEE ALSO  [[git-annex]](1)
doc/git-annex-shell.mdwn view
@@ -31,7 +31,8 @@    When run in a repository that does not yet have an annex.uuid, one   will be created, as long as a git-annex branch has already been pushed to-  the repository.+  the repository, or if the autoinit= flag is used to indicate+  initialization is desired.  * inannex directory [key ...] @@ -69,12 +70,12 @@   This commits any staged changes to the git-annex branch.   It also runs the annex-content hook. -* notifychanges+* notifychanges directory    This is used by `git-annex remotedaemon` to be notified when   refs in the remote repository are changed. -* gcryptsetup gcryptid+* gcryptsetup directory gcryptid    Sets up a repository as a gcrypt repository. @@ -95,7 +96,7 @@   on new dashed options).    Currently used fields include remoteuuid=, associatedfile=,-  and direct=+  direct=, and autoinit=  # HOOK 
− doc/news/version_5.20150617.mdwn
@@ -1,50 +0,0 @@-git-annex 5.20150617 released with [[!toggle text="these changes"]]-[[!toggleable text="""-   * Now supports git annex sync --all --content to sync all versions of all-     files with all repos that want them.-   * Added new "anything" preferred content expression, which matches all-     versions of all files.-   * Standard preferred content for client, backup, incremental backup,-     and unwanted groups have been adjusted to work better when used-     with git annex sync --all --content.-   * fromkey, registerurl: Improve handling of urls that happen to also-     be parsable as strange keys.-   * sync, remotedaemon: Pass configured ssh-options even when-     annex.sshcaching is disabled.-   * assistant: Consume systemd-networkd dbus events to learn about-     changes to network connections, as was already done with-     network-manager and wicd.-     Thanks to Sebastian Reuße for the patches.-   * get --incomplete: New option to resume any interrupted downloads.-   * dead --key: Can be used to mark a key as dead.-   * fsck: Ignore keys that are known to be dead when running in-     --all/--unused/--key mode or a in a bare repo. Closes: #[753888](http://bugs.debian.org/753888)-     Otherwise, still reports files with lost contents, even if the content-     is dead.-   * S3: Special remotes can be configured with public=yes to allow-     the public to access the bucket's content.-   * S3: Publically accessible buckets can be used without creds.-   * import --clean-duplicates: Fix bug that didn't count local or trusted-     repo's copy of a file as one of the necessary copies to allow removing-     it from the import location.-   * tahoe: Use ~/.tahoe-git-annex/ rather than ~/.tahoe/git-annex/-     when setting up a tahoe special remote to avoid old versions of-     tahoe create-client choking.-   * Fix bug that prevented enumerating locally present objects in repos-     tuned with annex.tune.objecthash1=true.-     Fixes: unused, object count in info, unannex.-   * Improve url parsing to handle some urls containing illegal []-     characters in their paths.-   * info: Added json output for "backend usage", "numcopies stats",-     "repositories containing these files", and "transfers in progress".-   * Fix incremental backup standard preferred content expression to match-     its documentation, which says it does not want files that have reached-     a backup repository.-   * Increased the default annex.bloomaccuracy from 1000 to 10000000.-     This makes git annex unused use up to 16 mb more memory than it did-     before, but the massive increase in accuracy makes this worthwhile-     for all but the smallest systems.-   * Build documentation with deterministic=1 for reproducible builds.-     (A new ikiwiki feature.) Closes: #[785736](http://bugs.debian.org/785736)-   * Re-remove dependency on obsolete hamlet package. Closes: #[786659](http://bugs.debian.org/786659)-   * debian/cabal-wrapper: Removed this hack which should not be needed anymore."""]]
+ doc/news/version_5.20150812.mdwn view
@@ -0,0 +1,40 @@+git-annex 5.20150812 released with [[!toggle text="these changes"]]+[[!toggleable text="""+   * Added support for SHA3 hashed keys (in 8 varieties), when git-annex is+     built using the cryptonite library.+   * metadata: Fix reversion introduced in 5.20150727 that caused recursive+     display of metadata to not work.+   * Windows: Fix bug that caused git-annex sync to fail due to missing+     environment variable.+   * Fix setting/setting/viewing metadata that contains unicode or other+     special characters, when in a non-unicode locale.+   * Simplify setup process for a ssh remote. Now it suffices to run git+     remote add, followed by git-annex sync. Now the remote is automatically+     initialized for use by git-annex, where before the git-annex branch had+     to manually be pushed before using git-annex sync. Note that this+     involved changes to git-annex-shell, so if the remote is using an old+     version, the manual push is still needed.+   * git-annex-shell: Don't let configlist auto-init repository when in+     readonly mode.+   * Perform a clean shutdown when --time-limit is reached.+     This includes running queued git commands, and cleanup actions normally+     run when a command is finished.+   * fsck: Commit incremental fsck database when --time-limit is reached.+     Previously, some of the last files fscked did not make it into the+     database when using --time-limit.+   * fsck: Commit incremental fsck database after every 1000 files+     fscked, or every 5 minutes, whichever comes first. Previously,+     commits were made every 1000 files fscked.+   * Linux standalone: Work around problem that prevented it from working+     properly if unpacked into a directory that contains ":" or ";" in its+     name.+   * proxy: Fix proxy git commit of non-annexed files in direct mode.+   * proxy: If a non-proxied git command, such as git revert+     would normally fail because of unstaged files in the work tree,+     make the proxied command fail the same way.+   * proxy: Fix removal of files deleted by the proxied command.+   * proxy: Fix behavior when run in subdirectory of git repo.+   * Improve Setup.hs file so that cabal copy --destdir works.+     Thanks, Magnus Therning.+   * Tighten dependency on optparse-applicative to 0.11.0.+   * Added back debian/cabal-wrapper, since it still seems needed after all."""]]
− doc/special_remotes/comment_23_aba4abb897c6ecc0c6ba72cbd21b9f4b._comment
@@ -1,12 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawnWvnTWY6LrcPB4BzYEBn5mRTpNhg5EtEg"- nickname="Bence"- subject="Amazon Cloud Drive support"- date="2015-03-28T10:35:47Z"- content="""-Is there a special remote implementation for Amazon Cloud Drive?--It's just became unlimited for a fair price: $60/year ( https://www.amazon.com/clouddrive/pricing ).--http://techcrunch.com/2015/03/26/amazon-goes-after-dropbox-google-microsoft-with-unlimited-cloud-drive-storage/-"""]]
doc/tips/centralized_git_repository_tutorial/on_your_own_server.mdwn view
@@ -8,9 +8,15 @@ ## set up the server  On the server, you'll want to [[install]] git, and git-annex, if you haven't-already.+already. If possible, install it using your distribution's package manager:  	server# sudo apt-get install git git-annex++Note that git-annex-shell needs to be located somewhere in the PATH, so+that a client can successfully run "ssh yourserver git-annex-shell".+Installing git-annex using a package manager will take care of this for+you. But if you're not root or otherwise can't install git-annex that way,+you may need to do more work; see [[get_git-annex-shell_into_PATH]].  Decide where to put the repository on the server, and create a bare git repo there. In your home directory is a simple choice:
+ doc/tips/get_git-annex-shell_into_PATH.mdwn view
@@ -0,0 +1,55 @@+The [[git-annex-shell]] program is a part of git-annex that is used when+accessing a git-annex repository on a remote server. The client runs+something like "ssh server git-annex-shell". For this to work,+git-annex-shell needs to be installed in PATH.++If you install git-annex on your server as root, using a distribution's+package manager, like apt-get, or otherwise installing it into /usr/bin, or+/usr/local/bin, then git-annex-shell will be in PATH, and you'll not have+any trouble (and can stop reading here).++But, if you need to install git-annex on a server without being root,+it can be tricky to get it into PATH. The bash shell doesn't source all of+its config files when ssh uses it to run a non-interactive command like+git-annex-shell, so even if git-annex-shell seems to be in PATH when you're+logged onto the server, "ssh server git-annex-shell" won't find it.++	bash: git-annex-shell: command not found; failed; exit code 127++----++In some systems (when it's compiled with `SSH_SOURCE_BASHRC` set), bash will+load your `~/.bashrc` (but not your `~/.bash_profile`). So you can add to+PATH in the .bashrc.++Note that many .bashrc files start with something like this: ++	# If not running interactively, don't do anything+	[ -z "$PS1" ] && return++So, make sure to make any PATH changes before such a guard. For example:++	PATH=$HOME/bin/:$PATH++	# If not running interactively, don't do anything else+	[ -z "$PS1" ] && return++----++In some systems, bash won't load *any* config files at all.+A few ways to deal with that:++* Move or symlink git-annex-shell into a directory like+  /usr/bin, that is in the default PATH.++* If you're not root, ask the system administrator to please install+  git-annex system-wide.++* As a last resort, you can configure the git repository that's using+  the server to know where git-annex shell is installed, by configuring+  `remote.<name>.annex-shell`++  For example, if git-annex-shell is installed in ~/bin/git-annex-shell+  on the server, and the git remote named "annoyingserver" uses the server:++	git config remote.annoyingserver.annex-shell /home/me/bin/git-annex-shell
− doc/tips/using_the_SHA1_backend.mdwn
@@ -1,11 +0,0 @@-A handy alternative to the default [[backend|backends]] is the-SHA1 backend. This backend provides more git-style assurance that your data-has not been damaged. And the checksum means that when you add the same-content to the annex twice, only one copy need be stored in the backend.--The only reason it's not the default is that it needs to checksum-files when they're added to the annex, and this can slow things down-significantly for really big files. To make SHA1 the default, just-add something like this to `.gitattributes`:--	* annex.backend=SHA1
doc/todo.mdwn view
@@ -1,4 +1,4 @@ This is git-annex's todo list. Link items to [[todo/done]] when done. A more complete [[design/roadmap/]] is also available.  [[!inline pages="./todo/* and !./todo/done and !link(done) -and !*/Discussion" actions=yes postform=yes show=0 archive=yes]]+and !*/Discussion" actions=yes postform=yes postformtext="Add a new todo titled:" show=0 archive=yes]]
+ doc/todo/Amazon_Cloud_Drive.mdwn view
@@ -0,0 +1,14 @@+Is there a special remote implementation for Amazon Cloud Drive?++It's just became unlimited for a fair price: $60/year ( https://www.amazon.com/clouddrive/pricing ).++http://techcrunch.com/2015/03/26/amazon-goes-after-dropbox-google-microsoft-with-unlimited-cloud-drive-storage/++-- bence++> Not yet, but I just need to investigate haskell api bindings for it, I+> suppose. --[[Joey]]++> > Don't know if there's such a thing... there seems to be SDKs for android and IOS, but nothing more. It seems like it's a REST API: https://developer.amazon.com/public/apis/experience/cloud-drive/... --[[anarcat]]++>> requested it be added to amazonka <https://github.com/brendanhay/amazonka/issues/168> --[[Joey]]
+ doc/todo/amazon_prime_photos.mdwn view
@@ -0,0 +1,3 @@+ just  thought to check if you anyhow considered it  Joey: https://www.amazon.ca/clouddrive/primephotos ,  which could be a  great  feature for  those with prime,  even if only for photos.  didn't check about any API++ cheers
+ doc/todo/better_git-annex-shell_init_workflow.mdwn view
@@ -0,0 +1,12 @@+Currently, the workflow for initializing a remote repo has to involve+manually pushing the git-annex branch to the repo, first. This primes+git-annex-shell to auto-initialize the repo. Only after that first push,+can git-annex sync be used. If git-annex sync is run earlier, it will try+to get the remore uuid, fail, and set annex-ignore.++This should be improved.. It ought to be possible to add a new remote and+have git-annex sync do everything needed.++> [[done]]; the remote needs git-annex-shell 5.20150805 installed, and so+> does the user, and then `git-annex sync` will automatically handle+> initialization of the remote. --[[Joey]]
+ doc/todo/ditch_yesod.mdwn view
@@ -0,0 +1,32 @@+I'd like to move away from using yesod for the web app, for a number of+reasons:++* It's by far the largest use of TH in git-annex, and TH is of course very+  painful for the android port, other builds like debian mips that don't+  currently support TH, etc.+* I think it's responsible for at least 50% of the executable size, and I+  suspect a lot of that is unncessary bloat for parts of yesod that+  git-annex doesn't really use.+* Hamlet constantly annoys me by rejecting any file that contains tabs.+  **Rage**+* Hamlet contains code that's not really haskell, but looks a lot like it.+  This is a continual frustration when dealing with the hamlet files.+* I find that Hamlet does not lend itself to being refactored, everything+  is essentially an IO action with side effects of generating html, so+  can't really bring proper FP tools to bear.++At the moment, servant seems like the nicest place to end up. Just as type+safe as yesod afaik, and very lightweight and simple and rather awesome.++As for the html generation, lucid seems like a good way to do it. Just as+fast as hamlet, and pure haskell code.++Game plan:++1. Uploadd a yesod-lucid to hackage. (done)+2. Get servant, lucid, maybe yesod-lucid, packaged in Debian+3. Start converting individual yesod Handler Html to Handler LucidHtml.+   This will ditch the hamlet. This is by far the most work, but it can be+   done incrementally w/o breaking the build.+4. Once all the hamlet is gone, remove the rest of the yesod stuff and+   re-implement the routing etc with servant.
+ doc/todo/git_annex_push.mdwn view
@@ -0,0 +1,1 @@+A common use case for me is to use annex as really just an addition to git to store additional content.  What I am ending up with is two stage procedure to submit my changes to our shared repository:  git push REMOTE; git annex copy --to=REMOTE . IMHO it would only be logical if there was "git annex push REMOTE [GITPUSHOPTIONS]" which would be merely an alias for "git push REMOTE [GITPUSHOPTIONS]; git annex copy --to=REMOTE" but which will make use of annex for such common usecase simple(r)
+ doc/todo/git_annex_push/comment_1_54c5494ec21621298b3111cd7c2325b1._comment view
@@ -0,0 +1,19 @@+[[!comment format=mdwn+ username="joey"+ subject="""comment 1"""+ date="2015-08-04T20:19:22Z"+ content="""+`git annex sync --content` does what you want, only it also does a pull and+a merge from remotes.++I don't know that wanting to only push, w/o pull and merge, is common+enough to make a separate command for it.++There's also the problem that to push the git-annex branch, it really+makes sense to first pull/merge from the remote. Otherwise, the push+is not likely to work as well. And too, it makes sense to update the+git-annex branch from remotes in order to know what files that have, so+that info can be better used to decide which files to send to them --+especially when preferred content might make some file not be sent to all+remotes, depending on which other remotes contain the file.+"""]]
+ doc/todo/git_annex_push/comment_2_67938223c42c2a81dbfd32cd8a6a39c2._comment view
@@ -0,0 +1,7 @@+[[!comment format=mdwn+ username="https://me.yahoo.com/a/EbvxpTI_xP9Aod7Mg4cwGhgjrCrdM5s-#7c0f4"+ subject="comment 2"+ date="2015-08-09T03:04:31Z"+ content="""+ indeed  pull/merge ( ie sync)  would often  be  needed.  but the same  in regular git  workflow -  we  can't push if remote has new  changes.  so we know that we need to \" git  pull\" ( or alternative merge dance).   my  whining here is pretty much about  dichotomy  between  regular git command  and  accompanying  annex commands  for simple typical workflows - i  need to  educate people  much more  beyond \" in your typical use case,  when you all collaborate  on this repo,  just use git annex add  to place big files under annex control,  and then git annex push  to push all your  changes\".   then if  annex push  checked  first that push   of annex  branch can't happen  and that annex  merge is due,  and let user know  to run it first -  they will do,  and things will remain clear.  now there is a  lot of annex  uniquely named commands  which do not \" correlate\"  with git ones   even for simple  use cases, which makes  adoption harder imho.+"""]]
+ doc/todo/git_annex_push/comment_3_ccb822eeb9b0d60f811568e4f27f970a._comment view
@@ -0,0 +1,19 @@+[[!comment format=mdwn+ username="joey"+ subject="""comment 3"""+ date="2015-08-11T17:37:05Z"+ content="""+I tend to be uncomfortable with wrapping many git commands into git-annex+commands with the same name. All the regular git commands can be used+in a git-annex repository, and I don't want to get users thinking they need+to look for git-annex commands instead when the git commands work perfectly+well.++`git annex copy` is fundamentally different than `git push`, so the user+needs to learn about the complication of needing to copy the contents+around separately. Perhaps even copying content to different (special)+remotes than where git pushes to. `git annex sync --content` is there for+users who want to keep two repos in sync and don't want to be concerned with the details.+`git annex push` would seem to be for users who want to know about the details,+but not all of them. Seems like a losing and/or confusing choice.+"""]]
+ doc/todo/subsecond_timestamping_of_the_--debug_output.mdwn view
@@ -0,0 +1,1 @@+ATM --debug uses timestamps at second precision.  Would be nice (to see where time is spent) to have subsecond timing
doc/walkthrough/using_ssh_remotes.mdwn view
@@ -31,3 +31,6 @@ Also, note that you need full shell access for this to work --  git-annex needs to be able to ssh in and run commands. Or at least, your shell needs to be able to run the [[git-annex-shell]] command.++For details on setting up ssh remotes, see the+[[tips/centralized_git_repository_tutorial]].
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 5.20150731+Version: 5.20150812 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess <id@joeyh.name>@@ -109,12 +109,14 @@   Description: Enable building with persistent for database use (disable to build on platforms not supporting TH)   Default: True +Flag Cryptonite+  Description: Use the cryptonite library, instead of the older cryptohash+ Executable git-annex   Main-Is: git-annex.hs   Build-Depends:    base (>= 4.5 && < 4.9),-   optparse-applicative (>= 0.10), -   cryptohash (>= 0.11.0),+   optparse-applicative (>= 0.11.0),     containers (>= 0.5.0.0),     exceptions (>= 0.6),    QuickCheck (>= 2.1),@@ -143,6 +145,12 @@     Build-Depends: network-uri (>= 2.6), network (>= 2.6)   else     Build-Depends: network (< 2.6), network (>= 2.0)++  if flag(Cryptonite)+    Build-Depends: cryptonite+    CPP-Options: -DWITH_CRYPTONITE+  else+    Build-Depends: cryptohash (>= 0.11.0)    if flag(Production)     GHC-Options: -O2
man/git-annex-fsck.1 view
@@ -31,7 +31,12 @@ at any time, with eg ctrl\-c. .IP .IP "\fB\-\-more\fP"-Continue the last incremental fsck pass, where it left off.+Resume the last incremental fsck pass, where it left off.+.IP+Resuming may redundantly check some files that were checked+before. Any files that fsck found problems with before will be re\-checked+on resume. Also, checkpoints are made every 1000 files or every 5 minutes+during a fsck, and it resumes from the last checkpoint. .IP .IP "\fB\-\-incremental\-schedule=time\fP" This makes a new incremental fsck be started only a specified
man/git-annex-proxy.1 view
@@ -29,6 +29,14 @@  git annex add myfile  git annex proxy \-\- git commit myfile \-m foo .PP+The temporary work tree that the git command is run in is set up by+checking out all files that are in the index, and copying (or hard linking)+any unstaged files from the real work tree. Since the git command is run+using this temporary work tree, it won't see eg, local modifications to+files. So, it probably is not useful to proxy a command like "git add".+However, you can use the proxy with any git command you like, as long as+you think about how it will interact with the temporary work tree.+.PP .SH SEE ALSO git-annex(1) .PP
man/git-annex-shell.1 view
@@ -27,7 +27,8 @@ .IP When run in a repository that does not yet have an annex.uuid, one will be created, as long as a git-annex branch has already been pushed to-the repository.+the repository, or if the autoinit= flag is used to indicate+initialization is desired. .IP .IP "inannex directory [key ...]" This checks if all specified keys are present in the annex, @@ -59,11 +60,11 @@ This commits any staged changes to the git-annex branch. It also runs the annex\-content hook. .IP-.IP "notifychanges"+.IP "notifychanges directory" This is used by \fBgit-annex remotedaemon\fP to be notified when refs in the remote repository are changed. .IP-.IP "gcryptsetup gcryptid"+.IP "gcryptsetup directory gcryptid" Sets up a repository as a gcrypt repository. .IP .SH OPTIONS@@ -80,7 +81,7 @@ on new dashed options). .IP Currently used fields include remoteuuid=, associatedfile=,-and direct=+direct=, and autoinit= .IP .SH HOOK After content is received or dropped from the repository by git-annex\-shell,
standalone/android/cabal.config view
@@ -1,1062 +1,199 @@-constraints: abstract-deque ==0.3,-             abstract-par ==0.3.3,-             accelerate ==0.15.1.0,-             ace ==0.6,-             action-permutations ==0.0.0.1,-             active ==0.1.0.19,-             AC-Vector ==2.3.2,-             ad ==4.2.2,-             adjunctions ==4.2.1,-             aeson-pretty ==0.7.2,-             aeson-qq ==0.7.4,-             aeson-utils ==0.3.0.1,-             alarmclock ==0.2.0.6,-             alex ==3.1.4,-             amazonka ==0.3.4,-             amazonka-autoscaling ==0.3.4,-             amazonka-cloudformation ==0.3.4,-             amazonka-cloudfront ==0.3.4,-             amazonka-cloudhsm ==0.3.4,-             amazonka-cloudsearch ==0.3.4,-             amazonka-cloudsearch-domains ==0.3.4,-             amazonka-cloudtrail ==0.3.4,-             amazonka-cloudwatch ==0.3.4,-             amazonka-cloudwatch-logs ==0.3.4,-             amazonka-codedeploy ==0.3.4,-             amazonka-cognito-identity ==0.3.4,-             amazonka-cognito-sync ==0.3.4,-             amazonka-config ==0.3.4,-             amazonka-core ==0.3.4,-             amazonka-datapipeline ==0.3.4,-             amazonka-directconnect ==0.3.4,-             amazonka-dynamodb ==0.3.4,-             amazonka-ec2 ==0.3.4,-             amazonka-ecs ==0.3.4,-             amazonka-elasticache ==0.3.4,-             amazonka-elasticbeanstalk ==0.3.4,-             amazonka-elastictranscoder ==0.3.4,-             amazonka-elb ==0.3.4,-             amazonka-emr ==0.3.4,-             amazonka-glacier ==0.3.4,-             amazonka-iam ==0.3.4,-             amazonka-importexport ==0.3.4,-             amazonka-kinesis ==0.3.4,-             amazonka-kms ==0.3.4,-             amazonka-lambda ==0.3.4,-             amazonka-opsworks ==0.3.4,-             amazonka-rds ==0.3.4,-             amazonka-redshift ==0.3.4,-             amazonka-route53 ==0.3.4,-             amazonka-route53-domains ==0.3.4,-             amazonka-s3 ==0.3.4,-             amazonka-sdb ==0.3.4,-             amazonka-ses ==0.3.4,-             amazonka-sns ==0.3.4,-             amazonka-sqs ==0.3.4,-             amazonka-ssm ==0.3.4,-             amazonka-storagegateway ==0.3.4,-             amazonka-sts ==0.3.4,-             amazonka-support ==0.3.4,-             amazonka-swf ==0.3.4,-             amqp ==0.12.2,-             ansi-terminal ==0.6.2.1,-             ansi-wl-pprint ==0.6.7.2,-             appar ==0.1.4,-             applicative-quoters ==0.1.0.8,-             approximate ==0.2.1.1,-             arbtt ==0.9.0.2,-             arithmoi ==0.4.1.2,-             array installed,-             arrow-list ==0.7,-             asn1-data ==0.7.1,-             asn1-encoding ==0.9.0,-             asn1-parse ==0.9.1,-             asn1-types ==0.3.0,-             async ==2.0.2,-             atto-lisp ==0.2.2,-             attoparsec ==0.12.1.6,-             attoparsec-enumerator ==0.3.4,-             attoparsec-expr ==0.1.1.2,-             authenticate ==1.3.2.11,-             authenticate-oauth ==1.5.1.1,-             auto-update ==0.1.2.1,-             aws ==0.11.4,-             bake ==0.2,-             bank-holidays-england ==0.1.0.3,-             base installed,-             base16-bytestring ==0.1.1.6,-             base64-bytestring ==1.0.0.1,-             base64-string ==0.2,-             base-compat ==0.6.0,-             base-prelude ==0.1.19,-             base-unicode-symbols ==0.2.2.4,-             basic-prelude ==0.3.13,-             bcrypt ==0.0.6,-             bifunctors ==4.2.1,-             binary installed,-             binary-conduit ==1.2.3,-             binary-list ==1.1.1.0,-             bindings-DSL ==1.0.22,-             bin-package-db installed,-             bioace ==0.0.1,-             bioalign ==0.0.5,-             biocore ==0.3.1,-             biofasta ==0.0.3,-             biofastq ==0.1,-             biophd ==0.0.7,-             biopsl ==0.4,-             biosff ==0.3.7.1,-             bits ==0.4,-             blank-canvas ==0.5,-             BlastHTTP ==1.0.1,-             blastxml ==0.3.2,-             blaze-builder ==0.4.0.1,-             blaze-builder-enumerator ==0.2.1.0,-             blaze-html ==0.8.0.2,-             blaze-markup ==0.7.0.2,-             blaze-svg ==0.3.4.1,-             blaze-textual ==0.2.0.9,-             bloodhound ==0.5.0.1,-             bmp ==1.2.5.2,-             Boolean ==0.2.3,-             boolsimplifier ==0.1.8,-             bound ==1.0.5,-             BoundedChan ==1.0.3.0,-             broadcast-chan ==0.1.0,-             bson ==0.3.1,-             bumper ==0.6.0.3,-             byteable ==0.1.1,-             bytedump ==1.0,-             byteorder ==1.0.4,-             bytes ==0.15,-             bytestring installed,-             bytestring-builder ==0.10.6.0.0,-             bytestring-conversion ==0.3.0,-             bytestring-lexing ==0.4.3.2,-             bytestring-mmap ==0.2.2,-             bytestring-progress ==1.0.5,-             bytestring-trie ==0.2.4.1,-             bzlib ==0.5.0.5,-             bzlib-conduit ==0.2.1.3,-             c2hs ==0.25.2,-             Cabal installed,-             cabal-file-th ==0.2.3,-             Cabal-ide-backend ==1.23.0.0,-             cabal-install ==1.18.1.0,-             cabal-rpm ==0.9.6,-             cabal-src ==0.2.5.1,-             cabal-test-quickcheck ==0.1.4,-             cairo ==0.13.1.0,-             cartel ==0.14.2.6,-             case-insensitive ==1.2.0.4,-             cases ==0.1.2.1,-             cassava ==0.4.2.4,-             cereal ==0.4.1.1,-             cereal-conduit ==0.7.2.3,-             certificate ==1.3.9,-             charset ==0.3.7.1,-             Chart ==1.3.3,-             Chart-diagrams ==1.3.3,-             ChasingBottoms ==1.3.0.12,-             check-email ==1.0,-             checkers ==0.4.3,-             chell ==0.4.0.1,-             chell-quickcheck ==0.2.5,-             chunked-data ==0.1.0.1,-             cipher-aes ==0.2.10,-             cipher-aes128 ==0.6.4,-             cipher-blowfish ==0.0.3,-             cipher-camellia ==0.0.2,-             cipher-des ==0.0.6,-             cipher-rc4 ==0.1.4,-             circle-packing ==0.1.0.4,-             classy-prelude ==0.11.1.1,-             classy-prelude-conduit ==0.11.1,-             classy-prelude-yesod ==0.11.1,-             clay ==0.10.1,-             clientsession ==0.9.1.1,-             clock ==0.4.6.0,-             cmdargs ==0.10.13,-             code-builder ==0.1.3,-             colour ==2.3.3,-             comonad ==4.2.6,-             comonads-fd ==4.0,-             comonad-transformers ==4.0,-             compdata ==0.9,-             compensated ==0.6.1,-             composition ==1.0.1.1,-             compressed ==3.10,-             concatenative ==1.0.1,-             concurrent-extra ==0.7.0.9,-             concurrent-supply ==0.1.7.1,-             cond ==0.4.1.1,-             conduit ==1.2.4.2,-             conduit-combinators ==0.3.1,-             conduit-extra ==1.1.8,-             configurator ==0.3.0.0,-             connection ==0.2.4,-             constraints ==0.4.1.3,-             consul-haskell ==0.1,-             containers installed,-             containers-unicode-symbols ==0.3.1.1,-             contravariant ==1.3.1.1,-             control-monad-free ==0.6.1,-             control-monad-loop ==0.1,-             convertible ==1.1.1.0,-             cookie ==0.4.1.5,-             courier ==0.1.0.15,-             cpphs ==1.19,-             cprng-aes ==0.6.1,-             cpu ==0.1.2,-             criterion ==1.1.0.0,-             crypto-api ==0.13.2,-             crypto-api-tests ==0.3,-             cryptocipher ==0.6.2,-             crypto-cipher-tests ==0.0.11,-             crypto-cipher-types ==0.0.9,-             cryptohash ==0.11.6,-             cryptohash-conduit ==0.1.1,-             cryptohash-cryptoapi ==0.1.3,-             cryptol ==2.2.2,-             crypto-numbers ==0.2.7,-             crypto-pubkey ==0.2.8,-             crypto-pubkey-types ==0.4.3,-             crypto-random ==0.0.9,-             crypto-random-api ==0.2.0,-             css-text ==0.1.2.1,-             csv ==0.1.2,-             csv-conduit ==0.6.6,-             cubicspline ==0.1.1,-             curl ==1.3.8,-             data-accessor ==0.2.2.6,-             data-accessor-mtl ==0.2.0.4,-             data-binary-ieee754 ==0.4.4,-             data-default ==0.5.3,-             data-default-class ==0.0.1,-             data-default-instances-base ==0.0.1,-             data-default-instances-containers ==0.0.1,-             data-default-instances-dlist ==0.0.1,-             data-default-instances-old-locale ==0.0.1,-             data-inttrie ==0.1.0,-             data-lens-light ==0.1.2.1,-             data-memocombinators ==0.5.1,-             data-reify ==0.6.1,-             DAV ==1.0.5,-             Decimal ==0.4.2,-             deepseq installed,-             deepseq-generics ==0.1.1.2,-             derive ==2.5.22,-             descriptive ==0.9.3,-             diagrams ==1.2,-             diagrams-cairo ==1.2.0.7,-             diagrams-canvas ==0.3.0.4,-             diagrams-contrib ==1.1.2.6,-             diagrams-core ==1.2.0.6,-             diagrams-lib ==1.2.0.9,-             diagrams-postscript ==1.1.0.5,-             diagrams-rasterific ==0.1.0.8,-             diagrams-svg ==1.1.0.5,-             Diff ==0.3.2,-             digest ==0.0.1.2,-             digestive-functors ==0.7.1.5,-             dimensional ==0.13.0.2,-             directory installed,-             directory-tree ==0.12.0,-             direct-sqlite ==2.3.15,-             distributed-process ==0.5.3,-             distributed-process-async ==0.2.1,-             distributed-process-client-server ==0.1.2,-             distributed-process-execution ==0.1.1,-             distributed-process-extras ==0.2.0,-             distributed-process-simplelocalnet ==0.2.2.0,-             distributed-process-supervisor ==0.1.2,-             distributed-process-task ==0.1.1,-             distributed-static ==0.3.1.0,-             distributive ==0.4.4,-             djinn-ghc ==0.0.2.3,-             djinn-lib ==0.0.1.2,-             dlist ==0.7.1.1,-             dlist-instances ==0.1,-             doctest ==0.9.13,-             double-conversion ==2.0.1.0,-             DRBG ==0.5.4,-             dual-tree ==0.2.0.6,-             easy-file ==0.2.1,-             ede ==0.2.8.2,-             edit-distance ==0.2.1.3,-             effect-handlers ==0.1.0.6,-             either ==4.3.4,-             elm-core-sources ==1.0.0,-             email-validate ==2.0.1,-             enclosed-exceptions ==1.0.1.1,-             entropy ==0.3.6,-             enumerator ==0.4.20,-             eq ==4.0.4,-             erf ==2.0.0.0,-             errorcall-eq-instance ==0.2.0.1,-             errors ==1.4.7,-             ersatz ==0.3,-             esqueleto ==2.1.3,-             exception-mtl ==0.3.0.5,-             exceptions ==0.8.0.2,-             exception-transformers ==0.3.0.4,-             executable-hash ==0.2.0.0,-             executable-path ==0.0.3,-             extensible-exceptions ==0.1.1.4,-             extra ==1.1,-             fast-logger ==2.3.1,-             fay ==0.23.1.4,-             fay-base ==0.20.0.0,-             fay-builder ==0.2.0.5,-             fay-dom ==0.5.0.1,-             fay-jquery ==0.6.0.3,-             fay-text ==0.3.2.2,-             fay-uri ==0.2.0.0,-             fb ==1.0.10,-             fb-persistent ==0.3.4,-             fclabels ==2.0.2.2,-             FenwickTree ==0.1.2.1,-             fgl ==5.5.1.0,-             file-embed ==0.0.8.2,-             file-location ==0.4.7.1,-             filemanip ==0.3.6.3,-             filepath installed,-             fingertree ==0.1.0.2,-             fixed ==0.2.1.1,-             fixed-list ==0.1.6,-             fixed-vector ==0.7.0.3,-             flexible-defaults ==0.0.1.1,-             flock ==0.3.1.8,-             fmlist ==0.9,-             focus ==0.1.4,-             foldl ==1.0.10,-             FontyFruity ==0.5.1.1,-             force-layout ==0.3.0.11,-             foreign-store ==0.2,-             formatting ==6.2.0,-             free ==4.11,-             freenect ==1.2,-             frisby ==0.2,-             fsnotify ==0.1.0.3,-             fuzzcheck ==0.1.1,-             gd ==3000.7.3,-             generic-aeson ==0.2.0.5,-             generic-deriving ==1.6.3,-             GenericPretty ==1.2.1,-             generics-sop ==0.1.1.2,-             generic-xmlpickler ==0.1.0.2,-             ghc installed,-             ghc-heap-view ==0.5.3,-             ghcid ==0.3.6,-             ghc-mod ==5.2.1.2,-             ghc-mtl ==1.2.1.0,-             ghc-paths ==0.1.0.9,-             ghc-prim installed,-             ghc-syb-utils ==0.2.3,-             gio ==0.13.1.0,-             gipeda ==0.1.0.2,-             git-embed ==0.1.0,-             gitlib ==3.1.0.1,-             gitlib-libgit2 ==3.1.0.4,-             gitlib-test ==3.1.0.2,-             gitrev ==1.0.0,-             gitson ==0.5.1,-             gl ==0.7.7,-             glib ==0.13.1.0,-             Glob ==0.7.5,-             GLURaw ==1.5.0.1,-             GLUT ==2.7.0.1,-             graph-core ==0.2.2.0,-             graphs ==0.6.0.1,-             GraphSCC ==1.0.4,-             graphviz ==2999.17.0.2,-             gravatar ==0.8.0,-             groundhog ==0.7.0.3,-             groundhog-mysql ==0.7.0.1,-             groundhog-postgresql ==0.7.0.2,-             groundhog-sqlite ==0.7.0.1,-             groundhog-th ==0.7.0.1,-             groupoids ==4.0,-             groups ==0.4.0.0,-             gtk ==0.13.6,-             gtk2hs-buildtools ==0.13.0.3,-             gtk3 ==0.13.6,-             hackage-mirror ==0.1.0.0,-             haddock-api ==2.15.0.2,-             haddock-library ==1.1.1,-             hakyll ==4.6.9.0,-             half ==0.2.0.1,-             HandsomeSoup ==0.3.5,-             happstack-server ==7.4.2,-             happy ==1.19.5,-             hashable ==1.2.3.2,-             hashable-extras ==0.2.1,-             hashmap ==1.3.0.1,-             hashtables ==1.2.0.2,-             haskeline installed,-             haskell2010 installed,-             haskell98 installed,-             haskell-lexer ==1.0,-             haskell-names ==0.5.2,-             HaskellNet ==0.4.4,-             haskell-packages ==0.2.4.4,-             haskell-src ==1.0.2.0,-             haskell-src-exts ==1.16.0.1,-             haskell-src-meta ==0.6.0.9,-             haskintex ==0.5.0.3,-             hasql ==0.7.3.1,-             hasql-backend ==0.4.1,-             hasql-postgres ==0.10.3.1,-             hastache ==0.6.1,-             HaTeX ==3.16.1.1,-             HaXml ==1.25.3,-             haxr ==3000.10.4.2,-             HCodecs ==0.5,-             hdaemonize ==0.5.0.0,-             hdevtools ==0.1.0.8,-             hdocs ==0.4.1.3,-             heap ==1.0.2,-             heaps ==0.3.2.1,-             hebrew-time ==0.1.1,-             heist ==0.14.1,-             here ==1.2.7,-             heredoc ==0.2.0.0,-             hexpat ==0.20.9,-             hflags ==0.4,-             highlighting-kate ==0.5.12,-             hindent ==4.4.2,-             hinotify ==0.3.7,-             hint ==0.4.2.3,-             histogram-fill ==0.8.4.1,-             hit ==0.6.3,-             hjsmin ==0.1.4.7,-             hledger ==0.24.1,-             hledger-lib ==0.24.1,-             hledger-web ==0.24.1,-             hlibgit2 ==0.18.0.14,-             hlint ==1.9.20,-             hmatrix ==0.16.1.5,-             hmatrix-gsl ==0.16.0.3,-             hmatrix-gsl-stats ==0.2.1,-             hmatrix-repa ==0.1.2.1,-             hoauth2 ==0.4.7,-             holy-project ==0.1.1.1,-             hoogle ==4.2.41,-             hoopl installed,-             hOpenPGP ==2.0,-             hopenpgp-tools ==0.14.1,-             hostname ==1.0,-             hostname-validate ==1.0.0,-             hourglass ==0.2.9,-             hpc installed,-             hpc-coveralls ==0.9.0,-             hPDB ==1.2.0.3,-             hPDB-examples ==1.2.0.2,-             hs-bibutils ==5.5,-             hscolour ==1.22,-             hsdev ==0.1.3.4,-             hse-cpp ==0.1,-             hsignal ==0.2.7,-             hslogger ==1.2.9,-             hslua ==0.3.13,-             HsOpenSSL ==0.11.1.1,-             hspec ==2.1.7,-             hspec-attoparsec ==0.1.0.2,-             hspec-core ==2.1.7,-             hspec-discover ==2.1.7,-             hspec-expectations ==0.6.1.1,-             hspec-meta ==2.1.7,-             hspec-smallcheck ==0.3.0,-             hspec-wai ==0.6.3,-             hspec-wai-json ==0.6.0,-             hstatistics ==0.2.5.2,-             HStringTemplate ==0.8.3,-             hsyslog ==2.0,-             HTF ==0.12.2.4,-             html ==1.0.1.2,-             html-conduit ==1.1.1.2,-             HTTP ==4000.2.19,-             http-client ==0.4.11.2,-             http-client-openssl ==0.2.0.1,-             http-client-tls ==0.2.2,-             http-conduit ==2.1.5,-             http-date ==0.0.6.1,-             http-media ==0.6.2,-             http-reverse-proxy ==0.4.2,-             http-types ==0.8.6,-             HUnit ==1.2.5.2,-             hweblib ==0.6.3,-             hxt ==9.3.1.15,-             hxt-charproperties ==9.2.0.1,-             hxt-curl ==9.1.1.1,-             hxt-expat ==9.1.1,-             hxt-http ==9.1.5.2,-             hxt-pickle-utils ==0.1.0.3,-             hxt-regex-xmlschema ==9.2.0.2,-             hxt-relaxng ==9.1.5.5,-             hxt-tagsoup ==9.1.3,-             hxt-unicode ==9.0.2.4,-             hybrid-vectors ==0.1.2.1,-             hyphenation ==0.4.2.1,-             iconv ==0.4.1.2,-             ide-backend ==0.9.0.9,-             ide-backend-common ==0.9.1.1,-             ide-backend-rts ==0.1.3.1,-             idna ==0.3.0,-             ieee754 ==0.7.6,-             IfElse ==0.85,-             imagesize-conduit ==1.1,-             immortal ==0.2,-             include-file ==0.1.0.2,-             incremental-parser ==0.2.3.4,-             indents ==0.3.3,-             ini ==0.3.1,-             integer-gmp installed,-             integration ==0.2.1,-             interpolate ==0.1.0,-             interpolatedstring-perl6 ==0.9.0,-             intervals ==0.7.1,-             io-choice ==0.0.5,-             io-manager ==0.1.0.2,-             io-memoize ==1.1.1.0,-             iproute ==1.3.2,-             iterable ==3.0,-             ixset ==1.0.6,-             jmacro ==0.6.12,-             jmacro-rpc ==0.3.2,-             jmacro-rpc-happstack ==0.3.2,-             jmacro-rpc-snap ==0.3,-             jose-jwt ==0.4.2,-             js-flot ==0.8.3,-             js-jquery ==1.11.3,-             json ==0.9.1,-             json-autotype ==0.2.5.13,-             json-schema ==0.7.3.5,-             JuicyPixels ==3.2.4,-             JuicyPixels-repa ==0.7,-             kan-extensions ==4.2.2,-             kansas-comet ==0.3.1,-             kdt ==0.2.3,-             keter ==1.3.10.1,-             keys ==3.10.2,-             kmeans ==0.1.3,-             koofr-client ==1.0.0.3,-             kure ==2.16.10,-             language-c ==0.4.7,-             language-c-quote ==0.10.2.1,-             language-ecmascript ==0.17,-             language-glsl ==0.1.1,-             language-haskell-extract ==0.2.4,-             language-java ==0.2.7,-             language-javascript ==0.5.13.3,-             lattices ==1.2.1.1,-             lazy-csv ==0.5,-             lca ==0.3,-             lens ==4.7.0.1,-             lens-action ==0.1.0.1,-             lens-aeson ==1.0.0.4,-             lens-family-core ==1.2.0,-             lens-family-th ==0.4.1.0,-             lhs2tex ==1.19,-             libgit ==0.3.1,-             libnotify ==0.1.1.0,-             lifted-async ==0.7.0.1,-             lifted-base ==0.2.3.6,-             linear ==1.18.1.1,-             linear-accelerate ==0.2,-             List ==0.5.2,-             ListLike ==4.2.0,-             list-t ==0.4.5.1,-             loch-th ==0.2.1,-             log-domain ==0.10.0.1,-             logict ==0.6.0.2,-             loop ==0.2.0,-             lrucache ==1.2.0.0,-             lucid ==2.9.2,-             lucid-svg ==0.4.0.4,-             lzma-conduit ==1.1.3,-             machines ==0.4.1,-             machines-directory ==0.2.0.6,-             machines-io ==0.2.0.6,-             machines-process ==0.2.0.4,-             mainland-pretty ==0.2.7.2,-             managed ==1.0.0,-             mandrill ==0.2.2.0,-             map-syntax ==0.2,-             markdown ==0.1.13.2,-             markdown-unlit ==0.2.0.1,-             math-functions ==0.1.5.2,-             matrix ==0.3.4.3,-             maximal-cliques ==0.1.1,-             MaybeT ==0.1.2,-             mbox ==0.3.1,-             MemoTrie ==0.6.2,-             mersenne-random-pure64 ==0.2.0.4,-             messagepack ==0.3.0,-             messagepack-rpc ==0.1.0.3,-             MFlow ==0.4.5.9,-             mime-mail ==0.4.8.2,-             mime-mail-ses ==0.3.2.2,-             mime-types ==0.1.0.6,-             missing-foreign ==0.1.1,-             MissingH ==1.3.0.1,-             mmap ==0.5.9,-             mmorph ==1.0.4,-             MonadCatchIO-transformers ==0.3.1.3,-             monad-control ==1.0.0.4,-             monad-coroutine ==0.9.0.1,-             monadcryptorandom ==0.6.1,-             monadic-arrays ==0.2.1.4,-             monad-journal ==0.7,-             monadLib ==3.7.3,-             monadloc ==0.7.1,-             monad-logger ==0.3.13.1,-             monad-logger-json ==0.1.0.0,-             monad-logger-syslog ==0.1.1.1,-             monad-loops ==0.4.2.1,-             monad-par ==0.3.4.7,-             monad-parallel ==0.7.1.4,-             monad-par-extras ==0.3.3,-             monad-primitive ==0.1,-             monad-products ==4.0.0.1,-             MonadPrompt ==1.0.0.5,-             MonadRandom ==0.3.0.2,-             monad-st ==0.2.4,-             monads-tf ==0.1.0.2,-             mongoDB ==2.0.5,-             monoid-extras ==0.3.3.5,-             monoid-subclasses ==0.4.0.4,-             mono-traversable ==0.9.1,-             mtl ==2.1.3.1,-             mtl-compat ==0.2.1.1,-             mtlparse ==0.1.4.0,-             mtl-prelude ==1.0.3,-             multiarg ==0.30.0.8,-             multimap ==1.2.1,-             multipart ==0.1.2,-             MusicBrainz ==0.2.4,-             mutable-containers ==0.3.0,-             mwc-random ==0.13.3.2,-             mysql ==0.1.1.8,-             mysql-simple ==0.2.2.5,-             nanospec ==0.2.1,-             nats ==1,-             neat-interpolation ==0.2.2.1,-             nettle ==0.1.0,-             network ==2.6.1.0,-             network-anonymous-i2p ==0.10.0,-             network-attoparsec ==0.12.2,-             network-conduit ==1.1.0,-             network-conduit-tls ==1.1.2,-             network-info ==0.2.0.5,-             network-multicast ==0.0.11,-             network-simple ==0.4.0.4,-             network-transport ==0.4.1.0,-             network-transport-tcp ==0.4.1,-             network-transport-tests ==0.2.2.0,-             network-uri ==2.6.0.3,-             newtype ==0.2,-             nsis ==0.2.5,-             numbers ==3000.2.0.1,-             numeric-extras ==0.0.3,-             NumInstances ==1.4,-             numtype ==1.1,-             ObjectName ==1.1.0.0,-             Octree ==0.5.4.2,-             old-locale installed,-             OneTuple ==0.2.1,-             opaleye ==0.3.1.2,-             OpenGL ==2.12.0.1,-             OpenGLRaw ==2.4.1.0,-             openpgp-asciiarmor ==0.1,-             operational ==0.2.3.2,-             options ==1.2.1.1,-             optparse-applicative ==0.11.0.2,-             optparse-simple ==0.0.2,-             osdkeys ==0.0,-             pagerduty ==0.0.3.1,-             palette ==0.1.0.2,-             pandoc ==1.13.2.1,-             pandoc-citeproc ==0.6.0.1,-             pandoc-types ==1.12.4.2,-             pango ==0.13.1.0,-             parallel ==3.2.0.6,-             parallel-io ==0.3.3,-             parseargs ==0.1.5.2,-             parsec ==3.1.9,-             parsers ==0.12.2.1,-             partial-handler ==0.1.1,-             path-pieces ==0.2.0,-             patience ==0.1.1,-             pcre-heavy ==0.2.2,-             pcre-light ==0.4.0.3,-             pdfinfo ==1.5.4,-             pem ==0.2.2,-             persistent ==2.1.5,-             persistent-mongoDB ==2.1.2.2,-             persistent-mysql ==2.1.3.1,-             persistent-postgresql ==2.1.5.3,-             persistent-sqlite ==2.1.4.2,-             persistent-template ==2.1.3.1,-             phantom-state ==0.2.0.2,-             picoparsec ==0.1.2.2,-             pipes ==4.1.5,-             pipes-aeson ==0.4.1.3,-             pipes-attoparsec ==0.5.1.2,-             pipes-binary ==0.4.0.4,-             pipes-bytestring ==2.1.1,-             pipes-concurrency ==2.0.3,-             pipes-group ==1.0.2,-             pipes-network ==0.6.4,-             pipes-parse ==3.0.2,-             pipes-safe ==2.2.2,-             placeholders ==0.1,-             plot ==0.2.3.4,-             plot-gtk ==0.2.0.2,-             plot-gtk3 ==0.1,-             pointed ==4.2.0.2,-             polyparse ==1.11,-             postgresql-binary ==0.5.2.1,-             postgresql-libpq ==0.9.0.2,-             postgresql-simple ==0.4.10.0,-             post-mess-age ==0.1.0.0,-             prednote ==0.32.0.6,-             prefix-units ==0.1.0.2,-             prelude-extras ==0.4,-             presburger ==1.3.1,-             present ==2.2,-             pretty installed,-             prettyclass ==1.0.0.0,-             pretty-class ==1.0.1.1,-             pretty-show ==1.6.8.2,-             primes ==0.2.1.0,-             primitive ==0.6,-             process installed,-             process-extras ==0.3.3.4,-             product-profunctors ==0.6.1,-             profunctor-extras ==4.0,-             profunctors ==4.4.1,-             project-template ==0.1.4.2,-             PSQueue ==1.1,-             publicsuffixlist ==0.1,-             punycode ==2.0,-             pure-io ==0.2.1,-             pureMD5 ==2.1.2.1,-             pwstore-fast ==2.4.4,-             quandl-api ==0.2.1.0,-             QuasiText ==0.1.2.5,-             QuickCheck ==2.7.6,-             quickcheck-assertions ==0.2.0,-             quickcheck-instances ==0.3.11,-             quickcheck-io ==0.1.1,-             quickcheck-unicode ==1.0.0.1,-             rainbow ==0.22.0.2,-             random ==1.1,-             random-fu ==0.2.6.2,-             random-shuffle ==0.0.4,-             random-source ==0.3.0.6,-             rank1dynamic ==0.2.0.1,-             Rasterific ==0.5.2.1,-             rasterific-svg ==0.1.0.3,-             raw-strings-qq ==1.0.2,-             ReadArgs ==1.2.2,-             reducers ==3.10.3.1,-             reflection ==1.5.2.1,-             RefSerialize ==0.3.1.4,-             regex-applicative ==0.3.1,-             regex-base ==0.93.2,-             regex-compat ==0.95.1,-             regex-pcre-builtin ==0.94.4.8.8.35,-             regex-posix ==0.95.2,-             regexpr ==0.5.4,-             regex-tdfa ==1.2.0,-             regex-tdfa-rc ==1.1.8.3,-             regular ==0.3.4.4,-             regular-xmlpickler ==0.2,-             rematch ==0.2.0.0,-             repa ==3.3.1.2,-             repa-algorithms ==3.3.1.2,-             repa-devil ==0.3.2.6,-             repa-io ==3.3.1.2,-             reroute ==0.2.3.0,-             resource-pool ==0.2.3.2,-             resourcet ==1.1.5,-             rest-client ==0.5.0.3,-             rest-core ==0.35.1,-             rest-gen ==0.17.0.4,-             rest-happstack ==0.2.10.8,-             rest-snap ==0.1.17.18,-             rest-stringmap ==0.2.0.4,-             rest-types ==1.13.1,-             rest-wai ==0.1.0.8,-             rethinkdb-client-driver ==0.0.18,-             retry ==0.6,-             rev-state ==0.1,-             rfc5051 ==0.1.0.3,-             RSA ==2.1.0.1,-             rts installed,-             runmemo ==1.0.0.1,-             rvar ==0.2.0.2,-             safe ==0.3.9,-             safecopy ==0.8.5,-             sbv ==4.2,-             scientific ==0.3.3.8,-             scotty ==0.9.1,-             scrobble ==0.2.1.1,-             sdl2 ==1.3.1,-             securemem ==0.1.7,-             semigroupoid-extras ==4.0,-             semigroupoids ==4.3,-             semigroups ==0.16.2.2,-             semver ==0.3.3.1,-             sendfile ==0.7.9,-             seqloc ==0.6.1.1,-             servant ==0.2.2,-             servant-client ==0.2.2,-             servant-docs ==0.3.1,-             servant-jquery ==0.2.2.1,-             servant-server ==0.2.4,-             setenv ==0.1.1.3,-             set-monad ==0.2.0.0,-             SHA ==1.6.4.2,-             shake ==0.15.2,-             shake-language-c ==0.6.4,-             shakespeare ==2.0.5,-             shakespeare-text ==1.1.0,-             shell-conduit ==4.5.2,-             shelltestrunner ==1.3.5,-             shelly ==1.6.1.2,-             silently ==1.2.4.1,-             simple-reflect ==0.3.2,-             simple-sendfile ==0.2.20,-             singletons ==1.1.2,-             siphash ==1.0.3,-             skein ==1.0.9.3,-             slave-thread ==0.1.6,-             smallcheck ==1.1.1,-             smoothie ==0.1.3,-             smtLib ==1.0.7,-             snap ==0.14.0.4,-             snap-core ==0.9.7.0,-             snaplet-fay ==0.3.3.11,-             snap-server ==0.9.5.1,-             snowflake ==0.1.1.1,-             soap ==0.2.2.5,-             soap-openssl ==0.1.0.2,-             soap-tls ==0.1.1.2,-             socks ==0.5.4,-             sodium ==0.11.0.3,-             sourcemap ==0.1.3.0,-             speculation ==1.5.0.2,-             sphinx ==0.6.0.1,-             split ==0.2.2,-             Spock ==0.7.9.0,-             Spock-digestive ==0.1.0.0,-             Spock-worker ==0.2.1.3,-             spoon ==0.3.1,-             sqlite-simple ==0.4.8.0,-             srcloc ==0.4.1,-             stackage ==0.7.2.0,-             stackage-build-plan ==0.1.1.0,-             stackage-cli ==0.1.0.2,-             stackage-curator ==0.7.4,-             stackage-install ==0.1.1.1,-             stackage-types ==1.0.1.1,-             stackage-update ==0.1.2,-             stackage-upload ==0.1.0.5,-             stateref ==0.3,-             statestack ==0.2.0.4,-             StateVar ==1.1.0.0,-             statistics ==0.13.2.3,-             statistics-linreg ==0.3,-             stm ==2.4.4,-             stm-chans ==3.0.0.3,-             stm-conduit ==2.5.4,-             stm-containers ==0.2.9,-             stm-stats ==0.2.0.0,-             storable-complex ==0.2.2,-             storable-endian ==0.2.5,-             streaming-commons ==0.1.12.1,-             streams ==3.2,-             strict ==0.3.2,-             stringable ==0.1.3,-             stringbuilder ==0.5.0,-             string-conversions ==0.3.0.3,-             stringprep ==1.0.0,-             stringsearch ==0.3.6.6,-             stylish-haskell ==0.5.13.0,-             SVGFonts ==1.4.0.3,-             svg-tree ==0.1.1,-             syb ==0.4.4,-             syb-with-class ==0.6.1.5,-             symbol ==0.2.4,-             system-canonicalpath ==0.3.2.0,-             system-fileio ==0.3.16.3,-             system-filepath ==0.4.13.4,-             system-posix-redirect ==1.1.0.1,-             tabular ==0.2.2.7,-             tagged ==0.7.3,-             tagshare ==0.0,-             tagsoup ==0.13.3,-             tagstream-conduit ==0.5.5.3,-             tar ==0.4.1.0,-             tardis ==0.3.0.0,-             tasty ==0.10.1.2,-             tasty-ant-xml ==1.0.1,-             tasty-golden ==2.3.0.1,-             tasty-hunit ==0.9.2,-             tasty-kat ==0.0.3,-             tasty-quickcheck ==0.8.3.2,-             tasty-smallcheck ==0.8.0.1,-             tasty-th ==0.1.3,-             TCache ==0.12.0,-             template-haskell installed,-             temporary ==1.2.0.3,-             temporary-rc ==1.2.0.3,-             terminal-progress-bar ==0.0.1.4,-             terminal-size ==0.3.0,-             terminfo installed,-             test-framework ==0.8.1.1,-             test-framework-hunit ==0.3.0.1,-             test-framework-quickcheck2 ==0.3.0.3,-             test-framework-th ==0.2.4,-             testing-feat ==0.4.0.2,-             testpack ==2.1.3.0,-             texmath ==0.8.2,-             text ==1.2.0.6,-             text-binary ==0.1.0,-             text-format ==0.3.1.1,-             text-icu ==0.7.0.1,-             text-manipulate ==0.1.3.1,-             tf-random ==0.5,-             th-desugar ==1.5.3,-             th-expand-syns ==0.3.0.6,-             th-extras ==0.0.0.2,-             th-lift ==0.7.2,-             th-orphans ==0.11.1,-             threads ==0.5.1.3,-             th-reify-many ==0.1.3,-             thyme ==0.3.5.5,-             time installed,-             time-compat ==0.1.0.3,-             time-lens ==0.4.0.1,-             time-locale-compat ==0.1.0.1,-             timezone-olson ==0.1.7,-             timezone-series ==0.1.5.1,-             tls ==1.2.17,-             tls-debug ==0.3.4,-             tostring ==0.2.1.1,-             transformers-base ==0.4.4,-             transformers-compat ==0.4.0.3,-             traverse-with-class ==0.2.0.3,-             tree-view ==0.4,-             trifecta ==1.5.1.3,-             tttool ==1.3,-             tuple ==0.3.0.2,-             turtle ==1.0.2,-             type-eq ==0.5,-             type-list ==0.0.0.1,-             udbus ==0.2.1,-             unbounded-delays ==0.1.0.9,-             unbound-generics ==0.1.2.1,-             union-find ==0.2,-             uniplate ==1.6.12,-             unix installed,-             unix-compat ==0.4.1.4,-             unix-time ==0.3.5,-             unordered-containers ==0.2.5.1,-             uri-encode ==1.5.0.4,-             url ==2.1.3,-             users ==0.1.0.0,-             users-postgresql-simple ==0.1.0.1,-             users-test ==0.1.0.0,-             utf8-light ==0.4.2,-             utf8-string ==1,-             uuid ==1.3.10,-             uuid-types ==1.0.1,-             vault ==0.3.0.4,-             vector ==0.10.12.3,-             vector-algorithms ==0.6.0.4,-             vector-binary-instances ==0.2.1.0,-             vector-buffer ==0.4.1,-             vector-instances ==3.3.0.1,-             vector-space ==0.9,-             vector-space-points ==0.2.1.1,-             vector-th-unbox ==0.2.1.2,-             vhd ==0.2.2,-             void ==0.7,-             wai ==3.0.2.3,-             wai-app-static ==3.0.1.1,-             wai-conduit ==3.0.0.2,-             wai-eventsource ==3.0.0,-             wai-extra ==3.0.7.1,-             wai-handler-launch ==3.0.0.3,-             wai-logger ==2.2.4,-             wai-middleware-consul ==0.1.0.2,-             wai-middleware-static ==0.6.0.1,-             waitra ==0.0.3.0,-             wai-websockets ==3.0.0.5,-             warp ==3.0.13.1,-             warp-tls ==3.0.3,-             webdriver ==0.6.1,-             web-fpco ==0.1.1.0,-             websockets ==0.9.4.0,-             wizards ==1.0.2,-             wl-pprint ==1.1,-             wl-pprint-extras ==3.5.0.4,-             wl-pprint-terminfo ==3.7.1.3,-             wl-pprint-text ==1.1.0.4,-             word8 ==0.1.2,-             wordpass ==1.0.0.3,-             Workflow ==0.8.3,-             wrap ==0.0.0,-             wreq ==0.3.0.1,-             X11 ==1.6.1.2,-             x509 ==1.5.0.1,-             x509-store ==1.5.0,-             x509-system ==1.5.0,-             x509-validation ==1.5.2,-             xenstore ==0.1.1,-             xhtml installed,-             xml ==1.3.14,-             xml-conduit ==1.2.6,-             xml-conduit-writer ==0.1.1.1,-             xmlgen ==0.6.2.1,-             xml-hamlet ==0.4.0.11,-             xmlhtml ==0.2.3.4,-             xml-to-json ==2.0.1,-             xml-to-json-fast ==2.0.0,-             xml-types ==0.3.4,-             xss-sanitize ==0.3.5.5,-             yackage ==0.7.0.8,-             yaml ==0.8.11,-             Yampa ==0.9.7,-             YampaSynth ==0.2,-             yarr ==1.3.3.3,-             yesod ==1.4.1.5,-             yesod-auth ==1.4.5,-             yesod-auth-deskcom ==1.4.0,-             yesod-auth-fb ==1.6.6,-             yesod-auth-hashdb ==1.4.2.1,-             yesod-auth-oauth ==1.4.0.2,-             yesod-auth-oauth2 ==0.0.12,-             yesod-bin ==1.4.9.2,-             yesod-core ==1.4.9.1,-             yesod-eventsource ==1.4.0.1,-             yesod-fay ==0.7.1,-             yesod-fb ==0.3.4,-             yesod-form ==1.4.4.1,-             yesod-gitrepo ==0.1.1.0,-             yesod-newsfeed ==1.4.0.1,-             yesod-persistent ==1.4.0.2,-             yesod-sitemap ==1.4.0.1,-             yesod-static ==1.4.0.4,-             yesod-test ==1.4.3.1,-             yesod-text-markdown ==0.1.7,-             yesod-websockets ==0.2.1.1,-             zeromq4-haskell ==0.6.3,-             zip-archive ==0.2.3.7,-             zlib ==0.5.4.2,-             zlib-bindings ==0.1.1.5,-             zlib-enum ==0.2.3.1,-             zlib-lens ==0.1.2+constraints: Crypto ==4.2.5.1,+             binary ==0.7.6.1,+             DAV ==1.0.3,+             HTTP ==4000.2.17,+             HUnit ==1.2.5.2,+             IfElse ==0.85,+             MissingH ==1.2.1.0,+             MonadRandom ==0.1.13,+             QuickCheck ==2.7.6,+             SafeSemaphore ==0.10.1,+             aeson ==0.7.0.6,+             ansi-wl-pprint ==0.6.7.1,+             appar ==0.1.4,+             asn1-encoding ==0.8.1.3,+             asn1-parse ==0.8.1,+             asn1-types ==0.2.3,+             async ==2.0.1.5,+             attoparsec ==0.11.3.4,+             attoparsec-conduit ==1.1.0,+             authenticate ==1.3.2.10,+             base-unicode-symbols ==0.2.2.4,+             base16-bytestring ==0.1.1.6,+             base64-bytestring ==1.0.0.1,+             bifunctors ==4.1.1.1,+             bloomfilter ==2.0.0.0,+             byteable ==0.1.1,+             byteorder ==1.0.4,+             case-insensitive ==1.2.0.1,+             cereal ==0.4.0.1,+             cipher-aes ==0.2.8,+             cipher-des ==0.0.6,+             cipher-rc4 ==0.1.4,+             clientsession ==0.9.0.3,+             comonad ==4.2,+             conduit ==1.1.6,+             conduit-extra ==1.1.3,+             connection ==0.2.3,+             contravariant ==0.6.1.1,+             cookie ==0.4.1.2,+             cprng-aes ==0.5.2,+             crypto-api ==0.13.2,+             crypto-cipher-types ==0.0.9,+             crypto-numbers ==0.2.3,+             crypto-pubkey ==0.2.4,+             crypto-pubkey-types ==0.4.2.2,+             crypto-random ==0.0.7,+             cryptohash ==0.11.6,+             cryptohash-conduit ==0.1.1,+             css-text ==0.1.2.1,+             data-default ==0.5.3,+             data-default-class ==0.0.1,+             data-default-instances-base ==0.0.1,+             data-default-instances-containers ==0.0.1,+             data-default-instances-dlist ==0.0.1,+             data-default-instances-old-locale ==0.0.1,+             sandi ==0.3.0.1,+             dbus ==0.10.8,+             distributive ==0.4.4,+             dlist ==0.7.0.1,+             dns ==1.3.0,+             edit-distance ==0.2.1.2,+             either ==4.3,+             email-validate ==1.0.0,+             entropy ==0.2.1,+             errors ==1.4.7,+             exceptions ==0.6.1,+             failure ==0.2.0.3,+             fast-logger ==2.1.5,+             fdo-notify ==0.3.1,+             feed ==0.3.9.2,+             file-embed ==0.0.6,+             fingertree ==0.1.0.0,+             free ==4.9,+             gnuidn ==0.2,+             gnutls ==0.1.4,+             gsasl ==0.3.5,+             hS3 ==0.5.7,+             hashable ==1.2.1.0,+             hinotify ==0.3.5,+             hjsmin ==0.1.4.7,+             hslogger ==1.2.1,+             http-client ==0.4.11.1,+             http-client-tls ==0.2.2,+             http-conduit ==2.1.5,+             http-date ==0.0.2,+             http-types ==0.8.5,+             hxt ==9.3.1.4,+             hxt-charproperties ==9.1.1.1,+             hxt-regex-xmlschema ==9.0.4,+             hxt-unicode ==9.0.2.2,+             idna ==0.2,+             iproute ==1.2.11,+             json ==0.5,+             keys ==3.10.1,+             language-javascript ==0.5.13,+             lens ==4.4.0.2,+             libxml-sax ==0.7.5,+             mime-mail ==0.4.1.2,+             mime-types ==0.1.0.4,+             mmorph ==1.0.3,+             monad-control ==0.3.2.2,+             monad-logger ==0.3.6.1,+             monad-loops ==0.4.2.1,+             monads-tf ==0.1.0.2,+             mtl ==2.1.2,+             nats ==0.1.2,+             network ==2.4.1.2,+             network-conduit ==1.1.0,+             network-info ==0.2.0.5,+             network-multicast ==0.0.10,+             network-protocol-xmpp ==0.4.6,+             network-uri ==2.6.0.1,+             optparse-applicative ==0.11.0.2,+             parallel ==3.2.0.4,+             path-pieces ==0.1.4,+             pem ==0.2.2,+             persistent ==1.3.3,+             persistent-template ==1.3.2.2,+             pointed ==4.0,+             prelude-extras ==0.4,+             profunctors ==4.0.4,+             publicsuffixlist ==0.1,+             punycode ==2.0,+             random ==1.0.1.1,+             ranges ==0.2.4,+             reducers ==3.10.2.1,+             reflection ==1.2.0.1,+             regex-base ==0.93.2,+             regex-compat ==0.95.1,+             regex-posix ==0.95.2,+             regex-tdfa ==1.2.0,+             resource-pool ==0.2.1.1,+             resourcet ==1.1.2.3,+             safe ==0.3.8,+             securemem ==0.1.3,+             semigroupoids ==4.2,+             semigroups ==0.15.3,+             shakespeare ==2.0.5,+             silently ==1.2.4.1,+             simple-sendfile ==0.2.14,+             skein ==1.0.9,+             socks ==0.5.4,+             split ==0.2.2,+             stm ==2.4.2,+             stm-chans ==3.0.0.2,+             streaming-commons ==0.1.4.1,+             stringprep ==0.1.5,+             stringsearch ==0.3.6.5,+             syb ==0.4.0,+             system-fileio ==0.3.14,+             system-filepath ==0.4.12,+             tagged ==0.7.2,+             tagsoup ==0.13.1,+             tagstream-conduit ==0.5.5.1,+             text ==1.1.1.0,+             text-icu ==0.6.3.7,+             tf-random ==0.5,+             tls ==1.2.9,+             transformers ==0.3.0.0,+             transformers-base ==0.4.1,+             transformers-compat ==0.3.3.3,+             unbounded-delays ==0.1.0.8,+             unix-compat ==0.4.1.3,+             unix-time ==0.2.2,+             unordered-containers ==0.2.5.0,+             utf8-string ==0.3.7,+             uuid ==1.3.3,+             vault ==0.3.0.3,+             vector ==0.10.0.1,+             void ==0.6.1,+             wai ==3.0.1.1,+             wai-app-static ==3.0.0.1,+             wai-extra ==3.0.1.2,+             wai-logger ==2.1.1,+             warp ==3.0.0.5,+             warp-tls ==3.0.0,+             word8 ==0.1.1,+             x509 ==1.4.11,+             x509-store ==1.4.4,+             x509-system ==1.4.5,+             x509-validation ==1.5.0,+             xml ==1.3.13,+             xml-conduit ==1.2.1,+             xml-hamlet ==0.4.0.9,+             xml-types ==0.3.4,+             xss-sanitize ==0.3.5.2,+             yaml ==0.8.9.3,+             yesod ==1.2.6.1,+             yesod-auth ==1.3.4.6,+             yesod-core ==1.2.20.1,+             yesod-default ==1.2.0,+             yesod-form ==1.3.16,+             yesod-persistent ==1.2.3.1,+             yesod-routes ==1.2.0.7,+             yesod-static ==1.2.4,+             zlib ==0.5.4.1,+             bytestring ==0.10.4.0,+             scientific ==0.3.3.1,+             clock ==0.4.6.0
+ standalone/android/haskell-patches/crypto-numbers_build-fix.patch view
@@ -0,0 +1,227 @@+From 0cfdb30120976290068f4bcbebbf236b960afbb6 Mon Sep 17 00:00:00 2001+From: dummy <dummy@example.com>+Date: Thu, 26 Dec 2013 20:01:30 -0400+Subject: [PATCH] hack to build++---+ Crypto/Number/Basic.hs         |   14 --------------+ Crypto/Number/ModArithmetic.hs |   29 -----------------------------+ Crypto/Number/Prime.hs         |   18 ------------------+ crypto-numbers.cabal           |    2 +-+ 4 files changed, 1 insertion(+), 62 deletions(-)++diff --git a/Crypto/Number/Basic.hs b/Crypto/Number/Basic.hs+index 65c14b3..eaee853 100644+--- a/Crypto/Number/Basic.hs++++ b/Crypto/Number/Basic.hs+@@ -20,11 +20,7 @@ module Crypto.Number.Basic+     , areEven+     ) where+ +-#if MIN_VERSION_integer_gmp(0,5,1)+-import GHC.Integer.GMP.Internals+-#else+ import Data.Bits+-#endif+ + -- | sqrti returns two integer (l,b) so that l <= sqrt i <= b+ -- the implementation is quite naive, use an approximation for the first number+@@ -63,25 +59,16 @@ sqrti i+ -- gcde 'a' 'b' find (x,y,gcd(a,b)) where ax + by = d+ --+ gcde :: Integer -> Integer -> (Integer, Integer, Integer)+-#if MIN_VERSION_integer_gmp(0,5,1)+-gcde a b = (s, t, g)+-  where (# g, s #) = gcdExtInteger a b+-        t = (g - s * a) `div` b+-#else+ gcde a b = if d < 0 then (-x,-y,-d) else (x,y,d) where+     (d, x, y)                     = f (a,1,0) (b,0,1)+     f t              (0, _, _)    = t+     f (a', sa, ta) t@(b', sb, tb) =+         let (q, r) = a' `divMod` b' in+         f t (r, sa - (q * sb), ta - (q * tb))+-#endif+ + -- | get the extended GCD of two integer using the extended binary algorithm (HAC 14.61)+ -- get (x,y,d) where d = gcd(a,b) and x,y satisfying ax + by = d+ gcde_binary :: Integer -> Integer -> (Integer, Integer, Integer)+-#if MIN_VERSION_integer_gmp(0,5,1)+-gcde_binary = gcde+-#else+ gcde_binary a' b'+     | b' == 0   = (1,0,a')+     | a' >= b'  = compute a' b'+@@ -105,7 +92,6 @@ gcde_binary a' b'+              in if u2 >= v2+                 then loop g x y (u2 - v2) v2 (a2 - c2) (b2 - d2) c2 d2+                 else loop g x y u2 (v2 - u2) a2 b2 (c2 - a2) (d2 - b2)+-#endif+ + -- | check if a list of integer are all even+ areEven :: [Integer] -> Bool+diff --git a/Crypto/Number/ModArithmetic.hs b/Crypto/Number/ModArithmetic.hs+index 942c12f..f8cfc32 100644+--- a/Crypto/Number/ModArithmetic.hs++++ b/Crypto/Number/ModArithmetic.hs+@@ -29,12 +29,8 @@ module Crypto.Number.ModArithmetic+ import Control.Exception (throw, Exception)+ import Data.Typeable+ +-#if MIN_VERSION_integer_gmp(0,5,1)+-import GHC.Integer.GMP.Internals+-#else+ import Crypto.Number.Basic (gcde_binary)+ import Data.Bits+-#endif+ + -- | Raised when two numbers are supposed to be coprimes but are not.+ data CoprimesAssertionError = CoprimesAssertionError+@@ -55,13 +51,7 @@ expSafe :: Integer -- ^ base+         -> Integer -- ^ exponant+         -> Integer -- ^ modulo+         -> Integer -- ^ result+-#if MIN_VERSION_integer_gmp(0,5,1)+-expSafe b e m+-    | odd m     = powModSecInteger b e m+-    | otherwise = powModInteger b e m+-#else+ expSafe = exponentiation+-#endif+ + -- | Compute the modular exponentiation of base^exponant using+ -- the fastest algorithm without any consideration for+@@ -74,11 +64,7 @@ expFast :: Integer -- ^ base+         -> Integer -- ^ modulo+         -> Integer -- ^ result+ expFast =+-#if MIN_VERSION_integer_gmp(0,5,1)+-    powModInteger+-#else+     exponentiation+-#endif+ + -- note on exponentiation: 0^0 is treated as 1 for mimicking the standard library;+ -- the mathematic debate is still open on whether or not this is true, but pratically+@@ -87,22 +73,15 @@ expFast =+ -- | exponentiation_rtl_binary computes modular exponentiation as b^e mod m+ -- using the right-to-left binary exponentiation algorithm (HAC 14.79)+ exponentiation_rtl_binary :: Integer -> Integer -> Integer -> Integer+-#if MIN_VERSION_integer_gmp(0,5,1)+-exponentiation_rtl_binary = expSafe+-#else+ exponentiation_rtl_binary 0 0 m = 1 `mod` m+ exponentiation_rtl_binary b e m = loop e b 1+     where sq x          = (x * x) `mod` m+           loop !0 _  !a = a `mod` m+           loop !i !s !a = loop (i `shiftR` 1) (sq s) (if odd i then a * s else a)+-#endif+ + -- | exponentiation computes modular exponentiation as b^e mod m+ -- using repetitive squaring.+ exponentiation :: Integer -> Integer -> Integer -> Integer+-#if MIN_VERSION_integer_gmp(0,5,1)+-exponentiation = expSafe+-#else+ exponentiation b e m+     | b == 1    = b+     | e == 0    = 1+@@ -110,7 +89,6 @@ exponentiation b e m+     | even e    = let p = (exponentiation b (e `div` 2) m) `mod` m+                    in (p^(2::Integer)) `mod` m+     | otherwise = (b * exponentiation b (e-1) m) `mod` m+-#endif+ + --{-# DEPRECATED exponantiation_rtl_binary "typo in API name it's called exponentiation_rtl_binary #-}+ exponantiation_rtl_binary :: Integer -> Integer -> Integer -> Integer+@@ -122,17 +100,10 @@ exponantiation = exponentiation+ + -- | inverse computes the modular inverse as in g^(-1) mod m+ inverse :: Integer -> Integer -> Maybe Integer+-#if MIN_VERSION_integer_gmp(0,5,1)+-inverse g m+-    | r == 0    = Nothing+-    | otherwise = Just r+-  where r = recipModInteger g m+-#else+ inverse g m+     | d > 1     = Nothing+     | otherwise = Just (x `mod` m)+   where (x,_,d) = gcde_binary g m+-#endif+ + -- | Compute the modular inverse of 2 coprime numbers.+ -- This is equivalent to inverse except that the result+diff --git a/Crypto/Number/Prime.hs b/Crypto/Number/Prime.hs+index 0cea9da..458c94d 100644+--- a/Crypto/Number/Prime.hs++++ b/Crypto/Number/Prime.hs+@@ -3,9 +3,7 @@+ #ifndef MIN_VERSION_integer_gmp+ #define MIN_VERSION_integer_gmp(a,b,c) 0+ #endif+-#if MIN_VERSION_integer_gmp(0,5,1)+ {-# LANGUAGE MagicHash #-}+-#endif+ -- |+ -- Module      : Crypto.Number.Prime+ -- License     : BSD-style+@@ -30,12 +28,7 @@ import Crypto.Number.Generate+ import Crypto.Number.Basic (sqrti, gcde_binary)+ import Crypto.Number.ModArithmetic (exponantiation)+ +-#if MIN_VERSION_integer_gmp(0,5,1)+-import GHC.Integer.GMP.Internals+-import GHC.Base+-#else+ import Data.Bits+-#endif+ + -- | returns if the number is probably prime.+ -- first a list of small primes are implicitely tested for divisibility,+@@ -78,21 +71,11 @@ findPrimeFromWith rng prop !n+ -- | find a prime from a starting point with no specific property.+ findPrimeFrom :: CPRG g => g -> Integer -> (Integer, g)+ findPrimeFrom rng n =+-#if MIN_VERSION_integer_gmp(0,5,1)+-    (nextPrimeInteger n, rng)+-#else+     findPrimeFromWith rng (\g _ -> (True, g)) n+-#endif+ + -- | Miller Rabin algorithm return if the number is probably prime or composite.+ -- the tries parameter is the number of recursion, that determines the accuracy of the test.+ primalityTestMillerRabin :: CPRG g => g -> Int -> Integer -> (Bool, g)+-#if MIN_VERSION_integer_gmp(0,5,1)+-primalityTestMillerRabin rng (I# tries) !n =+-    case testPrimeInteger n tries of+-        0# -> (False, rng)+-        _  -> (True, rng)+-#else+ primalityTestMillerRabin rng tries !n+     | n <= 3     = error "Miller-Rabin requires tested value to be > 3"+     | even n     = (False, rng)+@@ -129,7 +112,6 @@ primalityTestMillerRabin rng tries !n+                   | x2 == 1   = False+                   | x2 /= nm1 = loop' ws ((x2*x2) `mod` n) (r+1)+                   | otherwise = loop ws+-#endif+ + {-+     n < z -> witness to test+diff --git a/crypto-numbers.cabal b/crypto-numbers.cabal+index 9610e34..6669d78 100644+--- a/crypto-numbers.cabal++++ b/crypto-numbers.cabal+@@ -15,7 +15,7 @@ Extra-Source-Files:  Tests/*.hs+ + Flag integer-gmp+   Description: Are we using integer-gmp?+-  Default: True++  Default: False+ + Library+   Build-Depends:     base >= 4 && < 5+-- +1.7.10.4+
− standalone/android/haskell-patches/entropy_cross-build.patch
@@ -1,27 +0,0 @@-From 8e942c1f661b30e5477607b78528634e6d345ae8 Mon Sep 17 00:00:00 2001-From: androidbuilder <androidbuilder@example.com>-Date: Thu, 2 Jul 2015 21:16:15 +0000-Subject: [PATCH] cross build------ entropy.cabal | 5 +----- 1 file changed, 1 insertion(+), 4 deletions(-)--diff --git a/entropy.cabal b/entropy.cabal-index e4fb436..e26896c 100644---- a/entropy.cabal-+++ b/entropy.cabal-@@ -14,10 +14,7 @@ category:       Data, Cryptography- homepage:       https://github.com/TomMD/entropy- bug-reports:    https://github.com/TomMD/entropy/issues- stability:      stable---- build-type:  Simple---- ^^ Used for HaLVM--build-type:        Custom---- ^^ Test for RDRAND support using 'ghc'-+build-type:  Simple- cabal-version:  >=1.10- tested-with:    GHC == 7.8.2- -- data-files:--- -2.1.4
+ standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch view
@@ -0,0 +1,50 @@+From afdec6c9e66211a0ac8419fffe191b059d1fd00c Mon Sep 17 00:00:00 2001+From: foo <foo@bar>+Date: Sun, 22 Sep 2013 17:24:33 +0000+Subject: [PATCH] fix build with new base++---+ Data/Text/IDN/IDNA.chs       |    1 ++ Data/Text/IDN/Punycode.chs   |    1 ++ Data/Text/IDN/StringPrep.chs |    1 ++ 3 files changed, 3 insertions(+)++diff --git a/Data/Text/IDN/IDNA.chs b/Data/Text/IDN/IDNA.chs+index ed29ee4..dbb4ba5 100644+--- a/Data/Text/IDN/IDNA.chs++++ b/Data/Text/IDN/IDNA.chs+@@ -31,6 +31,7 @@ import Foreign+ import Foreign.C+ + import Data.Text.IDN.Internal++import System.IO.Unsafe+ + #include <idna.h>+ #include <idn-free.h>+diff --git a/Data/Text/IDN/Punycode.chs b/Data/Text/IDN/Punycode.chs+index 24b5fa6..4e62555 100644+--- a/Data/Text/IDN/Punycode.chs++++ b/Data/Text/IDN/Punycode.chs+@@ -32,6 +32,7 @@ import Data.List (unfoldr)+ import qualified Data.ByteString as B+ import qualified Data.Text as T+ ++import System.IO.Unsafe+ import Foreign+ import Foreign.C+ +diff --git a/Data/Text/IDN/StringPrep.chs b/Data/Text/IDN/StringPrep.chs+index 752dc9e..5e9fd84 100644+--- a/Data/Text/IDN/StringPrep.chs++++ b/Data/Text/IDN/StringPrep.chs+@@ -39,6 +39,7 @@ import qualified Data.ByteString as B+ import qualified Data.Text as T+ import qualified Data.Text.Encoding as TE+ ++import System.IO.Unsafe+ import Foreign+ import Foreign.C+ +-- +1.7.10.4+
− standalone/android/haskell-patches/network_2.4.1.0_0006-build-fixes.patch
@@ -1,24 +0,0 @@-From cf110acc7f5863bb80ba835a009a7f59d3453239 Mon Sep 17 00:00:00 2001-From: dummy <dummy@example.com>-Date: Thu, 2 Jul 2015 20:19:14 +0000-Subject: [PATCH] fix build------ Network/BSD.hsc | 1 -- 1 file changed, 1 deletion(-)--diff --git a/Network/BSD.hsc b/Network/BSD.hsc-index e11ac71..039d0f1 100644---- a/Network/BSD.hsc-+++ b/Network/BSD.hsc-@@ -396,7 +396,6 @@ instance Storable NetworkEntry where-    poke _p = error "Storable.poke(BSD.NetEntry) not implemented"- - --#if !defined(cygwin32_HOST_OS) && !defined(mingw32_HOST_OS) && !defined(_WIN32)- getNetworkByName :: NetworkName -> IO NetworkEntry- getNetworkByName name = withLock $ do-  withCString name $ \ name_cstr -> do--- -2.1.4-
− standalone/android/haskell-patches/optparse-applicative_remove-ANN.patch
@@ -1,33 +0,0 @@-From b128590966d4946219e45e2efd88acf7a354abc2 Mon Sep 17 00:00:00 2001-From: androidbuilder <androidbuilder@example.com>-Date: Tue, 14 Oct 2014 02:28:02 +0000-Subject: [PATCH] remove ANN------ Options/Applicative.hs           |    2 --- Options/Applicative/Help/Core.hs |    2 --- 2 files changed, 4 deletions(-)--diff --git a/Options/Applicative.hs b/Options/Applicative.hs-index bd4129d..f412062 100644---- a/Options/Applicative.hs-+++ b/Options/Applicative.hs-@@ -34,5 +34,3 @@ import Options.Applicative.Common- import Options.Applicative.Builder- import Options.Applicative.Builder.Completer- import Options.Applicative.Extra----{-# ANN module "HLint: ignore Use import/export shortcut" #-}-diff --git a/Options/Applicative/Help/Core.hs b/Options/Applicative/Help/Core.hs-index 0a79169..3f1ce3f 100644---- a/Options/Applicative/Help/Core.hs-+++ b/Options/Applicative/Help/Core.hs-@@ -139,5 +139,3 @@ parserUsage pprefs p progn = hsep-   [ string "Usage:"-   , string progn-   , align (extractChunk (briefDesc pprefs p)) ]----{-# ANN footerHelp "HLint: ignore Eta reduce" #-}--- -1.7.10.4-
− standalone/android/haskell-patches/skein_hardcode_little-endian.patch
@@ -1,26 +0,0 @@-From 3a04b41ffce4e4e87b0fedd3a1e3434a3f06cc76 Mon Sep 17 00:00:00 2001-From: foo <foo@bar>-Date: Sun, 22 Sep 2013 00:18:12 +0000-Subject: [PATCH] hardcode little endian--This is the same as building with a cabal flag.------ c_impl/optimized/skein_port.h |    1 +- 1 file changed, 1 insertion(+)--diff --git a/c_impl/optimized/skein_port.h b/c_impl/optimized/skein_port.h-index a2d0fc2..6929bb0 100644---- a/c_impl/optimized/skein_port.h-+++ b/c_impl/optimized/skein_port.h-@@ -45,6 +45,7 @@ typedef uint64_t        u64b_t;             /* 64-bit unsigned integer */-  * platform-specific code instead (e.g., for big-endian CPUs).
-  *
-  */
-+#define SKEIN_NEED_SWAP  (0)
- #ifndef SKEIN_NEED_SWAP /* compile-time "override" for endianness? */
- 
- #include "brg_endian.h"                     /* get endianness selection */
--- -1.7.10.4-
standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch view
@@ -1,6 +1,6 @@-From da127aa3b2c6cbf679950eb593eb8c88384cc26b Mon Sep 17 00:00:00 2001+From db9eb179885874af342bb2c3adef7185496ba1f1 Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Thu, 2 Jul 2015 20:34:05 +0000+Date: Wed, 15 Oct 2014 16:37:32 +0000 Subject: [PATCH] hack for bionic  ---@@ -9,10 +9,10 @@  2 files changed, 1 insertion(+), 13 deletions(-)  diff --git a/Data/UnixTime/Types.hsc b/Data/UnixTime/Types.hsc-index 6253b27..fb5b3fa 100644+index d30f39b..ec7ca4c 100644 --- a/Data/UnixTime/Types.hsc +++ b/Data/UnixTime/Types.hsc-@@ -12,8 +12,6 @@ import Data.Binary+@@ -9,8 +9,6 @@ import Foreign.Storable    #include <sys/time.h>  @@ -20,8 +20,8 @@ -  -- |  -- Data structure for Unix time.- ---@@ -33,16 +31,6 @@ data UnixTime = UnixTime {+ data UnixTime = UnixTime {+@@ -20,16 +18,6 @@ data UnixTime = UnixTime {    , utMicroSeconds :: {-# UNPACK #-} !Int32    } deriving (Eq,Ord,Show)  @@ -35,14 +35,14 @@ -            (#poke struct timeval, tv_sec)  ptr (utSeconds ut) -            (#poke struct timeval, tv_usec) ptr (utMicroSeconds ut) -- #if __GLASGOW_HASKELL__ >= 704- instance Binary UnixTime where-         put (UnixTime (CTime sec) msec) = do+ -- |+ -- Format of the strptime()/strftime() style.+ type Format = ByteString diff --git a/cbits/conv.c b/cbits/conv.c-index 669cfda..8fa5f9a 100644+index ec31fef..b7bc0f9 100644 --- a/cbits/conv.c +++ b/cbits/conv.c-@@ -98,7 +98,7 @@ time_t c_parse_unix_time_gmt(char *fmt, char *src) {+@@ -96,7 +96,7 @@ time_t c_parse_unix_time_gmt(char *fmt, char *src) {  #else      strptime(src, fmt, &dst);  #endif@@ -52,5 +52,5 @@    size_t c_format_unix_time(char *fmt, time_t src, char* dst, int siz) { -- -2.1.4+2.1.1 
− standalone/android/haskell-patches/vector_cross-build.patch
@@ -1,24 +0,0 @@-From 6ffd4fcb7d27ec6df709d80a40a262406446a259 Mon Sep 17 00:00:00 2001-From: dummy <dummy@example.com>-Date: Wed, 15 Oct 2014 17:00:56 +0000-Subject: [PATCH] cross build------ Data/Vector/Fusion/Stream/Monadic.hs |  1 -- 2 files changed, 14 deletions(-)--diff --git a/Data/Vector/Fusion/Stream/Monadic.hs b/Data/Vector/Fusion/Stream/Monadic.hs-index 51fec75..b089b3d 100644---- a/Data/Vector/Fusion/Stream/Monadic.hs-+++ b/Data/Vector/Fusion/Stream/Monadic.hs-@@ -101,7 +101,6 @@ import GHC.Exts ( SpecConstrAnnotation(..) )- - data SPEC = SPEC | SPEC2- #if __GLASGOW_HASKELL__ >= 700--{-# ANN type SPEC ForceSpecConstr #-}- #endif- - emptyStream :: String--- -2.1.1-
− standalone/android/haskell-patches/warp_avoid-ipv6-for-android.patch
@@ -1,39 +0,0 @@-From a33437e3150fb33d2fd22d29ff196be28a81c747 Mon Sep 17 00:00:00 2001-From: androidbuilder <androidbuilder@example.com>-Date: Thu, 2 Jul 2015 21:48:18 +0000-Subject: [PATCH] avoid ipv6 for android------ Network/Wai/Handler/Warp/Run.hs | 9 +--------- 1 file changed, 1 insertion(+), 8 deletions(-)--diff --git a/Network/Wai/Handler/Warp/Run.hs b/Network/Wai/Handler/Warp/Run.hs-index 34ae455..ea7475c 100644---- a/Network/Wai/Handler/Warp/Run.hs-+++ b/Network/Wai/Handler/Warp/Run.hs-@@ -14,7 +14,7 @@ import Control.Monad (when, unless, void)- import Data.ByteString (ByteString)- import qualified Data.ByteString as S- import Data.Char (chr)--import Data.IP (toHostAddress, toHostAddress6)-+import Data.IP (toHostAddress)- import Data.IORef (IORef, newIORef, readIORef, writeIORef)- import Data.Streaming.Network (bindPortTCP)- import Network (sClose, Socket)-@@ -323,13 +323,6 @@ serveConnection conn ii origAddr transport settings app = do-                         [a] -> Just (SockAddrInet (readInt clientPort)-                                                        (toHostAddress a))-                         _ -> Nothing--                ["PROXY","TCP6",clientAddr,_,clientPort,_] ->--                    case [x | (x, t) <- reads (decodeAscii clientAddr), null t] of--                        [a] -> Just (SockAddrInet6 (readInt clientPort)--                                                        0--                                                        (toHostAddress6 a)--                                                        0)--                        _ -> Nothing-                 ("PROXY":"UNKNOWN":_) ->-                     Just origAddr-                 _ ->--- -2.1.4-
standalone/android/install-haskell-packages view
@@ -55,7 +55,7 @@ 	if [ -e config.guess ]; then 		cp /usr/share/misc/config.guess . 	fi-	cabal install # --reinstall --force-reinstalls+	cabal install # --force-reinstalls --reinstall 	rm -f cabal.config  	rm -rf $pkg*@@ -65,7 +65,7 @@ installgitannexdeps () { 	pushd ../.. 	ln -sf standalone/android/cabal.config-	cabal install --only-dependencies "$@"+	cabal install --only-dependencies "$@" # --force-reinstalls --reinstall 	rm -f cabal.config 	popd }@@ -86,9 +86,9 @@ 	patched iproute 	patched primitive 	patched socks-	patched entropy 	patched vector 	patched stm-chans+	patched persistent 	patched profunctors 	patched skein 	patched lens@@ -97,32 +97,35 @@ 	patched persistent-template 	patched system-filepath 	patched optparse-applicative-	patched warp 	patched wai-app-static+	patched yesod-routes 	patched shakespeare 	patched yesod-core+	patched yesod-persistent 	patched yesod-form+	patched crypto-numbers 	patched clock 	patched yesod-auth 	patched yesod 	patched process-conduit 	patched DAV 	patched yesod-static-	patched uuid 	patched dns 	patched gnutls 	patched unbounded-delays+	patched gnuidn 	patched network-protocol-xmpp+	patched uuid  	cd ..  	installgitannexdeps -fAndroid -f-Pairing } +cabal update setupcabal  # Install packages for host ghc.-cabal update installgitannexdeps  # Install packages for cross ghc, with patches as necessary.
standalone/android/tmp/network-2.4.1.2/cabal.config view
@@ -1,1062 +1,199 @@-constraints: abstract-deque ==0.3,-             abstract-par ==0.3.3,-             accelerate ==0.15.1.0,-             ace ==0.6,-             action-permutations ==0.0.0.1,-             active ==0.1.0.19,-             AC-Vector ==2.3.2,-             ad ==4.2.2,-             adjunctions ==4.2.1,-             aeson-pretty ==0.7.2,-             aeson-qq ==0.7.4,-             aeson-utils ==0.3.0.1,-             alarmclock ==0.2.0.6,-             alex ==3.1.4,-             amazonka ==0.3.4,-             amazonka-autoscaling ==0.3.4,-             amazonka-cloudformation ==0.3.4,-             amazonka-cloudfront ==0.3.4,-             amazonka-cloudhsm ==0.3.4,-             amazonka-cloudsearch ==0.3.4,-             amazonka-cloudsearch-domains ==0.3.4,-             amazonka-cloudtrail ==0.3.4,-             amazonka-cloudwatch ==0.3.4,-             amazonka-cloudwatch-logs ==0.3.4,-             amazonka-codedeploy ==0.3.4,-             amazonka-cognito-identity ==0.3.4,-             amazonka-cognito-sync ==0.3.4,-             amazonka-config ==0.3.4,-             amazonka-core ==0.3.4,-             amazonka-datapipeline ==0.3.4,-             amazonka-directconnect ==0.3.4,-             amazonka-dynamodb ==0.3.4,-             amazonka-ec2 ==0.3.4,-             amazonka-ecs ==0.3.4,-             amazonka-elasticache ==0.3.4,-             amazonka-elasticbeanstalk ==0.3.4,-             amazonka-elastictranscoder ==0.3.4,-             amazonka-elb ==0.3.4,-             amazonka-emr ==0.3.4,-             amazonka-glacier ==0.3.4,-             amazonka-iam ==0.3.4,-             amazonka-importexport ==0.3.4,-             amazonka-kinesis ==0.3.4,-             amazonka-kms ==0.3.4,-             amazonka-lambda ==0.3.4,-             amazonka-opsworks ==0.3.4,-             amazonka-rds ==0.3.4,-             amazonka-redshift ==0.3.4,-             amazonka-route53 ==0.3.4,-             amazonka-route53-domains ==0.3.4,-             amazonka-s3 ==0.3.4,-             amazonka-sdb ==0.3.4,-             amazonka-ses ==0.3.4,-             amazonka-sns ==0.3.4,-             amazonka-sqs ==0.3.4,-             amazonka-ssm ==0.3.4,-             amazonka-storagegateway ==0.3.4,-             amazonka-sts ==0.3.4,-             amazonka-support ==0.3.4,-             amazonka-swf ==0.3.4,-             amqp ==0.12.2,-             ansi-terminal ==0.6.2.1,-             ansi-wl-pprint ==0.6.7.2,-             appar ==0.1.4,-             applicative-quoters ==0.1.0.8,-             approximate ==0.2.1.1,-             arbtt ==0.9.0.2,-             arithmoi ==0.4.1.2,-             array installed,-             arrow-list ==0.7,-             asn1-data ==0.7.1,-             asn1-encoding ==0.9.0,-             asn1-parse ==0.9.1,-             asn1-types ==0.3.0,-             async ==2.0.2,-             atto-lisp ==0.2.2,-             attoparsec ==0.12.1.6,-             attoparsec-enumerator ==0.3.4,-             attoparsec-expr ==0.1.1.2,-             authenticate ==1.3.2.11,-             authenticate-oauth ==1.5.1.1,-             auto-update ==0.1.2.1,-             aws ==0.11.4,-             bake ==0.2,-             bank-holidays-england ==0.1.0.3,-             base installed,-             base16-bytestring ==0.1.1.6,-             base64-bytestring ==1.0.0.1,-             base64-string ==0.2,-             base-compat ==0.6.0,-             base-prelude ==0.1.19,-             base-unicode-symbols ==0.2.2.4,-             basic-prelude ==0.3.13,-             bcrypt ==0.0.6,-             bifunctors ==4.2.1,-             binary installed,-             binary-conduit ==1.2.3,-             binary-list ==1.1.1.0,-             bindings-DSL ==1.0.22,-             bin-package-db installed,-             bioace ==0.0.1,-             bioalign ==0.0.5,-             biocore ==0.3.1,-             biofasta ==0.0.3,-             biofastq ==0.1,-             biophd ==0.0.7,-             biopsl ==0.4,-             biosff ==0.3.7.1,-             bits ==0.4,-             blank-canvas ==0.5,-             BlastHTTP ==1.0.1,-             blastxml ==0.3.2,-             blaze-builder ==0.4.0.1,-             blaze-builder-enumerator ==0.2.1.0,-             blaze-html ==0.8.0.2,-             blaze-markup ==0.7.0.2,-             blaze-svg ==0.3.4.1,-             blaze-textual ==0.2.0.9,-             bloodhound ==0.5.0.1,-             bmp ==1.2.5.2,-             Boolean ==0.2.3,-             boolsimplifier ==0.1.8,-             bound ==1.0.5,-             BoundedChan ==1.0.3.0,-             broadcast-chan ==0.1.0,-             bson ==0.3.1,-             bumper ==0.6.0.3,-             byteable ==0.1.1,-             bytedump ==1.0,-             byteorder ==1.0.4,-             bytes ==0.15,-             bytestring installed,-             bytestring-builder ==0.10.6.0.0,-             bytestring-conversion ==0.3.0,-             bytestring-lexing ==0.4.3.2,-             bytestring-mmap ==0.2.2,-             bytestring-progress ==1.0.5,-             bytestring-trie ==0.2.4.1,-             bzlib ==0.5.0.5,-             bzlib-conduit ==0.2.1.3,-             c2hs ==0.25.2,-             Cabal installed,-             cabal-file-th ==0.2.3,-             Cabal-ide-backend ==1.23.0.0,-             cabal-install ==1.18.1.0,-             cabal-rpm ==0.9.6,-             cabal-src ==0.2.5.1,-             cabal-test-quickcheck ==0.1.4,-             cairo ==0.13.1.0,-             cartel ==0.14.2.6,-             case-insensitive ==1.2.0.4,-             cases ==0.1.2.1,-             cassava ==0.4.2.4,-             cereal ==0.4.1.1,-             cereal-conduit ==0.7.2.3,-             certificate ==1.3.9,-             charset ==0.3.7.1,-             Chart ==1.3.3,-             Chart-diagrams ==1.3.3,-             ChasingBottoms ==1.3.0.12,-             check-email ==1.0,-             checkers ==0.4.3,-             chell ==0.4.0.1,-             chell-quickcheck ==0.2.5,-             chunked-data ==0.1.0.1,-             cipher-aes ==0.2.10,-             cipher-aes128 ==0.6.4,-             cipher-blowfish ==0.0.3,-             cipher-camellia ==0.0.2,-             cipher-des ==0.0.6,-             cipher-rc4 ==0.1.4,-             circle-packing ==0.1.0.4,-             classy-prelude ==0.11.1.1,-             classy-prelude-conduit ==0.11.1,-             classy-prelude-yesod ==0.11.1,-             clay ==0.10.1,-             clientsession ==0.9.1.1,-             clock ==0.4.6.0,-             cmdargs ==0.10.13,-             code-builder ==0.1.3,-             colour ==2.3.3,-             comonad ==4.2.6,-             comonads-fd ==4.0,-             comonad-transformers ==4.0,-             compdata ==0.9,-             compensated ==0.6.1,-             composition ==1.0.1.1,-             compressed ==3.10,-             concatenative ==1.0.1,-             concurrent-extra ==0.7.0.9,-             concurrent-supply ==0.1.7.1,-             cond ==0.4.1.1,-             conduit ==1.2.4.2,-             conduit-combinators ==0.3.1,-             conduit-extra ==1.1.8,-             configurator ==0.3.0.0,-             connection ==0.2.4,-             constraints ==0.4.1.3,-             consul-haskell ==0.1,-             containers installed,-             containers-unicode-symbols ==0.3.1.1,-             contravariant ==1.3.1.1,-             control-monad-free ==0.6.1,-             control-monad-loop ==0.1,-             convertible ==1.1.1.0,-             cookie ==0.4.1.5,-             courier ==0.1.0.15,-             cpphs ==1.19,-             cprng-aes ==0.6.1,-             cpu ==0.1.2,-             criterion ==1.1.0.0,-             crypto-api ==0.13.2,-             crypto-api-tests ==0.3,-             cryptocipher ==0.6.2,-             crypto-cipher-tests ==0.0.11,-             crypto-cipher-types ==0.0.9,-             cryptohash ==0.11.6,-             cryptohash-conduit ==0.1.1,-             cryptohash-cryptoapi ==0.1.3,-             cryptol ==2.2.2,-             crypto-numbers ==0.2.7,-             crypto-pubkey ==0.2.8,-             crypto-pubkey-types ==0.4.3,-             crypto-random ==0.0.9,-             crypto-random-api ==0.2.0,-             css-text ==0.1.2.1,-             csv ==0.1.2,-             csv-conduit ==0.6.6,-             cubicspline ==0.1.1,-             curl ==1.3.8,-             data-accessor ==0.2.2.6,-             data-accessor-mtl ==0.2.0.4,-             data-binary-ieee754 ==0.4.4,-             data-default ==0.5.3,-             data-default-class ==0.0.1,-             data-default-instances-base ==0.0.1,-             data-default-instances-containers ==0.0.1,-             data-default-instances-dlist ==0.0.1,-             data-default-instances-old-locale ==0.0.1,-             data-inttrie ==0.1.0,-             data-lens-light ==0.1.2.1,-             data-memocombinators ==0.5.1,-             data-reify ==0.6.1,-             DAV ==1.0.5,-             Decimal ==0.4.2,-             deepseq installed,-             deepseq-generics ==0.1.1.2,-             derive ==2.5.22,-             descriptive ==0.9.3,-             diagrams ==1.2,-             diagrams-cairo ==1.2.0.7,-             diagrams-canvas ==0.3.0.4,-             diagrams-contrib ==1.1.2.6,-             diagrams-core ==1.2.0.6,-             diagrams-lib ==1.2.0.9,-             diagrams-postscript ==1.1.0.5,-             diagrams-rasterific ==0.1.0.8,-             diagrams-svg ==1.1.0.5,-             Diff ==0.3.2,-             digest ==0.0.1.2,-             digestive-functors ==0.7.1.5,-             dimensional ==0.13.0.2,-             directory installed,-             directory-tree ==0.12.0,-             direct-sqlite ==2.3.15,-             distributed-process ==0.5.3,-             distributed-process-async ==0.2.1,-             distributed-process-client-server ==0.1.2,-             distributed-process-execution ==0.1.1,-             distributed-process-extras ==0.2.0,-             distributed-process-simplelocalnet ==0.2.2.0,-             distributed-process-supervisor ==0.1.2,-             distributed-process-task ==0.1.1,-             distributed-static ==0.3.1.0,-             distributive ==0.4.4,-             djinn-ghc ==0.0.2.3,-             djinn-lib ==0.0.1.2,-             dlist ==0.7.1.1,-             dlist-instances ==0.1,-             doctest ==0.9.13,-             double-conversion ==2.0.1.0,-             DRBG ==0.5.4,-             dual-tree ==0.2.0.6,-             easy-file ==0.2.1,-             ede ==0.2.8.2,-             edit-distance ==0.2.1.3,-             effect-handlers ==0.1.0.6,-             either ==4.3.4,-             elm-core-sources ==1.0.0,-             email-validate ==2.0.1,-             enclosed-exceptions ==1.0.1.1,-             entropy ==0.3.6,-             enumerator ==0.4.20,-             eq ==4.0.4,-             erf ==2.0.0.0,-             errorcall-eq-instance ==0.2.0.1,-             errors ==1.4.7,-             ersatz ==0.3,-             esqueleto ==2.1.3,-             exception-mtl ==0.3.0.5,-             exceptions ==0.8.0.2,-             exception-transformers ==0.3.0.4,-             executable-hash ==0.2.0.0,-             executable-path ==0.0.3,-             extensible-exceptions ==0.1.1.4,-             extra ==1.1,-             fast-logger ==2.3.1,-             fay ==0.23.1.4,-             fay-base ==0.20.0.0,-             fay-builder ==0.2.0.5,-             fay-dom ==0.5.0.1,-             fay-jquery ==0.6.0.3,-             fay-text ==0.3.2.2,-             fay-uri ==0.2.0.0,-             fb ==1.0.10,-             fb-persistent ==0.3.4,-             fclabels ==2.0.2.2,-             FenwickTree ==0.1.2.1,-             fgl ==5.5.1.0,-             file-embed ==0.0.8.2,-             file-location ==0.4.7.1,-             filemanip ==0.3.6.3,-             filepath installed,-             fingertree ==0.1.0.2,-             fixed ==0.2.1.1,-             fixed-list ==0.1.6,-             fixed-vector ==0.7.0.3,-             flexible-defaults ==0.0.1.1,-             flock ==0.3.1.8,-             fmlist ==0.9,-             focus ==0.1.4,-             foldl ==1.0.10,-             FontyFruity ==0.5.1.1,-             force-layout ==0.3.0.11,-             foreign-store ==0.2,-             formatting ==6.2.0,-             free ==4.11,-             freenect ==1.2,-             frisby ==0.2,-             fsnotify ==0.1.0.3,-             fuzzcheck ==0.1.1,-             gd ==3000.7.3,-             generic-aeson ==0.2.0.5,-             generic-deriving ==1.6.3,-             GenericPretty ==1.2.1,-             generics-sop ==0.1.1.2,-             generic-xmlpickler ==0.1.0.2,-             ghc installed,-             ghc-heap-view ==0.5.3,-             ghcid ==0.3.6,-             ghc-mod ==5.2.1.2,-             ghc-mtl ==1.2.1.0,-             ghc-paths ==0.1.0.9,-             ghc-prim installed,-             ghc-syb-utils ==0.2.3,-             gio ==0.13.1.0,-             gipeda ==0.1.0.2,-             git-embed ==0.1.0,-             gitlib ==3.1.0.1,-             gitlib-libgit2 ==3.1.0.4,-             gitlib-test ==3.1.0.2,-             gitrev ==1.0.0,-             gitson ==0.5.1,-             gl ==0.7.7,-             glib ==0.13.1.0,-             Glob ==0.7.5,-             GLURaw ==1.5.0.1,-             GLUT ==2.7.0.1,-             graph-core ==0.2.2.0,-             graphs ==0.6.0.1,-             GraphSCC ==1.0.4,-             graphviz ==2999.17.0.2,-             gravatar ==0.8.0,-             groundhog ==0.7.0.3,-             groundhog-mysql ==0.7.0.1,-             groundhog-postgresql ==0.7.0.2,-             groundhog-sqlite ==0.7.0.1,-             groundhog-th ==0.7.0.1,-             groupoids ==4.0,-             groups ==0.4.0.0,-             gtk ==0.13.6,-             gtk2hs-buildtools ==0.13.0.3,-             gtk3 ==0.13.6,-             hackage-mirror ==0.1.0.0,-             haddock-api ==2.15.0.2,-             haddock-library ==1.1.1,-             hakyll ==4.6.9.0,-             half ==0.2.0.1,-             HandsomeSoup ==0.3.5,-             happstack-server ==7.4.2,-             happy ==1.19.5,-             hashable ==1.2.3.2,-             hashable-extras ==0.2.1,-             hashmap ==1.3.0.1,-             hashtables ==1.2.0.2,-             haskeline installed,-             haskell2010 installed,-             haskell98 installed,-             haskell-lexer ==1.0,-             haskell-names ==0.5.2,-             HaskellNet ==0.4.4,-             haskell-packages ==0.2.4.4,-             haskell-src ==1.0.2.0,-             haskell-src-exts ==1.16.0.1,-             haskell-src-meta ==0.6.0.9,-             haskintex ==0.5.0.3,-             hasql ==0.7.3.1,-             hasql-backend ==0.4.1,-             hasql-postgres ==0.10.3.1,-             hastache ==0.6.1,-             HaTeX ==3.16.1.1,-             HaXml ==1.25.3,-             haxr ==3000.10.4.2,-             HCodecs ==0.5,-             hdaemonize ==0.5.0.0,-             hdevtools ==0.1.0.8,-             hdocs ==0.4.1.3,-             heap ==1.0.2,-             heaps ==0.3.2.1,-             hebrew-time ==0.1.1,-             heist ==0.14.1,-             here ==1.2.7,-             heredoc ==0.2.0.0,-             hexpat ==0.20.9,-             hflags ==0.4,-             highlighting-kate ==0.5.12,-             hindent ==4.4.2,-             hinotify ==0.3.7,-             hint ==0.4.2.3,-             histogram-fill ==0.8.4.1,-             hit ==0.6.3,-             hjsmin ==0.1.4.7,-             hledger ==0.24.1,-             hledger-lib ==0.24.1,-             hledger-web ==0.24.1,-             hlibgit2 ==0.18.0.14,-             hlint ==1.9.20,-             hmatrix ==0.16.1.5,-             hmatrix-gsl ==0.16.0.3,-             hmatrix-gsl-stats ==0.2.1,-             hmatrix-repa ==0.1.2.1,-             hoauth2 ==0.4.7,-             holy-project ==0.1.1.1,-             hoogle ==4.2.41,-             hoopl installed,-             hOpenPGP ==2.0,-             hopenpgp-tools ==0.14.1,-             hostname ==1.0,-             hostname-validate ==1.0.0,-             hourglass ==0.2.9,-             hpc installed,-             hpc-coveralls ==0.9.0,-             hPDB ==1.2.0.3,-             hPDB-examples ==1.2.0.2,-             hs-bibutils ==5.5,-             hscolour ==1.22,-             hsdev ==0.1.3.4,-             hse-cpp ==0.1,-             hsignal ==0.2.7,-             hslogger ==1.2.9,-             hslua ==0.3.13,-             HsOpenSSL ==0.11.1.1,-             hspec ==2.1.7,-             hspec-attoparsec ==0.1.0.2,-             hspec-core ==2.1.7,-             hspec-discover ==2.1.7,-             hspec-expectations ==0.6.1.1,-             hspec-meta ==2.1.7,-             hspec-smallcheck ==0.3.0,-             hspec-wai ==0.6.3,-             hspec-wai-json ==0.6.0,-             hstatistics ==0.2.5.2,-             HStringTemplate ==0.8.3,-             hsyslog ==2.0,-             HTF ==0.12.2.4,-             html ==1.0.1.2,-             html-conduit ==1.1.1.2,-             HTTP ==4000.2.19,-             http-client ==0.4.11.2,-             http-client-openssl ==0.2.0.1,-             http-client-tls ==0.2.2,-             http-conduit ==2.1.5,-             http-date ==0.0.6.1,-             http-media ==0.6.2,-             http-reverse-proxy ==0.4.2,-             http-types ==0.8.6,-             HUnit ==1.2.5.2,-             hweblib ==0.6.3,-             hxt ==9.3.1.15,-             hxt-charproperties ==9.2.0.1,-             hxt-curl ==9.1.1.1,-             hxt-expat ==9.1.1,-             hxt-http ==9.1.5.2,-             hxt-pickle-utils ==0.1.0.3,-             hxt-regex-xmlschema ==9.2.0.2,-             hxt-relaxng ==9.1.5.5,-             hxt-tagsoup ==9.1.3,-             hxt-unicode ==9.0.2.4,-             hybrid-vectors ==0.1.2.1,-             hyphenation ==0.4.2.1,-             iconv ==0.4.1.2,-             ide-backend ==0.9.0.9,-             ide-backend-common ==0.9.1.1,-             ide-backend-rts ==0.1.3.1,-             idna ==0.3.0,-             ieee754 ==0.7.6,-             IfElse ==0.85,-             imagesize-conduit ==1.1,-             immortal ==0.2,-             include-file ==0.1.0.2,-             incremental-parser ==0.2.3.4,-             indents ==0.3.3,-             ini ==0.3.1,-             integer-gmp installed,-             integration ==0.2.1,-             interpolate ==0.1.0,-             interpolatedstring-perl6 ==0.9.0,-             intervals ==0.7.1,-             io-choice ==0.0.5,-             io-manager ==0.1.0.2,-             io-memoize ==1.1.1.0,-             iproute ==1.3.2,-             iterable ==3.0,-             ixset ==1.0.6,-             jmacro ==0.6.12,-             jmacro-rpc ==0.3.2,-             jmacro-rpc-happstack ==0.3.2,-             jmacro-rpc-snap ==0.3,-             jose-jwt ==0.4.2,-             js-flot ==0.8.3,-             js-jquery ==1.11.3,-             json ==0.9.1,-             json-autotype ==0.2.5.13,-             json-schema ==0.7.3.5,-             JuicyPixels ==3.2.4,-             JuicyPixels-repa ==0.7,-             kan-extensions ==4.2.2,-             kansas-comet ==0.3.1,-             kdt ==0.2.3,-             keter ==1.3.10.1,-             keys ==3.10.2,-             kmeans ==0.1.3,-             koofr-client ==1.0.0.3,-             kure ==2.16.10,-             language-c ==0.4.7,-             language-c-quote ==0.10.2.1,-             language-ecmascript ==0.17,-             language-glsl ==0.1.1,-             language-haskell-extract ==0.2.4,-             language-java ==0.2.7,-             language-javascript ==0.5.13.3,-             lattices ==1.2.1.1,-             lazy-csv ==0.5,-             lca ==0.3,-             lens ==4.7.0.1,-             lens-action ==0.1.0.1,-             lens-aeson ==1.0.0.4,-             lens-family-core ==1.2.0,-             lens-family-th ==0.4.1.0,-             lhs2tex ==1.19,-             libgit ==0.3.1,-             libnotify ==0.1.1.0,-             lifted-async ==0.7.0.1,-             lifted-base ==0.2.3.6,-             linear ==1.18.1.1,-             linear-accelerate ==0.2,-             List ==0.5.2,-             ListLike ==4.2.0,-             list-t ==0.4.5.1,-             loch-th ==0.2.1,-             log-domain ==0.10.0.1,-             logict ==0.6.0.2,-             loop ==0.2.0,-             lrucache ==1.2.0.0,-             lucid ==2.9.2,-             lucid-svg ==0.4.0.4,-             lzma-conduit ==1.1.3,-             machines ==0.4.1,-             machines-directory ==0.2.0.6,-             machines-io ==0.2.0.6,-             machines-process ==0.2.0.4,-             mainland-pretty ==0.2.7.2,-             managed ==1.0.0,-             mandrill ==0.2.2.0,-             map-syntax ==0.2,-             markdown ==0.1.13.2,-             markdown-unlit ==0.2.0.1,-             math-functions ==0.1.5.2,-             matrix ==0.3.4.3,-             maximal-cliques ==0.1.1,-             MaybeT ==0.1.2,-             mbox ==0.3.1,-             MemoTrie ==0.6.2,-             mersenne-random-pure64 ==0.2.0.4,-             messagepack ==0.3.0,-             messagepack-rpc ==0.1.0.3,-             MFlow ==0.4.5.9,-             mime-mail ==0.4.8.2,-             mime-mail-ses ==0.3.2.2,-             mime-types ==0.1.0.6,-             missing-foreign ==0.1.1,-             MissingH ==1.3.0.1,-             mmap ==0.5.9,-             mmorph ==1.0.4,-             MonadCatchIO-transformers ==0.3.1.3,-             monad-control ==1.0.0.4,-             monad-coroutine ==0.9.0.1,-             monadcryptorandom ==0.6.1,-             monadic-arrays ==0.2.1.4,-             monad-journal ==0.7,-             monadLib ==3.7.3,-             monadloc ==0.7.1,-             monad-logger ==0.3.13.1,-             monad-logger-json ==0.1.0.0,-             monad-logger-syslog ==0.1.1.1,-             monad-loops ==0.4.2.1,-             monad-par ==0.3.4.7,-             monad-parallel ==0.7.1.4,-             monad-par-extras ==0.3.3,-             monad-primitive ==0.1,-             monad-products ==4.0.0.1,-             MonadPrompt ==1.0.0.5,-             MonadRandom ==0.3.0.2,-             monad-st ==0.2.4,-             monads-tf ==0.1.0.2,-             mongoDB ==2.0.5,-             monoid-extras ==0.3.3.5,-             monoid-subclasses ==0.4.0.4,-             mono-traversable ==0.9.1,-             mtl ==2.1.3.1,-             mtl-compat ==0.2.1.1,-             mtlparse ==0.1.4.0,-             mtl-prelude ==1.0.3,-             multiarg ==0.30.0.8,-             multimap ==1.2.1,-             multipart ==0.1.2,-             MusicBrainz ==0.2.4,-             mutable-containers ==0.3.0,-             mwc-random ==0.13.3.2,-             mysql ==0.1.1.8,-             mysql-simple ==0.2.2.5,-             nanospec ==0.2.1,-             nats ==1,-             neat-interpolation ==0.2.2.1,-             nettle ==0.1.0,-             network ==2.6.1.0,-             network-anonymous-i2p ==0.10.0,-             network-attoparsec ==0.12.2,-             network-conduit ==1.1.0,-             network-conduit-tls ==1.1.2,-             network-info ==0.2.0.5,-             network-multicast ==0.0.11,-             network-simple ==0.4.0.4,-             network-transport ==0.4.1.0,-             network-transport-tcp ==0.4.1,-             network-transport-tests ==0.2.2.0,-             network-uri ==2.6.0.3,-             newtype ==0.2,-             nsis ==0.2.5,-             numbers ==3000.2.0.1,-             numeric-extras ==0.0.3,-             NumInstances ==1.4,-             numtype ==1.1,-             ObjectName ==1.1.0.0,-             Octree ==0.5.4.2,-             old-locale installed,-             OneTuple ==0.2.1,-             opaleye ==0.3.1.2,-             OpenGL ==2.12.0.1,-             OpenGLRaw ==2.4.1.0,-             openpgp-asciiarmor ==0.1,-             operational ==0.2.3.2,-             options ==1.2.1.1,-             optparse-applicative ==0.11.0.2,-             optparse-simple ==0.0.2,-             osdkeys ==0.0,-             pagerduty ==0.0.3.1,-             palette ==0.1.0.2,-             pandoc ==1.13.2.1,-             pandoc-citeproc ==0.6.0.1,-             pandoc-types ==1.12.4.2,-             pango ==0.13.1.0,-             parallel ==3.2.0.6,-             parallel-io ==0.3.3,-             parseargs ==0.1.5.2,-             parsec ==3.1.9,-             parsers ==0.12.2.1,-             partial-handler ==0.1.1,-             path-pieces ==0.2.0,-             patience ==0.1.1,-             pcre-heavy ==0.2.2,-             pcre-light ==0.4.0.3,-             pdfinfo ==1.5.4,-             pem ==0.2.2,-             persistent ==2.1.5,-             persistent-mongoDB ==2.1.2.2,-             persistent-mysql ==2.1.3.1,-             persistent-postgresql ==2.1.5.3,-             persistent-sqlite ==2.1.4.2,-             persistent-template ==2.1.3.1,-             phantom-state ==0.2.0.2,-             picoparsec ==0.1.2.2,-             pipes ==4.1.5,-             pipes-aeson ==0.4.1.3,-             pipes-attoparsec ==0.5.1.2,-             pipes-binary ==0.4.0.4,-             pipes-bytestring ==2.1.1,-             pipes-concurrency ==2.0.3,-             pipes-group ==1.0.2,-             pipes-network ==0.6.4,-             pipes-parse ==3.0.2,-             pipes-safe ==2.2.2,-             placeholders ==0.1,-             plot ==0.2.3.4,-             plot-gtk ==0.2.0.2,-             plot-gtk3 ==0.1,-             pointed ==4.2.0.2,-             polyparse ==1.11,-             postgresql-binary ==0.5.2.1,-             postgresql-libpq ==0.9.0.2,-             postgresql-simple ==0.4.10.0,-             post-mess-age ==0.1.0.0,-             prednote ==0.32.0.6,-             prefix-units ==0.1.0.2,-             prelude-extras ==0.4,-             presburger ==1.3.1,-             present ==2.2,-             pretty installed,-             prettyclass ==1.0.0.0,-             pretty-class ==1.0.1.1,-             pretty-show ==1.6.8.2,-             primes ==0.2.1.0,-             primitive ==0.6,-             process installed,-             process-extras ==0.3.3.4,-             product-profunctors ==0.6.1,-             profunctor-extras ==4.0,-             profunctors ==4.4.1,-             project-template ==0.1.4.2,-             PSQueue ==1.1,-             publicsuffixlist ==0.1,-             punycode ==2.0,-             pure-io ==0.2.1,-             pureMD5 ==2.1.2.1,-             pwstore-fast ==2.4.4,-             quandl-api ==0.2.1.0,-             QuasiText ==0.1.2.5,-             QuickCheck ==2.7.6,-             quickcheck-assertions ==0.2.0,-             quickcheck-instances ==0.3.11,-             quickcheck-io ==0.1.1,-             quickcheck-unicode ==1.0.0.1,-             rainbow ==0.22.0.2,-             random ==1.1,-             random-fu ==0.2.6.2,-             random-shuffle ==0.0.4,-             random-source ==0.3.0.6,-             rank1dynamic ==0.2.0.1,-             Rasterific ==0.5.2.1,-             rasterific-svg ==0.1.0.3,-             raw-strings-qq ==1.0.2,-             ReadArgs ==1.2.2,-             reducers ==3.10.3.1,-             reflection ==1.5.2.1,-             RefSerialize ==0.3.1.4,-             regex-applicative ==0.3.1,-             regex-base ==0.93.2,-             regex-compat ==0.95.1,-             regex-pcre-builtin ==0.94.4.8.8.35,-             regex-posix ==0.95.2,-             regexpr ==0.5.4,-             regex-tdfa ==1.2.0,-             regex-tdfa-rc ==1.1.8.3,-             regular ==0.3.4.4,-             regular-xmlpickler ==0.2,-             rematch ==0.2.0.0,-             repa ==3.3.1.2,-             repa-algorithms ==3.3.1.2,-             repa-devil ==0.3.2.6,-             repa-io ==3.3.1.2,-             reroute ==0.2.3.0,-             resource-pool ==0.2.3.2,-             resourcet ==1.1.5,-             rest-client ==0.5.0.3,-             rest-core ==0.35.1,-             rest-gen ==0.17.0.4,-             rest-happstack ==0.2.10.8,-             rest-snap ==0.1.17.18,-             rest-stringmap ==0.2.0.4,-             rest-types ==1.13.1,-             rest-wai ==0.1.0.8,-             rethinkdb-client-driver ==0.0.18,-             retry ==0.6,-             rev-state ==0.1,-             rfc5051 ==0.1.0.3,-             RSA ==2.1.0.1,-             rts installed,-             runmemo ==1.0.0.1,-             rvar ==0.2.0.2,-             safe ==0.3.9,-             safecopy ==0.8.5,-             sbv ==4.2,-             scientific ==0.3.3.8,-             scotty ==0.9.1,-             scrobble ==0.2.1.1,-             sdl2 ==1.3.1,-             securemem ==0.1.7,-             semigroupoid-extras ==4.0,-             semigroupoids ==4.3,-             semigroups ==0.16.2.2,-             semver ==0.3.3.1,-             sendfile ==0.7.9,-             seqloc ==0.6.1.1,-             servant ==0.2.2,-             servant-client ==0.2.2,-             servant-docs ==0.3.1,-             servant-jquery ==0.2.2.1,-             servant-server ==0.2.4,-             setenv ==0.1.1.3,-             set-monad ==0.2.0.0,-             SHA ==1.6.4.2,-             shake ==0.15.2,-             shake-language-c ==0.6.4,-             shakespeare ==2.0.5,-             shakespeare-text ==1.1.0,-             shell-conduit ==4.5.2,-             shelltestrunner ==1.3.5,-             shelly ==1.6.1.2,-             silently ==1.2.4.1,-             simple-reflect ==0.3.2,-             simple-sendfile ==0.2.20,-             singletons ==1.1.2,-             siphash ==1.0.3,-             skein ==1.0.9.3,-             slave-thread ==0.1.6,-             smallcheck ==1.1.1,-             smoothie ==0.1.3,-             smtLib ==1.0.7,-             snap ==0.14.0.4,-             snap-core ==0.9.7.0,-             snaplet-fay ==0.3.3.11,-             snap-server ==0.9.5.1,-             snowflake ==0.1.1.1,-             soap ==0.2.2.5,-             soap-openssl ==0.1.0.2,-             soap-tls ==0.1.1.2,-             socks ==0.5.4,-             sodium ==0.11.0.3,-             sourcemap ==0.1.3.0,-             speculation ==1.5.0.2,-             sphinx ==0.6.0.1,-             split ==0.2.2,-             Spock ==0.7.9.0,-             Spock-digestive ==0.1.0.0,-             Spock-worker ==0.2.1.3,-             spoon ==0.3.1,-             sqlite-simple ==0.4.8.0,-             srcloc ==0.4.1,-             stackage ==0.7.2.0,-             stackage-build-plan ==0.1.1.0,-             stackage-cli ==0.1.0.2,-             stackage-curator ==0.7.4,-             stackage-install ==0.1.1.1,-             stackage-types ==1.0.1.1,-             stackage-update ==0.1.2,-             stackage-upload ==0.1.0.5,-             stateref ==0.3,-             statestack ==0.2.0.4,-             StateVar ==1.1.0.0,-             statistics ==0.13.2.3,-             statistics-linreg ==0.3,-             stm ==2.4.4,-             stm-chans ==3.0.0.3,-             stm-conduit ==2.5.4,-             stm-containers ==0.2.9,-             stm-stats ==0.2.0.0,-             storable-complex ==0.2.2,-             storable-endian ==0.2.5,-             streaming-commons ==0.1.12.1,-             streams ==3.2,-             strict ==0.3.2,-             stringable ==0.1.3,-             stringbuilder ==0.5.0,-             string-conversions ==0.3.0.3,-             stringprep ==1.0.0,-             stringsearch ==0.3.6.6,-             stylish-haskell ==0.5.13.0,-             SVGFonts ==1.4.0.3,-             svg-tree ==0.1.1,-             syb ==0.4.4,-             syb-with-class ==0.6.1.5,-             symbol ==0.2.4,-             system-canonicalpath ==0.3.2.0,-             system-fileio ==0.3.16.3,-             system-filepath ==0.4.13.4,-             system-posix-redirect ==1.1.0.1,-             tabular ==0.2.2.7,-             tagged ==0.7.3,-             tagshare ==0.0,-             tagsoup ==0.13.3,-             tagstream-conduit ==0.5.5.3,-             tar ==0.4.1.0,-             tardis ==0.3.0.0,-             tasty ==0.10.1.2,-             tasty-ant-xml ==1.0.1,-             tasty-golden ==2.3.0.1,-             tasty-hunit ==0.9.2,-             tasty-kat ==0.0.3,-             tasty-quickcheck ==0.8.3.2,-             tasty-smallcheck ==0.8.0.1,-             tasty-th ==0.1.3,-             TCache ==0.12.0,-             template-haskell installed,-             temporary ==1.2.0.3,-             temporary-rc ==1.2.0.3,-             terminal-progress-bar ==0.0.1.4,-             terminal-size ==0.3.0,-             terminfo installed,-             test-framework ==0.8.1.1,-             test-framework-hunit ==0.3.0.1,-             test-framework-quickcheck2 ==0.3.0.3,-             test-framework-th ==0.2.4,-             testing-feat ==0.4.0.2,-             testpack ==2.1.3.0,-             texmath ==0.8.2,-             text ==1.2.0.6,-             text-binary ==0.1.0,-             text-format ==0.3.1.1,-             text-icu ==0.7.0.1,-             text-manipulate ==0.1.3.1,-             tf-random ==0.5,-             th-desugar ==1.5.3,-             th-expand-syns ==0.3.0.6,-             th-extras ==0.0.0.2,-             th-lift ==0.7.2,-             th-orphans ==0.11.1,-             threads ==0.5.1.3,-             th-reify-many ==0.1.3,-             thyme ==0.3.5.5,-             time installed,-             time-compat ==0.1.0.3,-             time-lens ==0.4.0.1,-             time-locale-compat ==0.1.0.1,-             timezone-olson ==0.1.7,-             timezone-series ==0.1.5.1,-             tls ==1.2.17,-             tls-debug ==0.3.4,-             tostring ==0.2.1.1,-             transformers-base ==0.4.4,-             transformers-compat ==0.4.0.3,-             traverse-with-class ==0.2.0.3,-             tree-view ==0.4,-             trifecta ==1.5.1.3,-             tttool ==1.3,-             tuple ==0.3.0.2,-             turtle ==1.0.2,-             type-eq ==0.5,-             type-list ==0.0.0.1,-             udbus ==0.2.1,-             unbounded-delays ==0.1.0.9,-             unbound-generics ==0.1.2.1,-             union-find ==0.2,-             uniplate ==1.6.12,-             unix installed,-             unix-compat ==0.4.1.4,-             unix-time ==0.3.5,-             unordered-containers ==0.2.5.1,-             uri-encode ==1.5.0.4,-             url ==2.1.3,-             users ==0.1.0.0,-             users-postgresql-simple ==0.1.0.1,-             users-test ==0.1.0.0,-             utf8-light ==0.4.2,-             utf8-string ==1,-             uuid ==1.3.10,-             uuid-types ==1.0.1,-             vault ==0.3.0.4,-             vector ==0.10.12.3,-             vector-algorithms ==0.6.0.4,-             vector-binary-instances ==0.2.1.0,-             vector-buffer ==0.4.1,-             vector-instances ==3.3.0.1,-             vector-space ==0.9,-             vector-space-points ==0.2.1.1,-             vector-th-unbox ==0.2.1.2,-             vhd ==0.2.2,-             void ==0.7,-             wai ==3.0.2.3,-             wai-app-static ==3.0.1.1,-             wai-conduit ==3.0.0.2,-             wai-eventsource ==3.0.0,-             wai-extra ==3.0.7.1,-             wai-handler-launch ==3.0.0.3,-             wai-logger ==2.2.4,-             wai-middleware-consul ==0.1.0.2,-             wai-middleware-static ==0.6.0.1,-             waitra ==0.0.3.0,-             wai-websockets ==3.0.0.5,-             warp ==3.0.13.1,-             warp-tls ==3.0.3,-             webdriver ==0.6.1,-             web-fpco ==0.1.1.0,-             websockets ==0.9.4.0,-             wizards ==1.0.2,-             wl-pprint ==1.1,-             wl-pprint-extras ==3.5.0.4,-             wl-pprint-terminfo ==3.7.1.3,-             wl-pprint-text ==1.1.0.4,-             word8 ==0.1.2,-             wordpass ==1.0.0.3,-             Workflow ==0.8.3,-             wrap ==0.0.0,-             wreq ==0.3.0.1,-             X11 ==1.6.1.2,-             x509 ==1.5.0.1,-             x509-store ==1.5.0,-             x509-system ==1.5.0,-             x509-validation ==1.5.2,-             xenstore ==0.1.1,-             xhtml installed,-             xml ==1.3.14,-             xml-conduit ==1.2.6,-             xml-conduit-writer ==0.1.1.1,-             xmlgen ==0.6.2.1,-             xml-hamlet ==0.4.0.11,-             xmlhtml ==0.2.3.4,-             xml-to-json ==2.0.1,-             xml-to-json-fast ==2.0.0,-             xml-types ==0.3.4,-             xss-sanitize ==0.3.5.5,-             yackage ==0.7.0.8,-             yaml ==0.8.11,-             Yampa ==0.9.7,-             YampaSynth ==0.2,-             yarr ==1.3.3.3,-             yesod ==1.4.1.5,-             yesod-auth ==1.4.5,-             yesod-auth-deskcom ==1.4.0,-             yesod-auth-fb ==1.6.6,-             yesod-auth-hashdb ==1.4.2.1,-             yesod-auth-oauth ==1.4.0.2,-             yesod-auth-oauth2 ==0.0.12,-             yesod-bin ==1.4.9.2,-             yesod-core ==1.4.9.1,-             yesod-eventsource ==1.4.0.1,-             yesod-fay ==0.7.1,-             yesod-fb ==0.3.4,-             yesod-form ==1.4.4.1,-             yesod-gitrepo ==0.1.1.0,-             yesod-newsfeed ==1.4.0.1,-             yesod-persistent ==1.4.0.2,-             yesod-sitemap ==1.4.0.1,-             yesod-static ==1.4.0.4,-             yesod-test ==1.4.3.1,-             yesod-text-markdown ==0.1.7,-             yesod-websockets ==0.2.1.1,-             zeromq4-haskell ==0.6.3,-             zip-archive ==0.2.3.7,-             zlib ==0.5.4.2,-             zlib-bindings ==0.1.1.5,-             zlib-enum ==0.2.3.1,-             zlib-lens ==0.1.2+constraints: Crypto ==4.2.5.1,+             binary ==0.7.6.1,+             DAV ==1.0.3,+             HTTP ==4000.2.17,+             HUnit ==1.2.5.2,+             IfElse ==0.85,+             MissingH ==1.2.1.0,+             MonadRandom ==0.1.13,+             QuickCheck ==2.7.6,+             SafeSemaphore ==0.10.1,+             aeson ==0.7.0.6,+             ansi-wl-pprint ==0.6.7.1,+             appar ==0.1.4,+             asn1-encoding ==0.8.1.3,+             asn1-parse ==0.8.1,+             asn1-types ==0.2.3,+             async ==2.0.1.5,+             attoparsec ==0.11.3.4,+             attoparsec-conduit ==1.1.0,+             authenticate ==1.3.2.10,+             base-unicode-symbols ==0.2.2.4,+             base16-bytestring ==0.1.1.6,+             base64-bytestring ==1.0.0.1,+             bifunctors ==4.1.1.1,+             bloomfilter ==2.0.0.0,+             byteable ==0.1.1,+             byteorder ==1.0.4,+             case-insensitive ==1.2.0.1,+             cereal ==0.4.0.1,+             cipher-aes ==0.2.8,+             cipher-des ==0.0.6,+             cipher-rc4 ==0.1.4,+             clientsession ==0.9.0.3,+             comonad ==4.2,+             conduit ==1.1.6,+             conduit-extra ==1.1.3,+             connection ==0.2.3,+             contravariant ==0.6.1.1,+             cookie ==0.4.1.2,+             cprng-aes ==0.5.2,+             crypto-api ==0.13.2,+             crypto-cipher-types ==0.0.9,+             crypto-numbers ==0.2.3,+             crypto-pubkey ==0.2.4,+             crypto-pubkey-types ==0.4.2.2,+             crypto-random ==0.0.7,+             cryptohash ==0.11.6,+             cryptohash-conduit ==0.1.1,+             css-text ==0.1.2.1,+             data-default ==0.5.3,+             data-default-class ==0.0.1,+             data-default-instances-base ==0.0.1,+             data-default-instances-containers ==0.0.1,+             data-default-instances-dlist ==0.0.1,+             data-default-instances-old-locale ==0.0.1,+             sandi ==0.3.0.1,+             dbus ==0.10.8,+             distributive ==0.4.4,+             dlist ==0.7.0.1,+             dns ==1.3.0,+             edit-distance ==0.2.1.2,+             either ==4.3,+             email-validate ==1.0.0,+             entropy ==0.2.1,+             errors ==1.4.7,+             exceptions ==0.6.1,+             failure ==0.2.0.3,+             fast-logger ==2.1.5,+             fdo-notify ==0.3.1,+             feed ==0.3.9.2,+             file-embed ==0.0.6,+             fingertree ==0.1.0.0,+             free ==4.9,+             gnuidn ==0.2,+             gnutls ==0.1.4,+             gsasl ==0.3.5,+             hS3 ==0.5.7,+             hashable ==1.2.1.0,+             hinotify ==0.3.5,+             hjsmin ==0.1.4.7,+             hslogger ==1.2.1,+             http-client ==0.4.11.1,+             http-client-tls ==0.2.2,+             http-conduit ==2.1.5,+             http-date ==0.0.2,+             http-types ==0.8.5,+             hxt ==9.3.1.4,+             hxt-charproperties ==9.1.1.1,+             hxt-regex-xmlschema ==9.0.4,+             hxt-unicode ==9.0.2.2,+             idna ==0.2,+             iproute ==1.2.11,+             json ==0.5,+             keys ==3.10.1,+             language-javascript ==0.5.13,+             lens ==4.4.0.2,+             libxml-sax ==0.7.5,+             mime-mail ==0.4.1.2,+             mime-types ==0.1.0.4,+             mmorph ==1.0.3,+             monad-control ==0.3.2.2,+             monad-logger ==0.3.6.1,+             monad-loops ==0.4.2.1,+             monads-tf ==0.1.0.2,+             mtl ==2.1.2,+             nats ==0.1.2,+             network ==2.4.1.2,+             network-conduit ==1.1.0,+             network-info ==0.2.0.5,+             network-multicast ==0.0.10,+             network-protocol-xmpp ==0.4.6,+             network-uri ==2.6.0.1,+             optparse-applicative ==0.11.0.2,+             parallel ==3.2.0.4,+             path-pieces ==0.1.4,+             pem ==0.2.2,+             persistent ==1.3.3,+             persistent-template ==1.3.2.2,+             pointed ==4.0,+             prelude-extras ==0.4,+             profunctors ==4.0.4,+             publicsuffixlist ==0.1,+             punycode ==2.0,+             random ==1.0.1.1,+             ranges ==0.2.4,+             reducers ==3.10.2.1,+             reflection ==1.2.0.1,+             regex-base ==0.93.2,+             regex-compat ==0.95.1,+             regex-posix ==0.95.2,+             regex-tdfa ==1.2.0,+             resource-pool ==0.2.1.1,+             resourcet ==1.1.2.3,+             safe ==0.3.8,+             securemem ==0.1.3,+             semigroupoids ==4.2,+             semigroups ==0.15.3,+             shakespeare ==2.0.5,+             silently ==1.2.4.1,+             simple-sendfile ==0.2.14,+             skein ==1.0.9,+             socks ==0.5.4,+             split ==0.2.2,+             stm ==2.4.2,+             stm-chans ==3.0.0.2,+             streaming-commons ==0.1.4.1,+             stringprep ==0.1.5,+             stringsearch ==0.3.6.5,+             syb ==0.4.0,+             system-fileio ==0.3.14,+             system-filepath ==0.4.12,+             tagged ==0.7.2,+             tagsoup ==0.13.1,+             tagstream-conduit ==0.5.5.1,+             text ==1.1.1.0,+             text-icu ==0.6.3.7,+             tf-random ==0.5,+             tls ==1.2.9,+             transformers ==0.3.0.0,+             transformers-base ==0.4.1,+             transformers-compat ==0.3.3.3,+             unbounded-delays ==0.1.0.8,+             unix-compat ==0.4.1.3,+             unix-time ==0.2.2,+             unordered-containers ==0.2.5.0,+             utf8-string ==0.3.7,+             uuid ==1.3.3,+             vault ==0.3.0.3,+             vector ==0.10.0.1,+             void ==0.6.1,+             wai ==3.0.1.1,+             wai-app-static ==3.0.0.1,+             wai-extra ==3.0.1.2,+             wai-logger ==2.1.1,+             warp ==3.0.0.5,+             warp-tls ==3.0.0,+             word8 ==0.1.1,+             x509 ==1.4.11,+             x509-store ==1.4.4,+             x509-system ==1.4.5,+             x509-validation ==1.5.0,+             xml ==1.3.13,+             xml-conduit ==1.2.1,+             xml-hamlet ==0.4.0.9,+             xml-types ==0.3.4,+             xss-sanitize ==0.3.5.2,+             yaml ==0.8.9.3,+             yesod ==1.2.6.1,+             yesod-auth ==1.3.4.6,+             yesod-core ==1.2.20.1,+             yesod-default ==1.2.0,+             yesod-form ==1.3.16,+             yesod-persistent ==1.2.3.1,+             yesod-routes ==1.2.0.7,+             yesod-static ==1.2.4,+             zlib ==0.5.4.1,+             bytestring ==0.10.4.0,+             scientific ==0.3.3.1,+             clock ==0.4.6.0
standalone/linux/skel/runshell view
@@ -26,6 +26,22 @@ base="$(pwd)" cd "$orig" +# --library-path won't work if $base contains : or ;+# Detect this problem, and work around it by using a temp directory.+if echo "$base" | grep -q '[:;]'; then+	tbase=$(mktemp -d -p /tmp annexshimXXXXXXXXX 2>/dev/null || true)+	if [ -z "$tbase" ]; then+		tbase="/tmp/annexshim.$$"+		mkdir "$tbase"+	fi+	ln -s "$base" "$tbase/link"+	base="$tbase/link"+	cleanuptbase () {+		rm -rf "$tbase"+	}+	trap cleanuptbase EXIT+fi+ # Install shim that's used to run git-annex-shell from ssh authorized_keys. # The assistant also does this when run, but the user may not be using the # assistant.@@ -63,7 +79,7 @@ PATH="$base/bin:$PATH" export PATH -# This is used by the shim wrapper around each binary.+# These env vars are used by the shim wrapper around each binary. for lib in $(cat "$base/libdirs"); do 	GIT_ANNEX_LD_LIBRARY_PATH="$base/$lib:$GIT_ANNEX_LD_LIBRARY_PATH" done@@ -103,7 +119,12 @@ if [ "$1" ]; then 	cmd="$1" 	shift 1-	exec "$cmd" "$@"+	if [ -z "$tbase" ]; then+		exec "$cmd" "$@"+	else+		# allow EXIT trap to cleanup+		"$cmd" "$@"+	fi else 	sh fi
standalone/no-th/evilsplicer-headers.hs view
@@ -24,6 +24,7 @@ import qualified Yesod.Core.Widget import qualified Yesod.Routes.TH.Types import qualified Yesod.Core.Dispatch+import qualified Yesod.Routes.Dispatch import qualified WaiAppStatic.Storage.Embedded import qualified WaiAppStatic.Storage.Embedded.Runtime import qualified Data.FileEmbed
standalone/no-th/haskell-patches/DAV_build-without-TH.patch view
@@ -1,6 +1,6 @@-From 6d4a7c63d737c9215ee55996715250c89f14c398 Mon Sep 17 00:00:00 2001+From e54cfacbb9fb24f75d3d93cd8ee6da67b161574f Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Fri, 3 Jul 2015 01:36:31 +0000+Date: Thu, 16 Oct 2014 02:51:28 +0000 Subject: [PATCH] remove TH  ---@@ -10,7 +10,7 @@  3 files changed, 306 insertions(+), 46 deletions(-)  diff --git a/DAV.cabal b/DAV.cabal-index f78c2e5..1ec4d80 100644+index 95fffd8..5669c51 100644 --- a/DAV.cabal +++ b/DAV.cabal @@ -47,33 +47,7 @@ library@@ -27,7 +27,7 @@ -                     , containers -                     , data-default -                     , either >= 4.3--                     , errors < 2.0+-                     , errors -                     , exceptions -                     , http-client >= 0.2 -                     , http-client-tls >= 0.2@@ -49,7 +49,7 @@  source-repository head    type:     git diff --git a/Network/Protocol/HTTP/DAV.hs b/Network/Protocol/HTTP/DAV.hs-index 5d5d6fd..7265d42 100644+index 4c6d68f..55979b6 100644 --- a/Network/Protocol/HTTP/DAV.hs +++ b/Network/Protocol/HTTP/DAV.hs @@ -82,6 +82,7 @@ import Network.HTTP.Types (hContentType, Method, Status, RequestHeaders, unautho@@ -416,5 +416,5 @@ +     Data.Functor.<$> (_f_a3k7 __userAgent'_a3kg)) +{-# INLINE userAgent #-} -- -2.1.4+2.1.1 
+ standalone/no-th/haskell-patches/aeson_remove-TH.patch view
@@ -0,0 +1,40 @@+From f147ec9aeaa03ca6e30232c84c413ef29b95fb62 Mon Sep 17 00:00:00 2001+From: Your Name <you@example.com>+Date: Tue, 20 May 2014 19:53:55 +0000+Subject: [PATCH] avoid TH++---+ aeson.cabal | 3 ---+ 1 file changed, 3 deletions(-)++diff --git a/aeson.cabal b/aeson.cabal+index 493d625..02dc6f4 100644+--- a/aeson.cabal++++ b/aeson.cabal+@@ -88,7 +88,6 @@ library+     Data.Aeson.Generic+     Data.Aeson.Parser+     Data.Aeson.Types+-    Data.Aeson.TH+ +   other-modules:+     Data.Aeson.Functions+@@ -121,7 +120,6 @@ library+     old-locale,+     scientific >= 0.3.1 && < 0.4,+     syb,+-    template-haskell >= 2.4,+     time,+     unordered-containers >= 0.2.3.0,+     vector >= 0.7.1+@@ -164,7 +162,6 @@ test-suite tests+     base,+     containers,+     bytestring,+-    template-haskell,+     test-framework,+     test-framework-quickcheck2,+     test-framework-hunit,+-- +2.0.0.rc2+
+ standalone/no-th/haskell-patches/file-embed_remove-TH.patch view
@@ -0,0 +1,132 @@+From 497d09a91f9eb1e5979948cd128078491b0e8bca Mon Sep 17 00:00:00 2001+From: Joey Hess <joey@kitenet.net>+Date: Fri, 12 Sep 2014 20:52:08 -0400+Subject: [PATCH] remove TH++---+ Data/FileEmbed.hs | 87 ++++---------------------------------------------------+ 1 file changed, 5 insertions(+), 82 deletions(-)++diff --git a/Data/FileEmbed.hs b/Data/FileEmbed.hs+index 5617493..adacdba 100644+--- a/Data/FileEmbed.hs++++ b/Data/FileEmbed.hs+@@ -17,13 +17,13 @@+ -- > {-# LANGUAGE TemplateHaskell #-}+ module Data.FileEmbed+     ( -- * Embed at compile time+-      embedFile+-    , embedOneFileOf+-    , embedDir+-    , getDir++    --  embedFile++    --, embedOneFileOf++    --, embedDir++      getDir+       -- * Inject into an executable+ #if MIN_VERSION_template_haskell(2,5,0)+-    , dummySpace++    --, dummySpace+ #endif+     , inject+     , injectFile+@@ -56,73 +56,12 @@ import Data.ByteString.Unsafe (unsafePackAddressLen)+ import System.IO.Unsafe (unsafePerformIO)+ import System.FilePath ((</>))+ +--- | Embed a single file in your source code.+---+--- > import qualified Data.ByteString+--- >+--- > myFile :: Data.ByteString.ByteString+--- > myFile = $(embedFile "dirName/fileName")+-embedFile :: FilePath -> Q Exp+-embedFile fp =+-#if MIN_VERSION_template_haskell(2,7,0)+-    qAddDependentFile fp >>+-#endif+-  (runIO $ B.readFile fp) >>= bsToExp+-+--- | Embed a single existing file in your source code+--- out of list a list of paths supplied.+---+--- > import qualified Data.ByteString+--- >+--- > myFile :: Data.ByteString.ByteString+--- > myFile = $(embedFile' [ "dirName/fileName", "src/dirName/fileName" ])+-embedOneFileOf :: [FilePath] -> Q Exp+-embedOneFileOf ps =+-  (runIO $ readExistingFile ps) >>= \ ( path, content ) -> do+-#if MIN_VERSION_template_haskell(2,7,0)+-    qAddDependentFile path+-#endif+-    bsToExp content+-  where+-    readExistingFile :: [FilePath] -> IO ( FilePath, B.ByteString )+-    readExistingFile xs = do+-      ys <- filterM doesFileExist xs+-      case ys of+-        (p:_) -> B.readFile p >>= \ c -> return ( p, c )+-        _ -> throw $ ErrorCall "Cannot find file to embed as resource"+-+--- | Embed a directory recursively in your source code.+---+--- > import qualified Data.ByteString+--- >+--- > myDir :: [(FilePath, Data.ByteString.ByteString)]+--- > myDir = $(embedDir "dirName")+-embedDir :: FilePath -> Q Exp+-embedDir fp = do+-    typ <- [t| [(FilePath, B.ByteString)] |]+-    e <- ListE <$> ((runIO $ fileList fp) >>= mapM (pairToExp fp))+-    return $ SigE e typ+-+ -- | Get a directory tree in the IO monad.+ --+ -- This is the workhorse of 'embedDir'+ getDir :: FilePath -> IO [(FilePath, B.ByteString)]+ getDir = fileList+ +-pairToExp :: FilePath -> (FilePath, B.ByteString) -> Q Exp+-pairToExp _root (path, bs) = do+-#if MIN_VERSION_template_haskell(2,7,0)+-    qAddDependentFile $ _root ++ '/' : path+-#endif+-    exp' <- bsToExp bs+-    return $! TupE [LitE $ StringL path, exp']+-+-bsToExp :: B.ByteString -> Q Exp+-bsToExp bs = do+-    helper <- [| stringToBs |]+-    let chars = B8.unpack bs+-    return $! AppE helper $! LitE $! StringL chars+-+ stringToBs :: String -> B.ByteString+ stringToBs = B8.pack+ +@@ -164,22 +103,6 @@ padSize i =+     let s = show i+      in replicate (sizeLen - length s) '0' ++ s+ +-#if MIN_VERSION_template_haskell(2,5,0)+-dummySpace :: Int -> Q Exp+-dummySpace space = do+-    let size = padSize space+-    let start = magic ++ size+-    let chars = LitE $ StringPrimL $+-#if MIN_VERSION_template_haskell(2,6,0)+-            map (toEnum . fromEnum) $+-#endif+-            start ++ replicate space '0'+-    let len = LitE $ IntegerL $ fromIntegral $ length start + space+-    upi <- [|unsafePerformIO|]+-    pack <- [|unsafePackAddressLen|]+-    getInner' <- [|getInner|]+-    return $ getInner' `AppE` (upi `AppE` (pack `AppE` len `AppE` chars))+-#endif+ + inject :: B.ByteString -- ^ bs to inject+        -> B.ByteString -- ^ original BS containing dummy+-- +2.1.0+
+ standalone/no-th/haskell-patches/generic-deriving_remove-TH.patch view
@@ -0,0 +1,394 @@+From 9a41401d903f160e11d56fff35c24eb59d97885d Mon Sep 17 00:00:00 2001+From: Joey Hess <joey@kitenet.net>+Date: Tue, 17 Dec 2013 19:04:40 +0000+Subject: [PATCH] remove TH++---+ src/Generics/Deriving/TH.hs | 354 --------------------------------------------+ 1 file changed, 354 deletions(-)++diff --git a/src/Generics/Deriving/TH.hs b/src/Generics/Deriving/TH.hs+index 783cb65..9aab713 100644+--- a/src/Generics/Deriving/TH.hs++++ b/src/Generics/Deriving/TH.hs+@@ -19,18 +19,6 @@+ 
+ -- Adapted from Generics.Regular.TH
+ module Generics.Deriving.TH (
+-      
+-      deriveMeta
+-    , deriveData
+-    , deriveConstructors
+-    , deriveSelectors
+-
+-#if __GLASGOW_HASKELL__ < 701
+-    , deriveAll
+-    , deriveRepresentable0
+-    , deriveRep0
+-    , simplInstance
+-#endif
+   ) where
+ 
+ import Generics.Deriving.Base
+@@ -41,124 +29,6 @@ import Language.Haskell.TH.Syntax (Lift(..))+ import Data.List (intercalate)
+ import Control.Monad
+ 
+--- | Given the names of a generic class, a type to instantiate, a function in
+--- the class and the default implementation, generates the code for a basic
+--- generic instance.
+-simplInstance :: Name -> Name -> Name -> Name -> Q [Dec]
+-simplInstance cl ty fn df = do
+-  i <- reify (genRepName 0 ty)
+-  x <- newName "x"
+-  let typ = ForallT [PlainTV x] [] 
+-        ((foldl (\a -> AppT a . VarT . tyVarBndrToName) (ConT (genRepName 0 ty)) 
+-          (typeVariables i)) `AppT` (VarT x))
+-  fmap (: []) $ instanceD (cxt []) (conT cl `appT` conT ty)
+-    [funD fn [clause [] (normalB (varE df `appE` 
+-      (sigE (global 'undefined) (return typ)))) []]]
+-
+-
+--- | Given the type and the name (as string) for the type to derive,
+--- generate the 'Data' instance, the 'Constructor' instances, the 'Selector'
+--- instances, and the 'Representable0' instance.
+-deriveAll :: Name -> Q [Dec]
+-deriveAll n =
+-  do a <- deriveMeta n
+-     b <- deriveRepresentable0 n
+-     return (a ++ b)
+-
+--- | Given the type and the name (as string) for the type to derive,
+--- generate the 'Data' instance, the 'Constructor' instances, and the 'Selector'
+--- instances.
+-deriveMeta :: Name -> Q [Dec]
+-deriveMeta n =
+-  do a <- deriveData n
+-     b <- deriveConstructors n
+-     c <- deriveSelectors n
+-     return (a ++ b ++ c)
+-
+--- | Given a datatype name, derive a datatype and instance of class 'Datatype'.
+-deriveData :: Name -> Q [Dec]
+-deriveData = dataInstance
+-
+--- | Given a datatype name, derive datatypes and 
+--- instances of class 'Constructor'.
+-deriveConstructors :: Name -> Q [Dec]
+-deriveConstructors = constrInstance
+-
+--- | Given a datatype name, derive datatypes and instances of class 'Selector'.
+-deriveSelectors :: Name -> Q [Dec]
+-deriveSelectors = selectInstance
+-
+--- | Given the type and the name (as string) for the Representable0 type
+--- synonym to derive, generate the 'Representable0' instance.
+-deriveRepresentable0 :: Name -> Q [Dec]
+-deriveRepresentable0 n = do
+-    rep0 <- deriveRep0 n
+-    inst <- deriveInst n
+-    return $ rep0 ++ inst
+-
+--- | Derive only the 'Rep0' type synonym. Not needed if 'deriveRepresentable0'
+--- is used.
+-deriveRep0 :: Name -> Q [Dec]
+-deriveRep0 n = do
+-  i <- reify n
+-  fmap (:[]) $ tySynD (genRepName 0 n) (typeVariables i) (rep0Type n)
+-
+-deriveInst :: Name -> Q [Dec]
+-deriveInst t = do
+-  i <- reify t
+-  let typ q = foldl (\a -> AppT a . VarT . tyVarBndrToName) (ConT q) 
+-                (typeVariables i)
+-#if __GLASGOW_HASKELL__ >= 707
+-  let tyIns = TySynInstD ''Rep (TySynEqn [typ t] (typ (genRepName 0 t)))
+-#else
+-  let tyIns = TySynInstD ''Rep [typ t] (typ (genRepName 0 t))
+-#endif
+-  fcs <- mkFrom t 1 0 t
+-  tcs <- mkTo   t 1 0 t
+-  liftM (:[]) $
+-    instanceD (cxt []) (conT ''Generic `appT` return (typ t))
+-                         [return tyIns, funD 'from fcs, funD 'to tcs]
+-
+-
+-dataInstance :: Name -> Q [Dec]
+-dataInstance n = do
+-  i <- reify n
+-  case i of
+-    TyConI (DataD    _ n _ _ _) -> mkInstance n
+-    TyConI (NewtypeD _ n _ _ _) -> mkInstance n
+-    _ -> return []
+-  where
+-    mkInstance n = do
+-      ds <- mkDataData n
+-      is <- mkDataInstance n
+-      return $ [ds,is]
+-
+-constrInstance :: Name -> Q [Dec]
+-constrInstance n = do
+-  i <- reify n
+-  case i of
+-    TyConI (DataD    _ n _ cs _) -> mkInstance n cs
+-    TyConI (NewtypeD _ n _ c  _) -> mkInstance n [c]
+-    _ -> return []
+-  where
+-    mkInstance n cs = do
+-      ds <- mapM (mkConstrData n) cs
+-      is <- mapM (mkConstrInstance n) cs
+-      return $ ds ++ is
+-
+-selectInstance :: Name -> Q [Dec]
+-selectInstance n = do
+-  i <- reify n
+-  case i of
+-    TyConI (DataD    _ n _ cs _) -> mkInstance n cs
+-    TyConI (NewtypeD _ n _ c  _) -> mkInstance n [c]
+-    _ -> return []
+-  where
+-    mkInstance n cs = do
+-      ds <- mapM (mkSelectData n) cs
+-      is <- mapM (mkSelectInstance n) cs
+-      return $ concat (ds ++ is)
+-
+ typeVariables :: Info -> [TyVarBndr]
+ typeVariables (TyConI (DataD    _ _ tv _ _)) = tv
+ typeVariables (TyConI (NewtypeD _ _ tv _ _)) = tv
+@@ -179,233 +49,9 @@ genName = mkName . (++"_") . intercalate "_" . map nameBase+ genRepName :: Int -> Name -> Name
+ genRepName n = mkName . (++"_") . (("Rep" ++ show n) ++) . nameBase
+ 
+-mkDataData :: Name -> Q Dec
+-mkDataData n = dataD (cxt []) (genName [n]) [] [] []
+-
+-mkConstrData :: Name -> Con -> Q Dec
+-mkConstrData dt (NormalC n _) =
+-  dataD (cxt []) (genName [dt, n]) [] [] [] 
+-mkConstrData dt r@(RecC _ _) =
+-  mkConstrData dt (stripRecordNames r)
+-mkConstrData dt (InfixC t1 n t2) =
+-  mkConstrData dt (NormalC n [t1,t2])
+-
+-mkSelectData :: Name -> Con -> Q [Dec]
+-mkSelectData dt r@(RecC n fs) = return (map one fs)
+-  where one (f, _, _) = DataD [] (genName [dt, n, f]) [] [] []
+-mkSelectData dt _ = return []
+-
+-
+-mkDataInstance :: Name -> Q Dec
+-mkDataInstance n =
+-  instanceD (cxt []) (appT (conT ''Datatype) (conT $ genName [n]))
+-    [funD 'datatypeName [clause [wildP] (normalB (stringE (nameBase n))) []]
+-    ,funD 'moduleName   [clause [wildP] (normalB (stringE name)) []]]
+-  where
+-    name = maybe (error "Cannot fetch module name!") id (nameModule n)
+-
+-instance Lift Fixity where
+-  lift Prefix      = conE 'Prefix
+-  lift (Infix a n) = conE 'Infix `appE` [| a |] `appE` [| n |]
+-
+-instance Lift Associativity where
+-  lift LeftAssociative  = conE 'LeftAssociative
+-  lift RightAssociative = conE 'RightAssociative
+-  lift NotAssociative   = conE 'NotAssociative
+-
+-mkConstrInstance :: Name -> Con -> Q Dec
+-mkConstrInstance dt (NormalC n _) = mkConstrInstanceWith dt n []
+-mkConstrInstance dt (RecC    n _) = mkConstrInstanceWith dt n
+-      [ funD 'conIsRecord [clause [wildP] (normalB (conE 'True)) []]]
+-mkConstrInstance dt (InfixC t1 n t2) =
+-    do
+-      i <- reify n
+-      let fi = case i of
+-                 DataConI _ _ _ f -> convertFixity f
+-                 _ -> Prefix
+-      instanceD (cxt []) (appT (conT ''Constructor) (conT $ genName [dt, n]))
+-        [funD 'conName   [clause [wildP] (normalB (stringE (nameBase n))) []],
+-         funD 'conFixity [clause [wildP] (normalB [| fi |]) []]]
+-  where
+-    convertFixity (Fixity n d) = Infix (convertDirection d) n
+-    convertDirection InfixL = LeftAssociative
+-    convertDirection InfixR = RightAssociative
+-    convertDirection InfixN = NotAssociative
+-
+-mkConstrInstanceWith :: Name -> Name -> [Q Dec] -> Q Dec
+-mkConstrInstanceWith dt n extra = 
+-  instanceD (cxt []) (appT (conT ''Constructor) (conT $ genName [dt, n]))
+-    (funD 'conName [clause [wildP] (normalB (stringE (nameBase n))) []] : extra)
+-
+-mkSelectInstance :: Name -> Con -> Q [Dec]
+-mkSelectInstance dt r@(RecC n fs) = return (map one fs) where
+-  one (f, _, _) = 
+-    InstanceD ([]) (AppT (ConT ''Selector) (ConT $ genName [dt, n, f]))
+-      [FunD 'selName [Clause [WildP] 
+-        (NormalB (LitE (StringL (nameBase f)))) []]]
+-mkSelectInstance _ _ = return []
+-
+-rep0Type :: Name -> Q Type
+-rep0Type n =
+-    do
+-      -- runIO $ putStrLn $ "processing " ++ show n
+-      i <- reify n
+-      let b = case i of
+-                TyConI (DataD _ dt vs cs _) ->
+-                  (conT ''D1) `appT` (conT $ genName [dt]) `appT` 
+-                    (foldr1' sum (conT ''V1) 
+-                      (map (rep0Con (dt, map tyVarBndrToName vs)) cs))
+-                TyConI (NewtypeD _ dt vs c _) ->
+-                  (conT ''D1) `appT` (conT $ genName [dt]) `appT`
+-                    (rep0Con (dt, map tyVarBndrToName vs) c)
+-                TyConI (TySynD t _ _) -> error "type synonym?" 
+-                _ -> error "unknown construct" 
+-      --appT b (conT $ mkName (nameBase n))
+-      b where
+-    sum :: Q Type -> Q Type -> Q Type
+-    sum a b = conT ''(:+:) `appT` a `appT` b
+-
+-
+-rep0Con :: (Name, [Name]) -> Con -> Q Type
+-rep0Con (dt, vs) (NormalC n []) =
+-    conT ''C1 `appT` (conT $ genName [dt, n]) `appT` 
+-     (conT ''S1 `appT` conT ''NoSelector `appT` conT ''U1)
+-rep0Con (dt, vs) (NormalC n fs) =
+-    conT ''C1 `appT` (conT $ genName [dt, n]) `appT` 
+-     (foldr1 prod (map (repField (dt, vs) . snd) fs)) where
+-    prod :: Q Type -> Q Type -> Q Type
+-    prod a b = conT ''(:*:) `appT` a `appT` b
+-rep0Con (dt, vs) r@(RecC n []) =
+-    conT ''C1 `appT` (conT $ genName [dt, n]) `appT` conT ''U1
+-rep0Con (dt, vs) r@(RecC n fs) =
+-    conT ''C1 `appT` (conT $ genName [dt, n]) `appT` 
+-      (foldr1 prod (map (repField' (dt, vs) n) fs)) where
+-    prod :: Q Type -> Q Type -> Q Type
+-    prod a b = conT ''(:*:) `appT` a `appT` b
+-
+-rep0Con d (InfixC t1 n t2) = rep0Con d (NormalC n [t1,t2])
+-
+---dataDeclToType :: (Name, [Name]) -> Type
+---dataDeclToType (dt, vs) = foldl (\a b -> AppT a (VarT b)) (ConT dt) vs
+-
+-repField :: (Name, [Name]) -> Type -> Q Type
+---repField d t | t == dataDeclToType d = conT ''I
+-repField d t = conT ''S1 `appT` conT ''NoSelector `appT`
+-                 (conT ''Rec0 `appT` return t)
+-
+-repField' :: (Name, [Name]) -> Name -> (Name, Strict, Type) -> Q Type
+---repField' d ns (_, _, t) | t == dataDeclToType d = conT ''I
+-repField' (dt, vs) ns (f, _, t) = conT ''S1 `appT` conT (genName [dt, ns, f]) 
+-                                    `appT` (conT ''Rec0 `appT` return t)
+--- Note: we should generate Par0 too, at some point
+-
+-
+-mkFrom :: Name -> Int -> Int -> Name -> Q [Q Clause]
+-mkFrom ns m i n =
+-    do
+-      -- runIO $ putStrLn $ "processing " ++ show n
+-      let wrapE e = lrE m i e
+-      i <- reify n
+-      let b = case i of
+-                TyConI (DataD _ dt vs cs _) ->
+-                  zipWith (fromCon wrapE ns (dt, map tyVarBndrToName vs)
+-                    (length cs)) [0..] cs
+-                TyConI (NewtypeD _ dt vs c _) ->
+-                  [fromCon wrapE ns (dt, map tyVarBndrToName vs) 1 0 c]
+-                TyConI (TySynD t _ _) -> error "type synonym?" 
+-                  -- [clause [varP (field 0)] (normalB (wrapE $ conE 'K1 `appE` varE (field 0))) []]
+-                _ -> error "unknown construct"
+-      return b
+-
+-mkTo :: Name -> Int -> Int -> Name -> Q [Q Clause]
+-mkTo ns m i n =
+-    do
+-      -- runIO $ putStrLn $ "processing " ++ show n
+-      let wrapP p = lrP m i p
+-      i <- reify n
+-      let b = case i of
+-                TyConI (DataD _ dt vs cs _) ->
+-                  zipWith (toCon wrapP ns (dt, map tyVarBndrToName vs)
+-                    (length cs)) [0..] cs
+-                TyConI (NewtypeD _ dt vs c _) ->
+-                  [toCon wrapP ns (dt, map tyVarBndrToName vs) 1 0 c]
+-                TyConI (TySynD t _ _) -> error "type synonym?" 
+-                  -- [clause [wrapP $ conP 'K1 [varP (field 0)]] (normalB $ varE (field 0)) []]
+-                _ -> error "unknown construct" 
+-      return b
+-
+-fromCon :: (Q Exp -> Q Exp) -> Name -> (Name, [Name]) -> Int -> Int -> Con -> Q Clause
+-fromCon wrap ns (dt, vs) m i (NormalC cn []) =
+-  clause
+-    [conP cn []]
+-    (normalB $ appE (conE 'M1) $ wrap $ lrE m i $ appE (conE 'M1) $ 
+-      conE 'M1 `appE` (conE 'U1)) []
+-fromCon wrap ns (dt, vs) m i (NormalC cn fs) =
+-  -- runIO (putStrLn ("constructor " ++ show ix)) >>
+-  clause
+-    [conP cn (map (varP . field) [0..length fs - 1])]
+-    (normalB $ appE (conE 'M1) $ wrap $ lrE m i $ conE 'M1 `appE` 
+-      foldr1 prod (zipWith (fromField (dt, vs)) [0..] (map snd fs))) []
+-  where prod x y = conE '(:*:) `appE` x `appE` y
+-fromCon wrap ns (dt, vs) m i r@(RecC cn []) =
+-  clause
+-    [conP cn []]
+-    (normalB $ appE (conE 'M1) $ wrap $ lrE m i $ conE 'M1 `appE` (conE 'U1)) []
+-fromCon wrap ns (dt, vs) m i r@(RecC cn fs) =
+-  clause
+-    [conP cn (map (varP . field) [0..length fs - 1])]
+-    (normalB $ appE (conE 'M1) $ wrap $ lrE m i $ conE 'M1 `appE` 
+-      foldr1 prod (zipWith (fromField (dt, vs)) [0..] (map trd fs))) []
+-  where prod x y = conE '(:*:) `appE` x `appE` y
+-fromCon wrap ns (dt, vs) m i (InfixC t1 cn t2) =
+-  fromCon wrap ns (dt, vs) m i (NormalC cn [t1,t2])
+-
+-fromField :: (Name, [Name]) -> Int -> Type -> Q Exp
+---fromField (dt, vs) nr t | t == dataDeclToType (dt, vs) = conE 'I `appE` varE (field nr)
+-fromField (dt, vs) nr t = conE 'M1 `appE` (conE 'K1 `appE` varE (field nr))
+-
+-toCon :: (Q Pat -> Q Pat) -> Name -> (Name, [Name]) -> Int -> Int -> Con -> Q Clause
+-toCon wrap ns (dt, vs) m i (NormalC cn []) =
+-    clause
+-      [wrap $ conP 'M1 [lrP m i $ conP 'M1 [conP 'M1 [conP 'U1 []]]]]
+-      (normalB $ conE cn) []
+-toCon wrap ns (dt, vs) m i (NormalC cn fs) =
+-    -- runIO (putStrLn ("constructor " ++ show ix)) >>
+-    clause
+-      [wrap $ conP 'M1 [lrP m i $ conP 'M1
+-        [foldr1 prod (zipWith (toField (dt, vs)) [0..] (map snd fs))]]]
+-      (normalB $ foldl appE (conE cn) (map (varE . field) [0..length fs - 1])) []
+-  where prod x y = conP '(:*:) [x,y]
+-toCon wrap ns (dt, vs) m i r@(RecC cn []) =
+-    clause
+-      [wrap $ conP 'M1 [lrP m i $ conP 'M1 [conP 'U1 []]]]
+-      (normalB $ conE cn) []
+-toCon wrap ns (dt, vs) m i r@(RecC cn fs) =
+-    clause
+-      [wrap $ conP 'M1 [lrP m i $ conP 'M1
+-        [foldr1 prod (zipWith (toField (dt, vs)) [0..] (map trd fs))]]]
+-      (normalB $ foldl appE (conE cn) (map (varE . field) [0..length fs - 1])) []
+-  where prod x y = conP '(:*:) [x,y]
+-toCon wrap ns (dt, vs) m i (InfixC t1 cn t2) =
+-  toCon wrap ns (dt, vs) m i (NormalC cn [t1,t2])
+-
+-toField :: (Name, [Name]) -> Int -> Type -> Q Pat
+---toField (dt, vs) nr t | t == dataDeclToType (dt, vs) = conP 'I [varP (field nr)]
+-toField (dt, vs) nr t = conP 'M1 [conP 'K1 [varP (field nr)]]
+-
+-
+ field :: Int -> Name
+ field n = mkName $ "f" ++ show n
+ 
+-lrP :: Int -> Int -> (Q Pat -> Q Pat)
+-lrP 1 0 p = p
+-lrP m 0 p = conP 'L1 [p]
+-lrP m i p = conP 'R1 [lrP (m-1) (i-1) p]
+-
+-lrE :: Int -> Int -> (Q Exp -> Q Exp)
+-lrE 1 0 e = e
+-lrE m 0 e = conE 'L1 `appE` e
+-lrE m i e = conE 'R1 `appE` lrE (m-1) (i-1) e
+ 
+ trd (_,_,c) = c
+ 
+-- +1.8.5.1+
standalone/no-th/haskell-patches/lens_no-TH.patch view
@@ -1,20 +1,20 @@-From 88ff2174944daf90530a33ee06e2e3f667089b6a Mon Sep 17 00:00:00 2001+From 10c9ade98b3ac2054947f411d77db2eb28896b9f Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Fri, 3 Jul 2015 02:06:43 +0000-Subject: [PATCH] remove TH+Date: Thu, 16 Oct 2014 01:43:10 +0000+Subject: [PATCH] avoid TH  ---- lens.cabal                          | 16 +---------------- src/Control/Lens.hs                 |  6 ++----+ lens.cabal                          | 17 +----------------+ src/Control/Lens.hs                 |  8 ++------  src/Control/Lens/Cons.hs            |  2 --  src/Control/Lens/Internal/Fold.hs   |  2 --  src/Control/Lens/Operators.hs       |  2 +-  src/Control/Lens/Prism.hs           |  2 --  src/Control/Monad/Primitive/Lens.hs |  1 -- 7 files changed, 4 insertions(+), 27 deletions(-)+ 7 files changed, 4 insertions(+), 30 deletions(-)  diff --git a/lens.cabal b/lens.cabal-index c7f6009..ab206c5 100644+index 5388301..d7b02b9 100644 --- a/lens.cabal +++ b/lens.cabal @@ -10,7 +10,7 @@ stability:     provisional@@ -26,7 +26,15 @@  -- build-tools:   cpphs  tested-with:   GHC == 7.4.1, GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.1, GHC == 7.8.2  synopsis:      Lenses, Folds and Traversals-@@ -230,8 +230,6 @@ library+@@ -217,7 +217,6 @@ library+     Control.Exception.Lens+     Control.Lens+     Control.Lens.Action+-    Control.Lens.At+     Control.Lens.Combinators+     Control.Lens.Cons+     Control.Lens.Each+@@ -234,8 +233,6 @@ library      Control.Lens.Internal.Context      Control.Lens.Internal.Deque      Control.Lens.Internal.Exception@@ -35,7 +43,7 @@      Control.Lens.Internal.Fold      Control.Lens.Internal.Getter      Control.Lens.Internal.Indexed-@@ -243,25 +241,21 @@ library+@@ -247,25 +244,21 @@ library      Control.Lens.Internal.Reflection      Control.Lens.Internal.Review      Control.Lens.Internal.Setter@@ -61,7 +69,7 @@      Control.Monad.Primitive.Lens      Control.Parallel.Strategies.Lens      Control.Seq.Lens-@@ -287,12 +281,8 @@ library+@@ -291,12 +284,8 @@ library      Data.Typeable.Lens      Data.Vector.Lens      Data.Vector.Generic.Lens@@ -74,7 +82,7 @@      Numeric.Lens      other-modules:-@@ -395,7 +385,6 @@ test-suite doctests+@@ -403,7 +392,6 @@ test-suite doctests        deepseq,        doctest        >= 0.9.1,        filepath,@@ -82,7 +90,7 @@        mtl,        nats,        parallel,-@@ -433,7 +422,6 @@ benchmark plated+@@ -441,7 +429,6 @@ benchmark plated      comonad,      criterion,      deepseq,@@ -90,7 +98,7 @@      lens,      transformers  -@@ -468,7 +456,6 @@ benchmark unsafe+@@ -476,7 +463,6 @@ benchmark unsafe      comonads-fd,      criterion,      deepseq,@@ -98,7 +106,7 @@      lens,      transformers  -@@ -485,6 +472,5 @@ benchmark zipper+@@ -493,6 +479,5 @@ benchmark zipper      comonads-fd,      criterion,      deepseq,@@ -106,10 +114,18 @@      lens,      transformers diff --git a/src/Control/Lens.hs b/src/Control/Lens.hs-index d879c58..3d6015b 100644+index 7e15267..433f1fc 100644 --- a/src/Control/Lens.hs +++ b/src/Control/Lens.hs-@@ -56,12 +56,11 @@ module Control.Lens+@@ -41,7 +41,6 @@+ ----------------------------------------------------------------------------+ module Control.Lens+   ( module Control.Lens.Action+-  , module Control.Lens.At+   , module Control.Lens.Cons+   , module Control.Lens.Each+   , module Control.Lens.Empty+@@ -53,12 +52,11 @@ module Control.Lens    , module Control.Lens.Lens    , module Control.Lens.Level    , module Control.Lens.Loupe@@ -123,7 +139,15 @@    , module Control.Lens.TH  #endif    , module Control.Lens.Traversal-@@ -83,12 +82,11 @@ import Control.Lens.Iso+@@ -69,7 +67,6 @@ module Control.Lens+   ) where+ + import Control.Lens.Action+-import Control.Lens.At+ import Control.Lens.Cons+ import Control.Lens.Each+ import Control.Lens.Empty+@@ -81,12 +78,11 @@ import Control.Lens.Iso  import Control.Lens.Lens  import Control.Lens.Level  import Control.Lens.Loupe@@ -138,12 +162,12 @@  #endif  import Control.Lens.Traversal diff --git a/src/Control/Lens/Cons.hs b/src/Control/Lens/Cons.hs-index 7b35db4..269f307 100644+index a80e9c8..7d27b80 100644 --- a/src/Control/Lens/Cons.hs +++ b/src/Control/Lens/Cons.hs-@@ -56,8 +56,6 @@ import qualified Data.Vector.Unboxed as Unbox+@@ -55,8 +55,6 @@ import           Data.Vector.Unboxed (Unbox)+ import qualified Data.Vector.Unboxed as Unbox  import           Data.Word- import           Prelude   -{-# ANN module "HLint: ignore Eta reduce" #-} -@@ -151,12 +175,12 @@  -- >>> :set -XNoOverloadedStrings  -- >>> import Control.Lens diff --git a/src/Control/Lens/Internal/Fold.hs b/src/Control/Lens/Internal/Fold.hs-index 4bbde21..16295f4 100644+index ab09c6b..43aa905 100644 --- a/src/Control/Lens/Internal/Fold.hs +++ b/src/Control/Lens/Internal/Fold.hs-@@ -35,8 +35,6 @@ import Data.Semigroup hiding (Min, getMin, Max, getMax)+@@ -37,8 +37,6 @@ import Data.Maybe+ import Data.Semigroup hiding (Min, getMin, Max, getMax)  import Data.Reflection- import Prelude   -{-# ANN module "HLint: ignore Avoid lambda" #-} -@@ -164,10 +188,10 @@  -- Folding  ------------------------------------------------------------------------------ diff --git a/src/Control/Lens/Operators.hs b/src/Control/Lens/Operators.hs-index 302f68e..1625fe5 100644+index 9992e63..631e8e6 100644 --- a/src/Control/Lens/Operators.hs +++ b/src/Control/Lens/Operators.hs-@@ -104,7 +104,7 @@ module Control.Lens.Operators+@@ -111,7 +111,7 @@ module Control.Lens.Operators    , (<#~)    , (<#=)    -- * "Control.Lens.Plated"@@ -177,12 +201,12 @@    , ( # )    -- * "Control.Lens.Setter" diff --git a/src/Control/Lens/Prism.hs b/src/Control/Lens/Prism.hs-index 36152d6..3af6bd3 100644+index b75c870..c6c6596 100644 --- a/src/Control/Lens/Prism.hs +++ b/src/Control/Lens/Prism.hs-@@ -62,8 +62,6 @@ import Data.Profunctor.Unsafe+@@ -61,8 +61,6 @@ import Unsafe.Coerce+ import Data.Profunctor.Unsafe  #endif- import Prelude   -{-# ANN module "HLint: ignore Use camelCase" #-} -@@ -190,17 +214,17 @@  -- >>> :set -XNoOverloadedStrings  -- >>> import Control.Lens diff --git a/src/Control/Monad/Primitive/Lens.hs b/src/Control/Monad/Primitive/Lens.hs-index 8f1ec94..482764a 100644+index ee942c6..2f37134 100644 --- a/src/Control/Monad/Primitive/Lens.hs +++ b/src/Control/Monad/Primitive/Lens.hs-@@ -26,7 +26,6 @@ import Control.Lens- import Control.Monad.Primitive+@@ -20,7 +20,6 @@ import Control.Lens+ import Control.Monad.Primitive (PrimMonad(..))  import GHC.Prim (State#)   -{-# ANN module "HLint: ignore Unused LANGUAGE pragma" #-}  - #if MIN_VERSION_primitive(0,6,0)- prim :: PrimBase m => Iso' (m a) (State# (PrimState m) -> (# State# (PrimState m), a #))+ prim :: (PrimMonad m) => Iso' (m a) (State# (PrimState m) -> (# State# (PrimState m), a #))+ prim = iso internal primitive -- -2.1.4+2.1.1 
+ standalone/no-th/haskell-patches/monad-logger_remove-TH.patch view
@@ -0,0 +1,27 @@+From 8e78a25ce0cc19e52d063f66bd4cd316462393d4 Mon Sep 17 00:00:00 2001+From: dummy <dummy@example.com>+Date: Thu, 6 Mar 2014 23:27:06 +0000+Subject: [PATCH] disable th++---+ monad-logger.cabal | 4 ++--+ 1 file changed, 2 insertions(+), 2 deletions(-)++diff --git a/monad-logger.cabal b/monad-logger.cabal+index b0aa271..cd56c0f 100644+--- a/monad-logger.cabal++++ b/monad-logger.cabal+@@ -14,8 +14,8 @@ cabal-version:       >=1.8+ + flag template_haskell {+       Description: Enable Template Haskell support+-      Default:     True+-      Manual:      True++      Default:     False++      Manual:      False+ }+ + library+-- +1.9.0+
+ standalone/no-th/haskell-patches/optparse-applicative_remove-ANN.patch view
@@ -0,0 +1,33 @@+From b128590966d4946219e45e2efd88acf7a354abc2 Mon Sep 17 00:00:00 2001+From: androidbuilder <androidbuilder@example.com>+Date: Tue, 14 Oct 2014 02:28:02 +0000+Subject: [PATCH] remove ANN++---+ Options/Applicative.hs           |    2 --+ Options/Applicative/Help/Core.hs |    2 --+ 2 files changed, 4 deletions(-)++diff --git a/Options/Applicative.hs b/Options/Applicative.hs+index bd4129d..f412062 100644+--- a/Options/Applicative.hs++++ b/Options/Applicative.hs+@@ -34,5 +34,3 @@ import Options.Applicative.Common+ import Options.Applicative.Builder+ import Options.Applicative.Builder.Completer+ import Options.Applicative.Extra+-+-{-# ANN module "HLint: ignore Use import/export shortcut" #-}+diff --git a/Options/Applicative/Help/Core.hs b/Options/Applicative/Help/Core.hs+index 0a79169..3f1ce3f 100644+--- a/Options/Applicative/Help/Core.hs++++ b/Options/Applicative/Help/Core.hs+@@ -139,5 +139,3 @@ parserUsage pprefs p progn = hsep+   [ string "Usage:"+   , string progn+   , align (extractChunk (briefDesc pprefs p)) ]+-+-{-# ANN footerHelp "HLint: ignore Eta reduce" #-}+-- +1.7.10.4+
+ standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch view
@@ -0,0 +1,41 @@+From aae3ace106cf26c931cc94c96fb6fbfe83f950f2 Mon Sep 17 00:00:00 2001+From: dummy <dummy@example.com>+Date: Wed, 15 Oct 2014 17:05:37 +0000+Subject: [PATCH] avoid TH++---+ Database/Persist/Sql/Raw.hs | 4 +---+ 1 file changed, 1 insertion(+), 3 deletions(-)++diff --git a/Database/Persist/Sql/Raw.hs b/Database/Persist/Sql/Raw.hs+index 3ac2ca9..bcc2011 100644+--- a/Database/Persist/Sql/Raw.hs++++ b/Database/Persist/Sql/Raw.hs+@@ -11,7 +11,7 @@ import Data.IORef (writeIORef, readIORef, newIORef)+ import Control.Exception (throwIO)+ import Control.Monad (when, liftM)+ import Data.Text (Text, pack)+-import Control.Monad.Logger (logDebugS)++--import Control.Monad.Logger (logDebugS)+ import Data.Int (Int64)+ import Control.Monad.Trans.Class (lift)+ import qualified Data.Text as T+@@ -23,7 +23,6 @@ rawQuery :: (MonadSqlPersist m, MonadResource m)+          -> [PersistValue]+          -> Source m [PersistValue]+ rawQuery sql vals = do+-    lift $ $logDebugS (pack "SQL") $ pack $ show sql ++ " " ++ show vals+     conn <- lift askSqlConn+     bracketP+         (getStmtConn conn sql)+@@ -35,7 +34,6 @@ rawExecute x y = liftM (const ()) $ rawExecuteCount x y+ + rawExecuteCount :: MonadSqlPersist m => Text -> [PersistValue] -> m Int64+ rawExecuteCount sql vals = do+-    $logDebugS (pack "SQL") $ pack $ show sql ++ " " ++ show vals+     stmt <- getStmt sql+     res <- liftIO $ stmtExecute stmt vals+     liftIO $ stmtReset stmt+-- +2.1.1+
+ standalone/no-th/haskell-patches/profunctors_3.3-0001-fix-cross-build.patch view
@@ -0,0 +1,26 @@+From 392602f5ff14c0b5a801397d075ddcbcd890aa83 Mon Sep 17 00:00:00 2001+From: Joey Hess <joey@kitenet.net>+Date: Thu, 18 Apr 2013 17:50:59 -0400+Subject: [PATCH] fix cross build++---+ src/Data/Profunctor/Unsafe.hs | 3 ---+ 1 file changed, 3 deletions(-)++diff --git a/src/Data/Profunctor/Unsafe.hs b/src/Data/Profunctor/Unsafe.hs+index 025c7c4..0249274 100644+--- a/src/Data/Profunctor/Unsafe.hs++++ b/src/Data/Profunctor/Unsafe.hs+@@ -40,9 +40,6 @@ import Data.Tagged+ import Prelude hiding (id,(.),sequence)+ import Unsafe.Coerce+ +-{-# ANN module "Hlint: ignore Redundant lambda" #-}+-{-# ANN module "Hlint: ignore Collapse lambdas" #-}+-+ infixr 9 #.+ infixl 8 .#+ +-- +1.8.2.rc3+
+ standalone/no-th/haskell-patches/reflection_remove-TH.patch view
@@ -0,0 +1,59 @@+From c0f5dcfd6ba7a05bb84b6adc4664c8dde109e6ac Mon Sep 17 00:00:00 2001+From: dummy <dummy@example.com>+Date: Fri, 7 Mar 2014 04:30:22 +0000+Subject: [PATCH] remove TH++---+ fast/Data/Reflection.hs | 8 +++++---+ 1 file changed, 5 insertions(+), 3 deletions(-)++diff --git a/fast/Data/Reflection.hs b/fast/Data/Reflection.hs+index ca57d35..d3f8356 100644+--- a/fast/Data/Reflection.hs++++ b/fast/Data/Reflection.hs+@@ -59,7 +59,7 @@ module Data.Reflection+     , Given(..)+     , give+     -- * Template Haskell reflection+-    , int, nat++    --, int, nat+     -- * Useful compile time naturals+     , Z, D, SD, PD+     ) where+@@ -161,6 +161,7 @@ instance Reifies n Int => Reifies (PD n) Int where+ -- instead of @$(int 3)@. Sometimes the two will produce the same+ -- representation (if compiled without the @-DUSE_TYPE_LITS@ preprocessor+ -- directive).++{-+ int :: Int -> TypeQ+ int n = case quotRem n 2 of+   (0, 0) -> conT ''Z+@@ -176,7 +177,7 @@ nat :: Int -> TypeQ+ nat n+   | n >= 0 = int n+   | otherwise = error "nat: negative"+-++-}+ #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL < 704+ instance Show (Q a)+ instance Eq (Q a)+@@ -195,6 +196,7 @@ instance Fractional a => Fractional (Q a) where+   recip = fmap recip+   fromRational = return . fromRational+ ++{-+ -- | This permits the use of $(5) as a type splice.+ instance Num Type where+ #ifdef USE_TYPE_LITS+@@ -254,7 +256,7 @@ instance Num Exp where+   abs = onProxyType1 abs+   signum = onProxyType1 signum+   fromInteger n = ConE 'Proxy `SigE` (ConT ''Proxy `AppT` fromInteger n)+-++-}+ #ifdef USE_TYPE_LITS+ addProxy :: Proxy a -> Proxy b -> Proxy (a + b)+ addProxy _ _ = Proxy+-- +1.9.0+
+ standalone/no-th/haskell-patches/skein_hardcode_little-endian.patch view
@@ -0,0 +1,26 @@+From 3a04b41ffce4e4e87b0fedd3a1e3434a3f06cc76 Mon Sep 17 00:00:00 2001+From: foo <foo@bar>+Date: Sun, 22 Sep 2013 00:18:12 +0000+Subject: [PATCH] hardcode little endian++This is the same as building with a cabal flag.++---+ c_impl/optimized/skein_port.h |    1 ++ 1 file changed, 1 insertion(+)++diff --git a/c_impl/optimized/skein_port.h b/c_impl/optimized/skein_port.h+index a2d0fc2..6929bb0 100644+--- a/c_impl/optimized/skein_port.h++++ b/c_impl/optimized/skein_port.h+@@ -45,6 +45,7 @@ typedef uint64_t        u64b_t;             /* 64-bit unsigned integer */+  * platform-specific code instead (e.g., for big-endian CPUs).
+  *
+  */
++#define SKEIN_NEED_SWAP  (0)
+ #ifndef SKEIN_NEED_SWAP /* compile-time "override" for endianness? */
+ 
+ #include "brg_endian.h"                     /* get endianness selection */
+-- +1.7.10.4+
+ standalone/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch view
@@ -0,0 +1,49 @@+From 6ffd4fcb7d27ec6df709d80a40a262406446a259 Mon Sep 17 00:00:00 2001+From: dummy <dummy@example.com>+Date: Wed, 15 Oct 2014 17:00:56 +0000+Subject: [PATCH] cross build++---+ Data/Vector/Fusion/Stream/Monadic.hs |  1 -+ Data/Vector/Unboxed/Base.hs          | 13 -------------+ 2 files changed, 14 deletions(-)++diff --git a/Data/Vector/Fusion/Stream/Monadic.hs b/Data/Vector/Fusion/Stream/Monadic.hs+index 51fec75..b089b3d 100644+--- a/Data/Vector/Fusion/Stream/Monadic.hs++++ b/Data/Vector/Fusion/Stream/Monadic.hs+@@ -101,7 +101,6 @@ import GHC.Exts ( SpecConstrAnnotation(..) )+ + data SPEC = SPEC | SPEC2+ #if __GLASGOW_HASKELL__ >= 700+-{-# ANN type SPEC ForceSpecConstr #-}+ #endif+ + emptyStream :: String+diff --git a/Data/Vector/Unboxed/Base.hs b/Data/Vector/Unboxed/Base.hs+index 00350cb..34bfc4a 100644+--- a/Data/Vector/Unboxed/Base.hs++++ b/Data/Vector/Unboxed/Base.hs+@@ -65,19 +65,6 @@ vectorTyCon = mkTyCon3 "vector"+ vectorTyCon m s = mkTyCon $ m ++ "." ++ s+ #endif+ +-instance Typeable1 Vector where+-  typeOf1 _ = mkTyConApp (vectorTyCon "Data.Vector.Unboxed" "Vector") []+-+-instance Typeable2 MVector where+-  typeOf2 _ = mkTyConApp (vectorTyCon "Data.Vector.Unboxed.Mutable" "MVector") []+-+-instance (Data a, Unbox a) => Data (Vector a) where+-  gfoldl       = G.gfoldl+-  toConstr _   = error "toConstr"+-  gunfold _ _  = error "gunfold"+-  dataTypeOf _ = G.mkType "Data.Vector.Unboxed.Vector"+-  dataCast1    = G.dataCast+-+ -- ----+ -- Unit+ -- ----+-- +2.1.1+
standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch view
@@ -1,8 +1,12 @@-From a020dd27eda45263db6ac887df4a94efb6ca86db Mon Sep 17 00:00:00 2001+From 3aef808eee43c973ae1fbf6e8769d89b7f0d355b Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Thu, 2 Jul 2015 21:36:02 +0000+Date: Tue, 10 Jun 2014 14:47:42 +0000 Subject: [PATCH] deal with TH +Export modules referenced by it.++Should not need these icons in git-annex, so not worth using the Evil+Splicer. ---  Network/Wai/Application/Static.hs | 4 ----  WaiAppStatic/Storage/Embedded.hs  | 8 ++++----@@ -10,10 +14,10 @@  3 files changed, 5 insertions(+), 11 deletions(-)  diff --git a/Network/Wai/Application/Static.hs b/Network/Wai/Application/Static.hs-index 228582d..7d72bb0 100644+index db2b835..b2c1aec 100644 --- a/Network/Wai/Application/Static.hs +++ b/Network/Wai/Application/Static.hs-@@ -34,8 +34,6 @@ import Control.Monad.IO.Class (liftIO)+@@ -33,8 +33,6 @@ import Control.Monad.IO.Class (liftIO)    import Blaze.ByteString.Builder (toByteString)  @@ -22,10 +26,10 @@  import Data.Text (Text)  import qualified Data.Text as T  -@@ -218,8 +216,6 @@ staticAppPieces _ _ req sendResponse+@@ -198,8 +196,6 @@ staticAppPieces _ _ req sendResponse          H.status405          [("Content-Type", "text/plain")]-         "Only GET or HEAD is supported"+         "Only GET is supported" -staticAppPieces _ [".hidden", "folder.png"] _ sendResponse = sendResponse $ W.responseLBS H.status200 [("Content-Type", "image/png")] $ L.fromChunks [$(embedFile "images/folder.png")] -staticAppPieces _ [".hidden", "haskell.png"] _ sendResponse = sendResponse $ W.responseLBS H.status200 [("Content-Type", "image/png")] $ L.fromChunks [$(embedFile "images/haskell.png")]  staticAppPieces ss rawPieces req sendResponse = liftIO $ do@@ -51,10 +55,10 @@ -import WaiAppStatic.Storage.Embedded.TH +--import WaiAppStatic.Storage.Embedded.TH diff --git a/wai-app-static.cabal b/wai-app-static.cabal-index 4cca237..3fbfcee 100644+index ef6f898..9a59d71 100644 --- a/wai-app-static.cabal +++ b/wai-app-static.cabal-@@ -35,7 +35,6 @@ library+@@ -33,7 +33,6 @@ library                     , containers                >= 0.2                     , time                      >= 1.1.4                     , old-locale                >= 1.0.0.2@@ -62,7 +66,7 @@                     , text                      >= 0.7                     , blaze-builder             >= 0.2.1.4                     , base64-bytestring         >= 0.1-@@ -63,9 +62,8 @@ library+@@ -61,9 +60,8 @@ library                       WaiAppStatic.Listing                       WaiAppStatic.Types                       WaiAppStatic.CmdLine@@ -74,5 +78,5 @@      extensions:     CPP   -- -2.1.4+2.0.0 
+ standalone/no-th/haskell-patches/xml-hamlet_remove_TH.patch view
@@ -0,0 +1,108 @@+From b53713fbb4f3bb6bdd25b07afcaed4940b32dfa8 Mon Sep 17 00:00:00 2001+From: Joey Hess <joey@kitenet.net>+Date: Wed, 18 Dec 2013 03:32:44 +0000+Subject: [PATCH] remove TH++---+ Text/Hamlet/XML.hs | 81 +-----------------------------------------------------+ 1 file changed, 1 insertion(+), 80 deletions(-)++diff --git a/Text/Hamlet/XML.hs b/Text/Hamlet/XML.hs+index f587410..4e830bd 100644+--- a/Text/Hamlet/XML.hs++++ b/Text/Hamlet/XML.hs+@@ -1,9 +1,7 @@+ {-# LANGUAGE TemplateHaskell #-}+ {-# OPTIONS_GHC -fno-warn-missing-fields #-}+ module Text.Hamlet.XML+-    ( xml+-    , xmlFile+-    ) where++    () where+ + import Language.Haskell.TH.Syntax+ import Language.Haskell.TH.Quote+@@ -19,80 +17,3 @@ import qualified Data.Foldable as F+ import Data.Maybe (fromMaybe)+ import qualified Data.Map as Map+ +-xml :: QuasiQuoter+-xml = QuasiQuoter { quoteExp = strToExp }+-+-xmlFile :: FilePath -> Q Exp+-xmlFile = strToExp . TL.unpack <=< qRunIO . readUtf8File+-+-strToExp :: String -> Q Exp+-strToExp s =+-    case parseDoc s of+-        Error e -> error e+-        Ok x -> docsToExp [] x+-+-docsToExp :: Scope -> [Doc] -> Q Exp+-docsToExp scope docs = [| concat $(fmap ListE $ mapM (docToExp scope) docs) |]+-+-docToExp :: Scope -> Doc -> Q Exp+-docToExp scope (DocTag name attrs cs) =+-    [| [ X.NodeElement (X.Element ($(liftName name)) $(mkAttrs scope attrs) $(docsToExp scope cs))+-       ] |]+-docToExp _ (DocContent (ContentRaw s)) = [| [ X.NodeContent (pack $(lift s)) ] |]+-docToExp scope (DocContent (ContentVar d)) = [| [ X.NodeContent $(return $ derefToExp scope d) ] |]+-docToExp scope (DocContent (ContentEmbed d)) = return $ derefToExp scope d+-docToExp scope (DocForall deref ident@(Ident ident') inside) = do+-    let list' = derefToExp scope deref+-    name <- newName ident'+-    let scope' = (ident, VarE name) : scope+-    inside' <- docsToExp scope' inside+-    let lam = LamE [VarP name] inside'+-    [| F.concatMap $(return lam) $(return list') |]+-docToExp scope (DocWith [] inside) = docsToExp scope inside+-docToExp scope (DocWith ((deref, ident@(Ident name)):dis) inside) = do+-    let deref' = derefToExp scope deref+-    name' <- newName name+-    let scope' = (ident, VarE name') : scope+-    inside' <- docToExp scope' (DocWith dis inside)+-    let lam = LamE [VarP name'] inside'+-    return $ lam `AppE` deref'+-docToExp scope (DocMaybe deref ident@(Ident name) just nothing) = do+-    let deref' = derefToExp scope deref+-    name' <- newName name+-    let scope' = (ident, VarE name') : scope+-    inside' <- docsToExp scope' just+-    let inside'' = LamE [VarP name'] inside'+-    nothing' <-+-        case nothing of+-            Nothing -> [| [] |]+-            Just n -> docsToExp scope n+-    [| maybe $(return nothing') $(return inside'') $(return deref') |]+-docToExp scope (DocCond conds final) = do+-    unit <- [| () |]+-    body <- fmap GuardedB $ mapM go $ conds ++ [(DerefIdent $ Ident "otherwise", fromMaybe [] final)]+-    return $ CaseE unit [Match (TupP []) body []]+-  where+-    go (deref, inside) = do+-        inside' <- docsToExp scope inside+-        return (NormalG $ derefToExp scope deref, inside')+-+-mkAttrs :: Scope -> [(Maybe Deref, String, [Content])] -> Q Exp+-mkAttrs _ [] = [| Map.empty |]+-mkAttrs scope ((mderef, name, value):rest) = do+-    rest' <- mkAttrs scope rest+-    this <- [| Map.insert $(liftName name) (T.concat $(fmap ListE $ mapM go value)) |]+-    let with = [| $(return this) $(return rest') |]+-    case mderef of+-        Nothing -> with+-        Just deref -> [| if $(return $ derefToExp scope deref) then $(with) else $(return rest') |]+-  where+-    go (ContentRaw s) = [| pack $(lift s) |]+-    go (ContentVar d) = return $ derefToExp scope d+-    go ContentEmbed{} = error "Cannot use embed interpolation in attribute value"+-+-liftName :: String -> Q Exp+-liftName s = do+-    X.Name local mns _ <- return $ fromString s+-    case mns of+-        Nothing -> [| X.Name (pack $(lift $ unpack local)) Nothing Nothing |]+-        Just ns -> [| X.Name (pack $(lift $ unpack local)) (Just $ pack $(lift $ unpack ns)) Nothing |]+-- +1.8.5.1+
standalone/no-th/haskell-patches/yesod-core_expand_TH.patch view
@@ -1,6 +1,6 @@-From bec7dac77cc7fbe9a620c371d7c2cdbcf234eac6 Mon Sep 17 00:00:00 2001+From f1feea61dcba0b16afed5ce8dd5d2433fe505461 Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Fri, 3 Jul 2015 00:39:53 +0000+Date: Thu, 16 Oct 2014 02:15:23 +0000 Subject: [PATCH] hack TH  ---@@ -15,7 +15,7 @@  8 files changed, 213 insertions(+), 288 deletions(-)  diff --git a/Yesod/Core.hs b/Yesod/Core.hs-index f7436e6..2fa62cc 100644+index 9b29317..7c0792d 100644 --- a/Yesod/Core.hs +++ b/Yesod/Core.hs @@ -31,16 +31,16 @@ module Yesod.Core@@ -45,7 +45,7 @@        -- * Sessions      , SessionBackend (..)      , customizeSessionCookies-@@ -90,17 +90,15 @@ module Yesod.Core+@@ -87,17 +87,15 @@ module Yesod.Core      , readIntegral        -- * Shakespeare        -- ** Hamlet@@ -68,10 +68,10 @@      , renderCssUrl      ) where diff --git a/Yesod/Core/Class/Yesod.hs b/Yesod/Core/Class/Yesod.hs-index c2e707a..b594353 100644+index 8631d27..c40eb10 100644 --- a/Yesod/Core/Class/Yesod.hs +++ b/Yesod/Core/Class/Yesod.hs-@@ -5,11 +5,15 @@+@@ -5,18 +5,22 @@  {-# LANGUAGE CPP               #-}  module Yesod.Core.Class.Yesod where  @@ -88,16 +88,15 @@    import           Blaze.ByteString.Builder           (Builder)  import           Blaze.ByteString.Builder.Char.Utf8 (fromText)-@@ -18,7 +22,7 @@ import           Control.Exception                  (bracket)+ import           Control.Arrow                      ((***), second)  import           Control.Monad                      (forM, when, void)  import           Control.Monad.IO.Class             (MonadIO (liftIO))- import           Control.Monad.Logger               (LogLevel (LevelInfo, LevelOther),--                                                     LogSource)-+                                                     LogSource, Loc)- import           Control.Monad.Trans.Resource       (InternalState, createInternalState, closeInternalState)+-import           Control.Monad.Logger               (LogLevel (LevelInfo, LevelOther),++import           Control.Monad.Logger               (Loc, LogLevel (LevelInfo, LevelOther),+                                                      LogSource)  import qualified Data.ByteString.Char8              as S8  import qualified Data.ByteString.Lazy               as L-@@ -35,7 +39,6 @@ import qualified Data.Text.Encoding.Error           as TEE+@@ -33,7 +37,6 @@ import qualified Data.Text.Encoding.Error           as TEE  import           Data.Text.Lazy.Builder             (toLazyText)  import           Data.Text.Lazy.Encoding            (encodeUtf8)  import           Data.Word                          (Word64)@@ -105,7 +104,7 @@  import           Network.HTTP.Types                 (encodePath)  import qualified Network.Wai                        as W  import           Data.Default                       (def)-@@ -87,18 +90,26 @@ class RenderRoute site => Yesod site where+@@ -94,18 +97,26 @@ class RenderRoute site => Yesod site where      defaultLayout w = do          p <- widgetToPageContent w          mmsg <- getMessage@@ -144,7 +143,7 @@        -- | Override the rendering function for a particular URL. One use case for      -- this is to offload static hosting to a different domain name to avoid-@@ -410,45 +421,103 @@ widgetToPageContent w = do+@@ -374,45 +385,103 @@ widgetToPageContent w = do      -- modernizr should be at the end of the <head> http://www.modernizr.com/docs/#installing      -- the asynchronous loader means your page doesn't have to wait for all the js to load      let (mcomplete, asyncScripts) = asyncHelper render scripts jscript jsLoc@@ -287,7 +286,7 @@        return $ PageContent title headAll $          case jsLoader master of-@@ -478,10 +547,13 @@ defaultErrorHandler NotFound = selectRep $ do+@@ -442,10 +511,13 @@ defaultErrorHandler NotFound = selectRep $ do          r <- waiRequest          let path' = TE.decodeUtf8With TEE.lenientDecode $ W.rawPathInfo r          setTitle "Not Found"@@ -305,7 +304,7 @@      provideRep $ return $ object ["message" .= ("Not Found" :: Text)]    -- For API requests.-@@ -491,10 +563,11 @@ defaultErrorHandler NotFound = selectRep $ do+@@ -455,10 +527,11 @@ defaultErrorHandler NotFound = selectRep $ do  defaultErrorHandler NotAuthenticated = selectRep $ do      provideRep $ defaultLayout $ do          setTitle "Not logged in"@@ -321,7 +320,7 @@        provideRep $ do          -- 401 *MUST* include a WWW-Authenticate header-@@ -516,10 +589,13 @@ defaultErrorHandler NotAuthenticated = selectRep $ do+@@ -480,10 +553,13 @@ defaultErrorHandler NotAuthenticated = selectRep $ do  defaultErrorHandler (PermissionDenied msg) = selectRep $ do      provideRep $ defaultLayout $ do          setTitle "Permission Denied"@@ -339,7 +338,7 @@      provideRep $          return $ object $ [            "message" .= ("Permission Denied. " <> msg)-@@ -528,30 +604,42 @@ defaultErrorHandler (PermissionDenied msg) = selectRep $ do+@@ -492,30 +568,42 @@ defaultErrorHandler (PermissionDenied msg) = selectRep $ do  defaultErrorHandler (InvalidArgs ia) = selectRep $ do      provideRep $ defaultLayout $ do          setTitle "Invalid Arguments"@@ -397,7 +396,7 @@      provideRep $ return $ object ["message" .= ("Bad method" :: Text), "method" .= TE.decodeUtf8With TEE.lenientDecode m]    asyncHelper :: (url -> [x] -> Text)-@@ -718,8 +806,4 @@ loadClientSession key getCachedDate sessionName req = load+@@ -682,8 +770,4 @@ loadClientSession key getCachedDate sessionName req = load  -- turn the TH Loc loaction information into a human readable string  -- leaving out the loc_end parameter  fileLocationToString :: Loc -> String@@ -408,7 +407,7 @@ -    char = show . snd . loc_start +fileLocationToString loc = "unknown" diff --git a/Yesod/Core/Dispatch.hs b/Yesod/Core/Dispatch.hs-index 7e43f74..625a901 100644+index e0d1f0e..cc23fdd 100644 --- a/Yesod/Core/Dispatch.hs +++ b/Yesod/Core/Dispatch.hs @@ -1,4 +1,3 @@@@ -445,9 +444,9 @@      , PathMultiPiece (..)      , Texts        -- * Convert to WAI-@@ -141,13 +140,6 @@ toWaiAppLogger logger site = do+@@ -135,13 +134,6 @@ toWaiAppLogger logger site = do+                 , yreSite = site                  , yreSessionBackend = sb-                 , yreGen = gen                  } -    messageLoggerSource -        site@@ -459,10 +458,10 @@      middleware <- mkDefaultMiddlewares logger      return $ middleware $ toWaiAppYre yre  -@@ -167,14 +159,7 @@ warp port site = do-         Network.Wai.Handler.Warp.setPort port $-         Network.Wai.Handler.Warp.setServerName serverValue $-         Network.Wai.Handler.Warp.setOnException (\_ e ->+@@ -170,14 +162,7 @@ warp port site = do+                 ]+             -}+             , Network.Wai.Handler.Warp.settingsOnException = const $ \e -> -                when (shouldLog' e) $ -                messageLoggerSource -                    site@@ -470,12 +469,12 @@ -                    $(qLocation >>= liftLoc) -                    "yesod-core" -                    LevelError--                    (toLogStr $ "Exception from Warp: " ++ show e)) $-+                when (shouldLog' e) $ error (show e)) $-         Network.Wai.Handler.Warp.defaultSettings)+-                    (toLogStr $ "Exception from Warp: " ++ show e)++                when (shouldLog' e) $ error (show e)+             }    where-     shouldLog' = Network.Wai.Handler.Warp.defaultShouldDisplayException-@@ -208,7 +193,6 @@ defaultMiddlewaresNoLogging = acceptOverride . autohead . gzip def . methodOverr+     shouldLog' =+@@ -211,7 +196,6 @@ defaultMiddlewaresNoLogging = acceptOverride . autohead . gzip def . methodOverr  -- | Deprecated synonym for 'warp'.  warpDebug :: YesodDispatch site => Int -> site -> IO ()  warpDebug = warp@@ -484,10 +483,10 @@  -- | Runs your application using default middlewares (i.e., via 'toWaiApp'). It  -- reads port information from the PORT environment variable, as used by tools diff --git a/Yesod/Core/Handler.hs b/Yesod/Core/Handler.hs-index 19f4152..c97fb24 100644+index d2b196b..13cac17 100644 --- a/Yesod/Core/Handler.hs +++ b/Yesod/Core/Handler.hs-@@ -178,7 +178,7 @@ import           Data.Text.Encoding            (decodeUtf8With, encodeUtf8)+@@ -174,7 +174,7 @@ import           Data.Text.Encoding            (decodeUtf8With, encodeUtf8)  import           Data.Text.Encoding.Error      (lenientDecode)  import qualified Data.Text.Lazy                as TL  import qualified Text.Blaze.Html.Renderer.Text as RenderText@@ -496,7 +495,7 @@    import qualified Data.ByteString               as S  import qualified Data.ByteString.Lazy          as L-@@ -206,6 +206,7 @@ import Control.Exception (throwIO)+@@ -203,6 +203,7 @@ import Control.Exception (throwIO)  import Blaze.ByteString.Builder (Builder)  import Safe (headMay)  import Data.CaseInsensitive (CI)@@ -504,7 +503,7 @@  import qualified Data.Conduit.List as CL  import Control.Monad (unless)  import           Control.Monad.Trans.Resource  (MonadResource, InternalState, runResourceT, withInternalState, getInternalState, liftResourceT, resourceForkIO-@@ -848,19 +849,15 @@ redirectToPost :: (MonadHandler m, RedirectUrl (HandlerSite m) url)+@@ -855,19 +856,15 @@ redirectToPost :: (MonadHandler m, RedirectUrl (HandlerSite m) url)                 -> m a  redirectToPost url = do      urlText <- toTextUrl url@@ -534,7 +533,7 @@  -- | Wraps the 'Content' generated by 'hamletToContent' in a 'RepHtml'.  hamletToRepHtml :: MonadHandler m => HtmlUrl (Route (HandlerSite m)) -> m Html diff --git a/Yesod/Core/Internal/Run.hs b/Yesod/Core/Internal/Run.hs-index 651c11c..46e1d2a 100644+index 311f208..63f666f 100644 --- a/Yesod/Core/Internal/Run.hs +++ b/Yesod/Core/Internal/Run.hs @@ -16,7 +16,7 @@ import           Control.Exception.Lifted     (catch)@@ -544,18 +543,18 @@ -import           Control.Monad.Logger         (LogLevel (LevelError), LogSource, +import           Control.Monad.Logger         (Loc, LogLevel (LevelError), LogSource,                                                 liftLoc)- import           Control.Monad.Trans.Resource (runResourceT, withInternalState, runInternalState)+ import           Control.Monad.Trans.Resource (runResourceT, withInternalState, runInternalState, createInternalState, closeInternalState)  import qualified Data.ByteString              as S-@@ -32,7 +32,7 @@ import           Data.Text.Encoding           (encodeUtf8)+@@ -31,7 +31,7 @@ import qualified Data.Text                    as T+ import           Data.Text.Encoding           (encodeUtf8)  import           Data.Text.Encoding           (decodeUtf8With)  import           Data.Text.Encoding.Error     (lenientDecode)- import           Data.Time                    (getCurrentTime, addUTCTime) -import           Language.Haskell.TH.Syntax   (Loc, qLocation) +import           Language.Haskell.TH.Syntax   (qLocation)  import qualified Network.HTTP.Types           as H  import           Network.Wai- import           Network.Wai.Internal-@@ -160,8 +160,6 @@ safeEh :: (Loc -> LogSource -> LogLevel -> LogStr -> IO ())+ #if MIN_VERSION_wai(2, 0, 0)+@@ -158,8 +158,6 @@ safeEh :: (Loc -> LogSource -> LogLevel -> LogStr -> IO ())         -> ErrorResponse         -> YesodApp  safeEh log' er req = do@@ -684,26 +683,26 @@ -                ] -    return $ LetE [fun] (VarE helper) diff --git a/Yesod/Core/Types.hs b/Yesod/Core/Types.hs-index 5fa5c3d..1646d54 100644+index 388dfe3..b3fce0f 100644 --- a/Yesod/Core/Types.hs +++ b/Yesod/Core/Types.hs-@@ -19,6 +19,7 @@ import           Control.Monad.Base                 (MonadBase (liftBase))- import           Control.Monad.Catch                (MonadCatch (..))+@@ -21,6 +21,7 @@ import           Control.Monad.Catch                (MonadCatch (..))  import           Control.Monad.Catch                (MonadMask (..))+ #endif  import           Control.Monad.IO.Class             (MonadIO (liftIO)) +import qualified Control.Monad.Logger  import           Control.Monad.Logger               (LogLevel, LogSource,                                                       MonadLogger (..))  import           Control.Monad.Trans.Control        (MonadBaseControl (..))-@@ -179,7 +180,7 @@ data RunHandlerEnv site = RunHandlerEnv+@@ -191,7 +192,7 @@ data RunHandlerEnv site = RunHandlerEnv      , rheRoute    :: !(Maybe (Route site))      , rheSite     :: !site      , rheUpload   :: !(RequestBodyLength -> FileUpload) -    , rheLog      :: !(Loc -> LogSource -> LogLevel -> LogStr -> IO ()) +    , rheLog      :: !(Control.Monad.Logger.Loc -> LogSource -> LogLevel -> LogStr -> IO ())      , rheOnError  :: !(ErrorResponse -> YesodApp)-     , rheGetMaxExpires :: IO Text        -- ^ How to respond when an error is thrown internally.+       -- diff --git a/Yesod/Core/Widget.hs b/Yesod/Core/Widget.hs index 481199e..8489fbe 100644 --- a/Yesod/Core/Widget.hs@@ -765,5 +764,5 @@  ihamletToRepHtml :: (MonadHandler m, RenderMessage (HandlerSite m) message)                   => HtmlUrlI18n message (Route (HandlerSite m)) -- -2.1.4+2.1.1 
standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch view
@@ -1,27 +1,22 @@-From 4cf9a045569ea0b51b4ee11df2dadbde330f7813 Mon Sep 17 00:00:00 2001+From 1b24ece1a40c9365f719472ca6e342c8c4065c25 Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Fri, 3 Jul 2015 01:06:34 +0000+Date: Thu, 16 Oct 2014 02:31:20 +0000 Subject: [PATCH] hack TH -1. EvilSplicer-2. Add imports-3. Fix some syntax errors in spliced code-4. Remove some persistent stuff that doesn't build. ---- Yesod/Form/Bootstrap3.hs | 189 +++++++++--- Yesod/Form/Fields.hs     | 811 ++++++++++++++++++++++++++++++++++++------------ Yesod/Form/Functions.hs  | 255 ++++++++++++---- Yesod/Form/Jquery.hs     | 124 ++++++--+ Yesod/Form/Bootstrap3.hs | 186 +++++++++--+ Yesod/Form/Fields.hs     | 816 +++++++++++++++++++++++++++++++++++------------+ Yesod/Form/Functions.hs  | 257 ++++++++++++---+ Yesod/Form/Jquery.hs     | 134 ++++++--  Yesod/Form/MassInput.hs  | 226 ++++++++++---- Yesod/Form/Nic.hs        |  60 +++-- yesod-form.cabal         |   2 +-- 7 files changed, 1311 insertions(+), 356 deletions(-)+ Yesod/Form/Nic.hs        |  67 +++-+ 6 files changed, 1322 insertions(+), 364 deletions(-)  diff --git a/Yesod/Form/Bootstrap3.hs b/Yesod/Form/Bootstrap3.hs-index 8377a68..fa8b7d4 100644+index 84e85fc..1954fb4 100644 --- a/Yesod/Form/Bootstrap3.hs +++ b/Yesod/Form/Bootstrap3.hs-@@ -35,6 +35,9 @@ import Data.String (IsString(..))+@@ -26,6 +26,9 @@ import Data.String (IsString(..))  import Yesod.Core    import qualified Data.Text as T@@ -31,7 +26,7 @@    import Yesod.Form.Types  import Yesod.Form.Functions-@@ -155,44 +158,144 @@ renderBootstrap3 formLayout aform fragment = do+@@ -152,44 +155,144 @@ renderBootstrap3 formLayout aform fragment = do      let views = views' []          has (Just _) = True          has Nothing  = False@@ -64,22 +59,22 @@ -                |] +        widget =         do { (asWidgetT . toWidget) (toHtml fragment); +             Data.Foldable.mapM_-+               (\ view_a2d4p++               (\ view_as0a +                  -> do { (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . T.pack) +                               "<div class=\"form-group "); +                          Text.Hamlet.condH-+                            [(fvRequired view_a2d4p, ++                            [(fvRequired view_as0a,  +                              (asWidgetT . toWidget) +                                ((Text.Blaze.Internal.preEscapedText . T.pack) "required "))] +                            Nothing; +                          Text.Hamlet.condH-+                            [(not (fvRequired view_a2d4p), ++                            [(not (fvRequired view_as0a),  +                              (asWidgetT . toWidget) +                                ((Text.Blaze.Internal.preEscapedText . T.pack) "optional "))] +                            Nothing; +                          Text.Hamlet.condH-+                            [(has (fvErrors view_a2d4p), ++                            [(has (fvErrors view_as0a),  +                              (asWidgetT . toWidget) +                                ((Text.Blaze.Internal.preEscapedText . T.pack) "has-error"))] +                            Nothing;@@ -88,66 +83,66 @@ +                          case formLayout of { +                            ; BootstrapBasicForm +                              -> do { Text.Hamlet.condH-+                                        [((/=) (fvId view_a2d4p) bootstrapSubmitId, ++                                        [((/=) (fvId view_as0a) bootstrapSubmitId,  +                                          do { (asWidgetT . toWidget) +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack) +                                                    "<label for=\"");-+                                               (asWidgetT . toWidget) (toHtml (fvId view_a2d4p));++                                               (asWidgetT . toWidget) (toHtml (fvId view_as0a)); +                                               (asWidgetT . toWidget) +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+                                               (asWidgetT . toWidget) (toHtml (fvLabel view_a2d4p));++                                               (asWidgetT . toWidget) (toHtml (fvLabel view_as0a)); +                                               (asWidgetT . toWidget) +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack) +                                                    "</label>") })] +                                        Nothing;-+                                      (asWidgetT . toWidget) (fvInput view_a2d4p);-+                                      (asWidgetT . toWidget) (helpWidget view_a2d4p) }++                                      (asWidgetT . toWidget) (fvInput view_as0a);++                                      (asWidgetT . toWidget) (helpWidget view_as0a) } +                            ; BootstrapInlineForm +                              -> do { Text.Hamlet.condH-+                                        [((/=) (fvId view_a2d4p) bootstrapSubmitId, ++                                        [((/=) (fvId view_as0a) bootstrapSubmitId,  +                                          do { (asWidgetT . toWidget) +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack) +                                                    "<label class=\"sr-only\" for=\"");-+                                               (asWidgetT . toWidget) (toHtml (fvId view_a2d4p));++                                               (asWidgetT . toWidget) (toHtml (fvId view_as0a)); +                                               (asWidgetT . toWidget) +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+                                               (asWidgetT . toWidget) (toHtml (fvLabel view_a2d4p));++                                               (asWidgetT . toWidget) (toHtml (fvLabel view_as0a)); +                                               (asWidgetT . toWidget) +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack) +                                                    "</label>") })] +                                        Nothing;-+                                      (asWidgetT . toWidget) (fvInput view_a2d4p);-+                                      (asWidgetT . toWidget) (helpWidget view_a2d4p) }-+                            ; BootstrapHorizontalForm labelOffset_a2d4q-+                                                    labelSize_a2d4r-+                                                    inputOffset_a2d4s-+                                                    inputSize_a2d4t++                                      (asWidgetT . toWidget) (fvInput view_as0a);++                                      (asWidgetT . toWidget) (helpWidget view_as0a) }++                            ; BootstrapHorizontalForm labelOffset_as0b++                                                    labelSize_as0c++                                                    inputOffset_as0d++                                                    inputSize_as0e +                              -> Text.Hamlet.condH-+                                   [((/=) (fvId view_a2d4p) bootstrapSubmitId, ++                                   [((/=) (fvId view_as0a) bootstrapSubmitId,  +                                     do { (asWidgetT . toWidget) +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) +                                               "<label class=\"control-label ");-+                                          (asWidgetT . toWidget) (toHtml (toOffset labelOffset_a2d4q));++                                          (asWidgetT . toWidget) (toHtml (toOffset labelOffset_as0b)); +                                          (asWidgetT . toWidget) +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) " ");-+                                          (asWidgetT . toWidget) (toHtml (toColumn labelSize_a2d4r));++                                          (asWidgetT . toWidget) (toHtml (toColumn labelSize_as0c)); +                                          (asWidgetT . toWidget) +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) "\" for=\"");-+                                          (asWidgetT . toWidget) (toHtml (fvId view_a2d4p));++                                          (asWidgetT . toWidget) (toHtml (fvId view_as0a)); +                                          (asWidgetT . toWidget) +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+                                          (asWidgetT . toWidget) (toHtml (fvLabel view_a2d4p));++                                          (asWidgetT . toWidget) (toHtml (fvLabel view_as0a)); +                                          (asWidgetT . toWidget) +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) +                                               "</label><div class=\"");-+                                          (asWidgetT . toWidget) (toHtml (toOffset inputOffset_a2d4s));++                                          (asWidgetT . toWidget) (toHtml (toOffset inputOffset_as0d)); +                                          (asWidgetT . toWidget) +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) " ");-+                                          (asWidgetT . toWidget) (toHtml (toColumn inputSize_a2d4t));++                                          (asWidgetT . toWidget) (toHtml (toColumn inputSize_as0e)); +                                          (asWidgetT . toWidget) +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+                                          (asWidgetT . toWidget) (fvInput view_a2d4p);-+                                          (asWidgetT . toWidget) (helpWidget view_a2d4p);++                                          (asWidgetT . toWidget) (fvInput view_as0a);++                                          (asWidgetT . toWidget) (helpWidget view_as0a); +                                          (asWidgetT . toWidget) +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) "</div>") })] +                                   (Just@@ -158,15 +153,15 @@ +                                              (toHtml +                                                 (toOffset +                                                    (addGO-+                                                       inputOffset_a2d4s-+                                                       (addGO labelOffset_a2d4q labelSize_a2d4r))));++                                                       inputOffset_as0d++                                                       (addGO labelOffset_as0b labelSize_as0c)))); +                                            (asWidgetT . toWidget) +                                              ((Text.Blaze.Internal.preEscapedText . T.pack) " ");-+                                            (asWidgetT . toWidget) (toHtml (toColumn inputSize_a2d4t));++                                            (asWidgetT . toWidget) (toHtml (toColumn inputSize_as0e)); +                                            (asWidgetT . toWidget) +                                              ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+                                            (asWidgetT . toWidget) (fvInput view_a2d4p);-+                                            (asWidgetT . toWidget) (helpWidget view_a2d4p);++                                            (asWidgetT . toWidget) (fvInput view_as0a);++                                            (asWidgetT . toWidget) (helpWidget view_as0a); +                                            (asWidgetT . toWidget) +                                              ((Text.Blaze.Internal.preEscapedText . T.pack) +                                                 "</div>") })) };@@ -187,21 +182,21 @@ -|] +helpWidget view = do { Text.Hamlet.maybeH +       (fvTooltip view)-+       (\ tt_a2d5x++       (\ tt_as0k +          -> do { (asWidgetT . toWidget) +                    ((Text.Blaze.Internal.preEscapedText . T.pack) +                       "<span class=\"help-block\">");-+                  (asWidgetT . toWidget) (toHtml tt_a2d5x);++                  (asWidgetT . toWidget) (toHtml tt_as0k); +                  (asWidgetT . toWidget) +                    ((Text.Blaze.Internal.preEscapedText . T.pack) "</span>") }) +       Nothing; +     Text.Hamlet.maybeH +       (fvErrors view)-+       (\ err_a2d5y++       (\ err_as0l +          -> do { (asWidgetT . toWidget) +                    ((Text.Blaze.Internal.preEscapedText . T.pack) +                       "<span class=\"help-block\">");-+                  (asWidgetT . toWidget) (toHtml err_a2d5y);++                  (asWidgetT . toWidget) (toHtml err_as0l); +                  (asWidgetT . toWidget) +                    ((Text.Blaze.Internal.preEscapedText . T.pack) "</span>") }) +       Nothing }@@ -209,7 +204,7 @@      -- | How the 'bootstrapSubmit' button should be rendered.-@@ -247,7 +350,23 @@ mbootstrapSubmit+@@ -244,7 +347,22 @@ mbootstrapSubmit      => BootstrapSubmit msg -> MForm m (FormResult (), FieldView site)  mbootstrapSubmit (BootstrapSubmit msg classes attrs) =      let res = FormSuccess ()@@ -226,26 +221,40 @@ +             (asWidgetT . toWidget) +               ((Text.Blaze.Internal.preEscapedText . T.pack) ">"); +             ((liftM (toHtml .) getMessageRender)-+              >>=-+                (\ urender_a2d6f -> (asWidgetT . toWidget) (urender_a2d6f msg)));++              >>= (\ urender_as0w -> (asWidgetT . toWidget) (urender_as0w msg))); +             (asWidgetT . toWidget) +               ((Text.Blaze.Internal.preEscapedText . T.pack) "</button>") } +          fv  = FieldView { fvLabel    = ""                          , fvTooltip  = Nothing                          , fvId       = bootstrapSubmitId-@@ -314,4 +433,4 @@ bootstrapSubmitId = "b:ootstrap___unique__:::::::::::::::::submit-id"- -- >        <$> areq textField nameSettings Nothing- -- >      where nameSettings = withAutofocus $- -- >                           withPlaceholder "First name" $---- >                           (bfs ("Name" :: Text))-\ No newline at end of file-+-- >                           (bfs ("Name" :: Text)) diff --git a/Yesod/Form/Fields.hs b/Yesod/Form/Fields.hs-index 5fe123e..42fd7d6 100644+index c6091a9..9e6bd4e 100644 --- a/Yesod/Form/Fields.hs +++ b/Yesod/Form/Fields.hs-@@ -52,8 +52,6 @@ module Yesod.Form.Fields+@@ -1,4 +1,3 @@+-{-# LANGUAGE QuasiQuotes #-}+ {-# LANGUAGE TypeFamilies #-}+ {-# LANGUAGE OverloadedStrings #-}+ {-# LANGUAGE GeneralizedNewtypeDeriving #-}+@@ -18,9 +17,6 @@ module Yesod.Form.Fields+     , timeField+     , htmlField+     , emailField+-    , multiEmailField+-    , searchField+-    , AutoFocus+     , urlField+     , doubleField+     , parseDate+@@ -37,15 +33,11 @@ module Yesod.Form.Fields+     , selectFieldList+     , radioField+     , radioFieldList+-    , checkboxesFieldList+-    , checkboxesField+     , multiSelectField+     , multiSelectFieldList      , Option (..)      , OptionList (..)      , mkOptionList@@ -254,7 +263,7 @@      , optionsPairs      , optionsEnum      ) where-@@ -80,6 +78,15 @@ import Control.Monad (when, unless)+@@ -72,6 +64,15 @@ import Control.Monad (when, unless)  import Data.Either (partitionEithers)  import Data.Maybe (listToMaybe, fromMaybe)  @@ -270,8 +279,15 @@  import qualified Blaze.ByteString.Builder.Html.Utf8 as B  import Blaze.ByteString.Builder (writeByteString, toLazyByteString)  import Blaze.ByteString.Builder.Internal.Write (fromWriteList)-@@ -102,8 +109,6 @@ import Control.Applicative ((<$>), (<|>))+@@ -91,15 +92,12 @@ import qualified Data.Text as T (drop, dropWhile)+ import qualified Data.Text.Read  + import qualified Data.Map as Map+-import Yesod.Persist (selectList, runDB, Filter, SelectOpt, Key, YesodPersist, PersistEntity, PersistQuery)+ import Control.Arrow ((&&&))+ + import Control.Applicative ((<$>), (<|>))+   import Data.Attoparsec.Text (Parser, char, string, digit, skipSpace, endOfInput, parseOnly)   -import Yesod.Persist.Core@@ -279,7 +295,7 @@  defaultFormMessage :: FormMessage -> Text  defaultFormMessage = englishFormMessage  -@@ -115,10 +120,25 @@ intField = Field+@@ -111,10 +109,25 @@ intField = Field              Right (a, "") -> Right a              _ -> Left $ MsgInvalidInteger s  @@ -287,7 +303,7 @@ -$newline never -<input id="#{theId}" name="#{name}" *{attrs} type="number" step=1 :isReq:required="" value="#{showVal val}"> -|]-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nCq++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJJh +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); +              id (toHtml theId);@@ -309,7 +325,7 @@      , fieldEnctype = UrlEncoded      }    where-@@ -133,10 +153,25 @@ doubleField = Field+@@ -128,10 +141,25 @@ doubleField = Field              Right (a, "") -> Right a              _ -> Left $ MsgInvalidNumber s  @@ -317,7 +333,7 @@ -$newline never -<input id="#{theId}" name="#{name}" *{attrs} type="number" step=any :isReq:required="" value="#{showVal val}"> -|]-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nCV++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJJu +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); +              id (toHtml theId);@@ -339,7 +355,7 @@      , fieldEnctype = UrlEncoded      }    where showVal = either id (pack . show)-@@ -147,10 +182,24 @@ $newline never+@@ -139,10 +167,24 @@ $newline never  dayField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Day  dayField = Field      { fieldParse = parseHelper $ parseDate . unpack@@ -347,7 +363,7 @@ -$newline never -<input id="#{theId}" name="#{name}" *{attrs} type="date" :isReq:required="" value="#{showVal val}"> -|]-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nDh++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJJF +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); +              id (toHtml theId);@@ -368,22 +384,20 @@      , fieldEnctype = UrlEncoded      }    where showVal = either id (pack . show)-@@ -179,10 +228,25 @@ timeFieldTypeText = timeFieldOfType "text"- timeFieldOfType :: Monad m => RenderMessage (HandlerSite m) FormMessage => Text -> Field m TimeOfDay- timeFieldOfType inputType = Field+@@ -150,10 +192,23 @@ $newline never+ timeField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m TimeOfDay+ timeField = Field      { fieldParse = parseHelper parseTime -    , fieldView = \theId name attrs val isReq -> toWidget [hamlet| -$newline never--<input id="#{theId}" name="#{name}" *{attrs} type="#{inputType}" :isReq:required="" value="#{showVal val}">+-<input id="#{theId}" name="#{name}" *{attrs} :isReq:required="" value="#{showVal val}"> -|]-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nDN++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJJT +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); +              id (toHtml theId); +              id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\""); +              id (toHtml name);-+              id ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"");-+              id (toHtml inputType); +              id ((Text.Blaze.Internal.preEscapedText . pack) "\""); +              condH +                [(isReq, @@ -398,7 +412,7 @@      , fieldEnctype = UrlEncoded      }    where-@@ -196,10 +260,23 @@ $newline never+@@ -166,10 +221,23 @@ $newline never  htmlField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Html  htmlField = Field      { fieldParse = parseHelper $ Right . preEscapedText . sanitizeBalance@@ -406,7 +420,7 @@ -$newline never -<textarea :isReq:required="" id="#{theId}" name="#{name}" *{attrs}>#{showVal val} -|]-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nEc++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJK4 +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<textarea"); +              condH@@ -426,25 +440,21 @@      , fieldEnctype = UrlEncoded      }    where showVal = either id (pack . renderHtml)-@@ -231,10 +308,22 @@ instance ToHtml Textarea where+@@ -197,10 +265,18 @@ instance ToHtml Textarea where  textareaField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Textarea  textareaField = Field      { fieldParse = parseHelper $ Right . Textarea--    , fieldView = \theId name attrs val isReq -> toWidget [hamlet|+-    , fieldView = \theId name attrs val _isReq -> toWidget [hamlet| -$newline never--<textarea id="#{theId}" name="#{name}" :isReq:required="" *{attrs}>#{either id unTextarea val}+-<textarea id="#{theId}" name="#{name}" *{attrs}>#{either id unTextarea val} -|]-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nEL++    , fieldView = \theId name attrs val _isReq -> toWidget  $     \ _render_aJKe +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<textarea id=\""); +              id (toHtml theId); +              id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\""); +              id (toHtml name); +              id ((Text.Blaze.Internal.preEscapedText . pack) "\"");-+              condH-+                [(isReq, -+                  id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]-+                Nothing; +              id ((attrsToHtml . toAttributes) attrs); +              id ((Text.Blaze.Internal.preEscapedText . pack) ">"); +              id (toHtml (either id unTextarea val));@@ -453,7 +463,7 @@      , fieldEnctype = UrlEncoded      }  -@@ -243,10 +332,19 @@ hiddenField :: (Monad m, PathPiece p, RenderMessage (HandlerSite m) FormMessage)+@@ -208,10 +284,19 @@ hiddenField :: (Monad m, PathPiece p, RenderMessage (HandlerSite m) FormMessage)              => Field m p  hiddenField = Field      { fieldParse = parseHelper $ maybe (Left MsgValueRequired) Right . fromPathPiece@@ -461,7 +471,7 @@ -$newline never -<input type="hidden" id="#{theId}" name="#{name}" *{attrs} value="#{either id toPathPiece val}"> -|]-+    , fieldView = \theId name attrs val _isReq -> toWidget  $     \ _render_a2nFl++    , fieldView = \theId name attrs val _isReq -> toWidget  $     \ _render_aJKo +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) +                   "<input type=\"hidden\" id=\"");@@ -477,7 +487,7 @@      , fieldEnctype = UrlEncoded      }  -@@ -255,20 +353,53 @@ textField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Tex+@@ -219,20 +304,53 @@ textField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Tex  textField = Field      { fieldParse = parseHelper $ Right      , fieldView = \theId name attrs val isReq ->@@ -509,7 +519,7 @@ +      , fieldEnctype = UrlEncoded      }- -- | Creates an input with @type="password"@.+   passwordField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Text  passwordField = Field      { fieldParse = parseHelper $ Right@@ -517,7 +527,7 @@ -$newline never -<input id="#{theId}" name="#{name}" *{attrs} type="password" :isReq:required="" value="#{either id id val}"> -|]-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nG7++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJKH +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); +              id (toHtml theId);@@ -539,7 +549,7 @@      , fieldEnctype = UrlEncoded      }  -@@ -342,10 +473,24 @@ emailField = Field+@@ -304,10 +422,24 @@ emailField = Field              case Email.canonicalizeEmail $ encodeUtf8 s of                  Just e -> Right $ decodeUtf8With lenientDecode e                  Nothing -> Left $ MsgInvalidEmail s@@ -547,7 +557,7 @@ -$newline never -<input id="#{theId}" name="#{name}" *{attrs} type="email" :isReq:required="" value="#{either id id val}"> -|]-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nKu++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJLq +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); +              id (toHtml theId);@@ -568,7 +578,7 @@      , fieldEnctype = UrlEncoded      }  -@@ -360,10 +505,25 @@ multiEmailField = Field+@@ -322,10 +454,25 @@ multiEmailField = Field              in case partitionEithers addrs of                  ([], good) -> Right good                  (bad, _) -> Left $ MsgInvalidEmail $ cat bad@@ -576,7 +586,7 @@ -$newline never -<input id="#{theId}" name="#{name}" *{attrs} type="email" multiple :isReq:required="" value="#{either id cat val}"> -|]-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nL5++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJMd +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); +              id (toHtml theId);@@ -598,7 +608,7 @@      , fieldEnctype = UrlEncoded      }      where-@@ -380,20 +540,74 @@ searchField :: Monad m => RenderMessage (HandlerSite m) FormMessage => AutoFocus+@@ -341,20 +488,75 @@ searchField :: Monad m => RenderMessage (HandlerSite m) FormMessage => AutoFocus  searchField autoFocus = Field      { fieldParse = parseHelper Right      , fieldView = \theId name attrs val isReq -> do@@ -651,31 +661,32 @@ +                 ((Text.Blaze.Internal.preEscapedText . pack) +                    "').focus();}</script>") } +-+          toWidget  $           \ _render_a2nMA-+            -> (Text.Css.CssNoWhitespace . (foldr ($) []))++          toWidget  $           \ _render_aJMx++            -> (Text.Css.CssNoWhitespace++                . (foldr ($) [])) +                 [((++) +                   $ (map +                        Text.Css.TopBlock +                        (((Text.Css.Block +                             {Text.Css.blockSelector = Data.Monoid.mconcat-+                                                                           [(Text.Css.fromText-+                                                                             . Text.Css.pack)-+                                                                              "#",-+                                                                            toCss theId],++                                                                                 [(Text.Css.fromText++                                                                                   . Text.Css.pack)++                                                                                    "#",++                                                                                  toCss theId], +                              Text.Css.blockAttrs = (Prelude.concat-+                                                                       $ ([Text.Css.Attr-+                                                                             (Data.Monoid.mconcat-+                                                                                [(Text.Css.fromText-+                                                                                  . Text.Css.pack)-+                                                                                   "-webkit-appearance"])-+                                                                             (Data.Monoid.mconcat-+                                                                                [(Text.Css.fromText-+                                                                                  . Text.Css.pack)-+                                                                                   "textfield"])]-+                                                                          :-+                                                                            (map-+                                                                               Text.Css.mixinAttrs-+                                                                               []))),++                                                                             $ ([Text.Css.Attr++                                                                                   (Data.Monoid.mconcat++                                                                                      [(Text.Css.fromText++                                                                                        . Text.Css.pack)++                                                                                         "-webkit-appearance"])++                                                                                   (Data.Monoid.mconcat++                                                                                      [(Text.Css.fromText++                                                                                        . Text.Css.pack)++                                                                                         "textfield"])]++                                                                                :++                                                                                  (map++                                                                                     Text.Css.mixinAttrs++                                                                                     []))), +                              Text.Css.blockBlocks = (), +                              Text.Css.blockMixins = ()}               :) +                          . ((foldr (.) id [])@@ -684,8 +695,8 @@ +      , fieldEnctype = UrlEncoded      }- -- | Creates an input with @type="url"@, validating the URL according to RFC3986.-@@ -404,7 +618,28 @@ urlField = Field+ +@@ -365,7 +567,28 @@ urlField = Field              Nothing -> Left $ MsgInvalidUrl s              Just _ -> Right s      , fieldView = \theId name attrs val isReq ->@@ -715,7 +726,7 @@      , fieldEnctype = UrlEncoded      }  -@@ -423,18 +658,54 @@ selectField :: (Eq a, RenderMessage site FormMessage)+@@ -378,18 +601,54 @@ selectField :: (Eq a, RenderMessage site FormMessage)              => HandlerT site IO (OptionList a)              -> Field (HandlerT site IO) a  selectField = selectFieldHelper@@ -758,8 +769,8 @@ +           ((Text.Blaze.Internal.preEscapedText . pack) ">"); +         ((Control.Monad.liftM (toHtml .) getMessageRender) +          >>=-+            (\ urender_a2nOk-+               -> (asWidgetT . toWidget) (urender_a2nOk MsgSelectNone)));++            (\ urender_aJMX++               -> (asWidgetT . toWidget) (urender_aJMX MsgSelectNone))); +         (asWidgetT . toWidget) +           ((Text.Blaze.Internal.preEscapedText . pack) "</option>") }) + -- onOpt@@ -780,9 +791,9 @@ +           ((Text.Blaze.Internal.preEscapedText . pack) "</option>") }) + -- inside  - -- | Creates a @\<select>@ tag for selecting multiple options.  multiSelectFieldList :: (Eq a, RenderMessage site FormMessage, RenderMessage site msg)-@@ -459,11 +730,45 @@ multiSelectField ioptlist =+                      => [(msg, a)]+@@ -412,11 +671,45 @@ multiSelectField ioptlist =      view theId name attrs val isReq = do          opts <- fmap olOptions $ handlerToWidget ioptlist          let selOpts = map (id &&& (optselected val)) opts@@ -810,20 +821,20 @@ +             (asWidgetT . toWidget) +               ((Text.Blaze.Internal.preEscapedText . pack) ">"); +             Data.Foldable.mapM_-+               (\ (opt_a2nPy, optsel_a2nPz)++               (\ (opt_aJNs, optsel_aJNt) +                  -> do { (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . pack) "<option value=\"");-+                          (asWidgetT . toWidget) (toHtml (optionExternalValue opt_a2nPy));++                          (asWidgetT . toWidget) (toHtml (optionExternalValue opt_aJNs)); +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . pack) "\""); +                          condH-+                            [(optsel_a2nPz, ++                            [(optsel_aJNt,  +                              (asWidgetT . toWidget) +                                ((Text.Blaze.Internal.preEscapedText . pack) " selected"))] +                            Nothing; +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . pack) ">");-+                          (asWidgetT . toWidget) (toHtml (optionDisplay opt_a2nPy));++                          (asWidgetT . toWidget) (toHtml (optionDisplay opt_aJNs)); +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . pack) "</option>") }) +               selOpts;@@ -833,7 +844,7 @@          where              optselected (Left _) _ = False              optselected (Right vals) opt = (optionInternalValue opt) `elem` vals-@@ -489,37 +794,115 @@ checkboxesField ioptlist = (multiSelectField ioptlist)+@@ -439,54 +732,196 @@ checkboxesField ioptlist = (multiSelectField ioptlist)              opts <- fmap olOptions $ handlerToWidget ioptlist              let optselected (Left _) _ = False                  optselected (Right vals) opt = (optionInternalValue opt) `elem` vals@@ -850,25 +861,25 @@ +                 (asWidgetT . toWidget) +                   ((Text.Blaze.Internal.preEscapedText . pack) "\">"); +                 Data.Foldable.mapM_-+                   (\ opt_a2nQo++                   (\ opt_aJNI +                      -> do { (asWidgetT . toWidget) +                                ((Text.Blaze.Internal.preEscapedText . pack) +                                   "<label><input type=\"checkbox\" name=\""); +                              (asWidgetT . toWidget) (toHtml name); +                              (asWidgetT . toWidget) +                                ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"");-+                              (asWidgetT . toWidget) (toHtml (optionExternalValue opt_a2nQo));++                              (asWidgetT . toWidget) (toHtml (optionExternalValue opt_aJNI)); +                              (asWidgetT . toWidget) +                                ((Text.Blaze.Internal.preEscapedText . pack) "\""); +                              condH-+                                [(optselected val opt_a2nQo, ++                                [(optselected val opt_aJNI,  +                                  (asWidgetT . toWidget) +                                    ((Text.Blaze.Internal.preEscapedText . pack) " checked"))] +                                Nothing; +                              (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs); +                              (asWidgetT . toWidget) +                                ((Text.Blaze.Internal.preEscapedText . pack) ">");-+                              (asWidgetT . toWidget) (toHtml (optionDisplay opt_a2nQo));++                              (asWidgetT . toWidget) (toHtml (optionDisplay opt_aJNI)); +                              (asWidgetT . toWidget) +                                ((Text.Blaze.Internal.preEscapedText . pack) "</label>") }) +                   opts;@@ -876,7 +887,7 @@ +                   ((Text.Blaze.Internal.preEscapedText . pack) "</span>") } +      }- -- | Creates an input with @type="radio"@ for selecting one option.+   radioField :: (Eq a, RenderMessage site FormMessage)             => HandlerT site IO (OptionList a)             -> Field (HandlerT site IO) a@@ -931,8 +942,8 @@ +           ((Text.Blaze.Internal.preEscapedText . pack) ">"); +         ((Control.Monad.liftM (toHtml .) getMessageRender) +          >>=-+            (\ urender_a2nR7-+               -> (asWidgetT . toWidget) (urender_a2nR7 MsgSelectNone)));++            (\ urender_aJNY++               -> (asWidgetT . toWidget) (urender_aJNY MsgSelectNone))); +         (asWidgetT . toWidget) +           ((Text.Blaze.Internal.preEscapedText . pack) "</div></label>") }) +@@ -972,9 +983,6 @@ +           ((Text.Blaze.Internal.preEscapedText . pack) "</div></label>") }) +  - -- | Creates a group of radio buttons to answer the question given in the message. Radio buttons are used to allow differentiating between an empty response (@Nothing@) and a no response (@Just False@). Consider using the simpler 'checkBoxField' if you don't need to make this distinction.- ---@@ -531,19 +914,83 @@ $newline never  boolField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Bool  boolField = Field        { fieldParse = \e _ -> return $ boolParser e@@ -984,9 +992,6 @@ -      <input id=#{theId}-none *{attrs} type=radio name=#{name} value=none checked> -      <label for=#{theId}-none>_{MsgSelectNone} -----<input id=#{theId}-yes *{attrs} type=radio name=#{name} value=yes :showVal id val:checked>--<label for=#{theId}-yes>_{MsgBoolYes} +      , fieldView = \theId name attrs val isReq ->       do { condH +             [(not isReq,  +               do { (asWidgetT . toWidget)@@ -1007,8 +1012,8 @@ +                      ((Text.Blaze.Internal.preEscapedText . pack) "-none\">"); +                    ((Control.Monad.liftM (toHtml .) getMessageRender) +                     >>=-+                       (\ urender_a2nSk-+                          -> (asWidgetT . toWidget) (urender_a2nSk MsgSelectNone)));++                       (\ urender_aJOn++                          -> (asWidgetT . toWidget) (urender_aJOn MsgSelectNone))); +                    (asWidgetT . toWidget) +                      ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })] +             Nothing;@@ -1034,8 +1039,8 @@ +             ((Text.Blaze.Internal.preEscapedText . pack) "-yes\">"); +           ((Control.Monad.liftM (toHtml .) getMessageRender) +            >>=-+              (\ urender_a2nSl-+                 -> (asWidgetT . toWidget) (urender_a2nSl MsgBoolYes)));++              (\ urender_aJOo++                 -> (asWidgetT . toWidget) (urender_aJOo MsgBoolYes))); +           (asWidgetT . toWidget) +             ((Text.Blaze.Internal.preEscapedText . pack) +                "</label><input id=\"");@@ -1059,18 +1064,21 @@ +             ((Text.Blaze.Internal.preEscapedText . pack) "-no\">"); +           ((Control.Monad.liftM (toHtml .) getMessageRender) +            >>=-+              (\ urender_a2nSm-+                 -> (asWidgetT . toWidget) (urender_a2nSm MsgBoolNo)));++              (\ urender_aJOp++                 -> (asWidgetT . toWidget) (urender_aJOp MsgBoolNo))); +           (asWidgetT . toWidget) +             ((Text.Blaze.Internal.preEscapedText . pack) "</label>") }  +-<input id=#{theId}-yes *{attrs} type=radio name=#{name} value=yes :showVal id val:checked>+-<label for=#{theId}-yes>_{MsgBoolYes}+- -<input id=#{theId}-no *{attrs} type=radio name=#{name} value=no :showVal not val:checked> -<label for=#{theId}-no>_{MsgBoolNo} -|]      , fieldEnctype = UrlEncoded      }    where-@@ -570,10 +1017,24 @@ $newline never+@@ -512,10 +947,24 @@ $newline never  checkBoxField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Bool  checkBoxField = Field      { fieldParse = \e _ -> return $ checkBoxParser e@@ -1099,31 +1107,25 @@      , fieldEnctype = UrlEncoded      }  -@@ -619,66 +1080,6 @@ optionsPairs opts = do+@@ -559,69 +1008,6 @@ optionsPairs opts = do  optionsEnum :: (MonadHandler m, Show a, Enum a, Bounded a) => m (OptionList a)  optionsEnum = optionsPairs $ map (\x -> (pack $ show x, x)) [minBound..maxBound]  ---- | Selects a list of 'Entity's with the given 'Filter' and 'SelectOpt's. The @(a -> msg)@ function is then used to derive the display value for an 'OptionList'. Example usage:-------- > Country---- >    name Text---- >    deriving Eq -- Must derive Eq-------- > data CountryForm = CountryForm---- >   { country :: Entity Country---- >   }---- >---- > countryNameForm :: AForm Handler CountryForm---- > countryNameForm = CountryForm---- >         <$> areq (selectField countries) "Which country do you live in?" Nothing---- >         where---- >           countries = optionsPersist [] [Asc CountryName] countryName+-#if MIN_VERSION_persistent(2, 0, 0) -optionsPersist :: ( YesodPersist site, PersistEntity a -                  , PersistQuery (PersistEntityBackend a) -                  , PathPiece (Key a) -                  , RenderMessage site msg -                  , YesodPersistBackend site ~ PersistEntityBackend a -                  )+-#else+-optionsPersist :: ( YesodPersist site, PersistEntity a+-                  , PersistQuery (YesodPersistBackend site (HandlerT site IO))+-                  , PathPiece (Key a)+-                  , PersistEntityBackend a ~ PersistMonadBackend (YesodPersistBackend site (HandlerT site IO))+-                  , RenderMessage site msg+-                  )+-#endif -               => [Filter a] -               -> [SelectOpt a] -               -> (a -> msg)@@ -1137,10 +1139,11 @@ -        , optionExternalValue = toPathPiece key -        }) pairs ----- | An alternative to 'optionsPersist' which returns just the 'Key' instead of---- the entire 'Entity'.+--- | An alternative to 'optionsPersist' which returns just the @Key@ instead of+--- the entire @Entity@. --- --- Since 1.3.2+-#if MIN_VERSION_persistent(2, 0, 0) -optionsPersistKey -  :: (YesodPersist site -     , PersistEntity a@@ -1149,6 +1152,15 @@ -     , RenderMessage site msg -     , YesodPersistBackend site ~ PersistEntityBackend a -     )+-#else+-optionsPersistKey+-  :: (YesodPersist site+-     , PersistEntity a+-     , PersistQuery (YesodPersistBackend site (HandlerT site IO))+-     , PathPiece (Key a)+-     , RenderMessage site msg+-     , PersistEntityBackend a ~ PersistMonadBackend (YesodDB site))+-#endif -  => [Filter a] -  -> [SelectOpt a] -  -> (a -> msg)@@ -1162,18 +1174,17 @@ -        , optionInternalValue = key -        , optionExternalValue = toPathPiece key -        }) pairs--+   selectFieldHelper          :: (Eq a, RenderMessage site FormMessage)-         => (Text -> Text -> [(Text, Text)] -> WidgetT site IO () -> WidgetT site IO ())-@@ -722,9 +1123,21 @@ fileField = Field+@@ -665,9 +1051,21 @@ fileField = Field          case files of              [] -> Right Nothing              file:_ -> Right $ Just file -    , fieldView = \id' name attrs _ isReq -> toWidget [hamlet| -            <input id=#{id'} name=#{name} *{attrs} type=file :isReq:required> -        |]-+    , fieldView = \id' name attrs _ isReq -> toWidget  $     \ _render_a2nUV++    , fieldView = \id' name attrs _ isReq -> toWidget  $     \ _render_aJPt +      -> do { id +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); +              id (toHtml id');@@ -1191,7 +1202,7 @@      , fieldEnctype = Multipart      }  -@@ -751,10 +1164,19 @@ fileAFormReq fs = AForm $ \(site, langs) menvs ints -> do+@@ -694,10 +1092,19 @@ fileAFormReq fs = AForm $ \(site, langs) menvs ints -> do              { fvLabel = toHtml $ renderMessage site langs $ fsLabel fs              , fvTooltip = fmap (toHtml . renderMessage site langs) $ fsTooltip fs              , fvId = id'@@ -1215,7 +1226,7 @@              , fvErrors = errs              , fvRequired = True              }-@@ -783,10 +1205,19 @@ fileAFormOpt fs = AForm $ \(master, langs) menvs ints -> do+@@ -726,10 +1133,19 @@ fileAFormOpt fs = AForm $ \(master, langs) menvs ints -> do              { fvLabel = toHtml $ renderMessage master langs $ fsLabel fs              , fvTooltip = fmap (toHtml . renderMessage master langs) $ fsTooltip fs              , fvId = id'@@ -1240,26 +1251,28 @@              , fvRequired = False              } diff --git a/Yesod/Form/Functions.hs b/Yesod/Form/Functions.hs-index 0d83b79..61e9b66 100644+index 9e6abaf..0c2a0ce 100644 --- a/Yesod/Form/Functions.hs +++ b/Yesod/Form/Functions.hs-@@ -60,12 +60,14 @@ import Text.Blaze (Markup, toMarkup)+@@ -60,12 +60,16 @@ import Text.Blaze (Markup, toMarkup)  #define toHtml toMarkup  import Yesod.Core  import Network.Wai (requestMethod) -import Text.Hamlet (shamlet)++--import Text.Hamlet (shamlet)  import Data.Monoid (mempty)  import Data.Maybe (listToMaybe, fromMaybe)  import qualified Data.Map as Map  import qualified Data.Text.Encoding as TE  import Control.Arrow (first)-+import qualified Text.Hamlet +import qualified Text.Blaze.Internal++import qualified Yesod.Core.Widget +import qualified Data.Foldable++import qualified Text.Hamlet    -- | Get a unique identifier.  newFormIdent :: Monad m => MForm m Text-@@ -217,7 +219,14 @@ postHelper form env = do+@@ -217,7 +221,14 @@ postHelper form env = do      let token =              case reqToken req of                  Nothing -> mempty@@ -1275,7 +1288,7 @@      m <- getYesod      langs <- languages      ((res, xml), enctype) <- runFormGeneric (form token) m langs env-@@ -298,7 +307,12 @@ getHelper :: MonadHandler m+@@ -297,7 +308,12 @@ getHelper :: MonadHandler m            -> Maybe (Env, FileEnv)            -> m (a, Enctype)  getHelper form env = do@@ -1289,7 +1302,7 @@      langs <- languages      m <- getYesod      runFormGeneric (form fragment) m langs env-@@ -333,10 +347,15 @@ identifyForm+@@ -332,10 +348,15 @@ identifyForm  identifyForm identVal form = \fragment -> do      -- Create hidden <input>.      let fragment' =@@ -1309,7 +1322,7 @@        -- Check if we got its value back.      mp <- askParams-@@ -366,22 +385,70 @@ renderTable, renderDivs, renderDivsNoLabels :: Monad m => FormRender m a+@@ -365,22 +386,70 @@ renderTable, renderDivs, renderDivsNoLabels :: Monad m => FormRender m a  renderTable aform fragment = do      (res, views') <- aFormToForm aform      let views = views' []@@ -1332,20 +1345,20 @@ +    let widget =     do { Text.Hamlet.condH +           [(null views, (asWidgetT . toWidget) (toHtml fragment))] Nothing; +         Data.Foldable.mapM_-+           (\ (isFirst_aNqW, view_aNqX)++           (\ (isFirst_ab5u, view_ab5v) +              -> do { (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) "<tr"); +                      Text.Hamlet.condH-+                        [(or [fvRequired view_aNqX, not (fvRequired view_aNqX)], ++                        [(or [fvRequired view_ab5v, not (fvRequired view_ab5v)],  +                          do { (asWidgetT . toWidget) +                                 ((Text.Blaze.Internal.preEscapedText . pack) " class=\""); +                               Text.Hamlet.condH-+                                 [(fvRequired view_aNqX, ++                                 [(fvRequired view_ab5v,  +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "required "))] +                                 Nothing; +                               Text.Hamlet.condH-+                                 [(not (fvRequired view_aNqX), ++                                 [(not (fvRequired view_ab5v),  +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "optional"))] +                                 Nothing;@@ -1355,37 +1368,37 @@ +                      (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) "><td>"); +                      Text.Hamlet.condH-+                        [(isFirst_aNqW, (asWidgetT . toWidget) (toHtml fragment))] Nothing;++                        [(isFirst_ab5u, (asWidgetT . toWidget) (toHtml fragment))] Nothing; +                      (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) "<label for=\"");-+                      (asWidgetT . toWidget) (toHtml (fvId view_aNqX));++                      (asWidgetT . toWidget) (toHtml (fvId view_ab5v)); +                      (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) "\">");-+                      (asWidgetT . toWidget) (toHtml (fvLabel view_aNqX));++                      (asWidgetT . toWidget) (toHtml (fvLabel view_ab5v)); +                      (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) "</label>"); +                      Text.Hamlet.maybeH-+                        (fvTooltip view_aNqX)-+                        (\ tt_aNqY++                        (fvTooltip view_ab5v)++                        (\ tt_ab5w +                           -> do { (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) +                                        "<div class=\"tooltip\">");-+                                   (asWidgetT . toWidget) (toHtml tt_aNqY);++                                   (asWidgetT . toWidget) (toHtml tt_ab5w); +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</div>") }) +                        Nothing; +                      (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) "</td><td>");-+                      (asWidgetT . toWidget) (fvInput view_aNqX);++                      (asWidgetT . toWidget) (fvInput view_ab5v); +                      (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) "</td>"); +                      Text.Hamlet.maybeH-+                        (fvErrors view_aNqX)-+                        (\ err_aNqZ++                        (fvErrors view_ab5v)++                        (\ err_ab5x +                           -> do { (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) +                                        "<td class=\"errors\">");-+                                   (asWidgetT . toWidget) (toHtml err_aNqZ);++                                   (asWidgetT . toWidget) (toHtml err_ab5x); +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</td>") }) +                        Nothing;@@ -1396,7 +1409,7 @@      return (res, widget)    where      addIsFirst [] = []-@@ -397,19 +464,66 @@ renderDivsMaybeLabels :: Monad m => Bool -> FormRender m a+@@ -396,19 +465,66 @@ renderDivsMaybeLabels :: Monad m => Bool -> FormRender m a  renderDivsMaybeLabels withLabels aform fragment = do      (res, views') <- aFormToForm aform      let views = views' []@@ -1415,20 +1428,20 @@ -|] +    let widget =     do { (asWidgetT . toWidget) (toHtml fragment); +         Data.Foldable.mapM_-+           (\ view_aNsz++           (\ view_ab5K +              -> do { (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) "<div"); +                      Text.Hamlet.condH-+                        [(or [fvRequired view_aNsz, not (fvRequired view_aNsz)], ++                        [(or [fvRequired view_ab5K, not (fvRequired view_ab5K)],  +                          do { (asWidgetT . toWidget) +                                 ((Text.Blaze.Internal.preEscapedText . pack) " class=\""); +                               Text.Hamlet.condH-+                                 [(fvRequired view_aNsz, ++                                 [(fvRequired view_ab5K,  +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "required "))] +                                 Nothing; +                               Text.Hamlet.condH-+                                 [(not (fvRequired view_aNsz), ++                                 [(not (fvRequired view_ab5K),  +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "optional"))] +                                 Nothing;@@ -1441,31 +1454,31 @@ +                        [(withLabels,  +                          do { (asWidgetT . toWidget) +                                 ((Text.Blaze.Internal.preEscapedText . pack) "<label for=\"");-+                               (asWidgetT . toWidget) (toHtml (fvId view_aNsz));++                               (asWidgetT . toWidget) (toHtml (fvId view_ab5K)); +                               (asWidgetT . toWidget) +                                 ((Text.Blaze.Internal.preEscapedText . pack) "\">");-+                               (asWidgetT . toWidget) (toHtml (fvLabel view_aNsz));++                               (asWidgetT . toWidget) (toHtml (fvLabel view_ab5K)); +                               (asWidgetT . toWidget) +                                 ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })] +                        Nothing; +                      Text.Hamlet.maybeH-+                        (fvTooltip view_aNsz)-+                        (\ tt_aNsL++                        (fvTooltip view_ab5K)++                        (\ tt_ab5L +                           -> do { (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) +                                        "<div class=\"tooltip\">");-+                                   (asWidgetT . toWidget) (toHtml tt_aNsL);++                                   (asWidgetT . toWidget) (toHtml tt_ab5L); +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</div>") }) +                        Nothing;-+                      (asWidgetT . toWidget) (fvInput view_aNsz);++                      (asWidgetT . toWidget) (fvInput view_ab5K); +                      Text.Hamlet.maybeH-+                        (fvErrors view_aNsz)-+                        (\ err_aNsP++                        (fvErrors view_ab5K)++                        (\ err_ab5M +                           -> do { (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) +                                        "<div class=\"errors\">");-+                                   (asWidgetT . toWidget) (toHtml err_aNsP);++                                   (asWidgetT . toWidget) (toHtml err_ab5M); +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</div>") }) +                        Nothing;@@ -1476,7 +1489,7 @@      return (res, widget)    -- | Render a form using Bootstrap v2-friendly shamlet syntax.-@@ -437,19 +551,62 @@ renderBootstrap2 aform fragment = do+@@ -436,19 +552,62 @@ renderBootstrap2 aform fragment = do      let views = views' []          has (Just _) = True          has Nothing  = False@@ -1495,53 +1508,53 @@ -                |] +    let widget =     do { (asWidgetT . toWidget) (toHtml fragment); +         Data.Foldable.mapM_-+           (\ view_aNw8++           (\ view_ab5Y +              -> do { (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) +                           "<div class=\"control-group clearfix "); +                      Text.Hamlet.condH-+                        [(fvRequired view_aNw8, ++                        [(fvRequired view_ab5Y,  +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . pack) "required "))] +                        Nothing; +                      Text.Hamlet.condH-+                        [(not (fvRequired view_aNw8), ++                        [(not (fvRequired view_ab5Y),  +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . pack) "optional "))] +                        Nothing; +                      Text.Hamlet.condH-+                        [(has (fvErrors view_aNw8), ++                        [(has (fvErrors view_ab5Y),  +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . pack) "error"))] +                        Nothing; +                      (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) +                           "\"><label class=\"control-label\" for=\"");-+                      (asWidgetT . toWidget) (toHtml (fvId view_aNw8));++                      (asWidgetT . toWidget) (toHtml (fvId view_ab5Y)); +                      (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) "\">");-+                      (asWidgetT . toWidget) (toHtml (fvLabel view_aNw8));++                      (asWidgetT . toWidget) (toHtml (fvLabel view_ab5Y)); +                      (asWidgetT . toWidget) +                        ((Text.Blaze.Internal.preEscapedText . pack) +                           "</label><div class=\"controls input\">");-+                      (asWidgetT . toWidget) (fvInput view_aNw8);++                      (asWidgetT . toWidget) (fvInput view_ab5Y); +                      Text.Hamlet.maybeH-+                        (fvTooltip view_aNw8)-+                        (\ tt_aNw9++                        (fvTooltip view_ab5Y)++                        (\ tt_ab5Z +                           -> do { (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) +                                        "<span class=\"help-block\">");-+                                   (asWidgetT . toWidget) (toHtml tt_aNw9);++                                   (asWidgetT . toWidget) (toHtml tt_ab5Z); +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</span>") }) +                        Nothing; +                      Text.Hamlet.maybeH-+                        (fvErrors view_aNw8)-+                        (\ err_aNwa++                        (fvErrors view_ab5Y)++                        (\ err_ab60 +                           -> do { (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) +                                        "<span class=\"help-block\">");-+                                   (asWidgetT . toWidget) (toHtml err_aNwa);++                                   (asWidgetT . toWidget) (toHtml err_ab60); +                                   (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</span>") }) +                        Nothing;@@ -1553,15 +1566,16 @@    -- | Deprecated synonym for 'renderBootstrap2'. diff --git a/Yesod/Form/Jquery.hs b/Yesod/Form/Jquery.hs-index 63e3d57..47503c2 100644+index 362eb8a..1df9966 100644 --- a/Yesod/Form/Jquery.hs +++ b/Yesod/Form/Jquery.hs-@@ -18,11 +18,23 @@ import Yesod.Core+@@ -17,11 +17,23 @@ import Yesod.Core  import Yesod.Form  import Data.Time (Day)  import Data.Default -import Text.Hamlet (shamlet) -import Text.Julius (julius, rawJS)++--import Text.Hamlet (shamlet) +import Text.Julius (rawJS)  import Data.Text (Text, pack, unpack)  import Data.Monoid (mconcat)@@ -1577,27 +1591,25 @@ +import qualified Text.Julius +import qualified Data.Text.Lazy.Builder +import qualified Text.Shakespeare-+import qualified Data.Text.Lazy.Builder as Data.Text.Internal.Builder +  -- | Gets the Google hosted jQuery UI 1.8 CSS file with the given theme.  googleHostedJqueryUiCss :: Text -> Text  googleHostedJqueryUiCss theme = mconcat-@@ -71,27 +83,54 @@ jqueryDayField' jds inputType = Field+@@ -61,27 +73,59 @@ jqueryDayField jds = Field                . readMay                . unpack      , fieldView = \theId name attrs val isReq -> do -        toWidget [shamlet| -$newline never--<input id="#{theId}" name="#{name}" *{attrs} type="#{inputType}" :isReq:required="" value="#{showVal val}">+-<input id="#{theId}" name="#{name}" *{attrs} type="date" :isReq:required="" value="#{showVal val}"> -|] +        toWidget  $         do { id +               ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); +             id (toHtml theId); +             id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\""); +             id (toHtml name);-+             id ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"");-+             id (toHtml inputType);-+             id ((Text.Blaze.Internal.preEscapedText . pack) "\"");++             id++               ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"date\""); +             Text.Hamlet.condH +               [(isReq,  +                 id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]@@ -1626,36 +1638,42 @@ -}); -|] +        toWidget  $         Text.Julius.asJavascriptUrl-+          (\ _render_a3iGM++          (\ _render_a2l4S +             -> mconcat +                  [Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')-+                        "\n\n$(function(){\n\n    var i = document.getElementById(\""),++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack')++                        "\n$(function(){\n    var i = document.getElementById(\""), +                   Text.Julius.toJavascript (rawJS theId), +                   Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')-+                        "\");\n\n    if (i.type != \"date\") {\n\n        $(i).datepicker({\n\n            dateFormat:'yy-mm-dd',\n\n            changeMonth:"),++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack')++                        "\");\n    if (i.type != \"date\") {\n        $(i).datepicker({\n            dateFormat:'yy-mm-dd',\n            changeMonth:"), +                   Text.Julius.toJavascript (jsBool (jdsChangeMonth jds)), +                   Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')-+                        ",\n\n            changeYear:"),++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack')++                        ",\n            changeYear:"), +                   Text.Julius.toJavascript (jsBool (jdsChangeYear jds)), +                   Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')-+                        ",\n\n            numberOfMonths:"),++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack')++                        ",\n            numberOfMonths:"), +                   Text.Julius.toJavascript (rawJS (mos (jdsNumberOfMonths jds))), +                   Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')-+                        ",\n\n            yearRange:"),++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack')++                        ",\n            yearRange:"), +                   Text.Julius.toJavascript (toJSON (jdsYearRange jds)), +                   Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')-+                        "\n\n        });\n\n    }\n\n});")])++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack')++                        "\n        });\n    }\n});")]) +      , fieldEnctype = UrlEncoded      }    where-@@ -118,16 +157,47 @@ jqueryAutocompleteField' :: (RenderMessage site FormMessage, YesodJquery site)+@@ -108,16 +152,52 @@ jqueryAutocompleteField' :: (RenderMessage site FormMessage, YesodJquery site)  jqueryAutocompleteField' minLen src = Field      { fieldParse = parseHelper $ Right      , fieldView = \theId name attrs val isReq -> do@@ -1688,35 +1706,40 @@ -$(function(){$("##{rawJS theId}").autocomplete({source:"@{src}",minLength:#{toJSON minLen}})}); -|] +        toWidget  $         Text.Julius.asJavascriptUrl-+          (\ _render_a3iHO++          (\ _render_a2l58 +             -> mconcat +                  [Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')-+                        "\n\n$(function(){$(\"#"),++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack')++                        "\n$(function(){$(\"#"), +                   Text.Julius.toJavascript (rawJS theId), +                   Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack') +                        "\").autocomplete({source:\""), +                   Text.Julius.Javascript-+                     (Data.Text.Internal.Builder.fromText (_render_a3iHO src [])),++                     (Data.Text.Lazy.Builder.fromText++                        (_render_a2l58 src [])), +                   Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack') +                        "\",minLength:"), +                   Text.Julius.toJavascript (toJSON minLen), +                   Text.Julius.Javascript-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++                     ((Data.Text.Lazy.Builder.fromText++                       . Text.Shakespeare.pack') +                        "})});")]) +      , fieldEnctype = UrlEncoded      }   diff --git a/Yesod/Form/MassInput.hs b/Yesod/Form/MassInput.hs-index a2b434d..29b45b5 100644+index a2b434d..75eb484 100644 --- a/Yesod/Form/MassInput.hs +++ b/Yesod/Form/MassInput.hs-@@ -22,6 +22,16 @@ import Data.Traversable (sequenceA)- import qualified Data.Map as Map- import Data.Maybe (listToMaybe)+@@ -9,6 +9,16 @@ module Yesod.Form.MassInput+     , massTable+     ) where   +import qualified Data.Text +import qualified Text.Blaze as Text.Blaze.Internal@@ -1728,9 +1751,9 @@ +import qualified Data.Foldable +import qualified Control.Monad +- down :: Monad m => Int -> MForm m ()- down 0 = return ()- down i | i < 0 = error "called down with a negative number"+ import Yesod.Form.Types+ import Yesod.Form.Functions+ import Yesod.Form.Fields (checkBoxField) @@ -70,16 +80,27 @@ inputList label fixXml single mdef = formToAForm $ do          { fvLabel = label          , fvTooltip = Nothing@@ -1749,7 +1772,7 @@ +             (asWidgetT . toWidget) +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<p>"); +             Data.Foldable.mapM_-+               (\ xml_a3hPg -> (asWidgetT . toWidget) xml_a3hPg) xmls;++               (\ xml_a1yM1 -> (asWidgetT . toWidget) xml_a1yM1) xmls; +             (asWidgetT . toWidget) +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                  "<input class=\"count\" type=\"hidden\" name=\"");@@ -1806,27 +1829,27 @@ -                    <div .errors>#{err} -|] +massDivs viewss = Data.Foldable.mapM_-+  (\ views_a3hPz++  (\ views_a1yMm +     -> do { (asWidgetT . toWidget) +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                  "<fieldset>"); +             Data.Foldable.mapM_-+               (\ view_a3hPA++               (\ view_a1yMn +                  -> do { (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<div"); +                          Text.Hamlet.condH-+                            [(or [fvRequired view_a3hPA, not (fvRequired view_a3hPA)], ++                            [(or [fvRequired view_a1yMn, not (fvRequired view_a1yMn)],  +                              do { (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                        " class=\""); +                                   Text.Hamlet.condH-+                                     [(fvRequired view_a3hPA, ++                                     [(fvRequired view_a1yMn,  +                                       (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "required "))] +                                     Nothing; +                                   Text.Hamlet.condH-+                                     [(not (fvRequired view_a3hPA), ++                                     [(not (fvRequired view_a1yMn),  +                                       (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "optional"))]@@ -1838,38 +1861,38 @@ +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                               "><label for=\"");-+                          (asWidgetT . toWidget) (toHtml (fvId view_a3hPA));++                          (asWidgetT . toWidget) (toHtml (fvId view_a1yMn)); +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "\">");-+                          (asWidgetT . toWidget) (toHtml (fvLabel view_a3hPA));++                          (asWidgetT . toWidget) (toHtml (fvLabel view_a1yMn)); +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</label>"); +                          Text.Hamlet.maybeH-+                            (fvTooltip view_a3hPA)-+                            (\ tt_a3hPB++                            (fvTooltip view_a1yMn)++                            (\ tt_a1yMo +                               -> do { (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "<div class=\"tooltip\">");-+                                       (asWidgetT . toWidget) (toHtml tt_a3hPB);++                                       (asWidgetT . toWidget) (toHtml tt_a1yMo); +                                       (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "</div>") }) +                            Nothing;-+                          (asWidgetT . toWidget) (fvInput view_a3hPA);++                          (asWidgetT . toWidget) (fvInput view_a1yMn); +                          Text.Hamlet.maybeH-+                            (fvErrors view_a3hPA)-+                            (\ err_a3hPC++                            (fvErrors view_a1yMn)++                            (\ err_a1yMp +                               -> do { (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "<div class=\"errors\">");-+                                       (asWidgetT . toWidget) (toHtml err_a3hPC);++                                       (asWidgetT . toWidget) (toHtml err_a1yMp); +                                       (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "</div>") }) +                            Nothing; +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</div>") })-+               views_a3hPz;++               views_a1yMm; +             (asWidgetT . toWidget) +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                  "</fieldset>") })@@ -1877,27 +1900,27 @@ + + +massTable viewss = Data.Foldable.mapM_-+  (\ views_a3hPH++  (\ views_a1yMv +     -> do { (asWidgetT . toWidget) +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                  "<fieldset><table>"); +             Data.Foldable.mapM_-+               (\ view_a3hPI++               (\ view_a1yMw +                  -> do { (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<tr"); +                          Text.Hamlet.condH-+                            [(or [fvRequired view_a3hPI, not (fvRequired view_a3hPI)], ++                            [(or [fvRequired view_a1yMw, not (fvRequired view_a1yMw)],  +                              do { (asWidgetT . toWidget) +                                     ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                        " class=\""); +                                   Text.Hamlet.condH-+                                     [(fvRequired view_a3hPI, ++                                     [(fvRequired view_a1yMw,  +                                       (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "required "))] +                                     Nothing; +                                   Text.Hamlet.condH-+                                     [(not (fvRequired view_a3hPI), ++                                     [(not (fvRequired view_a1yMw),  +                                       (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "optional"))]@@ -1909,19 +1932,19 @@ +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                               "><td><label for=\"");-+                          (asWidgetT . toWidget) (toHtml (fvId view_a3hPI));++                          (asWidgetT . toWidget) (toHtml (fvId view_a1yMw)); +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "\">");-+                          (asWidgetT . toWidget) (toHtml (fvLabel view_a3hPI));++                          (asWidgetT . toWidget) (toHtml (fvLabel view_a1yMw)); +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</label>"); +                          Text.Hamlet.maybeH-+                            (fvTooltip view_a3hPI)-+                            (\ tt_a3hPJ++                            (fvTooltip view_a1yMw)++                            (\ tt_a1yMx +                               -> do { (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "<div class=\"tooltip\">");-+                                       (asWidgetT . toWidget) (toHtml tt_a3hPJ);++                                       (asWidgetT . toWidget) (toHtml tt_a1yMx); +                                       (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "</div>") })@@ -1929,23 +1952,23 @@ +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                               "</td><td>");-+                          (asWidgetT . toWidget) (fvInput view_a3hPI);++                          (asWidgetT . toWidget) (fvInput view_a1yMw); +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</td>"); +                          Text.Hamlet.maybeH-+                            (fvErrors view_a3hPI)-+                            (\ err_a3hPK++                            (fvErrors view_a1yMw)++                            (\ err_a1yMy +                               -> do { (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "<td class=\"errors\">");-+                                       (asWidgetT . toWidget) (toHtml err_a3hPK);++                                       (asWidgetT . toWidget) (toHtml err_a1yMy); +                                       (asWidgetT . toWidget) +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                                            "</td>") }) +                            Nothing; +                          (asWidgetT . toWidget) +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</tr>") })-+               views_a3hPH;++               views_a1yMv; +             (asWidgetT . toWidget) +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) +                  "</table></fieldset>") })@@ -1967,19 +1990,12 @@ -                        <td .errors>#{err} -|] diff --git a/Yesod/Form/Nic.hs b/Yesod/Form/Nic.hs-index 2862678..a773553 100644+index 7e4af07..b59745a 100644 --- a/Yesod/Form/Nic.hs +++ b/Yesod/Form/Nic.hs-@@ -12,12 +12,24 @@ module Yesod.Form.Nic- import Yesod.Core- import Yesod.Form- import Text.HTML.SanitizeXSS (sanitizeBalance)--import Text.Hamlet (shamlet)--import Text.Julius (julius, rawJS)-+import Text.Julius (rawJS)- import Text.Blaze.Html.Renderer.String (renderHtml)- import Data.Text (Text, pack)- import Data.Maybe (listToMaybe)+@@ -9,11 +9,22 @@ module Yesod.Form.Nic+     , nicHtmlField+     ) where   +import qualified Text.Blaze as Text.Blaze.Internal +import qualified Text.Blaze.Internal@@ -1991,19 +2007,24 @@ +import qualified Control.Monad +import qualified Text.Julius +import qualified Data.Text.Lazy.Builder-+import qualified Data.Text.Lazy.Builder as Data.Text.Internal.Builder +import qualified Text.Shakespeare +- class Yesod a => YesodNic a where-     -- | NIC Editor Javascript file.-     urlNicEdit :: a -> Either (Route a) Text-@@ -27,20 +39,44 @@ nicHtmlField :: YesodNic site => Field (HandlerT site IO) Html+ import Yesod.Core+ import Yesod.Form+ import Text.HTML.SanitizeXSS (sanitizeBalance)+-import Text.Hamlet (shamlet)+-import Text.Julius (julius, rawJS)++import Text.Julius ( rawJS)+ import Text.Blaze.Html.Renderer.String (renderHtml)+ import Data.Text (Text, pack)+ import Data.Maybe (listToMaybe)+@@ -27,20 +38,52 @@ nicHtmlField :: YesodNic site => Field (HandlerT site IO) Html  nicHtmlField = Field      { fieldParse = \e _ -> return . Right . fmap (preEscapedToMarkup . sanitizeBalance) . listToMaybe $ e-     , fieldView = \theId name attrs val _isReq -> do+     , fieldView = \theId name attrs val isReq -> do -        toWidget [shamlet| -$newline never--    <textarea id="#{theId}" *{attrs} name="#{name}" .html>#{showVal val}+-    <textarea id="#{theId}" *{attrs} name="#{name}" :isReq:required .html>#{showVal val} -|] +        toWidget  $         do { id +               ((Text.Blaze.Internal.preEscapedText . pack)@@ -2012,6 +2033,10 @@ +             id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\""); +             id (toHtml name); +             id ((Text.Blaze.Internal.preEscapedText . pack) "\"");++             Text.Hamlet.condH++               [(isReq, ++                 id ((Text.Blaze.Internal.preEscapedText . pack) " required"))]++               Nothing; +             id ((Text.Hamlet.attrsToHtml . Text.Hamlet.toAttributes) attrs); +             id ((Text.Blaze.Internal.preEscapedText . pack) ">"); +             id (toHtml (showVal val));@@ -2028,43 +2053,34 @@ -(function(){new nicEditor({fullPanel:true}).panelInstance("#{rawJS theId}")})(); -|] +            BottomOfHeadBlocking ->             Text.Julius.asJavascriptUrl-+              (\ _render_a3hYy++              (\ _render_a2rMh +                 -> Data.Monoid.mconcat +                      [Text.Julius.Javascript-+                         ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')-+                            "\n\nbkLib.onDomLoaded(function(){new nicEditor({fullPanel:true}).panelInstance(\""),++                         ((Data.Text.Lazy.Builder.fromText++                           . Text.Shakespeare.pack')++                            "\nbkLib.onDomLoaded(function(){new nicEditor({fullPanel:true}).panelInstance(\""), +                       Text.Julius.toJavascript (rawJS theId), +                       Text.Julius.Javascript-+                         ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++                         ((Data.Text.Lazy.Builder.fromText++                           . Text.Shakespeare.pack') +                            "\")});")]) + +            _ ->             Text.Julius.asJavascriptUrl-+              (\ _render_a3i1Q++              (\ _render_a2rMm +                 -> Data.Monoid.mconcat +                      [Text.Julius.Javascript-+                         ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')-+                            "\n\n(function(){new nicEditor({fullPanel:true}).panelInstance(\""),++                         ((Data.Text.Lazy.Builder.fromText++                           . Text.Shakespeare.pack')++                            "\n(function(){new nicEditor({fullPanel:true}).panelInstance(\""), +                       Text.Julius.toJavascript (rawJS theId), +                       Text.Julius.Javascript-+                         ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++                         ((Data.Text.Lazy.Builder.fromText++                           . Text.Shakespeare.pack') +                            "\")})();")]) +      , fieldEnctype = UrlEncoded      }    where-diff --git a/yesod-form.cabal b/yesod-form.cabal-index 7849763..9694fe1 100644---- a/yesod-form.cabal-+++ b/yesod-form.cabal-@@ -23,7 +23,7 @@ library-                    , yesod-core            >= 1.4      && < 1.5-                    , yesod-persistent      >= 1.4      && < 1.5-                    , time                  >= 1.1.4--                   , shakespeare           >= 2.0-+                   , shakespeare           >= 2.0.5-                    , persistent-                    , template-haskell-                    , transformers          >= 0.2.2 -- -2.1.4+2.1.1 
standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch view
@@ -1,6 +1,6 @@-From 4d8650bd806f50aa2538270f80fa93261c43d056 Mon Sep 17 00:00:00 2001+From e82ed4e6fd7b5ea6dbe474b5de2755ec5794161c Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Fri, 3 Jul 2015 00:12:02 +0000+Date: Thu, 16 Oct 2014 02:23:50 +0000 Subject: [PATCH] stub out  ---@@ -8,16 +8,16 @@  1 file changed, 10 deletions(-)  diff --git a/yesod-persistent.cabal b/yesod-persistent.cabal-index c3bc1bf..1727dba 100644+index b116f3a..017b184 100644 --- a/yesod-persistent.cabal +++ b/yesod-persistent.cabal-@@ -15,16 +15,6 @@ extra-source-files: README.md ChangeLog.md+@@ -14,16 +14,6 @@ description:     Some helpers for using Persistent from Yesod.    library      build-depends:   base                      >= 4        && < 5--                   , yesod-core                >= 1.4.0    && < 1.5--                   , persistent                >= 2.1      && < 2.2--                   , persistent-template       >= 2.1      && < 2.2+-                   , yesod-core                >= 1.2.2    && < 1.3+-                   , persistent                >= 1.2      && < 2.1+-                   , persistent-template       >= 1.2      && < 2.1 -                   , transformers              >= 0.2.2 -                   , blaze-builder -                   , conduit@@ -29,5 +29,5 @@    test-suite test -- -2.1.4+2.1.1 
+ standalone/no-th/haskell-patches/yesod-routes_remove-TH.patch view
@@ -0,0 +1,170 @@+From 8ba08c0efc035486a65f2fd33916a5da7e5210e7 Mon Sep 17 00:00:00 2001+From: dummy <dummy@example.com>+Date: Thu, 26 Dec 2013 19:32:55 -0400+Subject: [PATCH] remove TH++---+ Yesod/Routes/Parse.hs    |   40 +++++-----------------------------------+ Yesod/Routes/TH.hs       |   16 ++++++++--------+ Yesod/Routes/TH/Types.hs |   16 ----------------+ yesod-routes.cabal       |    4 ----+ 4 files changed, 13 insertions(+), 63 deletions(-)++diff --git a/Yesod/Routes/Parse.hs b/Yesod/Routes/Parse.hs+index 232982d..7df7750 100644+--- a/Yesod/Routes/Parse.hs++++ b/Yesod/Routes/Parse.hs+@@ -2,11 +2,11 @@+ {-# LANGUAGE DeriveDataTypeable #-}+ {-# OPTIONS_GHC -fno-warn-missing-fields #-} -- QuasiQuoter+ module Yesod.Routes.Parse+-    ( parseRoutes+-    , parseRoutesFile+-    , parseRoutesNoCheck+-    , parseRoutesFileNoCheck+-    , parseType++    --( parseRoutes++    --, parseRoutesFile++    --, parseRoutesNoCheck++    --, parseRoutesFileNoCheck++    ( parseType+     , parseTypeTree+     , TypeTree (..)+     ) where+@@ -19,42 +19,12 @@ import Yesod.Routes.TH+ import Yesod.Routes.Overlap (findOverlapNames)+ import Data.List (foldl')+ +--- | A quasi-quoter to parse a string into a list of 'Resource's. Checks for+--- overlapping routes, failing if present; use 'parseRoutesNoCheck' to skip the+--- checking. See documentation site for details on syntax.+-parseRoutes :: QuasiQuoter+-parseRoutes = QuasiQuoter { quoteExp = x }+-  where+-    x s = do+-        let res = resourcesFromString s+-        case findOverlapNames res of+-            [] -> lift res+-            z -> error $ unlines $ "Overlapping routes: " : map show z+-+-parseRoutesFile :: FilePath -> Q Exp+-parseRoutesFile = parseRoutesFileWith parseRoutes+-+-parseRoutesFileNoCheck :: FilePath -> Q Exp+-parseRoutesFileNoCheck = parseRoutesFileWith parseRoutesNoCheck+-+-parseRoutesFileWith :: QuasiQuoter -> FilePath -> Q Exp+-parseRoutesFileWith qq fp = do+-    qAddDependentFile fp+-    s <- qRunIO $ readUtf8File fp+-    quoteExp qq s+-+ readUtf8File :: FilePath -> IO String+ readUtf8File fp = do+     h <- SIO.openFile fp SIO.ReadMode+     SIO.hSetEncoding h SIO.utf8_bom+     SIO.hGetContents h+ +--- | Same as 'parseRoutes', but performs no overlap checking.+-parseRoutesNoCheck :: QuasiQuoter+-parseRoutesNoCheck = QuasiQuoter+-    { quoteExp = lift . resourcesFromString+-    }+-+ -- | Convert a multi-line string to a set of resources. See documentation for+ -- the format of this string. This is a partial function which calls 'error' on+ -- invalid input.+diff --git a/Yesod/Routes/TH.hs b/Yesod/Routes/TH.hs+index 7b2e50b..b05fc57 100644+--- a/Yesod/Routes/TH.hs++++ b/Yesod/Routes/TH.hs+@@ -2,15 +2,15 @@+ module Yesod.Routes.TH+     ( module Yesod.Routes.TH.Types+       -- * Functions+-    , module Yesod.Routes.TH.RenderRoute+-    , module Yesod.Routes.TH.ParseRoute+-    , module Yesod.Routes.TH.RouteAttrs++    -- , module Yesod.Routes.TH.RenderRoute++    -- , module Yesod.Routes.TH.ParseRoute++    -- , module Yesod.Routes.TH.RouteAttrs+       -- ** Dispatch+-    , module Yesod.Routes.TH.Dispatch++    -- , module Yesod.Routes.TH.Dispatch+     ) where+ + import Yesod.Routes.TH.Types+-import Yesod.Routes.TH.RenderRoute+-import Yesod.Routes.TH.ParseRoute+-import Yesod.Routes.TH.RouteAttrs+-import Yesod.Routes.TH.Dispatch++--import Yesod.Routes.TH.RenderRoute++--import Yesod.Routes.TH.ParseRoute++--import Yesod.Routes.TH.RouteAttrs++--import Yesod.Routes.TH.Dispatch+diff --git a/Yesod/Routes/TH/Types.hs b/Yesod/Routes/TH/Types.hs+index d0a0405..3232e99 100644+--- a/Yesod/Routes/TH/Types.hs++++ b/Yesod/Routes/TH/Types.hs+@@ -31,10 +31,6 @@ instance Functor ResourceTree where+     fmap f (ResourceLeaf r) = ResourceLeaf (fmap f r)+     fmap f (ResourceParent a b c) = ResourceParent a (map (second $ fmap f) b) $ map (fmap f) c+ +-instance Lift t => Lift (ResourceTree t) where+-    lift (ResourceLeaf r) = [|ResourceLeaf $(lift r)|]+-    lift (ResourceParent a b c) = [|ResourceParent $(lift a) $(lift b) $(lift c)|]+-+ data Resource typ = Resource+     { resourceName :: String+     , resourcePieces :: [(CheckOverlap, Piece typ)]+@@ -48,9 +44,6 @@ type CheckOverlap = Bool+ instance Functor Resource where+     fmap f (Resource a b c d) = Resource a (map (second $ fmap f) b) (fmap f c) d+ +-instance Lift t => Lift (Resource t) where+-    lift (Resource a b c d) = [|Resource a b c d|]+-+ data Piece typ = Static String | Dynamic typ+     deriving Show+ +@@ -58,10 +51,6 @@ instance Functor Piece where+     fmap _ (Static s) = (Static s)+     fmap f (Dynamic t) = Dynamic (f t)+ +-instance Lift t => Lift (Piece t) where+-    lift (Static s) = [|Static $(lift s)|]+-    lift (Dynamic t) = [|Dynamic $(lift t)|]+-+ data Dispatch typ =+     Methods+         { methodsMulti :: Maybe typ -- ^ type of the multi piece at the end+@@ -77,11 +66,6 @@ instance Functor Dispatch where+     fmap f (Methods a b) = Methods (fmap f a) b+     fmap f (Subsite a b) = Subsite (f a) b+ +-instance Lift t => Lift (Dispatch t) where+-    lift (Methods Nothing b) = [|Methods Nothing $(lift b)|]+-    lift (Methods (Just t) b) = [|Methods (Just $(lift t)) $(lift b)|]+-    lift (Subsite t b) = [|Subsite $(lift t) $(lift b)|]+-+ resourceMulti :: Resource typ -> Maybe typ+ resourceMulti Resource { resourceDispatch = Methods (Just t) _ } = Just t+ resourceMulti _ = Nothing+diff --git a/yesod-routes.cabal b/yesod-routes.cabal+index 61980d1..33d2380 100644+--- a/yesod-routes.cabal++++ b/yesod-routes.cabal+@@ -27,10 +27,6 @@ library+                      Yesod.Routes.Class+                      Yesod.Routes.Parse+                      Yesod.Routes.Overlap+-    other-modules:   Yesod.Routes.TH.Dispatch+-                     Yesod.Routes.TH.RenderRoute+-                     Yesod.Routes.TH.ParseRoute+-                     Yesod.Routes.TH.RouteAttrs+                      Yesod.Routes.TH.Types+     ghc-options:     -Wall+ +-- +1.7.10.4+
standalone/no-th/haskell-patches/yesod-static_hack.patch view
@@ -1,6 +1,6 @@-From 09d7340ff4c9b43f7c8c2ad6529a6c60871d265f Mon Sep 17 00:00:00 2001+From 606c5f4f4b2d476d274907eb2bb8c12b60fc451f Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Fri, 3 Jul 2015 01:39:14 +0000+Date: Wed, 21 May 2014 04:43:30 +0000 Subject: [PATCH] remove TH  ---@@ -31,7 +31,7 @@  -- | Use <https://github.com/mishoo/UglifyJS2 UglifyJS2> to compress javascript.  -- Assumes @uglifyjs@ is located in the path and uses options @[\"-m\", \"-c\"]@ diff --git a/Yesod/Static.hs b/Yesod/Static.hs-index a18d88e..afb1cda 100644+index 725ebf4..33eaffd 100644 --- a/Yesod/Static.hs +++ b/Yesod/Static.hs @@ -37,8 +37,8 @@ module Yesod.Static@@ -99,7 +99,7 @@ @@ -267,7 +270,7 @@ staticFilesList dir fs =  -- see if their copy is up-to-date.  publicFiles :: Prelude.FilePath -> Q [Dec]- publicFiles dir = mkStaticFiles' dir False+ publicFiles dir = mkStaticFiles' dir "StaticRoute" False - +-}  @@ -111,17 +111,17 @@   +{-  mkStaticFiles :: Prelude.FilePath -> Q [Dec]- mkStaticFiles fp = mkStaticFiles' fp True+ mkStaticFiles fp = mkStaticFiles' fp "StaticRoute" True  -@@ -354,6 +358,7 @@ mkStaticFilesList fp fs makeHash = do-                 [ Clause [] (NormalB $ (ConE 'StaticRoute) `AppE` f' `AppE` qs) []+@@ -357,6 +361,7 @@ mkStaticFilesList fp fs routeConName makeHash = do+                 [ Clause [] (NormalB $ (ConE route) `AppE` f' `AppE` qs) []                  ]              ] +-}    base64md5File :: Prelude.FilePath -> IO String  base64md5File = fmap (base64 . encode) . hashFile-@@ -392,7 +397,7 @@ base64 = map tr+@@ -395,7 +400,7 @@ base64 = map tr  -- single static file at compile time.    data CombineType = JS | CSS@@ -130,7 +130,7 @@  combineStatics' :: CombineType                  -> CombineSettings                  -> [Route Static] -- ^ files to combine-@@ -426,7 +431,7 @@ combineStatics' combineType CombineSettings {..} routes = do+@@ -429,7 +434,7 @@ combineStatics' combineType CombineSettings {..} routes = do          case combineType of              JS -> "js"              CSS -> "css"@@ -139,7 +139,7 @@  -- | Data type for holding all settings for combining files.  --  -- This data type is a settings type. For more information, see:-@@ -502,6 +507,7 @@ instance Default CombineSettings where+@@ -505,6 +510,7 @@ instance Default CombineSettings where  errorIntro :: [FilePath] -> [Char] -> [Char]  errorIntro fps s = "Error minifying " ++ show fps ++ ": " ++ s  @@ -147,7 +147,7 @@  liftRoutes :: [Route Static] -> Q Exp  liftRoutes =      fmap ListE . mapM go-@@ -548,4 +554,5 @@ combineScripts' :: Bool -- ^ development? if so, perform no combining+@@ -551,4 +557,5 @@ combineScripts' :: Bool -- ^ development? if so, perform no combining                  -> Q Exp  combineScripts' development cs con routes      | development = [| mapM_ (addScript . $(return $ ConE con)) $(liftRoutes routes) |]@@ -155,18 +155,18 @@ +    | otherwise = [| addScript $ $(return $ ConE con) $(combineStatics' JS cs routes) |]a +-} diff --git a/yesod-static.cabal b/yesod-static.cabal-index 4ccb0d7..8758aaa 100644+index 2582a95..5df03b3 100644 --- a/yesod-static.cabal +++ b/yesod-static.cabal-@@ -50,7 +50,6 @@ library-                    , system-fileio         >= 0.3+@@ -49,7 +49,6 @@ library                     , data-default+                    , shakespeare-css       >= 1.0.3                     , mime-types            >= 0.1 -                   , hjsmin                     , filepath              >= 1.3                     , resourcet             >= 0.4                     , unordered-containers  >= 0.2-@@ -63,13 +62,6 @@ library+@@ -62,13 +61,6 @@ library                     , hashable              >= 1.1        exposed-modules: Yesod.Static@@ -181,13 +181,13 @@      ghc-options:     -Wall      extensions: TemplateHaskell @@ -108,7 +100,6 @@ test-suite tests-                    , system-fileio                     , data-default+                    , shakespeare-css                     , mime-types -                   , hjsmin                     , filepath                     , resourcet                     , unordered-containers -- -2.1.4+2.0.0.rc2 
standalone/no-th/haskell-patches/yesod_hack-TH.patch view
@@ -1,13 +1,13 @@-From 86e7cf433fcd3386893556d690748781f46d3f03 Mon Sep 17 00:00:00 2001+From 59091cd37958fee79b9e346fe3118d5ed7d0104b Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Fri, 3 Jul 2015 01:33:03 +0000+Date: Thu, 16 Oct 2014 02:36:37 +0000 Subject: [PATCH] hack TH  ---  Yesod.hs              | 19 ++++++++++++--- Yesod/Default/Main.hs | 28 +--------------------- Yesod/Default/Util.hs | 68 ++-------------------------------------------------- 3 files changed, 20 insertions(+), 95 deletions(-)+ Yesod/Default/Main.hs | 31 +----------------------+ Yesod/Default/Util.hs | 69 ++-------------------------------------------------+ 3 files changed, 20 insertions(+), 99 deletions(-)  diff --git a/Yesod.hs b/Yesod.hs index b367144..fbe309c 100644@@ -41,7 +41,7 @@ +insert = undefined + diff --git a/Yesod/Default/Main.hs b/Yesod/Default/Main.hs-index 2694825..5a5fbb9 100644+index 565ed35..bf46642 100644 --- a/Yesod/Default/Main.hs +++ b/Yesod/Default/Main.hs @@ -1,10 +1,8 @@@@ -64,7 +64,7 @@  import System.Log.FastLogger (LogStr, toLogStr)  import Language.Haskell.TH.Syntax (qLocation)  -@@ -56,30 +54,6 @@ defaultMain load getApp = do+@@ -55,33 +53,6 @@ defaultMain load getApp = do    type LogFunc = Loc -> LogSource -> LogLevel -> LogStr -> IO ()  @@ -79,24 +79,27 @@ -defaultMainLog load getApp = do -    config <- load -    (app, logFunc) <- getApp config--    runSettings --        ( setPort (appPort config)--        $ setHost (appHost config)--        $ setOnException (const $ \e -> when (shouldLog' e) $ logFunc+-    runSettings defaultSettings+-        { settingsPort = appPort config+-        , settingsHost = appHost config+-        , settingsOnException = const $ \e -> when (shouldLog' e) $ logFunc -            $(qLocation >>= liftLoc) -            "yesod" -            LevelError--            (toLogStr $ "Exception from Warp: " ++ show e))--        $ defaultSettings--        ) app+-            (toLogStr $ "Exception from Warp: " ++ show e)+-        } app -  where--    shouldLog' = Warp.defaultShouldDisplayException--+-    shouldLog' =+-#if MIN_VERSION_warp(2,1,3)+-        Warp.defaultShouldDisplayException+-#else+-        const True+-#endif+   -- | Run your application continously, listening for SIGINT and exiting  --   when received- -- diff --git a/Yesod/Default/Util.hs b/Yesod/Default/Util.hs-index 488312a..5476b54 100644+index a10358e..0547424 100644 --- a/Yesod/Default/Util.hs +++ b/Yesod/Default/Util.hs @@ -5,10 +5,9 @@@@ -122,7 +125,7 @@  import Text.Hamlet (HamletSettings, defaultHamletSettings)  import Data.Maybe (catMaybes)  import Data.Default (Default (def))-@@ -69,68 +65,8 @@ data TemplateLanguage = TemplateLanguage+@@ -69,68 +65,7 @@ data TemplateLanguage = TemplateLanguage      , tlReload :: FilePath -> Q Exp      }  @@ -140,7 +143,7 @@      { wfsLanguages :: HamletSettings -> [TemplateLanguage]      , wfsHamletSettings :: HamletSettings      }- +- -instance Default WidgetFileSettings where -    def = WidgetFileSettings defaultTemplateLanguages defaultHamletSettings -@@ -159,7 +162,7 @@ -            , func -            , " on " -            , show file--            , ", but no templates were found."+-            , ", but no template were found." -            ] -        exps -> return $ DoE $ map NoBindS exps -  where@@ -192,5 +195,5 @@ -                else return $ Just ex -        else return Nothing -- -2.1.4+2.1.1