git-annex 5.20150617 → 5.20150710
raw patch · 131 files changed
+5995/−3557 lines, 131 filesdep ~optparse-applicative
Dependency ranges changed: optparse-applicative
Files
- Annex/Branch.hs +4/−8
- Assistant/Pairing/MakeRemote.hs +3/−2
- Assistant/WebApp/Configurators/Pairing.hs +2/−1
- CHANGELOG +37/−0
- CmdLine/GitAnnex.hs +2/−0
- Command/Add.hs +12/−7
- Command/Assistant.hs +6/−0
- Command/Log.hs +1/−1
- Command/Reinject.hs +4/−2
- Command/SetKey.hs +50/−0
- Command/Sync.hs +29/−23
- Command/Unused.hs +5/−2
- Git/LsTree.hs +6/−5
- Git/RefLog.hs +11/−8
- Git/Repair.hs +1/−1
- Git/SharedRepository.hs +1/−0
- Makefile +1/−1
- Test.hs +21/−30
- Types/RefSpec.hs +12/−4
- Utility/CopyFile.hs +1/−1
- Utility/Directory.hs +19/−8
- Utility/SubTasty.hs +25/−0
- debian/changelog +37/−0
- debian/control +1/−1
- doc/backends/comment_14_57154dcd1041a33f220f9105b709be89._comment +8/−0
- doc/backends/comment_15_b3445fd1f379346c642a27211c6c798b._comment +14/−0
- doc/backends/comment_16_c68dfaeee2ef18f420f7e11ff5f604b9._comment +15/−0
- doc/backends/comment_17_557a622b3304eb86fed52896e0b6cbda._comment +7/−0
- doc/bugs/Android_build_missing_webapp.mdwn +39/−0
- doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t.mdwn +2/−0
- doc/bugs/Cannot_set_direct_mode_with_non_default_worktree.mdwn +2/−0
- doc/bugs/Deleted_files_during_merge.mdwn +8/−0
- doc/bugs/Endless_SSH_password_prompts.mdwn +4/−0
- doc/bugs/Installation_on_ArchLinux_fails.mdwn +33/−0
- doc/bugs/Interrupted_command_broke_encfs_repository.mdwn +54/−0
- doc/bugs/Resource_temporarily_unavailable_when_running_enableremote.mdwn +23/−0
- doc/bugs/annex_add_doesn__39__t_any_longer_by_default_commit_git-annex.mdwn +43/−0
- doc/bugs/assistant_memory_leak.mdwn +22/−0
- doc/bugs/assistant_sometimes_does_not_merge_changes_from_remote.mdwn +12/−0
- doc/bugs/flooding_me_with_ssh_password_prompts.mdwn +5/−0
- doc/bugs/git-annex_unused_--from_s3_doesn__39__t.mdwn +1/−1
- doc/bugs/git_annex_still_deleting_content_when_merging.mdwn +9/−0
- doc/bugs/git_annex_test_fails_when_run_through_powershell.mdwn +28/−0
- doc/bugs/high_cpu_usage_in_cat-file_and_webapp.mdwn +314/−0
- doc/bugs/import_leaves_empty_directories_behind.mdwn +2/−0
- doc/bugs/kill_git-annex_assistant_on_logout.mdwn +29/−0
- doc/bugs/log_fails_with_-raw_error.mdwn +47/−0
- doc/bugs/migrate_and_move_duplicates_data.mdwn +36/−0
- doc/bugs/sharedRepository__61__world_not_working.mdwn +5/−0
- doc/bugs/view_fails_with___34__invalid_character__34__.mdwn +30/−0
- doc/design/assistant/telehash.mdwn +55/−12
- doc/devblog/day_294__back_focusing_on_bugs.mdwn +7/−0
- doc/devblog/day_295__caught_up.mdwn +8/−0
- doc/devblog/day_296__into_the_backlog.mdwn +16/−0
- doc/devblog/day_297__optparse-applicative.mdwn +25/−0
- doc/encryption/comment_2_5c2da865082de475254ebfd53feb2d0a._comment +13/−0
- doc/forum/Adding_normal___40__non-annexed__41___files_in_Windows.mdwn +31/−0
- doc/forum/How_to_overwrite_local_changes__63__.mdwn +7/−0
- doc/forum/MD5_and_MD5E_backends_no_longer_available__63__.mdwn +5/−0
- doc/forum/Restoring_files__63__.mdwn +11/−0
- doc/forum/Robustness_on_failing_hardware.mdwn +30/−0
- doc/forum/Storing_copies_on_LTO_tapes__63__.mdwn +13/−0
- doc/forum/Trouble_adding_ssh_remote_using_assistant_on_windows.mdwn +19/−0
- doc/forum/security_risk_presented_by_remote.log__63__.mdwn +5/−0
- doc/git-annex-add.mdwn +3/−0
- doc/git-annex-copy/comment_1_9be279110a112335bc72ee8c8a347da2._comment +12/−0
- doc/git-annex-copy/comment_2_599958b0a57d2f8f4383733d28ad9c8d._comment +7/−0
- doc/git-annex-copy/comment_3_a9408822e314c32bebf8230f9d40216b._comment +12/−0
- doc/git-annex-dropkey.mdwn +2/−0
- doc/git-annex-log.mdwn +2/−2
- doc/git-annex-proxy.mdwn +6/−0
- doc/git-annex-setkey.mdwn +30/−0
- doc/git-annex-unused.mdwn +17/−9
- doc/git-annex.mdwn +21/−2
- doc/install/fromsource/comment_49_c8370525547b435d963a2c1192a21124._comment +93/−0
- doc/news/version_5.20150508.mdwn +0/−51
- doc/news/version_5.20150710.mdwn +34/−0
- doc/preferred_content/standard_groups.mdwn +3/−3
- doc/todo/Deleting_Unused_Files_by_Age.mdwn +4/−0
- doc/todo/S3_fsck_support/comment_3_2b96f61188b2ada729a284e95fc89dab._comment +21/−0
- doc/todo/Set_total_storage_limit_for_special_remotes..mdwn +1/−0
- doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn +2/−0
- doc/todo/commit_in_direct_mode.mdwn +3/−0
- doc/todo/easy_way_to_reproduce_normal_download_command.mdwn +24/−0
- doc/todo/git-annex_info___34__du__34___remote_support.mdwn +41/−0
- doc/todo/use_inode_cache_in_unlocked_files.mdwn +23/−0
- git-annex.cabal +7/−2
- man/git-annex-add.1 +3/−0
- man/git-annex-dropkey.1 +2/−0
- man/git-annex-log.1 +2/−1
- man/git-annex-proxy.1 +6/−0
- man/git-annex-setkey.1 +27/−0
- man/git-annex-unused.1 +13/−5
- man/git-annex.1 +18/−2
- standalone/android/cabal.config +1062/−208
- standalone/android/haskell-patches/crypto-numbers_build-fix.patch +0/−227
- standalone/android/haskell-patches/entropy_cross-build.patch +27/−0
- standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch +0/−50
- standalone/android/haskell-patches/network_2.4.1.0_0006-build-fixes.patch +24/−0
- standalone/android/haskell-patches/optparse-applicative_remove-ANN.patch +33/−0
- standalone/android/haskell-patches/shakespeare-text_remove-TH.patch +0/−153
- standalone/android/haskell-patches/skein_hardcode_little-endian.patch +26/−0
- standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch +12/−12
- standalone/android/haskell-patches/vector_cross-build.patch +24/−0
- standalone/android/haskell-patches/warp_avoid-ipv6-for-android.patch +39/−0
- standalone/android/install-haskell-packages +7/−16
- standalone/android/tmp/network-2.4.1.2/cabal.config +1062/−208
- standalone/no-th/evilsplicer-headers.hs +1/−1
- standalone/no-th/haskell-patches/DAV_build-without-TH.patch +6/−6
- standalone/no-th/haskell-patches/aeson_remove-TH.patch +0/−40
- standalone/no-th/haskell-patches/file-embed_remove-TH.patch +0/−132
- standalone/no-th/haskell-patches/generic-deriving_remove-TH.patch +0/−394
- standalone/no-th/haskell-patches/lens_no-TH.patch +34/−58
- standalone/no-th/haskell-patches/monad-logger_remove-TH.patch +0/−27
- standalone/no-th/haskell-patches/optparse-applicative_remove-ANN.patch +0/−33
- standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch +0/−41
- standalone/no-th/haskell-patches/profunctors_3.3-0001-fix-cross-build.patch +0/−26
- standalone/no-th/haskell-patches/reflection_remove-TH.patch +0/−59
- standalone/no-th/haskell-patches/shakespeare-css_remove_TH.patch +0/−366
- standalone/no-th/haskell-patches/shakespeare-js_hack_TH.patch +0/−316
- standalone/no-th/haskell-patches/shakespeare_remove-TH.patch +1437/−180
- standalone/no-th/haskell-patches/skein_hardcode_little-endian.patch +0/−26
- standalone/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch +0/−49
- standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch +10/−14
- standalone/no-th/haskell-patches/xml-hamlet_remove_TH.patch +0/−108
- standalone/no-th/haskell-patches/yesod-core_expand_TH.patch +47/−46
- standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch +330/−346
- standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch +8/−8
- standalone/no-th/haskell-patches/yesod-routes_remove-TH.patch +0/−170
- standalone/no-th/haskell-patches/yesod-static_hack.patch +17/−17
- standalone/no-th/haskell-patches/yesod_hack-TH.patch +22/−25
Annex/Branch.hs view
@@ -43,6 +43,7 @@ import qualified Git.Branch import qualified Git.UnionMerge import qualified Git.UpdateIndex+import Git.LsTree (lsTreeParams) import Git.HashObject import Git.Types import Git.FilePath@@ -209,7 +210,7 @@ getHistorical date file = -- This check avoids some ugly error messages when the reflog -- is empty.- ifM (null <$> inRepo (Git.RefLog.get' [Param "-n1"] fullname))+ ifM (null <$> inRepo (Git.RefLog.get' [Param (fromRef fullname), Param "-n1"])) ( error ("No reflog for " ++ fromRef fullname) , getRef (Git.Ref.dateRef fullname date) file )@@ -314,13 +315,8 @@ {- Files in the branch, not including any from journalled changes, - and without updating the branch. -} branchFiles :: Annex [FilePath]-branchFiles = withIndex $ inRepo $ Git.Command.pipeNullSplitZombie- [ Param "ls-tree"- , Param "--name-only"- , Param "-r"- , Param "-z"- , Param $ fromRef fullname- ]+branchFiles = withIndex $ inRepo $ Git.Command.pipeNullSplitZombie $+ lsTreeParams fullname [Param "--name-only"] {- Populates the branch's index file with the current branch contents. -
Assistant/Pairing/MakeRemote.hs view
@@ -25,8 +25,9 @@ setupAuthorizedKeys :: PairMsg -> FilePath -> IO () setupAuthorizedKeys msg repodir = case validateSshPubKey $ remoteSshPubKey $ pairMsgData msg of Left err -> error err- Right pubkey -> - unlessM (liftIO $ addAuthorizedKeys True repodir pubkey) $+ Right pubkey -> do+ absdir <- absPath repodir+ unlessM (liftIO $ addAuthorizedKeys True absdir pubkey) $ error "failed setting up ssh authorized keys" {- When local pairing is complete, this is used to set up the remote for
Assistant/WebApp/Configurators/Pairing.hs view
@@ -223,11 +223,12 @@ - background. -} thread <- liftAssistant $ asIO $ do keypair <- liftIO $ genSshKeyPair+ let pubkey = either error id $ validateSshPubKey $ sshPubKey keypair pairdata <- liftIO $ PairData <$> getHostname <*> myUserName <*> pure reldir- <*> pure (sshPubKey keypair)+ <*> pure pubkey <*> (maybe genUUID return muuid) let sender = multicastPairMsg Nothing secret pairdata let pip = PairingInProgress secret Nothing keypair pairdata stage
CHANGELOG view
@@ -1,3 +1,40 @@+git-annex (5.20150710) unstable; urgency=medium++ * add: Stage symlinks the same as git add would, even if they are not a+ link to annexed content.+ * sync: When annex.autocommit=false, avoid making any commit of local+ changes, while still merging with remote to the extent possible.+ * unused: --used-refspec can now be configured to look at refs in the+ reflog. This provides a way to not consider old versions of files to be+ unused after they have reached a specified age, when the old refs in+ the reflog expire.+ * log: Fix reversion introduced in version 5.20150528 that broke this command.+ * assistant --autostart: First stop any daemons that are already running,+ which might be left over from a previous login session and so unable to+ use the ssh agent of a new login session.+ * assistant: Fix local pairing to not include newline in ssh pubkey,+ which is rejected on the other end for security reasons.+ * assistant: Fix ANNEX_SHELL_DIR written to ~/.ssh/authorized_keys + in local pairing to be the absolute path to the repository, not "."+ This was a reversion caused by the relative path changes in 5.20150113.+ * Brought back the setkey plumbing command that was removed in 2011, since+ we found a use case for it. Note that the command's syntax was changed+ for consistency.+ * bugfix: Pass --full-tree when using git ls-files to get a list of files+ on the git-annex branch, so it works when run in a subdirectory.+ This bug affected git-annex unused, and potentially also transitions+ running code and other things.+ * Support git's undocumented core.sharedRepository=2 value, which+ is equivalent to "world", and is set when a repo was created using+ git init --shared=world.+ * When building on linux, pass --as-needed to linker to avoid linking+ with unused shared libraries including libyaml.+ * import: Fix failure of cross-device import on Windows.+ * merge: Avoid creating the synced/master branch.+ * Removed support for optparse-applicative versions older than 0.10.++ -- Joey Hess <id@joeyh.name> Fri, 10 Jul 2015 16:36:42 -0400+ git-annex (5.20150617) unstable; urgency=medium * Now supports git annex sync --all --content to sync all versions of all
CmdLine/GitAnnex.hs view
@@ -26,6 +26,7 @@ import qualified Command.ExamineKey import qualified Command.FromKey import qualified Command.RegisterUrl+import qualified Command.SetKey import qualified Command.DropKey import qualified Command.TransferKey import qualified Command.TransferKeys@@ -159,6 +160,7 @@ , Command.ExamineKey.cmd , Command.FromKey.cmd , Command.RegisterUrl.cmd+ , Command.SetKey.cmd , Command.DropKey.cmd , Command.TransferKey.cmd , Command.TransferKeys.cmd
Command/Add.hs view
@@ -66,11 +66,14 @@ startSmall file = do showStart "add" file showNote "non-large file; adding content to git repository"- next $ do- params <- forceParams- Annex.Queue.addCommand "add" (params++[Param "--"]) [file]- next $ return True+ next $ performAdd file +performAdd :: FilePath -> CommandPerform+performAdd file = do+ params <- forceParams+ Annex.Queue.addCommand "add" (params++[Param "--"]) [file]+ next $ return True+ {- The add subcommand annexes a file, generating a key for it using a - backend, and then moving it into the annex directory and setting up - the symlink pointing to its content. -}@@ -81,11 +84,13 @@ ms <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file case ms of Nothing -> stop- Just s- | isSymbolicLink s || not (isRegularFile s) -> stop+ Just s + | not (isRegularFile s) && not (isSymbolicLink s) -> stop | otherwise -> do showStart "add" file- next $ perform file+ next $ if isSymbolicLink s+ then performAdd file+ else perform file addpresent key = ifM isDirect ( do ms <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file
Command/Assistant.hs view
@@ -91,6 +91,12 @@ where go haveionice program dir = do setCurrentDirectory dir+ -- First stop any old daemon running in this directory, which+ -- might be a leftover from an old login session. Such a+ -- leftover might be left in an environment where it is+ -- unavble to use the ssh agent or other login session+ -- resources.+ void $ boolSystem program [Param "assistant", Param "--stop"] if haveionice then boolSystem "ionice" (Param "-c3" : Param program : baseparams) else boolSystem program baseparams
Command/Log.hs view
@@ -151,7 +151,7 @@ [ Param "log" , Param "-z" , Param "--pretty=format:%ct"- , Param "-raw"+ , Param "--raw" , Param "--abbrev=40" , Param "--remove-empty" ] ++ os ++
Command/Reinject.hs view
@@ -50,11 +50,13 @@ ) where -- the file might be on a different filesystem,- -- so mv is used rather than simply calling+ -- so moveFile is used rather than simply calling -- moveToObjectDir; disk space is also -- checked this way. move = getViaTmp key $ \tmp ->- liftIO $ boolSystem "mv" [File src, File tmp]+ liftIO $ catchBoolIO $ do+ moveFile src tmp+ return True reject = const $ return "wrong file?" cleanup :: Key -> CommandCleanup
+ Command/SetKey.hs view
@@ -0,0 +1,50 @@+{- git-annex command+ -+ - Copyright 2010, 2015 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++module Command.SetKey where++import Common.Annex+import Command+import Logs.Location+import Annex.Content+import Types.Key++cmd :: [Command]+cmd = [command "setkey" (paramPair paramKey paramPath) seek+ SectionPlumbing "sets annexed content for a key"]++seek :: CommandSeek+seek = withWords start++start :: [String] -> CommandStart+start (keyname:file:[]) = do+ showStart "setkey" file+ next $ perform file (mkKey keyname)+start _ = error "specify a key and a content file"++mkKey :: String -> Key+mkKey = fromMaybe (error "bad key") . file2key++perform :: FilePath -> Key -> CommandPerform+perform file key = do+ -- the file might be on a different filesystem, so moveFile is used+ -- rather than simply calling moveAnnex; disk space is also+ -- checked this way.+ ok <- getViaTmp key $ \dest ->+ if dest /= file+ then liftIO $ catchBoolIO $ do+ moveFile file dest+ return True+ else return True+ if ok+ then next $ cleanup key+ else error "mv failed!"++cleanup :: Key -> CommandCleanup+cleanup key = do+ logStatus key InfoPresent+ return True
Command/Sync.hs view
@@ -151,24 +151,29 @@ fastest = fromMaybe [] . headMaybe . Remote.byCost commit :: CommandStart-commit = next $ next $ do- commitmessage <- maybe commitMsg return- =<< Annex.getField (optionName messageOption)- showStart "commit" ""- Annex.Branch.commit "update"- ifM isDirect- ( do- void stageDirect- void preCommitDirect- commitStaged Git.Branch.ManualCommit commitmessage- , do- inRepo $ Git.Branch.commitQuiet Git.Branch.ManualCommit- [ Param "-a"- , Param "-m"- , Param commitmessage- ]- return True- )+commit = ifM (annexAutoCommit <$> Annex.getGitConfig)+ ( go+ , stop+ )+ where+ go = next $ next $ do+ commitmessage <- maybe commitMsg return+ =<< Annex.getField (optionName messageOption)+ showStart "commit" ""+ Annex.Branch.commit "update"+ ifM isDirect+ ( do+ void stageDirect+ void preCommitDirect+ commitStaged Git.Branch.ManualCommit commitmessage+ , do+ inRepo $ Git.Branch.commitQuiet Git.Branch.ManualCommit+ [ Param "-a"+ , Param "-m"+ , Param commitmessage+ ]+ return True+ ) commitMsg :: Annex String commitMsg = do@@ -194,10 +199,10 @@ syncbranch = syncBranch branch needmerge = ifM isBareRepo ( return False- , do- unlessM (inRepo $ Git.Ref.exists syncbranch) $- inRepo $ updateBranch syncbranch- inRepo $ Git.Branch.changed branch syncbranch+ , ifM (inRepo $ Git.Ref.exists syncbranch)+ ( inRepo $ Git.Branch.changed branch syncbranch+ , return False+ ) ) go False = stop go True = do@@ -254,7 +259,8 @@ Nothing -> do branch <- inRepo Git.Branch.currentUnsafe and <$> mapM (merge Nothing) (branchlist branch)- Just thisbranch ->+ Just thisbranch -> do+ inRepo $ updateBranch $ syncBranch thisbranch and <$> (mapM (merge (Just thisbranch)) =<< tomerge (branchlist b)) ) where
Command/Unused.hs view
@@ -21,6 +21,7 @@ import qualified Git.Command import qualified Git.Ref import qualified Git.Branch+import qualified Git.RefLog import qualified Git.LsFiles as LsFiles import qualified Git.DiffTree as DiffTree import qualified Backend@@ -216,8 +217,9 @@ withKeysReferencedInGit refspec a = do current <- inRepo Git.Branch.currentUnsafe shaHead <- maybe (return Nothing) (inRepo . Git.Ref.sha) current- usedrefs <- applyRefSpec refspec . relevantrefs (shaHead, current)+ rs <- relevantrefs (shaHead, current) <$> inRepo (Git.Command.pipeReadStrict [Param "show-ref"])+ usedrefs <- applyRefSpec refspec rs (getreflog rs) forM_ usedrefs $ withKeysReferencedInGitRef a where@@ -240,9 +242,10 @@ Git.Ref.headRef : nubRefs (filter ((/= x) . fst) refs) _ -> nubRefs refs+ getreflog rs = inRepo $ Git.RefLog.getMulti rs {- Runs an action on keys referenced in the given Git reference which- - differ from those referenced in the index. -}+ - differ from those referenced in the work tree. -} withKeysReferencedInGitRef :: (Key -> Annex ()) -> Git.Ref -> Annex () withKeysReferencedInGitRef a ref = do showAction $ "checking " ++ Git.Ref.describe ref
Git/LsTree.hs view
@@ -34,16 +34,17 @@ - with lazy output. -} lsTree :: Ref -> Repo -> IO [TreeItem] lsTree t repo = map parseLsTree- <$> pipeNullSplitZombie (lsTreeParams t) repo+ <$> pipeNullSplitZombie (lsTreeParams t []) repo -lsTreeParams :: Ref -> [CommandParam]-lsTreeParams t =+lsTreeParams :: Ref -> [CommandParam] -> [CommandParam]+lsTreeParams r ps = [ Param "ls-tree" , Param "--full-tree" , Param "-z" , Param "-r"- , Param "--"- , File $ fromRef t+ ] ++ ps +++ [ Param "--"+ , File $ fromRef r ] {- Lists specified files in a tree. -}
Git/RefLog.hs view
@@ -14,14 +14,17 @@ {- Gets the reflog for a given branch. -} get :: Branch -> Repo -> IO [Sha]-get = get' []+get b = getMulti [b] -get' :: [CommandParam] -> Branch -> Repo -> IO [Sha]-get' ps b = mapMaybe extractSha . lines <$$> pipeReadStrict ps'+{- Gets reflogs for multiple branches. -}+getMulti :: [Branch] -> Repo -> IO [Sha]+getMulti bs = get' (map (Param . fromRef) bs)++get' :: [CommandParam] -> Repo -> IO [Sha]+get' ps = mapMaybe extractSha . lines <$$> pipeReadStrict ps' where- ps' = - [ Param "log"- , Param "-g"- , Param "--format=%H"- , Param (fromRef b)+ ps' = catMaybes+ [ Just $ Param "log"+ , Just $ Param "-g"+ , Just $ Param "--format=%H" ] ++ ps
Git/Repair.hs view
@@ -341,7 +341,7 @@ verifyTree missing treesha r | S.member treesha missing = return False | otherwise = do- (ls, cleanup) <- pipeNullSplit (LsTree.lsTreeParams treesha) r+ (ls, cleanup) <- pipeNullSplit (LsTree.lsTreeParams treesha []) r let objshas = map (extractSha . LsTree.sha . LsTree.parseLsTree) ls if any isNothing objshas || any (`S.member` missing) (catMaybes objshas) then do
@@ -19,6 +19,7 @@ getSharedRepository r = case map toLower $ Git.Config.get "core.sharedrepository" "" r of "1" -> GroupShared+ "2" -> AllShared "group" -> GroupShared "true" -> GroupShared "all" -> AllShared
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-routes, yesod-core, shakespeare-css, shakespeare-js, shakespeare, blaze-markup, file-embed, wai-app-static, hamlet, wai, unordered-containers, /' tmp/androidtree/git-annex.cabal+ 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 # 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
Test.hs view
@@ -15,12 +15,12 @@ import Test.Tasty.QuickCheck import Test.Tasty.Ingredients.Rerun -import Options.Applicative hiding (command) import qualified Data.Map as M import qualified Text.JSON import Common +import qualified Utility.SubTasty import qualified Utility.SafeCommand import qualified Annex import qualified Annex.UUID@@ -83,24 +83,7 @@ main :: [String] -> IO () main ps = do- let tests = testGroup "Tests"- -- Test both direct and indirect mode.- -- Windows is only going to use direct mode,- -- so don't test twice.- [ properties-#ifndef mingw32_HOST_OS- , withTestEnv True $ unitTests "(direct)"- , withTestEnv False $ unitTests "(indirect)"-#else- , withTestEnv False $ unitTests ""-#endif- ]-- -- Can't use tasty's defaultMain because one of the command line- -- parameters is "test".- let pinfo = info (helper <*> suiteOptionParser ingredients tests)- ( fullDesc <> header "Builtin test suite" )- opts <- parseOpts (prefs idm) pinfo ps+ opts <- Utility.SubTasty.parseOpts "test" ingredients tests ("test":ps) case tryIngredients ingredients opts tests of Nothing -> error "No tests found!?" Just act -> ifM act@@ -110,17 +93,6 @@ putStrLn " with utilities, such as git, installed on this system.)" exitFailure )- where- parseOpts pprefs pinfo args =-#if MIN_VERSION_optparse_applicative(0,10,0)- case execParserPure pprefs pinfo args of- (Options.Applicative.Failure failure) -> do- let (msg, _exit) = renderFailure failure "git-annex test"- error msg- v -> handleParseResult v-#else- handleParseResult $ execParserPure pprefs pinfo args-#endif ingredients :: [Ingredient] ingredients =@@ -128,6 +100,20 @@ , rerunningTests [consoleTestReporter] ] +tests :: TestTree+tests = testGroup "Tests"+ -- Test both direct and indirect mode.+ -- Windows is only going to use direct mode, so don't test twice.+ [ properties+#ifndef mingw32_HOST_OS+ , withTestEnv True $ unitTests "(direct)"+ , withTestEnv False $ unitTests "(indirect)"+#else+ , withTestEnv False $ unitTests ""+#endif+ ]++ properties :: TestTree properties = localOption (QuickCheckTests 1000) $ testGroup "QuickCheck" [ testProperty "prop_idempotent_deencode_git" Git.Filename.prop_idempotent_deencode@@ -180,6 +166,7 @@ unitTests note = testGroup ("Unit Tests " ++ note) [ testCase "add sha1dup" test_add_sha1dup , testCase "add extras" test_add_extras+ , testCase "log" test_log , testCase "import" test_import , testCase "reinject" test_reinject , testCase "unannex (no copy)" test_unannex_nocopy@@ -281,6 +268,10 @@ git_annex "add" [wormannexedfile, "--backend=WORM"] @? "add with WORM failed" annexed_present wormannexedfile checkbackend wormannexedfile backendWORM++test_log :: Assertion+test_log = intmpclonerepo $ do+ git_annex "log" [annexedfile] @? "log failed" test_import :: Assertion test_import = intmpclonerepo $ Utility.Tmp.withTmpDir "importtest" $ \importdir -> do
Types/RefSpec.hs view
@@ -15,7 +15,11 @@ type RefSpec = [RefSpecPart] -data RefSpecPart = AddRef Ref | AddMatching Glob | RemoveMatching Glob+data RefSpecPart+ = AddRef Ref+ | AddMatching Glob+ | AddRefLog+ | RemoveMatching Glob allRefSpec :: RefSpec allRefSpec = [AddMatching $ compileGlob "*" CaseSensative]@@ -30,15 +34,19 @@ Right $ AddMatching $ compileGlob s CaseSensative | otherwise = Right $ AddRef $ Ref s mk ('-':s) = Right $ RemoveMatching $ compileGlob s CaseSensative+ mk "reflog" = Right AddRefLog mk s = Left $ "bad refspec item \"" ++ s ++ "\" (expected + or - prefix)" -applyRefSpec :: RefSpec -> [Ref] -> [Ref]-applyRefSpec refspec rs = go [] refspec+applyRefSpec :: Monad m => RefSpec -> [Ref] -> m [Sha] -> m [Ref]+applyRefSpec refspec rs getreflog = go [] refspec where- go c [] = reverse c+ go c [] = return (reverse c) go c (AddRef r : rest) = go (r:c) rest go c (AddMatching g : rest) = let add = filter (matchGlob g . fromRef) rs in go (add ++ c) rest+ go c (AddRefLog : rest) = do+ reflog <- getreflog+ go (reflog ++ c) rest go c (RemoveMatching g : rest) = go (filter (not . matchGlob g . fromRef) c) rest
Utility/CopyFile.hs view
@@ -42,7 +42,7 @@ , Param "--preserve=timestamps") ] #else- params = []+ params = if allmeta then [] else [] #endif allmeta = meta == CopyAllMetaData
Utility/Directory.hs view
@@ -107,21 +107,32 @@ onrename (Left e) | isPermissionError e = rethrow | isDoesNotExistError e = rethrow- | otherwise = do- -- copyFile is likely not as optimised as- -- the mv command, so we'll use the latter.- -- But, mv will move into a directory if- -- dest is one, which is not desired.- whenM (isdir dest) rethrow- viaTmp mv dest ""+ | otherwise = viaTmp mv dest "" where rethrow = throwM e+ mv tmp _ = do+ -- copyFile is likely not as optimised as+ -- the mv command, so we'll use the command.+ --+ -- But, while Windows has a "mv", it does not seem very+ -- reliable, so use copyFile there.+#ifndef mingw32_HOST_OS + -- If dest is a directory, mv would move the file+ -- into it, which is not desired.+ whenM (isdir dest) rethrow ok <- boolSystem "mv" [Param "-f", Param src, Param tmp]+ let e' = e+#else+ r <- tryIO $ copyFile src tmp+ let (ok, e') = case r of+ Left e' -> (False, e')+ Right _ -> (True, e)+#endif unless ok $ do -- delete any partial _ <- tryIO $ removeFile tmp- rethrow+ throwM e' isdir f = do r <- tryIO $ getFileStatus f
+ Utility/SubTasty.hs view
@@ -0,0 +1,25 @@+{- Running tasty as a subcommand.+ -+ - Copyright 2015 Joey Hess <id@joeyh.name>+ -+ - License: BSD-2-clause+ -}++module Utility.SubTasty where++import Test.Tasty+import Test.Tasty.Options+import Test.Tasty.Runners+import Options.Applicative++-- Uses tasty's option parser, modified to expect a subcommand.+parseOpts :: String -> [Ingredient] -> TestTree -> [String] -> IO OptionSet+parseOpts subcommand is ts = + handleParseResult . execParserPure (prefs idm) pinfo+ where+ pinfo = info (helper <*> subpinfo) (fullDesc <> header desc)+ subpinfo = subparser $ command subcommand $ + suiteOptionParser is ts+ `info`+ progDesc desc+ desc = "Builtin test suite"
debian/changelog view
@@ -1,3 +1,40 @@+git-annex (5.20150710) unstable; urgency=medium++ * add: Stage symlinks the same as git add would, even if they are not a+ link to annexed content.+ * sync: When annex.autocommit=false, avoid making any commit of local+ changes, while still merging with remote to the extent possible.+ * unused: --used-refspec can now be configured to look at refs in the+ reflog. This provides a way to not consider old versions of files to be+ unused after they have reached a specified age, when the old refs in+ the reflog expire.+ * log: Fix reversion introduced in version 5.20150528 that broke this command.+ * assistant --autostart: First stop any daemons that are already running,+ which might be left over from a previous login session and so unable to+ use the ssh agent of a new login session.+ * assistant: Fix local pairing to not include newline in ssh pubkey,+ which is rejected on the other end for security reasons.+ * assistant: Fix ANNEX_SHELL_DIR written to ~/.ssh/authorized_keys + in local pairing to be the absolute path to the repository, not "."+ This was a reversion caused by the relative path changes in 5.20150113.+ * Brought back the setkey plumbing command that was removed in 2011, since+ we found a use case for it. Note that the command's syntax was changed+ for consistency.+ * bugfix: Pass --full-tree when using git ls-files to get a list of files+ on the git-annex branch, so it works when run in a subdirectory.+ This bug affected git-annex unused, and potentially also transitions+ running code and other things.+ * Support git's undocumented core.sharedRepository=2 value, which+ is equivalent to "world", and is set when a repo was created using+ git init --shared=world.+ * When building on linux, pass --as-needed to linker to avoid linking+ with unused shared libraries including libyaml.+ * import: Fix failure of cross-device import on Windows.+ * merge: Avoid creating the synced/master branch.+ * Removed support for optparse-applicative versions older than 0.10.++ -- Joey Hess <id@joeyh.name> Fri, 10 Jul 2015 16:36:42 -0400+ git-annex (5.20150617) unstable; urgency=medium * Now supports git annex sync --all --content to sync all versions of all
debian/control view
@@ -69,7 +69,7 @@ libghc-tasty-hunit-dev, libghc-tasty-quickcheck-dev, libghc-tasty-rerun-dev,- libghc-optparse-applicative-dev,+ libghc-optparse-applicative-dev (>= 0.10), lsof [!kfreebsd-i386 !kfreebsd-amd64 !hurd-any], ikiwiki, perlmagick,
+ doc/backends/comment_14_57154dcd1041a33f220f9105b709be89._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="xelez0@57a58225d4e5b260555ebc4a9d0a8df85d1e971a"+ nickname="xelez0"+ subject="Backend of specified file"+ date="2015-07-05T13:19:43Z"+ content="""+How can I determine backend of specified file? Looking over man pages and can't find it.+"""]]
+ doc/backends/comment_15_b3445fd1f379346c642a27211c6c798b._comment view
@@ -0,0 +1,14 @@+[[!comment format=mdwn+ username="CandyAngel"+ subject="comment 15"+ date="2015-07-05T14:54:18Z"+ content="""+It's not explicit, but 'git annex info $FILE' tells you the key, which has the backend as its first component:++ ## git annex info CG\ Cookie/Compositing\ in\ Blender/01_CompositingInBlender_SourceFiles.zip + file: CG Cookie/Compositing in Blender/01_CompositingInBlender_SourceFiles.zip+ size: 744.51 megabytes+ key: SHA256E-s744506832--08d2daced60b5eb6509044d5eefca82e7a6899350f49adc0083014229739515e.zip++I don't think there are any situations where the first component of the key isn't the backend, but don't hold me to that, please :)+"""]]
+ doc/backends/comment_16_c68dfaeee2ef18f420f7e11ff5f604b9._comment view
@@ -0,0 +1,15 @@+[[!comment format=mdwn+ username="CandyAngel"+ subject="comment 16"+ date="2015-07-05T15:00:46Z"+ content="""+Or I could not be an idiot and tell you the command specifically looking up a key for a file: lookupkey++ ## git annex lookupkey CG\ Cookie/Compositing\ in\ Blender/01_CompositingInBlender_SourceFiles.zip + SHA256E-s744506832--08d2daced60b5eb6509044d5eefca82e7a6899350f49adc0083014229739515e.zip++So to get the backend (if the first component is always the backend):++ ## git annex lookupkey CG\ Cookie/Compositing\ in\ Blender/01_CompositingInBlender_SourceFiles.zip | cut -d- -f1+ SHA256E+"""]]
+ doc/backends/comment_17_557a622b3304eb86fed52896e0b6cbda._comment view
@@ -0,0 +1,7 @@+[[!comment format=mdwn+ username="joey"+ subject="""comment 17"""+ date="2015-07-06T16:03:53Z"+ content="""+See [[internals/key_format]].+"""]]
+ doc/bugs/Android_build_missing_webapp.mdwn view
@@ -0,0 +1,39 @@+### Please describe the problem.++Setting git-annex on an Android device (either the released version, or the autobuilder apk), I'm told:++[[!format sh """+git-annex: unknown command webapp+"""]]++Looking in the logs on the Android autobuilder I see many instances of:++[[!format sh """+#warning Building without the webapp. You probably need to install Yesod..+"""]]++### What steps will reproduce the problem?++Run git-annex.++### What version of git-annex are you using? On what operating system?++v5.20150617~g031b85a++### Please provide any additional information below.++[[!format sh """+# If you can, paste a complete transcript of the problem occurring here.+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log+++# End of transcript or log.+"""]]++> I've reverted to the previous release, which included the webapp, afaik.+> +> Unfortunately, the android autobuilder remains broken after I spent 12+> hours fighting with it. Unsure when that will be resolved and a newer+> release will be able to be made. +> +> Anyhow, the immediate bug is [[done]] --[[Joey]]
doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t.mdwn view
@@ -35,3 +35,5 @@ ### What version of git-annex are you using? On what operating system? I'm using latest version in Debian Jessie (5.20141024) on amd64 and armhf. I've also reproduced the bug with manually compiled 5.20141105-g8d8b248 on amd64.++[[!tag moreinfo]]
doc/bugs/Cannot_set_direct_mode_with_non_default_worktree.mdwn view
@@ -43,3 +43,5 @@ failed git-annex: direct: 1 failed """]]++> [[done]] per my comment --[[Joey]]
doc/bugs/Deleted_files_during_merge.mdwn view
@@ -2128,3 +2128,11 @@ # End of transcript or log. """]]++> This seems very like the problem described in+> [[git_annex_still_deleting_content_when_merging]]. Without a way to+> reproduce it, I can't tell for sure, but the circumstances of both seem+> the same. I'm going to close this as a duplicate, and have updated the+> other bug report to point to it as more evidence of the bug. [[done]]++[[!meta title="Assistant deleted modified file during merge"]]
doc/bugs/Endless_SSH_password_prompts.mdwn view
@@ -32,3 +32,7 @@ > line, they can also read the dialog box ssh pops up, ignore the > misleading "passphrase request" in the title, and see that it's actually > prompting about a host key change. --[[Joey]]+>+> Update: See [[bugs/kill_git-annex_assistant_on_logout]] -- the fact that+> it happened after logging back in suggests that was the actual cause of+> this problem. --[[Joey]]
+ doc/bugs/Installation_on_ArchLinux_fails.mdwn view
@@ -0,0 +1,33 @@+### Please describe the problem.+The packages provided on AUR fail to install. I've tried git-annex, git-annex-bin and git-annex-git.++### What steps will reproduce the problem?++ yaourt -S git-annex++or++ yaourt -S git-annex-bin++or++ yaourt -S git-annex-git++### What version of git-annex are you using? On what operating system?++None, on an up-to-date ArchLinux (Kernel 4.0.5-1)++### Please provide any additional information below.+++The git-annex-bin package has outdated checksums. When updating these, yaourt fails with++ rm: cannot remove ‘/tmp/yaourt-tmp-foo/aur-git-annex-bin/pkg/git-annex-bin/opt/git-annex.linux/usr/lib/x86_64-linux-gnu/libcurl.so.4’: No such file or directory++Both git-annex and git-annex-git fail with++ error: target not found: haskell-edit-distance+ error: target not found: haskell-ifelse+ error: target not found: haskell-hs3++as these packages are not available on AUR.
+ doc/bugs/Interrupted_command_broke_encfs_repository.mdwn view
@@ -0,0 +1,54 @@+### Please describe the problem.++I use git annex on my phone on an encfs directory on a debian root put on a sdcard.++After an interruption, it may happens that git-annex (or git?) changes the+content of a file in the .git directory by a content in a file from the working+directory.++[[!format sh """+$ cat .git/config+../../../.git/annex/objects/f8/gZ/SHA256E-s1455016--03aaa9bcccada56b6615d9e333b8ada2dd6d1fb14c4aacfac87271939377f537.JPG/SHA256E-s1455016--03aaa9bcccada56b6615d9e333b8ada2dd6d1fb14c4aacfac87271939377f537.JPG+$ cat .git/refs/remotes/master+../../../../.git/annex/objects/29/wQ/SHA256E-s2533743--ec986bdbe37257bb5a940469d1e1b64a6016902736ed87315bab5856de322f42.JPG/SHA256E-s2533743--ec986bdbe37257bb5a940469d1e1b64a6016902736ed87315bab5856de322f42.JPG+"""]]++I only experienced this behavior two or three times since I have been using git-annex (3 years ago).++Everything else works fine and fsck indicates no problem with the sdcard.++This is a strange behavior that is a pain to solve, but today, I experienced something+even stranger.++Instead of writing the content into the .git/ directory. It was put in the encoded file in the crypt directory, with the path correctly encoded.++[[!format sh """+$ cat repo/.git/config+cat: repo/.git/config: Input/output error+$ encfsctl encode crypt_repo/ .git/config+CqJBnbpfTEgKPAnmc8Sbo/IA-gS5lOzCF65DW9C7l-3MYU/OKritNqY4ewLnzQ,R2dtBXzW+$ cat crypt_repo/CqJBnbpfTEgKPAnmc8Sbo/IA-gS5lOzCF65DW9C7l-3MYU/OKritNqY4ewLnzQ,R2dtBXzW+../../../RSYdwqZh7kgnn3RSbEEx86ax/60jj4hZ60tqcDwSiXy-hHpD9/ebwg,0lJ7hi2iBbgF7HBfdqC/-muvnOVFmMIkfUtJAVyMGRUs/lRm4UHX0Dj2lW6IsCnnBBBSX/O9l1191uPE0a2D-FXhrOEG5,uWeGZHyJccAsw64vy16H3iTcRrxY-75YdRnnMzL27zpC5j0UUVnTaU0TBg0ze-xWCLpoJHZha48Uu8NaekYpn9C5QSSmUV08aZERdCdCfS3/GSOJ0Txna5LM9CLDD6Pw8x5pZ7D5YKFdNb-yx4APrKVm,EXauZiDQoXo6qOuVCMUI4KJB9kdnprlZ4Bw7h7w2jogW7Q1GDpqKVSgk7VYLuk5D7CpdaslquWbg0Ci5e9k9T7+$ encfs decode ../../../RSYdwqZh7kgnn3RSbEEx86ax/60jj4hZ60tqcDwSiXy-hHpD9/ebwg,0lJ7hi2iBbgF7HBfdqC/-muvnOVFmMIkfUtJAVyMGRUs/lRm4UHX0Dj2lW6IsCnnBBBSX/O9l1191uPE0a2D-FXhrOEG5,uWeGZHyJccAsw64vy16H3iTcRrxY-75YdRnnMzL27zpC5j0UUVnTaU0TBg0ze-xWCLpoJHZha48Uu8NaekYpn9C5QSSmUV08aZERdCdCfS3/GSOJ0+../../../.git/annex/objects/f8/gZ/SHA256E-s1455016--03aaa9bcccada56b6615d9e333b8ada2dd6d1fb14c4aacfac87271939377f537.JPG/SHA256E-s1455016--03aaa9bcccada56b6615d9e333b8ada2dd6d1fb14c4aacfac87271939377f537.JPG+"""]]++### What steps will reproduce the problem?+Interruption of a git annex command, I guess an add or an import command.++### What version of git-annex are you using? On what operating system?++Android 4.3 Cyanogenmod/Samsung Galaxy S3, chrooted debian.++[[!format sh """+$ git annex version+git-annex version: 5.20141125+build flags: Assistant Pairing Testsuite S3 Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL+remote types: git gcrypt S3 bup directory rsync web tahoe glacier ddar hook external+$ cat /etc/debian_version+8.0+"""]]++### Please provide any additional information below.+If you ask for additional information, I will gladly provide it.
@@ -0,0 +1,23 @@+### Please describe the problem.++enableremote gives this weird error when trying to change settings on the s3 remote:++<pre>+$ git annex enableremote s3+enableremote s3+git-annex: .git/annex/creds/SOME-LONG-HASH-I-AM-NOT-SURE-SHOULD-BE-PUBLIC: openFile: resource exhausted (Resource temporarily unavailable)+failed+git-annex: enableremote: 1 failed+</pre>++### What steps will reproduce the problem?++Unclear. I tried to update to the latest neurodebian packages to make use of the new [[tips/public_Amazon_S3_remote]] but it seems something is going wrong here.++The git-annex repository is on a "persistent amazon volume" (EBS, presumably?) so there may be something fishy with the filesystem there... ++### What version of git-annex are you using? On what operating system?++5.20150610+gitg608172f-1~ndall+1 on Ubuntu precise, in amazon EC2. --[[anarcat]]++A workaround is to run this on a different machine. I suspect some amazon foul play at hand... so this could be invalid. :(
+ doc/bugs/annex_add_doesn__39__t_any_longer_by_default_commit_git-annex.mdwn view
@@ -0,0 +1,43 @@+### Please describe the problem.++I thought it was just my failing memory but then our tests started to fail (e.g. https://travis-ci.org/datalad/datalad/builds/69776125#L810): previously (e.g. with 5.20150409+git126-ga29f683-1~ndall+1) git annex add (without -c alwayscommit=False) would commit git-annex branch with information about that file right away, but currently (e.g. with 5.20150610+gitg608172f-1~ndall+1) it doesn't happen any longer. I glanced through the logs but didn't find explicit doc on change of behavior so decided to check if that is intended change?++### What version of git-annex are you using? On what operating system?++5.20150610+gitg608172f-1~ndall+1+++### Please provide any additional information below.++[[!format sh """+# If you can, paste a complete transcript of the problem occurring here.+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log+hopa:/tmp/XX+$> git init+Initialized empty Git repository in /tmp/XX/.git/+2 14055.....................................:Mon 06 Jul 2015 06:12:41 PM EDT:.+(git)hopa:/tmp/XX[master]+$> git annex init+init ok+(recording state in git...)+2 14056.....................................:Mon 06 Jul 2015 06:12:43 PM EDT:.+(git)hopa:/tmp/XX[master]+$> echo 21234 > 2+2 14057.....................................:Mon 06 Jul 2015 06:12:45 PM EDT:.+(git)hopa:/tmp/XX[master]+$> git annex add 2+add 2 ok+(recording state in git...)+2 14058.....................................:Mon 06 Jul 2015 06:12:48 PM EDT:.+(git)hopa:/tmp/XX[master]+$> git annex log +fatal: unrecognized argument: -raw++++# End of transcript or log.+"""]]++> `git annex log`, was broken in the last release, and has since been+> fixed (in git). The git-annex branxh is still being committed, as you can+> see with `git log`. [[done]] --[[Joey]]
+ doc/bugs/assistant_memory_leak.mdwn view
@@ -0,0 +1,22 @@+### Please describe the problem.++The assistant is using gruesome amounts of resident memory:++<pre>+USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND+www-data 23898 29.0 90.4 7842888 5536740 ? Sl Jun17 2810:08 /usr/lib/git-annex.linux/exe/git-annex --library-path /usr/lib/git-annex.linu+</pre>++I had to stop the assistant because it ended up using all memory.++### What steps will reproduce the problem?++Unclear. The assistant has been running for a while and there's a big tansfer (~800GB) of files in progress.++### What version of git-annex are you using? On what operating system?++5.20150610+gitg608172f-1~ndall+1 on Debian 7 Wheezy.++### Please provide any additional information below.++daemon.log: http://paste2.org/YJVGvpy5 --[[anarcat]]
+ doc/bugs/assistant_sometimes_does_not_merge_changes_from_remote.mdwn view
@@ -0,0 +1,12 @@+This bug seems to be somewhat reproducible:++1. Set up ~/annex using webapp, keep empty.+2. Add another local repo, eg /tmp/annex, and combine the 2 repositories.++Now files written to ~/annex should quickly appear in /tmp/annex, and+vice-versa. However, this seems not to happen at first. There's a pause+for some reason until changes start propigating. Apparently a push from+the repo that got the file to the other repo doesn't happen.+After this pause, syncing of changes starts happening quickly, as expected.++--[[Joey]]
doc/bugs/flooding_me_with_ssh_password_prompts.mdwn view
@@ -40,3 +40,8 @@ ### What version of git-annex are you using? On what operating system? 5.20140927~bpo70+3 on debian wheezy.++> The git-annex daemon being a "leftover" from a previous session seems+> like the root cause. We have a new bug for this,+> [[bugs/kill_git-annex_assistant_on_logout]], so I am going to close this+> one as a dup. [[done]] --[[Joey]]
doc/bugs/git-annex_unused_--from_s3_doesn__39__t.mdwn view
@@ -28,4 +28,4 @@ The S3 remote is encrypted with the default "hybrid" method -[[!tag moreinfo]]+> [[fixed|done]] --[[Joey]]
doc/bugs/git_annex_still_deleting_content_when_merging.mdwn view
@@ -86,3 +86,12 @@ # End of transcript or log. """]]++> [[Deleted_files_during_merge]] seems like much the same problem.+> In both that bug report and this one, the file that gets deleted on B was+> earlier modifed on A. There is a small difference, in that in this bug+> report, A made 2 commits, first deleting the file and then adding back a+> new version. In the other bug report, A made just 1 commit, changing the+> file. --[[Joey]]++[[!meta title="Assistant deleted file when merging"]]
+ doc/bugs/git_annex_test_fails_when_run_through_powershell.mdwn view
@@ -0,0 +1,28 @@+### Please describe the problem.++When running "git annex test" in a Powershell window, two tests fail (listed in additional details). I am assuming it is because it is using powershell internal commands instead of msys utilities, at least in the case of the "mv" failure. Specifying "mv.exe" instead of just "mv" on Windows should work.++### What steps will reproduce the problem?++Run "git annex test" from the powershell prompt. Two tests fail. All tests pass when run through cmd.++### What version of git-annex are you using? On what operating system?++Windows 7 Enterprise SP1+Powershell version 4.0+git version 1.9.5.msysgit.1+git annex I *think* is 5.20150617, but I don't know for sure.++### Please provide any additional information below.++[[!format sh """+# If you can, paste a complete transcript of the problem occurring here.+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log++addurl failed on file:///ws/wcs-project-new/.t/tmprepo5/myurl++"mv": cannot move `C:\\Users\\duffrw\\LOCALS~1\\Temp\\importtest.0\\import1\\f' to `import1\\f12956.tmp'+git-annex: MoveFileEx "C:\\Users\\duffrw\\LOCALS~1\\Temp\\importtest.0\\import1\\f" "import1\\f": unsupported operation (The system cannot move the file to a different disk drive.)++# End of transcript or log.+"""]]
+ doc/bugs/high_cpu_usage_in_cat-file_and_webapp.mdwn view
@@ -0,0 +1,314 @@+### Please describe the problem.++I've been running git-annex in the background for a few weeks now (my laptop is at home, occasionally gets suspended, but not for the past few days), and this morning (around 9:30am), I noticed I could hear its fan. Looking at CPU usage in htop, "git-annex webapp" was using ~18% and "git --git-dir=/home/flowblok/annex/.git --work-tree=/home/flowblok/annex -c core.bare=false cat-file --batch" was using ~46%.++The repository is in direct mode.+It has one remote which it copies to over the network with "annex-rsync-upload-options = --bwlimit 10".+The last fsck ran at 4am, and finished (with one failure, which I can easily recover from) by 4:30am (I guess I should find out why it didn't notify me in any way).++### What steps will reproduce the problem?++Not a clue!+Though hopefully I've given enough information below for you to figure out what went wrong: let me know if you need anything else.++### What version of git-annex are you using? On what operating system?++Debian Jessie++$ uname -a+Linux moash 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) x86_64 GNU/Linux++$ git-annex version+git-annex version: 5.20141125+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external++### Please provide any additional information below.++[[!format sh """+# strace -p $PIDOF_GIT_CATFILE+open("/home/flowblok/annex/.git/objects/04/13fe78e4f9b37348b5fd03cbe5eabdbcaec068", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=683, ...}) = 0+mmap(NULL, 683, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 683) = 0+open("/home/flowblok/annex/.git/objects/c0/4c0a1d5b43f82c50cf095e42d28d74f0cfc494", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=132, ...}) = 0+mmap(NULL, 132, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 132) = 0+brk(0x1b5b000) = 0x1b5b000+open("/home/flowblok/annex/.git/objects/25/21eb645b1fcac7b6b55551114fe2d69e095896", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=70, ...}) = 0+mmap(NULL, 70, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 70) = 0+write(1, "2521eb645b1fcac7b6b55551114fe2d6"..., 49) = 49+open("/home/flowblok/annex/.git/objects/25/21eb645b1fcac7b6b55551114fe2d69e095896", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=70, ...}) = 0+mmap(NULL, 70, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 70) = 0+open("/home/flowblok/annex/.git/objects/25/21eb645b1fcac7b6b55551114fe2d69e095896", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=70, ...}) = 0+mmap(NULL, 70, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+write(1, "1435997202.486434s 0 5c33e13f-ed"..., 58) = 58+munmap(0x7f9ead5a0000, 70) = 0+write(1, "\n", 1) = 1+read(0, "refs/heads/git-annex:eec/e95/SHA"..., 4096) = 116+lstat("/home/flowblok/annex/.git/refs/heads/git-annex", {st_mode=S_IFREG|0600, st_size=41, ...}) = 0+open("/home/flowblok/annex/.git/refs/heads/git-annex", O_RDONLY) = 3+read(3, "f9d2dc8d54151d01a27c7989a1fc7983"..., 255) = 41+read(3, "", 214) = 0+close(3) = 0+lstat("/home/flowblok/annex/.git/refs/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/tags/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/heads/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/remotes/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/remotes/refs/heads/git-annex/HEAD", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+open("/home/flowblok/annex/.git/objects/f9/d2dc8d54151d01a27c7989a1fc798320034a69", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=207, ...}) = 0+mmap(NULL, 207, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 207) = 0+open("/home/flowblok/annex/.git/objects/65/dd2889161d7002f1d5f94587ab9bd0746d6f61", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=98827, ...}) = 0+mmap(NULL, 98827, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ea4c03000+close(3) = 0+brk(0x1b81000) = 0x1b81000+munmap(0x7f9ea4c03000, 98827) = 0+open("/home/flowblok/annex/.git/objects/d7/bc8b27aad64c59effa77eae026778582761fae", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=550, ...}) = 0+mmap(NULL, 550, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 550) = 0+open("/home/flowblok/annex/.git/objects/d8/00f4d59828022b9ee556b6f3758832da6bfb71", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=131, ...}) = 0+mmap(NULL, 131, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 131) = 0+brk(0x1b5b000) = 0x1b5b000+open("/home/flowblok/annex/.git/objects/ac/9ee326d36283143f9b3b38687870df6a888938", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=71, ...}) = 0+mmap(NULL, 71, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 71) = 0+write(1, "ac9ee326d36283143f9b3b38687870df"..., 49) = 49+open("/home/flowblok/annex/.git/objects/ac/9ee326d36283143f9b3b38687870df6a888938", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=71, ...}) = 0+mmap(NULL, 71, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 71) = 0+open("/home/flowblok/annex/.git/objects/ac/9ee326d36283143f9b3b38687870df6a888938", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=71, ...}) = 0+mmap(NULL, 71, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+write(1, "1435997292.091244s 0 5c33e13f-ed"..., 58) = 58+munmap(0x7f9ead5a0000, 71) = 0+write(1, "\n", 1) = 1+read(0, "refs/heads/git-annex:c54/719/SHA"..., 4096) = 116+lstat("/home/flowblok/annex/.git/refs/heads/git-annex", {st_mode=S_IFREG|0600, st_size=41, ...}) = 0+open("/home/flowblok/annex/.git/refs/heads/git-annex", O_RDONLY) = 3+read(3, "f9d2dc8d54151d01a27c7989a1fc7983"..., 255) = 41+read(3, "", 214) = 0+close(3) = 0+lstat("/home/flowblok/annex/.git/refs/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/tags/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/heads/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/remotes/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/remotes/refs/heads/git-annex/HEAD", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+open("/home/flowblok/annex/.git/objects/f9/d2dc8d54151d01a27c7989a1fc798320034a69", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=207, ...}) = 0+mmap(NULL, 207, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 207) = 0+open("/home/flowblok/annex/.git/objects/65/dd2889161d7002f1d5f94587ab9bd0746d6f61", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=98827, ...}) = 0+mmap(NULL, 98827, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ea4c03000+close(3) = 0+brk(0x1b81000) = 0x1b81000+munmap(0x7f9ea4c03000, 98827) = 0+open("/home/flowblok/annex/.git/objects/04/13fe78e4f9b37348b5fd03cbe5eabdbcaec068", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=683, ...}) = 0+mmap(NULL, 683, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 683) = 0+open("/home/flowblok/annex/.git/objects/c0/4c0a1d5b43f82c50cf095e42d28d74f0cfc494", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=132, ...}) = 0+mmap(NULL, 132, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 132) = 0+brk(0x1b5b000) = 0x1b5b000+open("/home/flowblok/annex/.git/objects/25/21eb645b1fcac7b6b55551114fe2d69e095896", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=70, ...}) = 0+mmap(NULL, 70, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 70) = 0+write(1, "2521eb645b1fcac7b6b55551114fe2d6"..., 49) = 49+open("/home/flowblok/annex/.git/objects/25/21eb645b1fcac7b6b55551114fe2d69e095896", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=70, ...}) = 0+mmap(NULL, 70, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 70) = 0+open("/home/flowblok/annex/.git/objects/25/21eb645b1fcac7b6b55551114fe2d69e095896", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=70, ...}) = 0+mmap(NULL, 70, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+write(1, "1435997202.486434s 0 5c33e13f-ed"..., 58) = 58+munmap(0x7f9ead5a0000, 70) = 0+write(1, "\n", 1) = 1+read(0, "refs/heads/git-annex:eec/e95/SHA"..., 4096) = 116+lstat("/home/flowblok/annex/.git/refs/heads/git-annex", {st_mode=S_IFREG|0600, st_size=41, ...}) = 0+open("/home/flowblok/annex/.git/refs/heads/git-annex", O_RDONLY) = 3+read(3, "f9d2dc8d54151d01a27c7989a1fc7983"..., 255) = 41+read(3, "", 214) = 0+close(3) = 0+lstat("/home/flowblok/annex/.git/refs/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/tags/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/heads/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/remotes/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/remotes/refs/heads/git-annex/HEAD", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+open("/home/flowblok/annex/.git/objects/f9/d2dc8d54151d01a27c7989a1fc798320034a69", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=207, ...}) = 0+mmap(NULL, 207, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 207) = 0+open("/home/flowblok/annex/.git/objects/65/dd2889161d7002f1d5f94587ab9bd0746d6f61", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=98827, ...}) = 0+mmap(NULL, 98827, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ea4c03000+close(3) = 0+brk(0x1b81000) = 0x1b81000+munmap(0x7f9ea4c03000, 98827) = 0+open("/home/flowblok/annex/.git/objects/d7/bc8b27aad64c59effa77eae026778582761fae", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=550, ...}) = 0+mmap(NULL, 550, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 550) = 0+open("/home/flowblok/annex/.git/objects/d8/00f4d59828022b9ee556b6f3758832da6bfb71", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=131, ...}) = 0+mmap(NULL, 131, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 131) = 0+brk(0x1b5b000) = 0x1b5b000+open("/home/flowblok/annex/.git/objects/ac/9ee326d36283143f9b3b38687870df6a888938", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=71, ...}) = 0+mmap(NULL, 71, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 71) = 0+write(1, "ac9ee326d36283143f9b3b38687870df"..., 49) = 49+open("/home/flowblok/annex/.git/objects/ac/9ee326d36283143f9b3b38687870df6a888938", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=71, ...}) = 0+mmap(NULL, 71, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 71) = 0+open("/home/flowblok/annex/.git/objects/ac/9ee326d36283143f9b3b38687870df6a888938", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=71, ...}) = 0+mmap(NULL, 71, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+write(1, "1435997292.091244s 0 5c33e13f-ed"..., 58) = 58+munmap(0x7f9ead5a0000, 71) = 0+write(1, "\n", 1) = 1+read(0, "refs/heads/git-annex:c54/719/SHA"..., 4096) = 116+lstat("/home/flowblok/annex/.git/refs/heads/git-annex", {st_mode=S_IFREG|0600, st_size=41, ...}) = 0+open("/home/flowblok/annex/.git/refs/heads/git-annex", O_RDONLY) = 3+read(3, "f9d2dc8d54151d01a27c7989a1fc7983"..., 255) = 41+read(3, "", 214) = 0+close(3) = 0+lstat("/home/flowblok/annex/.git/refs/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/tags/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/heads/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/remotes/refs/heads/git-annex", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+lstat("/home/flowblok/annex/.git/refs/remotes/refs/heads/git-annex/HEAD", 0x7ffc82e9e580) = -1 ENOENT (No such file or directory)+stat("/home/flowblok/annex/.git/packed-refs", {st_mode=S_IFREG|0600, st_size=1049, ...}) = 0+open("/home/flowblok/annex/.git/objects/f9/d2dc8d54151d01a27c7989a1fc798320034a69", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=207, ...}) = 0+mmap(NULL, 207, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ead5a0000+close(3) = 0+munmap(0x7f9ead5a0000, 207) = 0+open("/home/flowblok/annex/.git/objects/65/dd2889161d7002f1d5f94587ab9bd0746d6f61", O_RDONLY|O_NOATIME) = 3+fstat(3, {st_mode=S_IFREG|0400, st_size=98827, ...}) = 0+mmap(NULL, 98827, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9ea4c03000+close(3) = 0+brk(0x1b81000) = 0x1b81000+munmap(0x7f9ea4c03000, 98827) = 0+# (truncated, since it just repeats over and over for a total of 613759 lines)++# strace -p $PIDOF_GITANNEX_WEBAPP+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+futex(0x417c1dc, FUTEX_WAIT_PRIVATE, 65, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)+--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=0, ptr=0}} ---+rt_sigreturn() = 202+# (ands lots more of the same)+"""]]
doc/bugs/import_leaves_empty_directories_behind.mdwn view
@@ -16,3 +16,5 @@ ### What version of git-annex are you using? On what operating system? 5.20141125++> [[done]] per my earlier comment --[[Joey]]
+ doc/bugs/kill_git-annex_assistant_on_logout.mdwn view
@@ -0,0 +1,29 @@+When you logout of any x session git-annex does not get killed.+This means that if you login again git-annex will still try to use the ssh-agent from the last session which doesn't run anymore.+This leads to countless password queries unless you use a passwordless key.++> I've fixed this, though maybe not in an ideal way.+> +> There's no way to make a XDG desktop file run a command on logout, that I+> can see. That would have been my first choice.+> +> So, I thought I'd just have the assistant not run setsid, so it's part of+> the current login session and would get killed automatically on logout. +> I was surprised that this didn't seem to work, on a system using logind.+> Even when the desktop file ran git-annex with --foreground, it was not+> stopped on logout. This may be because logind defaults to+> KillUserProcesses=false,+> although I'm not sure why processes that are part of the login session+> are not killed at least.+> +> What I have settled on is to leave the daemon running after logout, +> but on a new login have the `git annex assistant --autostart` kill the+> old daemon and start a new one.+> +> Only possible problem with that is there will be a small window after+> login where the old daemon is running. It might slip in a password prompt+> there, using the new DISPLAY. At least it won't flood, and even a single+> password prompt is pretty unlikely.+> +> I am tenatively going to call this [[done]]. Seems to me that logind+> could be improved though. --[[Joey]]
+ doc/bugs/log_fails_with_-raw_error.mdwn view
@@ -0,0 +1,47 @@+### Please describe the problem.++`git-annex log` fails to run if git is an older version.++### What steps will reproduce the problem?++`git-annex log` :)++i somewhat thought that this would work even if i had an older version of git because the standalone release would use the bundled git release...++### What version of git-annex are you using? On what operating system?++5.20150610+gitg608172f-1~ndall+1 on Debian Wheezy.++### Please provide any additional information below.++[[!format sh """+# If you can, paste a complete transcript of the problem occurring here.+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log+$ git annex log video/mp4_sd/TV23_-_TV_Show_Excerpts_-Research.mov.mp4+fatal: unrecognized argument: -raw++$ git annex --debug log video/mp4_sd/TV23_-_TV_Show_Excerpts_-Research.mov.mp4+[2015-06-22 17:34:17 EDT] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","git-annex"]+[2015-06-22 17:34:17 EDT] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--hash","refs/heads/git-annex"]+[2015-06-22 17:34:17 EDT] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","log","refs/heads/git-annex..8bf42e9c6e5b301f487a2d2d596d7cef12a3283d","-n1","--pretty=%H"]+[2015-06-22 17:34:17 EDT] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","log","refs/heads/git-annex..9a7b6b197d5271c29034d47e908fec7de6ea7e5a","-n1","--pretty=%H"]+[2015-06-22 17:34:17 EDT] chat: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","cat-file","--batch"]+[2015-06-22 17:34:17 EDT] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","ls-files","--cached","-z","--","video/mp4_sd/TV23_-_TV_Show_Excerpts_-Research.mov.mp4"]+[2015-06-22 17:34:17 EDT] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","log","-z","--pretty=format:%ct","-raw","--abbrev=40","--remove-empty","refs/heads/git-annex","--","d65/b94/SHA256E-s493891859--5413dd9efe00cbc091e78a7ce6a7034be0e6e121b7faaa054ad2836f8a80aaad.mov.mp4.log"]+fatal: unrecognized argument: -raw+$ git --version+git version 1.7.10.4+$ git annex version+git-annex version: 5.20150610+gitg608172f-1~ndall+1+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E MD5E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 MD5 WORM URL+remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external+local repository version: 5+supported repository version: 5+upgrade supported from repository versions: 0 1 2 4+# End of transcript or log.+"""]]++--[[anarcat]]++> Fixed to use --raw, and added a test case. [[done]] --[[Joey]]
+ doc/bugs/migrate_and_move_duplicates_data.mdwn view
@@ -0,0 +1,36 @@+### Please describe the problem.++I have a main annex with ~2TB of data. In the past is was using SHA256 then I migrated to SHA256E . Recently it was becoming quite full so I took some spare HD and cloned it and moved data from the main to the spares. To my surprise, the main annex disk usage did not go down a bit.++It took me some time to understand why . The problem is exemplified by the shell script <http://mennucc1.debian.net/git-annex/git-annex-no-dedup.sh> .++In short, if a annex is migrated to a new backend and afterwards files are moved, then the hardlinks are broken, and disk usage doubles.++### What steps will reproduce the problem?++run above script++### What version of git-annex are you using? On what operating system?++ 5.20141125 on Debian Jessie amd64++### Please provide any additional information below.++Of course a simple solution would be to drop all unused files. This is ugly , though, because it does not distinguish between+(1) unused files that are previous copies of files I care about (2) unused files that are due to the problem described in the example, and that I do not care about.++A more complex but more elegant solution would be:++(a) when a file is migrated , the old and new objects in the annex are hardlinked; moreover two symlinks should be creates, so that git-annex knows at a glance which two files are hardlinked (see <http://mennucc1.debian.net/git-annex/cross_links.txt> for example)++(b) when moving of copying files, all hardlinked versions whould be move/copied++(c) when dropping , an option may be used to specify if all hardlinked versions should be dropped alltogether++### bye++and thanks, A.++### ps++I tried to attach two files to this bug report but failed
@@ -30,3 +30,8 @@ ### What version of git-annex are you using? On what operating system? git-annex 5.20150508 Linux 4.0.4++> The problem turned out to be sharedRepository=2 which is not documented,+> so git-annex didn't support it, and left the incoming file permissions+> as-is. I've added support for this magic value, so it will work the same+> as "world" now. [[done]] --[[Joey]]
+ doc/bugs/view_fails_with___34__invalid_character__34__.mdwn view
@@ -0,0 +1,30 @@+### Please describe the problem.+I have a "person" attribute with the name of the people on the picture. I could create views and filter on that some time ago, but it looks like git annex now chokes on some illegal (accented?) characters. I have non-ASCII characters in names for sure.++### What steps will reproduce the problem?+Try to create a view using the "person" attribute.++### What version of git-annex are you using? On what operating system?+5.20150617-gac09445 on ArchLinux++### Please provide any additional information below.++[[!format sh """+% git annex view person="*"+/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)+view (searching...)++git-annex: fd:14: commitBuffer: invalid argument (invalid character)+failed+git-annex: view: 1 failed++% git annex version+/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)+git-annex version: 5.20150617-gac09445+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E MD5E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 MD5 WORM URL+remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external+local repository version: 5+supported repository version: 5+upgrade supported from repository versions: 0 1 2 4+"""]]
doc/design/assistant/telehash.mdwn view
@@ -1,6 +1,9 @@ [Telehash](http://telehash.org/) for secure P2P communication between git-annex (assistant) repositories. +Or something similar like [Snow](http://www.trustiosity.com/snow/)+or [cjdns](https://github.com/cjdelisle/cjdns) or tor or i2p.+ ## telehash implementation status * node.js version seems almost complete@@ -8,19 +11,55 @@ * No pure haskell implementation of telehash v2. There was one of telehash v1 (even that seems incomplete). I have pinged its author to see if he anticipates updating it.-* Rapid development, situation may change in a month or 2.+* Rapid development, situation may change in a month or 2. (2014) + Not seeing many commits now (2015) * Is it secure? A security review should be done by competant people (not Joey). See <https://github.com/telehash/telehash.org/issues/23> * **Haskell version** <https://github.com/alanz/htelehash/tree/v2/src/TeleHash>- Development on v2 in haskell is just starting up!+ May support v2; v3 support seems not started yet, and not in active+ development at the moment, although there has been work on it a year ago.+* Not very convinced this is going to be usable anytime soon, so would like+ to find something that is. (2015) +## snow status++* Seems ready to use?+* NAT punching works per docs; relies on a DHT network for hole punching,+ and the reliabilty of that network is not known. I notice it has only 1+ pre-seeded peer in the source tree for the DHT, and that peer was not up+ when I tried it.++## cjdns status++* Has a network with "hundreds of active nodes"+* Is not pure P2P; there's a network that does routing+ of packets. This may be a good thing, or not.+* Seems to require manual configuration of a "friend"+ node that's already on the network, with address and password to connect+ to it, so if you can't find someone you know to connect to their node,+ you can't use it. Urk.++## tor status++* Awesome.+* Easy to install, use; very well known.+* There's been some [haskell packages developed recently](http://www.leonmergen.com/haskell/privacy/2015/05/30/on-anonymous-networking-in-haskell-announcing-tor-and-i2p-for-haskell.html) + to communicate with tor and set up onion addresses for a service.+ Could be used to make git-annex run as a hidden service.++## i2p status+ ## implementation basics * Add a telehash.log that maps between uuid and telehash address.+ Or let's generalize it a bit; since things like snow work close enough+ to the same. Make it address.log and map between uuid and (networktype, address) * On startup, assistant creates a new telehash keypair if not already present; stores this locally and generates a telehash address from it,- stored in telehash.log.+ stored in address.log.+ (Or, if using snow, uses dns to look up the encryption public key address+ of the local snow server, and stores that in address.log.) * Use telehash for notifications of changes to the repository * Do git push over telehash. (Pretty easy, may need rate limiting in situations involving relays.)@@ -28,17 +67,19 @@ XMPP being an unreliable transport, requiring a separate XMPP account per repo, and XMPP not being end-to-end encrypted) -## telehash address discovery+## address discovery +The address is a public key, so won't want to type that in. Need discovery.+ * Easy way is any set of repos that are already connected can communicate- them via telehash.log.-* Local pairing can be used for telehash address discovery. Could be made+ them via address.log.+* Local pairing can be used for address discovery. Could be made to work without ssh (with content transfer over telehash discussed below).-* XMPP pairing can also be used for telehash address discovery. (Note that+* XMPP pairing can also be used for address discovery. (Note that MITM attacks are possible.) Is it worth keeping XMPP in git-annex just for this?-* Telehash addresses of repositories can be communicated out of band (eg,+* Addresses of repositories can be communicated out of band (eg, via an OTR session or gpg signed mail), and pasted into the webapp to initiate a repository pairing that then proceeds entirely over telehash. Once both sides do this, the pairing can proceed automatically.@@ -46,16 +87,18 @@ ## content transfer over telehash * In some circumstances, it would be ok to do annexed content transfer- over telehash. + over telehash. Need to check if there are MTU problems with large data bodies in telehash messages. Probably not when a bridge is being used, due to required rate limiting in bridging over telehash. Cloud transfer remotes still needed for- those situations.+ those situations. + (And it should be fine to do it over snow, maybe more so.) * On a LAN, telehash can be used to determine the current local IP address of another computer on the LAN. The 2 could then determine if either uses ssh and if so use regular git-annex-shell for transfers. Or could do- annexed content transfer directly over telehash.+ annexed content transfer directly over telehash. + (Snow does not provide this feature AFAIK.) ## generic git-remote-telehash @@ -66,7 +109,7 @@ ## separate daemon? -See [[git-remote-daemon]] for a design.+See [[git-remote-daemon]] for its design. Advantages:
+ doc/devblog/day_294__back_focusing_on_bugs.mdwn view
@@ -0,0 +1,7 @@+Back, and have spent all day focusing on new bug reports. All told, I fixed+4 bugs, followed up on all other bugs reported while I was away, and fixed+the android autobuilder.++The message backlog started the day at 250 or something, and is down to 178+now. Looks like others have been following up to forum posts while I was+away (thanks!) so those should clear quickly.
+ doc/devblog/day_295__caught_up.mdwn view
@@ -0,0 +1,8 @@+Now caught up on nearly all of my backlog of messages, +and indeed am getting to some messages that have been waiting for months.+Backlog is down to 113! Couple of bugfixes resulted, and many questions answered.++Think I'll spend a couple more days dealing with the older part of the+backlog. Then, when that reaches diminishing returns, I'll move on to some+big change. I have been thinking about [[design/caching_database]] on and+off..
+ doc/devblog/day_296__into_the_backlog.mdwn view
@@ -0,0 +1,16 @@+Mostly spent today getting to older messages in the backlog. This did+result in a few fixes, but with 97 old messages left, I can feel the+diminishing returns setting in, to try to understand old bug reports that+are often unclear or lacking necessary info to reproduce them.++By the way, if you feel your bug report or question has gotten lost in my+backlog, the best thing to do is post an update to it, and help me+reproduce it, or clarify it.++Moved on to looking through [[todo]], which was a more productive+way to find useful things to work on. ++Best change made today is that `git annex unused` can now be configured to+look at the reflog. So, old versions of files are considered still used+until the reflog expires. If you've wanted a way to only delete (or move+away) unused files after they get to a certian age, this is a way to do that ...
+ doc/devblog/day_297__optparse-applicative.mdwn view
@@ -0,0 +1,25 @@+Now working on converting git-annex to use+[optparse-applicative](https://github.com/pcapriotti/optparse-applicative)+for its command line parsing. I've wanted to do this for a long time, +because the current code for options is generally horrible, runs in+IO, and is not at all type safe, while optparse-applicative has wonderful+composable parsers and lets each subcommand have its own data type+repesenting all its options.++What pushed me over the edge is that optparse-applicative has automatic+bash completion!++ # source <(git-annex --bash-completion-script `which git-annex`)+ # git-annex fsck -+ --all --key -S+ --from --more -U++Since nobody has managed to write a full bash completion for git-annex+before, let alone keep it up-to-date with changes to the code, automating+the problem away is a really nice win. :)++The conversion is a rather huge undertaking; the diff is already over 3000+lines large after 8 hours of work, and I'm maybe 1/3rd done, with+the groundwork laid (except for global options still todo) and a few+subcommands converted. This won't land for this week's release; it'll+need a lot of testing before it'll be ready for any release.
+ doc/encryption/comment_2_5c2da865082de475254ebfd53feb2d0a._comment view
@@ -0,0 +1,13 @@+[[!comment format=mdwn+ username="joey"+ subject="""comment 2"""+ date="2015-07-06T19:57:12Z"+ content="""+@Giovanni, git is complaining that there is already a remote named+"myremote" enabled in the current repository. Perhaps you have reused this+name for a different remote.++(This seems to have nothing to do with the page the comment was posted to, which +is a bit annoying. Please post questions in the forum and not attached to+random other pages.)+"""]]
+ doc/forum/Adding_normal___40__non-annexed__41___files_in_Windows.mdwn view
@@ -0,0 +1,31 @@+Hi,+I'm working on a game project (Unity3D) which I want to use git-annex for all those binary assets,++but I still want to be able to commit normal code files in git,++is there a way to do that?++below is what I tried (but failed) to do.++Thanks.++Chris++++ C:\Users\Chris\Projects\testing>git annex init "testing"+ init testing+ Detected a filesystem without fifo support.+ + Disabling ssh connection caching.+ + Detected a crippled filesystem.+ + Enabling direct mode.+ ok+ (recording state in git...)+ + C:\Users\Chris\Projects\testing>echo test > testing.txt+ + C:\Users\Chris\Projects\testing>git add testing.txt+ fatal: This operation must be run in a work tree
+ doc/forum/How_to_overwrite_local_changes__63__.mdwn view
@@ -0,0 +1,7 @@+Hello,++I have a repo Desktop (client), a repo Server (transfer) and a repo Notebook (Client). Usually first thing I do in the morning is go git annex sync --content the changes to the laptop. Today I accidently modified some files on the laptop before I synced. After I syncing I know have some files foo.variant-afd1 and foo.variant-a6d3 with which I don't know what to do.++How can I discard local changes and copy all changes from the transfer repo to the laptop? Local changes should be overwritten.++Thanks!
+ doc/forum/MD5_and_MD5E_backends_no_longer_available__63__.mdwn view
@@ -0,0 +1,5 @@+I set the backend to MD5E with git config, but when I try to import files I get this error:++ git-annex: unknown backend MD5E++MD5 doesn't work either. Have these been removed as backend options? They are listed [here](http://git-annex.branchable.com/backends/).
+ doc/forum/Restoring_files__63__.mdwn view
@@ -0,0 +1,11 @@+One of my users created a git annex repository a while ago and has since left the lab, and I think they messed it up badly.++It looks like all of the data is present in the annex directory, but there are no files in main directory, other than the .git folder. The master branch seems to be gone, and the only branch left is called git-annex.++git log gives the error "fatal: bad default revision 'HEAD'" when I first do git log, because the branch that I am on doesn't exist (the master branch). Changing to the git-annex branch works, but then I can't go back to the master branch because it doesn't exist.++git annex unannex doesn't seem to do anything. Is there any way to get the data back following this kind of mess up?++Thanks for your help++-Mike
+ doc/forum/Robustness_on_failing_hardware.mdwn view
@@ -0,0 +1,30 @@+Hi everyone,+++I've had a bad git-annex day and I left some musings on my first use of it. There's a question though at the end if you don't need to read that.+++today I've spend some time trying to deal with a failing SHA256E backend. Or more precise, I'm patienting a refurbished Athlon board[*] without case and that seems to give a lot of errors. I've put up some shielding at the SDRAM which helped a lot on the checksumming, but now its the network department is having a hard time. ++This is basicly an effort to recover an old 1.5TB USB NTFS disks with bit rot, a failed ext4 and recover collections from other aging USB/desktop disks. There is some new hardware on the way, to restore another (proper) box with some ECC memory. That should fix my problems, I think. I've never dealt with a problem like this before. Before git-annex I would have been using rsync -azc or mostly -azu, but I've never had problems like this before. ++It has me pondering a bit though. To help git-annex i've done manual rsync -azc transfers, with some although a very low success--I wonder if its the lack of casing, lack of ground, or simply the non-ecc that is the cause. But that is not really the question.++rsync does not at first glance have an option to configure the amount of retries, but -azc does try and gives a checksum failure another try before giving up. I had never seen rsync do that before even though I've been using it for a decade. I guess that shows how rare this problem should be, but its still creeping me a bit. I've never had checksummed media file collections, so I really cant be sure about integrity, can I?++The behaviour of the SHA256E backend is a bit hysterical in this environment. Running a full annex fsck always results in some bad files. The bigger the file the harder it is to get a checksum match. I guess if I wanted to continue I should wrap the fsck step in a shell script that can reinject and fsck again and does do not needless re-checks in one run. It should figure it out in the end with a bit of more time.++My other reaction would be to throw more checksums at it, from simple to complex. Something between filesize and sha256. I guess the whole would then have some different modes of retries and behaviours of failure maybe. Or levels of trust in the integrity. Maybe using simpler checksums would make the situation more bearable, since the problem is not disk-related iow. if the file is there and has checked out ok, then the re-fsck itself and bad memory/shielding are the culprits. ++tldr;++git-annex has no retry at all. I have seen it can take a -i <keyfile> somewhere. For robustness, it would be nice if there was a rsync -c mode. It would confirm the object was transferred correctly too. My workflow is to 'annex fsck' at the remote after copying files there. Is it correct to presume that using 'annex move' in my case, would have made the sending repo dropping files even though the remote still has only corrupted copies?++I'm new to git-annex but been wanting something like git annex for a long time. Made some attempts myself, and too pondered how to use venerable GIT but never figured something out. What I'm saying though is I may want to dig around to see what I can do with Haskell. ++I'm thinking a backend with some more checksums, maybe then some option to fsck to request only partial check of the key. Has something like a faster/less-thorough fsck using smaller checksums ever come up? And might this be a way to go at this? What do you think.+++++[*] Asus M2A7A-AM SE w/ AMD Athlon 64 X2 5200+ Dual Core 2.7
+ doc/forum/Storing_copies_on_LTO_tapes__63__.mdwn view
@@ -0,0 +1,13 @@+I'm looking for a way to count/track annex data copied to LTO tapes.++In my use case I'm splitting many terabytes of data to separate repositories on several hard drives, backing them up on tapes, and keeping track of all this with remotes in a central repository (with lots of dropped content). All good with the HDs, but I'm at a loss about how to handle the copies on tapes.++Three alternatives I've come up with so far:++1. Simply tar the repositories from the HDs to the tapes. Problem: no way to notify git annex of the existence of these manual copies. Or is there?+2. Remote (special or normal) on LTFS (linear posix compatible file system on top of tape). Problems:+ 1. `git annex get`ing a dropped directory from there would cause files to be accessed in random order, right? Or is the retrieve guaranteed to happen in the same order as the files in the directory were written by `git annex copy`?+ 2. LTFS has a big block size (512KB) => wasted space when lots of small files. (Not a major problem, though.)+3. Write a special (read-only) remote hook for `tar`. Problem: `git annex get` would make one hook *RETRIEVE* request per file, leading to random access again, while the only effective way would be to get a list of all files to be retrieved, and then returning them in the order they turn up from the tar package (or even ingest the whole tar file to .git/annex/).++Thoughts?
+ doc/forum/Trouble_adding_ssh_remote_using_assistant_on_windows.mdwn view
@@ -0,0 +1,19 @@+Hi, just trying to set up git-annex-assistant on freshly installed windows 10. I've run the web app and created a local repo. I also grabbed the tarball on my server and ran "git-annex" with no arguments (?). I'm now trying to add remote server using ssh. I add the correct details and click "Check this server", at which point it displays "Testing Server, Checking ssh connection to the server. This could take a minute". indefinitely.++I've checked the log and don't see any ssh errors, but I do see some weirdness:++```+(scanning...) [2015-06-29 19:02:36 GMT Summer Time] Watcher: Performing startup scan+(started...) rerrrrrrceereeeevccecccc:vvcvvvv ::v::::f : aff ffffiaafaaaaliiaiiiiellilllldeeleeee ddedddd( d N(( ((((oNN(NNNN ooNooooe o ree eeeerrrerrrrorrrrrrrrooroooo)rrorrrr+))r))))++)++rerrrceeevccc:vvv :::f afffiaaaliiiellldeee ddd( N(((oNNN oooe reeerrrrorrrrooo)rrr+)))++rerrrrrrrrrrrrrceeeeeeeeeeeeevccccccccccccc:vvvvvvvvvvvvv :::::::::::::f afffffffffffffiaaaaaaaaaaaaaliiiiiiiiiiiiiellllllllllllldeeeeeeeeeeeee ddddddddddddd( N(((((((((((((oNNNNNNNNNNNNN oooooooooooooe reeeeeeeeeeeeerrrrrrrrrrrrrrorrrrrrrrrrrrrrooooooooooooo)rrrrrrrrrrrrr+)))))))))))))+```++Not sure what that is but it might be relevant? Any help would be appreciated.
+ doc/forum/security_risk_presented_by_remote.log__63__.mdwn view
@@ -0,0 +1,5 @@+I am curious if remote.log in the repository (or anything in the repository for that matter) gives someone access to the data stored in the special remotes.++If I'm using an encrypted s3 special remote, and someone gets access to the entire repository, will they be able to decrypt things? Or is the gpg stuff stored completely separately and therefore completely unaccessable, even if someone got access to the entire contents of the git repository?++What is the cipher and the cipherkeys stored in git show git-annex:remote.log?
doc/git-annex-add.mdwn view
@@ -18,6 +18,9 @@ added, `git annex add` will behave the same as `git add` and add the non-large file directly to the git repository, instead of to the annex. +This command can also be used to add symbolic links, both symlinks to+annexed content, and other symlinks.+ # OPTIONS * `--include-dotfiles`
+ doc/git-annex-copy/comment_1_9be279110a112335bc72ee8c8a347da2._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="tomekwi"+ subject="--all seems to do nothing"+ date="2015-07-03T05:14:37Z"+ content="""+Hi,++I want to back up all my files including previous versions on an external drive. I’ve tried these two commands – both of them exited instantly without producing any output:++ $ git-annex copy --all --to=external-drive+ $ git-annex copy --unused --to=external-drive+"""]]
+ doc/git-annex-copy/comment_2_599958b0a57d2f8f4383733d28ad9c8d._comment view
@@ -0,0 +1,7 @@+[[!comment format=mdwn+ username="tomekwi"+ subject="comment 2"+ date="2015-07-03T05:17:12Z"+ content="""+By the way I’m running 5.20140717 – the version distributed by Fedora.+"""]]
+ doc/git-annex-copy/comment_3_a9408822e314c32bebf8230f9d40216b._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="joey"+ subject="""comment 3"""+ date="2015-07-06T17:39:58Z"+ content="""+Commenting on a man page is not the right way to report a problem. File a+bug report.++FWIW, copy --all works fine in my tests. Of course, there are certianly+situations where it copies nothing. Eg, if there are no files with ontents+in the repository for it to copy.+"""]]
doc/git-annex-dropkey.mdwn view
@@ -21,6 +21,8 @@ [[git-annex]](1) +[[git-annex-setkey]](1)+ # AUTHOR Joey Hess <id@joeyh.name>
doc/git-annex-log.mdwn view
@@ -29,11 +29,11 @@ The [[git-annex-matching-options]](1) can be used to specify files to act on. -# OPTIONS- # SEE ALSO [[git-annex]](1)++[[git-annex-forget]](1) # AUTHOR
doc/git-annex-proxy.mdwn view
@@ -25,6 +25,12 @@ git annex proxy -- git mv mydir newname +To commit the changes to a specific file, first use git annex add to+stage the changes in the index, and then proxy a commit:++ git annex add myfile+ git annex proxy -- git commit myfile -m foo+ # SEE ALSO [[git-annex]](1)
+ doc/git-annex-setkey.mdwn view
@@ -0,0 +1,30 @@+# NAME++git-annex setkey - sets annexed content for a key++# SYNOPSIS++git annex setkey key file++# DESCRIPTION++This plumbing-level command makes the content of the specified key+be set to the specified file. The file is moved into the annex.++No checking is done that the file contains the expected contents of the key.+So it's generally a better idea to use [[git-annex-reinject]](1) instead of+this command.++# SEE ALSO++[[git-annex]](1)++[[git-annex-reinject]](1)++[[git-annex-dropkey]](1)++# AUTHOR++Joey Hess <id@joeyh.name>++Warning: Automatically converted into a man page by mdwn2man. Edit with care.
doc/git-annex-unused.mdwn view
@@ -49,17 +49,25 @@ This adds all refs/heads/ refs, as well as the previous version of HEAD. It also adds all tags, except for old-tag. -This refspec is processed by starting with an empty set of refs,+The refspec is processed by starting with an empty set of refs, and walking the list in order from left to right. -* Each + using a glob is matched against all relevant refs- (a subset of `git show-ref`) and all matching refs are added- to the set.- For example, "+refs/remotes/*" adds all remote refs.-* Each + without a glob adds the literal value to the set.- For example, "+HEAD^" adds "HEAD^".-* Each - is matched against the set of refs accumulated so far.- Any matching refs are removed from the set.+Each + using a glob is matched against all relevant refs+(a subset of `git show-ref`) and all matching refs are added+to the set.+For example, "+refs/remotes/*" adds all remote refs.++Each + without a glob adds the literal value to the set.+For example, "+HEAD^" adds "HEAD^".++Each - is matched against the set of refs accumulated so far.+Any matching refs are removed from the set.++"reflog" adds all the refs from the reflog. This will make past versions+of files not be considered to be unused until the ref expires from the+reflog (by default for 90 days). Note that this may make git-annex unused+take some time to complete, it if needs to check every ref from the+reflog. # SEE ALSO
doc/git-annex.mdwn view
@@ -547,6 +547,13 @@ See [[git-annex-registerurl]](1) for details. +* `setkey key file`++ Moves a file into the annex as the content of a key.+ + See [[git-annex-setkey]](1) for details.++ * `dropkey [key ...]` Drops annexed content for specified keys.@@ -862,6 +869,10 @@ commit the data by running `git annex merge` (or by automatic merges) or `git annex sync`. + Note that you beware running `git gc` if using this configuration,+ since it could garbage collect objects that are staged in git-annex's+ index but not yet committed.+ * `annex.hardlink` Set this to `true` to make file contents be hard linked into the@@ -918,8 +929,8 @@ * `annex.autocommit` - Set to false to prevent the git-annex assistant from automatically- committing changes to files in the repository.+ Set to false to prevent the git-annex assistant and git-annex sync+ from automatically committing changes to files in the repository. * `annex.startupscan` @@ -1238,6 +1249,14 @@ Also note that when using views, only the toplevel .gitattributes file is preserved in the view, so other settings in other files won't have any effect.++# EXIT STATUS++git-annex, when called as a git subcommand, may return exit codes 0 or 1+for success or failures, or, more rarely, 127 or 128 for certain very+specific failures. git-annex itself should return 0 on success and 1 on+failure, unless the `--time-limit=time` option is hit, in which case it+returns with exit code 101. # FILES
+ doc/install/fromsource/comment_49_c8370525547b435d963a2c1192a21124._comment view
@@ -0,0 +1,93 @@+[[!comment format=mdwn+ username="dave@2ab82f485adf7e2ce787066e35f5f9789bff430b"+ nickname="dave"+ subject="apt-get build-dep fails"+ date="2015-07-09T00:07:32Z"+ content="""+ hobbes@namagiri:~/src$ sudo apt-get build-dep git-annex+ Reading package lists... Done+ Building dependency tree + Reading state information... Done+ E: Build-Depends dependency for git-annex cannot be satisfied because the package libghc-hamlet-dev cannot be found++Hmm, deprecated in favor of libghc-shakespear-dev, according to http://hackage.haskell.org/package/hamlet ...++ hobbes@namagiri:~/src/apt-get-source-git-annex$ grep -iR build-depends.*hamlet|tr , \\n+ git-annex_5.20141125.dsc: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-sha-dev+ libghc-cryptohash-dev+ libghc-dataenc-dev+ libghc-utf8-string-dev+ libghc-hs3-dev (>= 0.5.6)+ libghc-dav-dev (>= 1.0) [amd64 i386 kfreebsd-amd64 kfreebsd-i386 powerpc]+ libghc-quickcheck2-dev+ libghc-monad-control-dev (>= 0.3)+ libghc-exceptions-dev (>= 0.6)+ libghc-transformers-dev+ libghc-unix-compat-dev+ libghc-dlist-dev+ libghc-uuid-dev+ libghc-json-dev+ libghc-aeson-dev+ libghc-ifelse-dev+ libghc-bloomfilter-dev+ libghc-edit-distance-dev+ libghc-hinotify-dev [linux-any]+ libghc-stm-dev (>= 2.3)+ libghc-dbus-dev (>= 0.10.3) [linux-any]+ libghc-fdo-notify-dev (>= 0.3) [linux-any]+ libghc-yesod-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc]+ libghc-yesod-static-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc]+ libghc-yesod-default-dev [i386 amd64 kfreebsd-amd64 powerpc]+ libghc-hamlet-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc]+ libghc-shakespeare-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc]+ libghc-clientsession-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc]+ libghc-warp-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc]+ libghc-warp-tls-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc]+ libghc-wai-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc]+ libghc-wai-extra-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc]+ libghc-securemem-dev+ libghc-byteable-dev+ libghc-dns-dev+ libghc-case-insensitive-dev+ libghc-http-types-dev+ libghc-http-conduit-dev+ libghc-blaze-builder-dev+ libghc-crypto-api-dev+ libghc-network-multicast-dev+ libghc-network-info-dev [linux-any kfreebsd-any]+ libghc-safesemaphore-dev+ libghc-network-protocol-xmpp-dev (>= 0.4.3-1+b1)+ libghc-gnutls-dev (>= 0.1.4)+ libghc-xml-types-dev+ libghc-async-dev+ libghc-feed-dev (>= 0.3.9.2)+ libghc-regex-tdfa-dev [!mipsel !s390]+ libghc-regex-compat-dev [mipsel s390]+ libghc-tasty-dev (>= 0.7) [!sparc]+ libghc-tasty-hunit-dev [!sparc]+ libghc-tasty-quickcheck-dev [!sparc]+ libghc-tasty-rerun-dev [!sparc]+ libghc-optparse-applicative-dev [!sparc]+ lsof [!kfreebsd-i386 !kfreebsd-amd64 !hurd-any]+ ikiwiki+ perlmagick+ git (>= 1:2.0)+ rsync+ wget+ curl+ openssh-client+ git-remote-gcrypt (>= 0.20130908-6)+ llvm-3.4 [armel armhf]+ +I think that's the bug, right there: *git-annex_5.20141125.dsc*.++I hope this helps.+"""]]
− doc/news/version_5.20150508.mdwn
@@ -1,51 +0,0 @@-git-annex 5.20150508 released with [[!toggle text="these changes"]]-[[!toggleable text="""- * Improve behavior when a git-annex command is told to operate- on a file that doesn't exist. It will now continue to other- files specified after that on the command line, and only error out at- the end.- * S3: Enable debug logging when annex.debug or --debug is set.- * S3: git annex info will show additional information about a S3 remote- (endpoint, port, storage class)- * S3: Let git annex enableremote be used, without trying to recreate- a bucket that should already exist.- * S3: Fix incompatability with bucket names used by hS3; the aws library- cannot handle upper-case bucket names. git-annex now converts them to- lower case automatically.- * import: Check for gitignored files before moving them into the tree.- (Needs git 1.8.4 or newer.)- * import: Don't stop entire import when one file fails due to being- gitignored or conflicting with something in the work tree.- * import: Before removing a duplicate file in --deduplicate or- --clean-duplicates mode, verify that enough copies of its content still- exist.- * Improve integration with KDE's file manager to work with dolphin- version 14.12.3 while still being compatable with 4.14.2.- Thanks, silvio.- * assistant: Added --autostop to complement --autostart.- * Work around wget bug #784348 which could cause it to clobber git-annex- symlinks when downloading from ftp.- * Support checking ftp urls for file presence.- * Fix bogus failure of fsck --fast.- * fsck: Ignore error recording the fsck in the activity log,- which can happen when running fsck in a read-only repository.- Closes: #[698559](http://bugs.debian.org/698559)- (fsck can still need to write to the repository if it find problems,- but a successful fsck can be done read-only)- * Improve quvi 0.4 output parsing to handle cases wher there is no known- filename extension. This is currently the case when using quvi with- youtube. In this case, the extension ".m" will be used.- * Dropped support for older versions of yesod, warp, and dbus than the ones- in Debian Jessie.- * Switch from the obsolete dataenc library for base64 encoding to sandi.- (Thanks, Magnus Therning)- * Debian's ghc now supports TH on arm! Adjust build dependencies- to build the webapp on arm, and enable DAV support on arm. \o/- * Adjust some other arch specific build dependencies that are now- available on more architectures in Devian unstable.- * Windows: Remove cygwin ssh, the newer version of which has stopped- honoring the setting of HOME. Instead, copy msysgit's ssh into PATH.- Note that setting up a remote ssh server using password authentication- is known to be broken in this release on Windows.- * Windows: Roll back to an older version of rsync from cygwin.- The newer version has some dependency on a newer ssh from cygwin."""]]
+ doc/news/version_5.20150710.mdwn view
@@ -0,0 +1,34 @@+git-annex 5.20150710 released with [[!toggle text="these changes"]]+[[!toggleable text="""+ * add: Stage symlinks the same as git add would, even if they are not a+ link to annexed content.+ * sync: When annex.autocommit=false, avoid making any commit of local+ changes, while still merging with remote to the extent possible.+ * unused: --used-refspec can now be configured to look at refs in the+ reflog. This provides a way to not consider old versions of files to be+ unused after they have reached a specified age, when the old refs in+ the reflog expire.+ * log: Fix reversion introduced in version 5.20150528 that broke this command.+ * assistant --autostart: First stop any daemons that are already running,+ which might be left over from a previous login session and so unable to+ use the ssh agent of a new login session.+ * assistant: Fix local pairing to not include newline in ssh pubkey,+ which is rejected on the other end for security reasons.+ * assistant: Fix ANNEX\_SHELL\_DIR written to ~/.ssh/authorized\_keys+ in local pairing to be the absolute path to the repository, not "."+ This was a reversion caused by the relative path changes in 5.20150113.+ * Brought back the setkey plumbing command that was removed in 2011, since+ we found a use case for it. Note that the command's syntax was changed+ for consistency.+ * bugfix: Pass --full-tree when using git ls-files to get a list of files+ on the git-annex branch, so it works when run in a subdirectory.+ This bug affected git-annex unused, and potentially also transitions+ running code and other things.+ * Support git's undocumented core.sharedRepository=2 value, which+ is equivalent to "world", and is set when a repo was created using+ git init --shared=world.+ * When building on linux, pass --as-needed to linker to avoid linking+ with unused shared libraries including libyaml.+ * import: Fix failure of cross-device import on Windows.+ * merge: Avoid creating the synced/master branch.+ * Removed support for optparse-applicative versions older than 0.10."""]]
doc/preferred_content/standard_groups.mdwn view
@@ -51,21 +51,21 @@ `anything` -### incremental backup+### incrementalbackup Only wants content that's not already backed up to another backup or incremental backup repository. `((not copies=backup:1) and (not copies=incrementalbackup:1)) or approxlackingcopies=1` -### small archive+### smallarchive Only wants content that's located in an "archive" directory, and only if it's not already been archived somewhere else. `((include=*/archive/* or include=archive/*) and not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1` -### full archive+### archive All content is wanted, unless it's already been archived somewhere else.
doc/todo/Deleting_Unused_Files_by_Age.mdwn view
@@ -11,3 +11,7 @@ > However, I think that many users expect git annex unused to be able to > immediately find and remove a file after it's been deleted. So this > probably needs to be a configurable behavior. --[[Joey]]++>> Implemented this, `git annex unused --used-refspec=+refs/heads/*:reflog`+>> will consider all head refs as used (the default), plus consider all+>> refs in the reflog as used. [[done]] --[[Joey]]
+ doc/todo/S3_fsck_support/comment_3_2b96f61188b2ada729a284e95fc89dab._comment view
@@ -0,0 +1,21 @@+[[!comment format=mdwn+ username="joey"+ subject="""comment 3"""+ date="2015-07-02T16:43:03Z"+ content="""+Not knowing how S3's backend is implemented, I have to assume that, in+order to get the advertised number of 9's of reliability, it involves some+replication of data, as well as some method to detect if a bit has flipped+or a drive has died, and recover.++This is requesting that git-annex ask S3 for a md5sum, and compare it+against a md5sum that it, presumably, keeps track of locally. If the two+are different, git-annex could tell that S3 has lost data. But, git-annex is+in a much worse position to tell if S3 has lost data then S3 itself is.+It seems very unlikely that this extra checking would ever detect a problem+that S3 didn't itself detect and fix (or in the 0.00001% case, +fail to fix and delete the lost file?)++Bit flips during transfer seem more likely than that. `poContentMD5` could+help guard against those.+"""]]
+ doc/todo/Set_total_storage_limit_for_special_remotes..mdwn view
@@ -0,0 +1,1 @@+I'd like to be able to set a fixed limit on how much storage can be uploaded to a special remote. A use case for this may be that I want to spend no more than Y dollars, on a storage service that charges $X per gigabyte. I would thus set a limit where I a upload would be interrupted with a warning about the limit, and to continue I would need to use a --force option.
doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn view
@@ -6,3 +6,5 @@ Best regards, T.++> [[fixed|done]] --[[Joey]]
doc/todo/commit_in_direct_mode.mdwn view
@@ -7,3 +7,6 @@ Thanks, Richard++> I've documented in the git-annex-proxy man page how to use it to do+> per-file commits. [[done]] --[[Joey]]
+ doc/todo/easy_way_to_reproduce_normal_download_command.mdwn view
@@ -0,0 +1,24 @@+so there's a `annex.web-download-command` settings, great! i have used+it to do bandwidth limitations with:++ wget --limit-rate=$download -O %file %url++...and it works well.. however, i notice the output is different, and+that's because once we override that setting, git-annex doesn't add+other magic settings it uses. so by turning that thing on and off and+inspecting the process list, i was able to figure out that the command+is actually:++ wget -q --show-progress --clobber -c --limit-rate=$download -O %file %url++that gets me closer to the command generated by git-annex. however, i+am not sure the `--clobber` and `-c` flags should always be+present. furthermore, the `--user-agent+git-annex/5.20150610+gitg608172f-1~ndall+1` flag is missing.++could there be an (optional) %useragent interpolation to fix that?++what about the other settings, is it okay to hardcode those?++maybe this would be easier if there would be an options override just+like rsync, but separate ones for curl and wget... --[[anarcat]]
+ doc/todo/git-annex_info___34__du__34___remote_support.mdwn view
@@ -0,0 +1,41 @@+so i know about the various discussions around a `du` that follows git-annex symlinks (e.g. [[forum/__34__du__34___equivalent_on_an_annex__63__/]] or [[forum/gadu_-_git-annex_disk_usage/]]. this is not about that, or at least not directly. :)++i believe there's a distinct use-case for a simpler `du` subcommand that will calculate the disk space used locally (in case of the default `--in here`) but could also use the tracking log to determine the space usage in *other* locations. this would be especially useful on remotes that we don't have shell access to, s3 comes to mind. i thought that `git annex info` could output that, but it seems it doesn't:++<pre>+$ git annex info . --in s3 --exclude='video/original/*'+directory: .+local annex keys: 0+local annex size: 0 bytes+annexed files in working tree: 0+size of annexed files in working tree: 0 bytes+numcopies stats:+repositories containing these files:+$ git annex info --in s3 --exclude='video/original/*'+repository mode: indirect+trusted repositories: 0+semitrusted repositories: 6+ 00000000-0000-0000-0000-000000000002 -- bittorrent+ 2d61a8de-a24e-44e3-9aa0-54f033fec1e9 -- host-mp20120507-1.mp.isuma.tv+ 9401d7b3-44d2-48ab-a9f1-c77fac469a1a -- s3+ c510ddad-24cd-4353-b5f4-03581f6f9dca -- cs.isuma.tv [here]+ d2a7d4ff-1dbf-4bfa-bb97-ae593626daf6 -- sneakernet+ e747d5c8-ea47-480f-8c5d-2986ce65ed89 -- isuma.tv+untrusted repositories: 2+ 00000000-0000-0000-0000-000000000001 -- web+ 36d2cb94-e0a2-446a-87c9-02f73135b302 -- anarcat@desktop008:~/src/isuma/isuma-files+transfers in progress: none+available local disk space: 67.66 gigabytes (+1 megabyte reserved)+local annex keys: 0+local annex size: 0 bytes+annexed files in working tree: 0+size of annexed files in working tree: 0 bytes+bloom filter size: 16 mebibytes (0% full)+backend usage:+</pre>++just to be clear here, the problem isn't as much providing `du-like output`, which `git annex info $path` does pretty well. the problem is that it doesn't work on remote servers, at least that is what i observed above.++i still think it would be nice to have a `du` command, just because it's a command "WTF" situation users seem to get stuck into.. but this issue is only about having this work on remote repositories. thanks! -- [[anarcat]]++> Fixed via time machine. [[done]] --[[Joey]]
+ doc/todo/use_inode_cache_in_unlocked_files.mdwn view
@@ -0,0 +1,23 @@+When using git annex unlock, followed by git annex add, it currently+checksums files, even if the file has not changed.++Direct mode has a better approach for this: The inode cache can pretty+reliably detect if a file has been modified. So, `unlock` could note+a file's inode cache info, and then `add` could check if a file's inode+cache is unchanged, and rather than re-checksum it, just perform a fast +`lock`.++Question: How would `add` know what key's inode cache to look at? Seems it+would need to either check the git branch (as direct mode does, but this is+rather slow and would slow down `add` in the more common case of adding+lots of new files), or use a yet-unimplemented [[design/caching_database]].+Or, the inode cache could be stored in a map with the work tree filename,+but that diverges from how direct mode uses inode caches.++Observation: Using the inode cache info to detect changes is not perfect;+if a file is modified without changing its size or mtime, the inode cache+won't be able to tell it's changed. This is unlikely, but possible. In+direct mode, the worst that can happen in this case is probably that a+modified file doesn't get added and committed. But, using the inode cache+for unlocked files would result in any such modified versions being thrown+away when the file is added, which is much more data lossy..
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 5.20150617+Version: 5.20150710 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess <id@joeyh.name>@@ -133,6 +133,11 @@ -- Some things don't work with the non-threaded RTS. GHC-Options: -threaded + -- Avoid linking with unused dynamic libaries.+ -- (Only tested on Linux).+ if os(Linux)+ GHC-Options: -optl-Wl,--as-needed+ if flag(network-uri) Build-Depends: network-uri (>= 2.6), network (>= 2.6) else@@ -159,7 +164,7 @@ if flag(TestSuite) Build-Depends: tasty (>= 0.7), tasty-hunit, tasty-quickcheck, tasty-rerun,- optparse-applicative (>= 0.9.1), crypto-api+ optparse-applicative (>= 0.10), crypto-api CPP-Options: -DWITH_TESTSUITE if flag(TDFA)
man/git-annex-add.1 view
@@ -16,6 +16,9 @@ added, \fBgit annex add\fP will behave the same as \fBgit add\fP and add the non\-large file directly to the git repository, instead of to the annex. .PP+This command can also be used to add symbolic links, both symlinks to+annexed content, and other symlinks.+.PP .SH OPTIONS .IP "\fB\-\-include\-dotfiles\fP" .IP
man/git-annex-dropkey.1 view
@@ -19,6 +19,8 @@ .SH SEE ALSO git-annex(1) .PP+git-annex\-setkey(1)+.PP .SH AUTHOR Joey Hess <id@joeyh.name> .PP
man/git-annex-log.1 view
@@ -24,9 +24,10 @@ The git-annex\-matching\-options(1) can be used to specify files to act on. .IP-.SH OPTIONS .SH SEE ALSO git-annex(1)+.PP+git-annex\-forget(1) .PP .SH AUTHOR Joey Hess <id@joeyh.name>
man/git-annex-proxy.1 view
@@ -23,6 +23,12 @@ .PP git annex proxy \-\- git mv mydir newname .PP+To commit the changes to a specific file, first use git annex add to+stage the changes in the index, and then proxy a commit:+.PP+ git annex add myfile+ git annex proxy \-\- git commit myfile \-m foo+.PP .SH SEE ALSO git-annex(1) .PP
+ man/git-annex-setkey.1 view
@@ -0,0 +1,27 @@+.TH git-annex-setkey 1+.SH NAME+git-annex-setkey \- sets annexed content for a key+.PP+.SH SYNOPSIS+git annex setkey key file+.PP+.SH DESCRIPTION+This plumbing\-level command makes the content of the specified key+be set to the specified file. The file is moved into the annex.+.PP+No checking is done that the file contains the expected contents of the key.+So it's generally a better idea to use git-annex\-reinject(1) instead of+this command.+.PP+.SH SEE ALSO+git-annex(1)+.PP+git-annex\-reinject(1)+.PP+git-annex\-dropkey(1)+.PP+.SH AUTHOR+Joey Hess <id@joeyh.name>+.PP+.PP+
man/git-annex-unused.1 view
@@ -43,18 +43,26 @@ This adds all refs/heads/ refs, as well as the previous version of HEAD. It also adds all tags, except for old\-tag. .PP-This refspec is processed by starting with an empty set of refs,+The refspec is processed by starting with an empty set of refs, and walking the list in order from left to right. .PP-.IP "Each + using a glob is matched against all relevant refs"+Each + using a glob is matched against all relevant refs (a subset of \fBgit show\-ref\fP) and all matching refs are added to the set. For example, "+refs/remotes/*" adds all remote refs.-.IP "Each + without a glob adds the literal value to the set."+.PP+Each + without a glob adds the literal value to the set. For example, "+HEAD^" adds "HEAD^".-.IP "Each \- is matched against the set of refs accumulated so far."+.PP+Each \- is matched against the set of refs accumulated so far. Any matching refs are removed from the set.-.IP+.PP+"reflog" adds all the refs from the reflog. This will make past versions+of files not be considered to be unused until the ref expires from the+reflog (by default for 90 days). Note that this may make git-annex unused+take some time to complete, it if needs to check every ref from the+reflog.+.PP .SH SEE ALSO git-annex(1) .PP
man/git-annex.1 view
@@ -471,6 +471,11 @@ .IP See git-annex\-registerurl(1) for details. .IP+.IP "\fBsetkey key file\fP"+Moves a file into the annex as the content of a key.+.IP+See git-annex\-setkey(1) for details.+.IP .IP "\fBdropkey [key ...]\fP" Drops annexed content for specified keys. .IP@@ -741,6 +746,10 @@ commit the data by running \fBgit annex merge\fP (or by automatic merges) or \fBgit annex sync\fP. .IP+Note that you beware running \fBgit gc\fP if using this configuration,+since it could garbage collect objects that are staged in git-annex's+index but not yet committed.+.IP .IP "\fBannex.hardlink\fP" Set this to \fBtrue\fP to make file contents be hard linked into the repository when possible, instead of a more expensive copy.@@ -791,8 +800,8 @@ no matter how you installed git-annex. .IP .IP "\fBannex.autocommit\fP"-Set to false to prevent the git-annex assistant from automatically-committing changes to files in the repository.+Set to false to prevent the git-annex assistant and git-annex sync+from automatically committing changes to files in the repository. .IP .IP "\fBannex.startupscan\fP" Set to false to prevent the git-annex assistant from scanning the@@ -1065,6 +1074,13 @@ Also note that when using views, only the toplevel .gitattributes file is preserved in the view, so other settings in other files won't have any effect.+.PP+.SH EXIT STATUS+git-annex, when called as a git subcommand, may return exit codes 0 or 1+for success or failures, or, more rarely, 127 or 128 for certain very+specific failures. git-annex itself should return 0 on success and 1 on+failure, unless the \fB\-\-time\-limit=time\fP option is hit, in which case it+returns with exit code 101. .PP .SH FILES These files are used by git-annex:
standalone/android/cabal.config view
@@ -1,208 +1,1062 @@-constraints: Crypto ==4.2.5.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-terminal ==0.6.1.1,- 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,- shakespeare-text ==1.0.2,- 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,- hamlet ==1.1.9.2,- 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.10.0,- 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 ==1.2.1.1,- shakespeare-css ==1.0.7.4,- shakespeare-i18n ==1.0.0.5,- shakespeare-js ==1.2.0.4,- 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,- tasty ==0.10,- tasty-hunit ==0.9,- tasty-quickcheck ==0.8.1,- tasty-rerun ==1.1.3,- 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+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
− standalone/android/haskell-patches/crypto-numbers_build-fix.patch
@@ -1,227 +0,0 @@-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 view
@@ -0,0 +1,27 @@+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
@@ -1,50 +0,0 @@-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 view
@@ -0,0 +1,24 @@+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 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/android/haskell-patches/shakespeare-text_remove-TH.patch
@@ -1,153 +0,0 @@-From dca2a30ca06865bf66cd25cc14b06f5d28190231 Mon Sep 17 00:00:00 2001-From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 02:46:57 +0000-Subject: [PATCH] remove TH------ Text/Shakespeare/Text.hs | 125 +++++------------------------------------------- 1 file changed, 11 insertions(+), 114 deletions(-)--diff --git a/Text/Shakespeare/Text.hs b/Text/Shakespeare/Text.hs-index 6865a5a..e25a8be 100644---- a/Text/Shakespeare/Text.hs-+++ b/Text/Shakespeare/Text.hs-@@ -7,18 +7,18 @@ module Text.Shakespeare.Text- ( TextUrl- , ToText (..)- , renderTextUrl-- , stext-- , text-- , textFile-- , textFileDebug-- , textFileReload-- , st -- | strict text-- , lt -- | lazy text, same as stext :)-+ --, stext-+ --, text-+ --, textFile-+ --, textFileDebug-+ --, textFileReload-+ --, st -- | strict text-+ --, lt -- | lazy text, same as stext :)- -- * Yesod code generation-- , codegen-- , codegenSt-- , codegenFile-- , codegenFileReload-+ --, codegen-+ --, codegenSt-+ --, codegenFile-+ --, codegenFileReload- ) where- - import Language.Haskell.TH.Quote (QuasiQuoter (..))-@@ -45,106 +45,3 @@ instance ToText Int32 where toText = toText . show- instance ToText Int64 where toText = toText . show- instance ToText Int where toText = toText . show- --settings :: Q ShakespeareSettings--settings = do-- toTExp <- [|toText|]-- wrapExp <- [|id|]-- unWrapExp <- [|id|]-- return $ defaultShakespeareSettings { toBuilder = toTExp-- , wrap = wrapExp-- , unwrap = unWrapExp-- }------stext, lt, st, text :: QuasiQuoter--stext = -- QuasiQuoter { quoteExp = \s -> do-- rs <- settings-- render <- [|toLazyText|]-- rendered <- shakespeareFromString rs { justVarInterpolation = True } s-- return (render `AppE` rendered)-- }--lt = stext----st = -- QuasiQuoter { quoteExp = \s -> do-- rs <- settings-- render <- [|TL.toStrict . toLazyText|]-- rendered <- shakespeareFromString rs { justVarInterpolation = True } s-- return (render `AppE` rendered)-- }----text = QuasiQuoter { quoteExp = \s -> do-- rs <- settings-- quoteExp (shakespeare rs) $ filter (/='\r') s-- }------textFile :: FilePath -> Q Exp--textFile fp = do-- rs <- settings-- shakespeareFile rs fp------textFileDebug :: FilePath -> Q Exp--textFileDebug = textFileReload--{-# DEPRECATED textFileDebug "Please use textFileReload instead" #-}----textFileReload :: FilePath -> Q Exp--textFileReload fp = do-- rs <- settings-- shakespeareFileReload rs fp------ | codegen is designed for generating Yesod code, including templates---- So it uses different interpolation characters that won't clash with templates.--codegenSettings :: Q ShakespeareSettings--codegenSettings = do-- toTExp <- [|toText|]-- wrapExp <- [|id|]-- unWrapExp <- [|id|]-- return $ defaultShakespeareSettings { toBuilder = toTExp-- , wrap = wrapExp-- , unwrap = unWrapExp-- , varChar = '~'-- , urlChar = '*'-- , intChar = '&'-- , justVarInterpolation = True -- always!-- }------ | codegen is designed for generating Yesod code, including templates---- So it uses different interpolation characters that won't clash with templates.---- You can use the normal text quasiquoters to generate code--codegen :: QuasiQuoter--codegen =-- QuasiQuoter { quoteExp = \s -> do-- rs <- codegenSettings-- render <- [|toLazyText|]-- rendered <- shakespeareFromString rs { justVarInterpolation = True } s-- return (render `AppE` rendered)-- }------ | Generates strict Text---- codegen is designed for generating Yesod code, including templates---- So it uses different interpolation characters that won't clash with templates.--codegenSt :: QuasiQuoter--codegenSt =-- QuasiQuoter { quoteExp = \s -> do-- rs <- codegenSettings-- render <- [|TL.toStrict . toLazyText|]-- rendered <- shakespeareFromString rs { justVarInterpolation = True } s-- return (render `AppE` rendered)-- }----codegenFileReload :: FilePath -> Q Exp--codegenFileReload fp = do-- rs <- codegenSettings-- render <- [|TL.toStrict . toLazyText|]-- rendered <- shakespeareFileReload rs{ justVarInterpolation = True } fp-- return (render `AppE` rendered)----codegenFile :: FilePath -> Q Exp--codegenFile fp = do-- rs <- codegenSettings-- render <- [|TL.toStrict . toLazyText|]-- rendered <- shakespeareFile rs{ justVarInterpolation = True } fp-- return (render `AppE` rendered)--- -2.1.1-
+ standalone/android/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/android/haskell-patches/unix-time_hack-for-Bionic.patch view
@@ -1,6 +1,6 @@-From db9eb179885874af342bb2c3adef7185496ba1f1 Mon Sep 17 00:00:00 2001+From da127aa3b2c6cbf679950eb593eb8c88384cc26b Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Wed, 15 Oct 2014 16:37:32 +0000+Date: Thu, 2 Jul 2015 20:34:05 +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 d30f39b..ec7ca4c 100644+index 6253b27..fb5b3fa 100644 --- a/Data/UnixTime/Types.hsc +++ b/Data/UnixTime/Types.hsc-@@ -9,8 +9,6 @@ import Foreign.Storable+@@ -12,8 +12,6 @@ import Data.Binary #include <sys/time.h> @@ -20,8 +20,8 @@ - -- | -- Data structure for Unix time.- data UnixTime = UnixTime {-@@ -20,16 +18,6 @@ data UnixTime = UnixTime {+ --+@@ -33,16 +31,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) -- -- |- -- Format of the strptime()/strftime() style.- type Format = ByteString+ #if __GLASGOW_HASKELL__ >= 704+ instance Binary UnixTime where+ put (UnixTime (CTime sec) msec) = do diff --git a/cbits/conv.c b/cbits/conv.c-index ec31fef..b7bc0f9 100644+index 669cfda..8fa5f9a 100644 --- a/cbits/conv.c +++ b/cbits/conv.c-@@ -96,7 +96,7 @@ time_t c_parse_unix_time_gmt(char *fmt, char *src) {+@@ -98,7 +98,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.1+2.1.4
+ standalone/android/haskell-patches/vector_cross-build.patch view
@@ -0,0 +1,24 @@+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 view
@@ -0,0 +1,39 @@+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
@@ -8,10 +8,6 @@ # versions that have been gotten working. To update, delete the # cabal.config, run this script with an empty cabal and fix up the broken # patches, and then use cabal freeze to generate a new cabal.config.-#-# This only installs haskell packages for ghc-android. The host ghc-# also needs to have all the git-annex build deps installed, in similar-# versions. Those are installed from Debian packages using apt. set -e @@ -90,10 +86,9 @@ patched iproute patched primitive patched socks- # patched entropy # needed for newer version, not current pinned version+ patched entropy patched vector patched stm-chans- patched persistent patched profunctors patched skein patched lens@@ -102,19 +97,14 @@ patched persistent-template patched system-filepath patched optparse-applicative+ patched warp patched wai-app-static patched shakespeare- patched shakespeare-css- patched shakespeare-js- patched yesod-routes patched yesod-core- patched yesod-persistent patched yesod-form- patched crypto-numbers patched clock patched yesod-auth patched yesod- patched shakespeare-text patched process-conduit patched DAV patched yesod-static@@ -122,7 +112,6 @@ patched dns patched gnutls patched unbounded-delays- patched gnuidn patched network-protocol-xmpp cd ..@@ -130,11 +119,13 @@ installgitannexdeps -fAndroid -f-Pairing } -# native cabal needs its own update+setupcabal++# Install packages for host ghc. cabal update+installgitannexdeps +# Install packages for cross ghc, with patches as necessary. PATH=$HOME/.ghc/$(cat abiversion)/bin:$HOME/.ghc/$(cat abiversion)/arm-linux-androideabi/bin:$PATH-setupcabal cabal update- install_pkgs
standalone/android/tmp/network-2.4.1.2/cabal.config view
@@ -1,208 +1,1062 @@-constraints: Crypto ==4.2.5.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-terminal ==0.6.1.1,- 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,- shakespeare-text ==1.0.2,- 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,- hamlet ==1.1.9.2,- 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.10.0,- 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 ==1.2.1.1,- shakespeare-css ==1.0.7.4,- shakespeare-i18n ==1.0.0.5,- shakespeare-js ==1.2.0.4,- 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,- tasty ==0.10,- tasty-hunit ==0.9,- tasty-quickcheck ==0.8.1,- tasty-rerun ==1.1.3,- 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+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
standalone/no-th/evilsplicer-headers.hs view
@@ -23,7 +23,7 @@ import qualified "blaze-markup" Text.Blaze.Internal import qualified Yesod.Core.Widget import qualified Yesod.Routes.TH.Types-import qualified Yesod.Routes.Dispatch+import qualified Yesod.Core.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 e54cfacbb9fb24f75d3d93cd8ee6da67b161574f Mon Sep 17 00:00:00 2001+From 6d4a7c63d737c9215ee55996715250c89f14c398 Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 02:51:28 +0000+Date: Fri, 3 Jul 2015 01:36:31 +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 95fffd8..5669c51 100644+index f78c2e5..1ec4d80 100644 --- a/DAV.cabal +++ b/DAV.cabal @@ -47,33 +47,7 @@ library@@ -27,7 +27,7 @@ - , containers - , data-default - , either >= 4.3-- , errors+- , errors < 2.0 - , 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 4c6d68f..55979b6 100644+index 5d5d6fd..7265d42 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.1+2.1.4
− standalone/no-th/haskell-patches/aeson_remove-TH.patch
@@ -1,40 +0,0 @@-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
@@ -1,132 +0,0 @@-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
@@ -1,394 +0,0 @@-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 10c9ade98b3ac2054947f411d77db2eb28896b9f Mon Sep 17 00:00:00 2001+From 88ff2174944daf90530a33ee06e2e3f667089b6a Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 01:43:10 +0000-Subject: [PATCH] avoid TH+Date: Fri, 3 Jul 2015 02:06:43 +0000+Subject: [PATCH] remove TH ---- lens.cabal | 17 +----------------- src/Control/Lens.hs | 8 ++------+ lens.cabal | 16 +---------------+ src/Control/Lens.hs | 6 ++---- 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(+), 30 deletions(-)+ 7 files changed, 4 insertions(+), 27 deletions(-) diff --git a/lens.cabal b/lens.cabal-index 5388301..d7b02b9 100644+index c7f6009..ab206c5 100644 --- a/lens.cabal +++ b/lens.cabal @@ -10,7 +10,7 @@ stability: provisional@@ -26,15 +26,7 @@ -- 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-@@ -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+@@ -230,8 +230,6 @@ library Control.Lens.Internal.Context Control.Lens.Internal.Deque Control.Lens.Internal.Exception@@ -43,7 +35,7 @@ Control.Lens.Internal.Fold Control.Lens.Internal.Getter Control.Lens.Internal.Indexed-@@ -247,25 +244,21 @@ library+@@ -243,25 +241,21 @@ library Control.Lens.Internal.Reflection Control.Lens.Internal.Review Control.Lens.Internal.Setter@@ -69,7 +61,7 @@ Control.Monad.Primitive.Lens Control.Parallel.Strategies.Lens Control.Seq.Lens-@@ -291,12 +284,8 @@ library+@@ -287,12 +281,8 @@ library Data.Typeable.Lens Data.Vector.Lens Data.Vector.Generic.Lens@@ -82,7 +74,7 @@ Numeric.Lens other-modules:-@@ -403,7 +392,6 @@ test-suite doctests+@@ -395,7 +385,6 @@ test-suite doctests deepseq, doctest >= 0.9.1, filepath,@@ -90,7 +82,7 @@ mtl, nats, parallel,-@@ -441,7 +429,6 @@ benchmark plated+@@ -433,7 +422,6 @@ benchmark plated comonad, criterion, deepseq,@@ -98,7 +90,7 @@ lens, transformers -@@ -476,7 +463,6 @@ benchmark unsafe+@@ -468,7 +456,6 @@ benchmark unsafe comonads-fd, criterion, deepseq,@@ -106,7 +98,7 @@ lens, transformers -@@ -493,6 +479,5 @@ benchmark zipper+@@ -485,6 +472,5 @@ benchmark zipper comonads-fd, criterion, deepseq,@@ -114,18 +106,10 @@ lens, transformers diff --git a/src/Control/Lens.hs b/src/Control/Lens.hs-index 7e15267..433f1fc 100644+index d879c58..3d6015b 100644 --- a/src/Control/Lens.hs +++ b/src/Control/Lens.hs-@@ -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+@@ -56,12 +56,11 @@ module Control.Lens , module Control.Lens.Lens , module Control.Lens.Level , module Control.Lens.Loupe@@ -139,15 +123,7 @@ , module Control.Lens.TH #endif , module Control.Lens.Traversal-@@ -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+@@ -83,12 +82,11 @@ import Control.Lens.Iso import Control.Lens.Lens import Control.Lens.Level import Control.Lens.Loupe@@ -162,12 +138,12 @@ #endif import Control.Lens.Traversal diff --git a/src/Control/Lens/Cons.hs b/src/Control/Lens/Cons.hs-index a80e9c8..7d27b80 100644+index 7b35db4..269f307 100644 --- a/src/Control/Lens/Cons.hs +++ b/src/Control/Lens/Cons.hs-@@ -55,8 +55,6 @@ import Data.Vector.Unboxed (Unbox)- import qualified Data.Vector.Unboxed as Unbox+@@ -56,8 +56,6 @@ import qualified Data.Vector.Unboxed as Unbox import Data.Word+ import Prelude -{-# ANN module "HLint: ignore Eta reduce" #-} -@@ -175,12 +151,12 @@ -- >>> :set -XNoOverloadedStrings -- >>> import Control.Lens diff --git a/src/Control/Lens/Internal/Fold.hs b/src/Control/Lens/Internal/Fold.hs-index ab09c6b..43aa905 100644+index 4bbde21..16295f4 100644 --- a/src/Control/Lens/Internal/Fold.hs +++ b/src/Control/Lens/Internal/Fold.hs-@@ -37,8 +37,6 @@ import Data.Maybe- import Data.Semigroup hiding (Min, getMin, Max, getMax)+@@ -35,8 +35,6 @@ import Data.Semigroup hiding (Min, getMin, Max, getMax) import Data.Reflection+ import Prelude -{-# ANN module "HLint: ignore Avoid lambda" #-} -@@ -188,10 +164,10 @@ -- Folding ------------------------------------------------------------------------------ diff --git a/src/Control/Lens/Operators.hs b/src/Control/Lens/Operators.hs-index 9992e63..631e8e6 100644+index 302f68e..1625fe5 100644 --- a/src/Control/Lens/Operators.hs +++ b/src/Control/Lens/Operators.hs-@@ -111,7 +111,7 @@ module Control.Lens.Operators+@@ -104,7 +104,7 @@ module Control.Lens.Operators , (<#~) , (<#=) -- * "Control.Lens.Plated"@@ -201,12 +177,12 @@ , ( # ) -- * "Control.Lens.Setter" diff --git a/src/Control/Lens/Prism.hs b/src/Control/Lens/Prism.hs-index b75c870..c6c6596 100644+index 36152d6..3af6bd3 100644 --- a/src/Control/Lens/Prism.hs +++ b/src/Control/Lens/Prism.hs-@@ -61,8 +61,6 @@ import Unsafe.Coerce- import Data.Profunctor.Unsafe+@@ -62,8 +62,6 @@ import Data.Profunctor.Unsafe #endif+ import Prelude -{-# ANN module "HLint: ignore Use camelCase" #-} -@@ -214,17 +190,17 @@ -- >>> :set -XNoOverloadedStrings -- >>> import Control.Lens diff --git a/src/Control/Monad/Primitive/Lens.hs b/src/Control/Monad/Primitive/Lens.hs-index ee942c6..2f37134 100644+index 8f1ec94..482764a 100644 --- a/src/Control/Monad/Primitive/Lens.hs +++ b/src/Control/Monad/Primitive/Lens.hs-@@ -20,7 +20,6 @@ import Control.Lens- import Control.Monad.Primitive (PrimMonad(..))+@@ -26,7 +26,6 @@ import Control.Lens+ import Control.Monad.Primitive import GHC.Prim (State#) -{-# ANN module "HLint: ignore Unused LANGUAGE pragma" #-} - prim :: (PrimMonad m) => Iso' (m a) (State# (PrimState m) -> (# State# (PrimState m), a #))- prim = iso internal primitive+ #if MIN_VERSION_primitive(0,6,0)+ prim :: PrimBase m => Iso' (m a) (State# (PrimState m) -> (# State# (PrimState m), a #)) -- -2.1.1+2.1.4
− standalone/no-th/haskell-patches/monad-logger_remove-TH.patch
@@ -1,27 +0,0 @@-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
@@ -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/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch
@@ -1,41 +0,0 @@-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
@@ -1,26 +0,0 @@-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
@@ -1,59 +0,0 @@-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/shakespeare-css_remove_TH.patch
@@ -1,366 +0,0 @@-From 657fa7135bbcf3d5adb3cc0032e09887dd80a2a7 Mon Sep 17 00:00:00 2001-From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 02:05:14 +0000-Subject: [PATCH] hack TH------ Text/Cassius.hs | 23 --------- Text/Css.hs | 151 --------------------------------------------------- Text/CssCommon.hs | 4 --- Text/Lucius.hs | 46 +--------------- shakespeare-css.cabal | 2 +-- 5 files changed, 3 insertions(+), 223 deletions(-)--diff --git a/Text/Cassius.hs b/Text/Cassius.hs-index 91fc90f..c515807 100644---- a/Text/Cassius.hs-+++ b/Text/Cassius.hs-@@ -13,10 +13,6 @@ module Text.Cassius- , renderCss- , renderCssUrl- -- * Parsing-- , cassius-- , cassiusFile-- , cassiusFileDebug-- , cassiusFileReload- -- * ToCss instances- -- ** Color- , Color (..)-@@ -27,11 +23,8 @@ module Text.Cassius- , AbsoluteUnit (..)- , AbsoluteSize (..)- , absoluteSize-- , EmSize (..)-- , ExSize (..)- , PercentageSize (..)- , percentageSize-- , PixelSize (..)- -- * Internal- , cassiusUsedIdentifiers- ) where-@@ -43,25 +36,9 @@ import Language.Haskell.TH.Quote (QuasiQuoter (..))- import Language.Haskell.TH.Syntax- import qualified Data.Text.Lazy as TL- import Text.CssCommon--import Text.Lucius (lucius)- import qualified Text.Lucius- import Text.IndentToBrace (i2b)- --cassius :: QuasiQuoter--cassius = QuasiQuoter { quoteExp = quoteExp lucius . i2b }----cassiusFile :: FilePath -> Q Exp--cassiusFile fp = do--#ifdef GHC_7_4-- qAddDependentFile fp--#endif-- contents <- fmap TL.unpack $ qRunIO $ readUtf8File fp-- quoteExp cassius contents----cassiusFileDebug, cassiusFileReload :: FilePath -> Q Exp--cassiusFileDebug = cssFileDebug True [|Text.Lucius.parseTopLevels|] Text.Lucius.parseTopLevels--cassiusFileReload = cassiusFileDebug--- -- | Determine which identifiers are used by the given template, useful for- -- creating systems like yesod devel.- cassiusUsedIdentifiers :: String -> [(Deref, VarType)]-diff --git a/Text/Css.hs b/Text/Css.hs-index 75dc549..20c206c 100644---- a/Text/Css.hs-+++ b/Text/Css.hs-@@ -166,22 +166,6 @@ cssUsedIdentifiers toi2b parseBlocks s' =- (scope, rest') = go rest- go' (Attr k v) = k ++ v- --cssFileDebug :: Bool -- ^ perform the indent-to-brace conversion-- -> Q Exp-- -> Parser [TopLevel Unresolved]-- -> FilePath-- -> Q Exp--cssFileDebug toi2b parseBlocks' parseBlocks fp = do-- s <- fmap TL.unpack $ qRunIO $ readUtf8File fp--#ifdef GHC_7_4-- qAddDependentFile fp--#endif-- let vs = cssUsedIdentifiers toi2b parseBlocks s-- c <- mapM vtToExp vs-- cr <- [|cssRuntime toi2b|]-- parseBlocks'' <- parseBlocks'-- return $ cr `AppE` parseBlocks'' `AppE` (LitE $ StringL fp) `AppE` ListE c--- combineSelectors :: HasLeadingSpace- -> [Contents]- -> [Contents]-@@ -287,18 +271,6 @@ cssRuntime toi2b parseBlocks fp cd render' = unsafePerformIO $ do- - addScope scope = map (DerefIdent . Ident *** CDPlain . fromString) scope ++ cd- --vtToExp :: (Deref, VarType) -> Q Exp--vtToExp (d, vt) = do-- d' <- lift d-- c' <- c vt-- return $ TupE [d', c' `AppE` derefToExp [] d]-- where-- c :: VarType -> Q Exp-- c VTPlain = [|CDPlain . toCss|]-- c VTUrl = [|CDUrl|]-- c VTUrlParam = [|CDUrlParam|]-- c VTMixin = [|CDMixin|]--- getVars :: Monad m => [(String, String)] -> Content -> m [(Deref, VarType)]- getVars _ ContentRaw{} = return []- getVars scope (ContentVar d) =-@@ -342,111 +314,8 @@ compressBlock (Block x y blocks mixins) =- cc (ContentRaw a:ContentRaw b:c) = cc $ ContentRaw (a ++ b) : c- cc (a:b) = a : cc b- --blockToMixin :: Name-- -> Scope-- -> Block Unresolved-- -> Q Exp--blockToMixin r scope (Block _sel props subblocks mixins) =-- [|Mixin-- { mixinAttrs = concat-- $ $(listE $ map go props)-- : map mixinAttrs $mixinsE-- -- FIXME too many complications to implement sublocks for now...-- , mixinBlocks = [] -- foldr (.) id $(listE $ map subGo subblocks) []-- }|]-- {--- . foldr (.) id $(listE $ map subGo subblocks)-- . (concatMap mixinBlocks $mixinsE ++)-- |]-- -}-- where-- mixinsE = return $ ListE $ map (derefToExp []) mixins-- go (Attr x y) = conE 'Attr-- `appE` (contentsToBuilder r scope x)-- `appE` (contentsToBuilder r scope y)-- subGo (Block sel' b c d) = blockToCss r scope $ Block sel' b c d----blockToCss :: Name-- -> Scope-- -> Block Unresolved-- -> Q Exp--blockToCss r scope (Block sel props subblocks mixins) =-- [|((Block-- { blockSelector = $(selectorToBuilder r scope sel)-- , blockAttrs = concat-- $ $(listE $ map go props)-- : map mixinAttrs $mixinsE-- , blockBlocks = ()-- , blockMixins = ()-- } :: Block Resolved):)-- . foldr (.) id $(listE $ map subGo subblocks)-- . (concatMap mixinBlocks $mixinsE ++)-- |]-- where-- mixinsE = return $ ListE $ map (derefToExp []) mixins-- go (Attr x y) = conE 'Attr-- `appE` (contentsToBuilder r scope x)-- `appE` (contentsToBuilder r scope y)-- subGo (hls, Block sel' b c d) =-- blockToCss r scope $ Block sel'' b c d-- where-- sel'' = combineSelectors hls sel sel'----selectorToBuilder :: Name -> Scope -> [Contents] -> Q Exp--selectorToBuilder r scope sels =-- contentsToBuilder r scope $ intercalate [ContentRaw ","] sels----contentsToBuilder :: Name -> Scope -> [Content] -> Q Exp--contentsToBuilder r scope contents =-- appE [|mconcat|] $ listE $ map (contentToBuilder r scope) contents----contentToBuilder :: Name -> Scope -> Content -> Q Exp--contentToBuilder _ _ (ContentRaw x) =-- [|fromText . pack|] `appE` litE (StringL x)--contentToBuilder _ scope (ContentVar d) =-- case d of-- DerefIdent (Ident s)-- | Just val <- lookup s scope -> [|fromText . pack|] `appE` litE (StringL val)-- _ -> [|toCss|] `appE` return (derefToExp [] d)--contentToBuilder r _ (ContentUrl u) =-- [|fromText|] `appE`-- (varE r `appE` return (derefToExp [] u) `appE` listE [])--contentToBuilder r _ (ContentUrlParam u) =-- [|fromText|] `appE`-- ([|uncurry|] `appE` varE r `appE` return (derefToExp [] u))--contentToBuilder _ _ ContentMixin{} = error "contentToBuilder on ContentMixin"--- type Scope = [(String, String)]- --topLevelsToCassius :: [TopLevel Unresolved]-- -> Q Exp--topLevelsToCassius a = do-- r <- newName "_render"-- lamE [varP r] $ appE [|CssNoWhitespace . foldr ($) []|] $ fmap ListE $ go r [] a-- where-- go _ _ [] = return []-- go r scope (TopBlock b:rest) = do-- e <- [|(++) $ map TopBlock ($(blockToCss r scope b) [])|]-- es <- go r scope rest-- return $ e : es-- go r scope (TopAtBlock name s b:rest) = do-- let s' = contentsToBuilder r scope s-- e <- [|(:) $ TopAtBlock $(lift name) $(s') $(blocksToCassius r scope b)|]-- es <- go r scope rest-- return $ e : es-- go r scope (TopAtDecl dec cs:rest) = do-- e <- [|(:) $ TopAtDecl $(lift dec) $(contentsToBuilder r scope cs)|]-- es <- go r scope rest-- return $ e : es-- go r scope (TopVar k v:rest) = go r ((k, v) : scope) rest----blocksToCassius :: Name-- -> Scope-- -> [Block Unresolved]-- -> Q Exp--blocksToCassius r scope a = do-- appE [|foldr ($) []|] $ listE $ map (blockToCss r scope) a--- renderCss :: Css -> TL.Text- renderCss css =- toLazyText $ mconcat $ map go tops-@@ -515,23 +384,3 @@ renderBlock haveWhiteSpace indent (Block sel attrs () ())- | haveWhiteSpace = fromString ";\n"- | otherwise = singleton ';'- --instance Lift Mixin where-- lift (Mixin a b) = [|Mixin a b|]--instance Lift (Attr Unresolved) where-- lift (Attr k v) = [|Attr k v :: Attr Unresolved |]--instance Lift (Attr Resolved) where-- lift (Attr k v) = [|Attr $(liftBuilder k) $(liftBuilder v) :: Attr Resolved |]----liftBuilder :: Builder -> Q Exp--liftBuilder b = [|fromText $ pack $(lift $ TL.unpack $ toLazyText b)|]----instance Lift Content where-- lift (ContentRaw s) = [|ContentRaw s|]-- lift (ContentVar d) = [|ContentVar d|]-- lift (ContentUrl d) = [|ContentUrl d|]-- lift (ContentUrlParam d) = [|ContentUrlParam d|]-- lift (ContentMixin m) = [|ContentMixin m|]--instance Lift (Block Unresolved) where-- lift (Block a b c d) = [|Block a b c d|]--instance Lift (Block Resolved) where-- lift (Block a b () ()) = [|Block $(liftBuilder a) b () ()|]-diff --git a/Text/CssCommon.hs b/Text/CssCommon.hs-index 719e0a8..8c40e8c 100644---- a/Text/CssCommon.hs-+++ b/Text/CssCommon.hs-@@ -1,4 +1,3 @@--{-# LANGUAGE TemplateHaskell #-}- {-# LANGUAGE GeneralizedNewtypeDeriving #-}- {-# LANGUAGE FlexibleInstances #-}- {-# LANGUAGE CPP #-}-@@ -156,6 +155,3 @@ showSize :: Rational -> String -> String- showSize value' unit = printf "%f" value ++ unit- where value = fromRational value' :: Double- --mkSizeType "EmSize" "em"--mkSizeType "ExSize" "ex"--mkSizeType "PixelSize" "px"-diff --git a/Text/Lucius.hs b/Text/Lucius.hs-index 346883d..f38492b 100644---- a/Text/Lucius.hs-+++ b/Text/Lucius.hs-@@ -8,13 +8,9 @@- {-# OPTIONS_GHC -fno-warn-missing-fields #-}- module Text.Lucius- ( -- * Parsing-- lucius-- , luciusFile-- , luciusFileDebug-- , luciusFileReload- -- ** Mixins-- , luciusMixin-- , Mixin-+ -- luciusMixin-+ Mixin- -- ** Runtime- , luciusRT- , luciusRT'-@@ -40,11 +36,8 @@ module Text.Lucius- , AbsoluteUnit (..)- , AbsoluteSize (..)- , absoluteSize-- , EmSize (..)-- , ExSize (..)- , PercentageSize (..)- , percentageSize-- , PixelSize (..)- -- * Internal- , parseTopLevels- , luciusUsedIdentifiers-@@ -67,18 +60,6 @@ import Data.List (isSuffixOf)- import Control.Arrow (second)- import Text.Shakespeare (VarType)- ---- |-------- >>> renderCss ([lucius|foo{bar:baz}|] undefined)---- "foo{bar:baz}"--lucius :: QuasiQuoter--lucius = QuasiQuoter { quoteExp = luciusFromString }----luciusFromString :: String -> Q Exp--luciusFromString s =-- topLevelsToCassius-- $ either (error . show) id $ parse parseTopLevels s s--- whiteSpace :: Parser ()- whiteSpace = many whiteSpace1 >> return ()- -@@ -218,17 +199,6 @@ parseComment = do- _ <- manyTill anyChar $ try $ string "*/"- return $ ContentRaw ""- --luciusFile :: FilePath -> Q Exp--luciusFile fp = do--#ifdef GHC_7_4-- qAddDependentFile fp--#endif-- contents <- fmap TL.unpack $ qRunIO $ readUtf8File fp-- luciusFromString contents----luciusFileDebug, luciusFileReload :: FilePath -> Q Exp--luciusFileDebug = cssFileDebug False [|parseTopLevels|] parseTopLevels--luciusFileReload = luciusFileDebug- - parseTopLevels :: Parser [TopLevel Unresolved]- parseTopLevels =-@@ -377,15 +347,3 @@ luciusRTMinified tl scope = either Left (Right . renderCss . CssNoWhitespace) $- -- creating systems like yesod devel.- luciusUsedIdentifiers :: String -> [(Deref, VarType)]- luciusUsedIdentifiers = cssUsedIdentifiers False parseTopLevels----luciusMixin :: QuasiQuoter--luciusMixin = QuasiQuoter { quoteExp = luciusMixinFromString }----luciusMixinFromString :: String -> Q Exp--luciusMixinFromString s' = do-- r <- newName "_render"-- case fmap compressBlock $ parse parseBlock s s of-- Left e -> error $ show e-- Right block -> blockToMixin r [] block-- where-- s = concat ["mixin{", s', "}"]-diff --git a/shakespeare-css.cabal b/shakespeare-css.cabal-index 2d3b25a..cc0553c 100644---- a/shakespeare-css.cabal-+++ b/shakespeare-css.cabal-@@ -35,8 +35,8 @@ library- - exposed-modules: Text.Cassius- Text.Lucius-- other-modules: Text.MkSizeType- Text.Css-+ other-modules: Text.MkSizeType- Text.IndentToBrace- Text.CssCommon- ghc-options: -Wall--- -2.1.1-
− standalone/no-th/haskell-patches/shakespeare-js_hack_TH.patch
@@ -1,316 +0,0 @@-From 26f7328b0123d3ffa66873b91189ba3bdae3356c Mon Sep 17 00:00:00 2001-From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 02:07:32 +0000-Subject: [PATCH] hack TH------ Text/Coffee.hs | 56 ++++------------------------------------------ Text/Julius.hs | 67 +++++++++---------------------------------------------- Text/Roy.hs | 51 ++++-------------------------------------- Text/TypeScript.hs | 51 ++++-------------------------------------- 4 files changed, 24 insertions(+), 201 deletions(-)--diff --git a/Text/Coffee.hs b/Text/Coffee.hs-index 488c81b..61db85b 100644---- a/Text/Coffee.hs-+++ b/Text/Coffee.hs-@@ -51,13 +51,13 @@ module Text.Coffee- -- ** Template-Reading Functions- -- | These QuasiQuoter and Template Haskell methods return values of- -- type @'JavascriptUrl' url@. See the Yesod book for details.-- coffee-- , coffeeFile-- , coffeeFileReload-- , coffeeFileDebug-+ -- coffee-+ --, coffeeFile-+ --, coffeeFileReload-+ --, coffeeFileDebug- - #ifdef TEST_EXPORT-- , coffeeSettings-+ --, coffeeSettings- #endif- ) where- -@@ -65,49 +65,3 @@ import Language.Haskell.TH.Quote (QuasiQuoter (..))- import Language.Haskell.TH.Syntax- import Text.Shakespeare- import Text.Julius----coffeeSettings :: Q ShakespeareSettings--coffeeSettings = do-- jsettings <- javascriptSettings-- return $ jsettings { varChar = '%'-- , preConversion = Just PreConvert {-- preConvert = ReadProcess "coffee" ["-spb"]-- , preEscapeIgnoreBalanced = "'\"`" -- don't insert backtacks for variable already inside strings or backticks.-- , preEscapeIgnoreLine = "#" -- ignore commented lines-- , wrapInsertion = Just WrapInsertion { -- wrapInsertionIndent = Just " "-- , wrapInsertionStartBegin = "("-- , wrapInsertionSeparator = ", "-- , wrapInsertionStartClose = ") =>"-- , wrapInsertionEnd = ""-- , wrapInsertionAddParens = False-- }-- }-- }------ | Read inline, quasiquoted CoffeeScript.--coffee :: QuasiQuoter--coffee = QuasiQuoter { quoteExp = \s -> do-- rs <- coffeeSettings-- quoteExp (shakespeare rs) s-- }------ | Read in a CoffeeScript template file. This function reads the file once, at---- compile time.--coffeeFile :: FilePath -> Q Exp--coffeeFile fp = do-- rs <- coffeeSettings-- shakespeareFile rs fp------ | Read in a CoffeeScript template file. This impure function uses---- unsafePerformIO to re-read the file on every call, allowing for rapid---- iteration.--coffeeFileReload :: FilePath -> Q Exp--coffeeFileReload fp = do-- rs <- coffeeSettings-- shakespeareFileReload rs fp------ | Deprecated synonym for 'coffeeFileReload'--coffeeFileDebug :: FilePath -> Q Exp--coffeeFileDebug = coffeeFileReload--{-# DEPRECATED coffeeFileDebug "Please use coffeeFileReload instead." #-}-diff --git a/Text/Julius.hs b/Text/Julius.hs-index ec30690..5b5a075 100644---- a/Text/Julius.hs-+++ b/Text/Julius.hs-@@ -14,17 +14,17 @@ module Text.Julius- -- ** Template-Reading Functions- -- | These QuasiQuoter and Template Haskell methods return values of- -- type @'JavascriptUrl' url@. See the Yesod book for details.-- js-- , julius-- , juliusFile-- , jsFile-- , juliusFileDebug-- , jsFileDebug-- , juliusFileReload-- , jsFileReload-+ -- js-+ -- julius-+ -- juliusFile-+ -- jsFile-+ --, juliusFileDebug-+ --, jsFileDebug-+ --, juliusFileReload-+ --, jsFileReload- - -- * Datatypes-- , JavascriptUrl-+ JavascriptUrl- , Javascript (..)- , RawJavascript (..)- -@@ -37,9 +37,9 @@ module Text.Julius- , renderJavascriptUrl- - -- ** internal, used by 'Text.Coffee'-- , javascriptSettings-+ --, javascriptSettings- -- ** internal-- , juliusUsedIdentifiers-+ --, juliusUsedIdentifiers- , asJavascriptUrl- ) where- -@@ -102,48 +102,3 @@ instance RawJS TL.Text where rawJS = RawJavascript . fromLazyText- instance RawJS Builder where rawJS = RawJavascript- instance RawJS Bool where rawJS = RawJavascript . unJavascript . toJavascript- --javascriptSettings :: Q ShakespeareSettings--javascriptSettings = do-- toJExp <- [|toJavascript|]-- wrapExp <- [|Javascript|]-- unWrapExp <- [|unJavascript|]-- asJavascriptUrl' <- [|asJavascriptUrl|]-- return $ defaultShakespeareSettings { toBuilder = toJExp-- , wrap = wrapExp-- , unwrap = unWrapExp-- , modifyFinalValue = Just asJavascriptUrl'-- }----js, julius :: QuasiQuoter--js = QuasiQuoter { quoteExp = \s -> do-- rs <- javascriptSettings-- quoteExp (shakespeare rs) s-- }----julius = js----jsFile, juliusFile :: FilePath -> Q Exp--jsFile fp = do-- rs <- javascriptSettings-- shakespeareFile rs fp----juliusFile = jsFile------jsFileReload, juliusFileReload :: FilePath -> Q Exp--jsFileReload fp = do-- rs <- javascriptSettings-- shakespeareFileReload rs fp----juliusFileReload = jsFileReload----jsFileDebug, juliusFileDebug :: FilePath -> Q Exp--juliusFileDebug = jsFileReload--{-# DEPRECATED juliusFileDebug "Please use juliusFileReload instead." #-}--jsFileDebug = jsFileReload--{-# DEPRECATED jsFileDebug "Please use jsFileReload instead." #-}------ | Determine which identifiers are used by the given template, useful for---- creating systems like yesod devel.--juliusUsedIdentifiers :: String -> [(Deref, VarType)]--juliusUsedIdentifiers = shakespeareUsedIdentifiers defaultShakespeareSettings-diff --git a/Text/Roy.hs b/Text/Roy.hs-index 6e5e246..9ab0dbc 100644---- a/Text/Roy.hs-+++ b/Text/Roy.hs-@@ -39,12 +39,12 @@ module Text.Roy- -- ** Template-Reading Functions- -- | These QuasiQuoter and Template Haskell methods return values of- -- type @'JavascriptUrl' url@. See the Yesod book for details.-- roy-- , royFile-- , royFileReload-+ -- roy-+ --, royFile-+ --, royFileReload- - #ifdef TEST_EXPORT-- , roySettings-+ --, roySettings- #endif- ) where- -@@ -53,46 +53,3 @@ import Language.Haskell.TH.Syntax- import Text.Shakespeare- import Text.Julius- ---- | The Roy language compiles down to Javascript.---- We do this compilation once at compile time to avoid needing to do it during the request.---- We call this a preConversion because other shakespeare modules like Lucius use Haskell to compile during the request instead rather than a system call.--roySettings :: Q ShakespeareSettings--roySettings = do-- jsettings <- javascriptSettings-- return $ jsettings { varChar = '#'-- , preConversion = Just PreConvert {-- preConvert = ReadProcess "roy" ["--stdio", "--browser"]-- , preEscapeIgnoreBalanced = "'\""-- , preEscapeIgnoreLine = "//"-- , wrapInsertion = Just WrapInsertion {-- wrapInsertionIndent = Just " "-- , wrapInsertionStartBegin = "(\\"-- , wrapInsertionSeparator = " "-- , wrapInsertionStartClose = " ->\n"-- , wrapInsertionEnd = ")"-- , wrapInsertionAddParens = True-- }-- }-- }------ | Read inline, quasiquoted Roy.--roy :: QuasiQuoter--roy = QuasiQuoter { quoteExp = \s -> do-- rs <- roySettings-- quoteExp (shakespeare rs) s-- }------ | Read in a Roy template file. This function reads the file once, at---- compile time.--royFile :: FilePath -> Q Exp--royFile fp = do-- rs <- roySettings-- shakespeareFile rs fp------ | Read in a Roy template file. This impure function uses---- unsafePerformIO to re-read the file on every call, allowing for rapid---- iteration.--royFileReload :: FilePath -> Q Exp--royFileReload fp = do-- rs <- roySettings-- shakespeareFileReload rs fp-diff --git a/Text/TypeScript.hs b/Text/TypeScript.hs-index 70c8820..5be994a 100644---- a/Text/TypeScript.hs-+++ b/Text/TypeScript.hs-@@ -57,12 +57,12 @@ module Text.TypeScript- -- ** Template-Reading Functions- -- | These QuasiQuoter and Template Haskell methods return values of- -- type @'JavascriptUrl' url@. See the Yesod book for details.-- tsc-- , typeScriptFile-- , typeScriptFileReload-+ -- tsc-+ --, typeScriptFile-+ --, typeScriptFileReload- - #ifdef TEST_EXPORT-- , typeScriptSettings-+ --, typeScriptSettings- #endif- ) where- -@@ -71,46 +71,3 @@ import Language.Haskell.TH.Syntax- import Text.Shakespeare- import Text.Julius- ---- | The TypeScript language compiles down to Javascript.---- We do this compilation once at compile time to avoid needing to do it during the request.---- We call this a preConversion because other shakespeare modules like Lucius use Haskell to compile during the request instead rather than a system call.--typeScriptSettings :: Q ShakespeareSettings--typeScriptSettings = do-- jsettings <- javascriptSettings-- return $ jsettings { varChar = '#'-- , preConversion = Just PreConvert {-- preConvert = ReadProcess "sh" ["-c", "TMP_IN=$(mktemp XXXXXXXXXX.ts); TMP_OUT=$(mktemp XXXXXXXXXX.js); cat /dev/stdin > ${TMP_IN} && tsc --out ${TMP_OUT} ${TMP_IN} && cat ${TMP_OUT}; rm ${TMP_IN} && rm ${TMP_OUT}"]-- , preEscapeIgnoreBalanced = "'\""-- , preEscapeIgnoreLine = "//"-- , wrapInsertion = Just WrapInsertion { -- wrapInsertionIndent = Nothing-- , wrapInsertionStartBegin = ";(function("-- , wrapInsertionSeparator = ", "-- , wrapInsertionStartClose = "){"-- , wrapInsertionEnd = "})"-- , wrapInsertionAddParens = False-- }-- }-- }------ | Read inline, quasiquoted TypeScript--tsc :: QuasiQuoter--tsc = QuasiQuoter { quoteExp = \s -> do-- rs <- typeScriptSettings-- quoteExp (shakespeare rs) s-- }------ | Read in a TypeScript template file. This function reads the file once, at---- compile time.--typeScriptFile :: FilePath -> Q Exp--typeScriptFile fp = do-- rs <- typeScriptSettings-- shakespeareFile rs fp------ | Read in a Roy template file. This impure function uses---- unsafePerformIO to re-read the file on every call, allowing for rapid---- iteration.--typeScriptFileReload :: FilePath -> Q Exp--typeScriptFileReload fp = do-- rs <- typeScriptSettings-- shakespeareFileReload rs fp--- -2.1.1-
standalone/no-th/haskell-patches/shakespeare_remove-TH.patch view
@@ -1,181 +1,1438 @@-From 38a22dae4f7f9726379fdaa3f85d78d75eee9d8e Mon Sep 17 00:00:00 2001-From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 02:01:22 +0000-Subject: [PATCH] hack TH------ Text/Shakespeare.hs | 70 ++++++++----------------------------------------- Text/Shakespeare/Base.hs | 28 -------------------- 2 files changed, 11 insertions(+), 87 deletions(-)--diff --git a/Text/Shakespeare.hs b/Text/Shakespeare.hs-index 68e344f..97361a2 100644---- a/Text/Shakespeare.hs-+++ b/Text/Shakespeare.hs-@@ -14,12 +14,12 @@ module Text.Shakespeare- , WrapInsertion (..)- , PreConversion (..)- , defaultShakespeareSettings-- , shakespeare-- , shakespeareFile-- , shakespeareFileReload-+ -- , shakespeare-+ -- , shakespeareFile-+ -- , shakespeareFileReload- -- * low-level-- , shakespeareFromString-- , shakespeareUsedIdentifiers-+ -- , shakespeareFromString-+ -- , shakespeareUsedIdentifiers- , RenderUrl- , VarType (..)- , Deref-@@ -154,38 +154,6 @@ defaultShakespeareSettings = ShakespeareSettings {- , modifyFinalValue = Nothing- }- --instance Lift PreConvert where-- lift (PreConvert convert ignore comment wrapInsertion) =-- [|PreConvert $(lift convert) $(lift ignore) $(lift comment) $(lift wrapInsertion)|]----instance Lift WrapInsertion where-- lift (WrapInsertion indent sb sep sc e wp) =-- [|WrapInsertion $(lift indent) $(lift sb) $(lift sep) $(lift sc) $(lift e) $(lift wp)|]----instance Lift PreConversion where-- lift (ReadProcess command args) =-- [|ReadProcess $(lift command) $(lift args)|]-- lift Id = [|Id|]----instance Lift ShakespeareSettings where-- lift (ShakespeareSettings x1 x2 x3 x4 x5 x6 x7 x8 x9) =-- [|ShakespeareSettings-- $(lift x1) $(lift x2) $(lift x3)-- $(liftExp x4) $(liftExp x5) $(liftExp x6) $(lift x7) $(lift x8) $(liftMExp x9)|]-- where-- liftExp (VarE n) = [|VarE $(liftName n)|]-- liftExp (ConE n) = [|ConE $(liftName n)|]-- liftExp _ = error "liftExp only supports VarE and ConE"-- liftMExp Nothing = [|Nothing|]-- liftMExp (Just e) = [|Just|] `appE` liftExp e-- liftName (Name (OccName a) b) = [|Name (OccName $(lift a)) $(liftFlavour b)|]-- liftFlavour NameS = [|NameS|]-- liftFlavour (NameQ (ModName a)) = [|NameQ (ModName $(lift a))|]-- liftFlavour (NameU _) = error "liftFlavour NameU" -- [|NameU $(lift $ fromIntegral a)|]-- liftFlavour (NameL _) = error "liftFlavour NameL" -- [|NameU $(lift $ fromIntegral a)|]-- liftFlavour (NameG ns (PkgName p) (ModName m)) = [|NameG $(liftNS ns) (PkgName $(lift p)) (ModName $(lift m))|]-- liftNS VarName = [|VarName|]-- liftNS DataName = [|DataName|]- - type QueryParameters = [(TS.Text, TS.Text)]- type RenderUrl url = (url -> QueryParameters -> TS.Text)-@@ -349,6 +317,7 @@ pack' = TS.pack- {-# NOINLINE pack' #-}- #endif- -+{-- contentsToShakespeare :: ShakespeareSettings -> [Content] -> Q Exp- contentsToShakespeare rs a = do- r <- newName "_render"-@@ -400,16 +369,19 @@ shakespeareFile r fp =- qAddDependentFile fp >>- #endif- readFileQ fp >>= shakespeareFromString r-+-}- - data VarType = VTPlain | VTUrl | VTUrlParam | VTMixin- deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data, Generic)- -+{-- getVars :: Content -> [(Deref, VarType)]- getVars ContentRaw{} = []- getVars (ContentVar d) = [(d, VTPlain)]- getVars (ContentUrl d) = [(d, VTUrl)]- getVars (ContentUrlParam d) = [(d, VTUrlParam)]- getVars (ContentMix d) = [(d, VTMixin)]-+-}- - data VarExp url = EPlain Builder- | EUrl url-@@ -418,8 +390,10 @@ data VarExp url = EPlain Builder- - -- | Determine which identifiers are used by the given template, useful for- -- creating systems like yesod devel.-+{-- shakespeareUsedIdentifiers :: ShakespeareSettings -> String -> [(Deref, VarType)]- shakespeareUsedIdentifiers settings = concatMap getVars . contentFromString settings-+-}- - type MTime = UTCTime- -@@ -436,28 +410,6 @@ insertReloadMap :: FilePath -> (MTime, [Content]) -> IO [Content]- insertReloadMap fp (mt, content) = atomicModifyIORef reloadMapRef- (\reloadMap -> (M.insert fp (mt, content) reloadMap, content))- --shakespeareFileReload :: ShakespeareSettings -> FilePath -> Q Exp--shakespeareFileReload settings fp = do-- str <- readFileQ fp-- s <- qRunIO $ preFilter (Just fp) settings str-- let b = shakespeareUsedIdentifiers settings s-- c <- mapM vtToExp b-- rt <- [|shakespeareRuntime settings fp|]-- wrap' <- [|\x -> $(return $ wrap settings) . x|]-- return $ wrap' `AppE` (rt `AppE` ListE c)-- where-- vtToExp :: (Deref, VarType) -> Q Exp-- vtToExp (d, vt) = do-- d' <- lift d-- c' <- c vt-- return $ TupE [d', c' `AppE` derefToExp [] d]-- where-- c :: VarType -> Q Exp-- c VTPlain = [|EPlain . $(return $-- InfixE (Just $ unwrap settings) (VarE '(.)) (Just $ toBuilder settings))|]-- c VTUrl = [|EUrl|]-- c VTUrlParam = [|EUrlParam|]-- c VTMixin = [|\x -> EMixin $ \r -> $(return $ unwrap settings) $ x r|]- - - -diff --git a/Text/Shakespeare/Base.hs b/Text/Shakespeare/Base.hs-index a0e983c..23b4692 100644---- a/Text/Shakespeare/Base.hs-+++ b/Text/Shakespeare/Base.hs-@@ -52,34 +52,6 @@ data Deref = DerefModulesIdent [String] Ident- | DerefTuple [Deref]- deriving (Show, Eq, Read, Data, Typeable, Ord)- --instance Lift Ident where-- lift (Ident s) = [|Ident|] `appE` lift s--instance Lift Deref where-- lift (DerefModulesIdent v s) = do-- dl <- [|DerefModulesIdent|]-- v' <- lift v-- s' <- lift s-- return $ dl `AppE` v' `AppE` s'-- lift (DerefIdent s) = do-- dl <- [|DerefIdent|]-- s' <- lift s-- return $ dl `AppE` s'-- lift (DerefBranch x y) = do-- x' <- lift x-- y' <- lift y-- db <- [|DerefBranch|]-- return $ db `AppE` x' `AppE` y'-- lift (DerefIntegral i) = [|DerefIntegral|] `appE` lift i-- lift (DerefRational r) = do-- n <- lift $ numerator r-- d <- lift $ denominator r-- per <- [|(%) :: Int -> Int -> Ratio Int|]-- dr <- [|DerefRational|]-- return $ dr `AppE` InfixE (Just n) per (Just d)-- lift (DerefString s) = [|DerefString|] `appE` lift s-- lift (DerefList x) = [|DerefList $(lift x)|]-- lift (DerefTuple x) = [|DerefTuple $(lift x)|]--- derefParens, derefCurlyBrackets :: UserParser a Deref- derefParens = between (char '(') (char ')') parseDeref- derefCurlyBrackets = between (char '{') (char '}') parseDeref--- -2.1.1+From 4694f3a7ee4eb15d33ecda9d62712ea236304c1b Mon Sep 17 00:00:00 2001+From: dummy <dummy@example.com>+Date: Thu, 2 Jul 2015 22:17:29 +0000+Subject: [PATCH] hack TH++---+ Text/Cassius.hs | 30 +---+ Text/Coffee.hs | 56 +-------+ Text/Css.hs | 151 ---------------------+ Text/CssCommon.hs | 22 ---+ Text/Hamlet.hs | 346 +++--------------------------------------------+ Text/Julius.hs | 59 +-------+ Text/Lucius.hs | 47 +------+ Text/Roy.hs | 52 +------+ Text/Shakespeare.hs | 70 ++--------+ Text/Shakespeare/Base.hs | 28 ----+ Text/Shakespeare/Text.hs | 117 ++--------------+ Text/TypeScript.hs | 48 +------+ shakespeare.cabal | 6 +-+ 13 files changed, 69 insertions(+), 963 deletions(-)++diff --git a/Text/Cassius.hs b/Text/Cassius.hs+index ba73bdd..ffe7c51 100644+--- a/Text/Cassius.hs++++ b/Text/Cassius.hs+@@ -14,12 +14,7 @@ module Text.Cassius+ , renderCss+ , renderCssUrl+ -- * Parsing+- , cassius+- , cassiusFile+- , cassiusFileDebug+- , cassiusFileReload+ -- ** Mixims+- , cassiusMixin+ , Mixin+ -- * ToCss instances+ -- ** Color+@@ -27,15 +22,12 @@ module Text.Cassius+ , colorRed+ , colorBlack+ -- ** Size+- , mkSize++ --, mkSize+ , AbsoluteUnit (..)+ , AbsoluteSize (..)+ , absoluteSize+- , EmSize (..)+- , ExSize (..)+ , PercentageSize (..)+ , percentageSize+- , PixelSize (..)+ -- * Internal+ , cassiusUsedIdentifiers+ ) where+@@ -47,25 +39,9 @@ import Language.Haskell.TH.Quote (QuasiQuoter (..))+ import Language.Haskell.TH.Syntax+ import qualified Data.Text.Lazy as TL+ import Text.CssCommon+-import Text.Lucius (lucius)+ import qualified Text.Lucius+ import Text.IndentToBrace (i2b)+ +-cassius :: QuasiQuoter+-cassius = QuasiQuoter { quoteExp = quoteExp lucius . i2b }+-+-cassiusFile :: FilePath -> Q Exp+-cassiusFile fp = do+-#ifdef GHC_7_4+- qAddDependentFile fp+-#endif+- contents <- fmap TL.unpack $ qRunIO $ readUtf8File fp+- quoteExp cassius contents+-+-cassiusFileDebug, cassiusFileReload :: FilePath -> Q Exp+-cassiusFileDebug = cssFileDebug True [|Text.Lucius.parseTopLevels|] Text.Lucius.parseTopLevels+-cassiusFileReload = cassiusFileDebug+-+ -- | Determine which identifiers are used by the given template, useful for+ -- creating systems like yesod devel.+ cassiusUsedIdentifiers :: String -> [(Deref, VarType)]+@@ -74,10 +50,6 @@ cassiusUsedIdentifiers = cssUsedIdentifiers True Text.Lucius.parseTopLevels+ -- | Create a mixin with Cassius syntax.+ --+ -- Since 2.0.3+-cassiusMixin :: QuasiQuoter+-cassiusMixin = QuasiQuoter+- { quoteExp = quoteExp Text.Lucius.luciusMixin . i2bMixin+- }+ + i2bMixin :: String -> String+ i2bMixin s' =+diff --git a/Text/Coffee.hs b/Text/Coffee.hs+index 488c81b..4e28c94 100644+--- a/Text/Coffee.hs++++ b/Text/Coffee.hs+@@ -51,13 +51,13 @@ module Text.Coffee+ -- ** Template-Reading Functions+ -- | These QuasiQuoter and Template Haskell methods return values of+ -- type @'JavascriptUrl' url@. See the Yesod book for details.+- coffee+- , coffeeFile+- , coffeeFileReload+- , coffeeFileDebug++ -- coffee++ --, coffeeFile++ --, coffeeFileReload++ --, coffeeFileDebug+ + #ifdef TEST_EXPORT+- , coffeeSettings++ -- , coffeeSettings+ #endif+ ) where+ +@@ -65,49 +65,3 @@ import Language.Haskell.TH.Quote (QuasiQuoter (..))+ import Language.Haskell.TH.Syntax+ import Text.Shakespeare+ import Text.Julius+-+-coffeeSettings :: Q ShakespeareSettings+-coffeeSettings = do+- jsettings <- javascriptSettings+- return $ jsettings { varChar = '%'+- , preConversion = Just PreConvert {+- preConvert = ReadProcess "coffee" ["-spb"]+- , preEscapeIgnoreBalanced = "'\"`" -- don't insert backtacks for variable already inside strings or backticks.+- , preEscapeIgnoreLine = "#" -- ignore commented lines+- , wrapInsertion = Just WrapInsertion { +- wrapInsertionIndent = Just " "+- , wrapInsertionStartBegin = "("+- , wrapInsertionSeparator = ", "+- , wrapInsertionStartClose = ") =>"+- , wrapInsertionEnd = ""+- , wrapInsertionAddParens = False+- }+- }+- }+-+--- | Read inline, quasiquoted CoffeeScript.+-coffee :: QuasiQuoter+-coffee = QuasiQuoter { quoteExp = \s -> do+- rs <- coffeeSettings+- quoteExp (shakespeare rs) s+- }+-+--- | Read in a CoffeeScript template file. This function reads the file once, at+--- compile time.+-coffeeFile :: FilePath -> Q Exp+-coffeeFile fp = do+- rs <- coffeeSettings+- shakespeareFile rs fp+-+--- | Read in a CoffeeScript template file. This impure function uses+--- unsafePerformIO to re-read the file on every call, allowing for rapid+--- iteration.+-coffeeFileReload :: FilePath -> Q Exp+-coffeeFileReload fp = do+- rs <- coffeeSettings+- shakespeareFileReload rs fp+-+--- | Deprecated synonym for 'coffeeFileReload'+-coffeeFileDebug :: FilePath -> Q Exp+-coffeeFileDebug = coffeeFileReload+-{-# DEPRECATED coffeeFileDebug "Please use coffeeFileReload instead." #-}+diff --git a/Text/Css.hs b/Text/Css.hs+index 75dc549..20c206c 100644+--- a/Text/Css.hs++++ b/Text/Css.hs+@@ -166,22 +166,6 @@ cssUsedIdentifiers toi2b parseBlocks s' =+ (scope, rest') = go rest+ go' (Attr k v) = k ++ v+ +-cssFileDebug :: Bool -- ^ perform the indent-to-brace conversion+- -> Q Exp+- -> Parser [TopLevel Unresolved]+- -> FilePath+- -> Q Exp+-cssFileDebug toi2b parseBlocks' parseBlocks fp = do+- s <- fmap TL.unpack $ qRunIO $ readUtf8File fp+-#ifdef GHC_7_4+- qAddDependentFile fp+-#endif+- let vs = cssUsedIdentifiers toi2b parseBlocks s+- c <- mapM vtToExp vs+- cr <- [|cssRuntime toi2b|]+- parseBlocks'' <- parseBlocks'+- return $ cr `AppE` parseBlocks'' `AppE` (LitE $ StringL fp) `AppE` ListE c+-+ combineSelectors :: HasLeadingSpace+ -> [Contents]+ -> [Contents]+@@ -287,18 +271,6 @@ cssRuntime toi2b parseBlocks fp cd render' = unsafePerformIO $ do+ + addScope scope = map (DerefIdent . Ident *** CDPlain . fromString) scope ++ cd+ +-vtToExp :: (Deref, VarType) -> Q Exp+-vtToExp (d, vt) = do+- d' <- lift d+- c' <- c vt+- return $ TupE [d', c' `AppE` derefToExp [] d]+- where+- c :: VarType -> Q Exp+- c VTPlain = [|CDPlain . toCss|]+- c VTUrl = [|CDUrl|]+- c VTUrlParam = [|CDUrlParam|]+- c VTMixin = [|CDMixin|]+-+ getVars :: Monad m => [(String, String)] -> Content -> m [(Deref, VarType)]+ getVars _ ContentRaw{} = return []+ getVars scope (ContentVar d) =+@@ -342,111 +314,8 @@ compressBlock (Block x y blocks mixins) =+ cc (ContentRaw a:ContentRaw b:c) = cc $ ContentRaw (a ++ b) : c+ cc (a:b) = a : cc b+ +-blockToMixin :: Name+- -> Scope+- -> Block Unresolved+- -> Q Exp+-blockToMixin r scope (Block _sel props subblocks mixins) =+- [|Mixin+- { mixinAttrs = concat+- $ $(listE $ map go props)+- : map mixinAttrs $mixinsE+- -- FIXME too many complications to implement sublocks for now...+- , mixinBlocks = [] -- foldr (.) id $(listE $ map subGo subblocks) []+- }|]+- {-+- . foldr (.) id $(listE $ map subGo subblocks)+- . (concatMap mixinBlocks $mixinsE ++)+- |]+- -}+- where+- mixinsE = return $ ListE $ map (derefToExp []) mixins+- go (Attr x y) = conE 'Attr+- `appE` (contentsToBuilder r scope x)+- `appE` (contentsToBuilder r scope y)+- subGo (Block sel' b c d) = blockToCss r scope $ Block sel' b c d+-+-blockToCss :: Name+- -> Scope+- -> Block Unresolved+- -> Q Exp+-blockToCss r scope (Block sel props subblocks mixins) =+- [|((Block+- { blockSelector = $(selectorToBuilder r scope sel)+- , blockAttrs = concat+- $ $(listE $ map go props)+- : map mixinAttrs $mixinsE+- , blockBlocks = ()+- , blockMixins = ()+- } :: Block Resolved):)+- . foldr (.) id $(listE $ map subGo subblocks)+- . (concatMap mixinBlocks $mixinsE ++)+- |]+- where+- mixinsE = return $ ListE $ map (derefToExp []) mixins+- go (Attr x y) = conE 'Attr+- `appE` (contentsToBuilder r scope x)+- `appE` (contentsToBuilder r scope y)+- subGo (hls, Block sel' b c d) =+- blockToCss r scope $ Block sel'' b c d+- where+- sel'' = combineSelectors hls sel sel'+-+-selectorToBuilder :: Name -> Scope -> [Contents] -> Q Exp+-selectorToBuilder r scope sels =+- contentsToBuilder r scope $ intercalate [ContentRaw ","] sels+-+-contentsToBuilder :: Name -> Scope -> [Content] -> Q Exp+-contentsToBuilder r scope contents =+- appE [|mconcat|] $ listE $ map (contentToBuilder r scope) contents+-+-contentToBuilder :: Name -> Scope -> Content -> Q Exp+-contentToBuilder _ _ (ContentRaw x) =+- [|fromText . pack|] `appE` litE (StringL x)+-contentToBuilder _ scope (ContentVar d) =+- case d of+- DerefIdent (Ident s)+- | Just val <- lookup s scope -> [|fromText . pack|] `appE` litE (StringL val)+- _ -> [|toCss|] `appE` return (derefToExp [] d)+-contentToBuilder r _ (ContentUrl u) =+- [|fromText|] `appE`+- (varE r `appE` return (derefToExp [] u) `appE` listE [])+-contentToBuilder r _ (ContentUrlParam u) =+- [|fromText|] `appE`+- ([|uncurry|] `appE` varE r `appE` return (derefToExp [] u))+-contentToBuilder _ _ ContentMixin{} = error "contentToBuilder on ContentMixin"+-+ type Scope = [(String, String)]+ +-topLevelsToCassius :: [TopLevel Unresolved]+- -> Q Exp+-topLevelsToCassius a = do+- r <- newName "_render"+- lamE [varP r] $ appE [|CssNoWhitespace . foldr ($) []|] $ fmap ListE $ go r [] a+- where+- go _ _ [] = return []+- go r scope (TopBlock b:rest) = do+- e <- [|(++) $ map TopBlock ($(blockToCss r scope b) [])|]+- es <- go r scope rest+- return $ e : es+- go r scope (TopAtBlock name s b:rest) = do+- let s' = contentsToBuilder r scope s+- e <- [|(:) $ TopAtBlock $(lift name) $(s') $(blocksToCassius r scope b)|]+- es <- go r scope rest+- return $ e : es+- go r scope (TopAtDecl dec cs:rest) = do+- e <- [|(:) $ TopAtDecl $(lift dec) $(contentsToBuilder r scope cs)|]+- es <- go r scope rest+- return $ e : es+- go r scope (TopVar k v:rest) = go r ((k, v) : scope) rest+-+-blocksToCassius :: Name+- -> Scope+- -> [Block Unresolved]+- -> Q Exp+-blocksToCassius r scope a = do+- appE [|foldr ($) []|] $ listE $ map (blockToCss r scope) a+-+ renderCss :: Css -> TL.Text+ renderCss css =+ toLazyText $ mconcat $ map go tops+@@ -515,23 +384,3 @@ renderBlock haveWhiteSpace indent (Block sel attrs () ())+ | haveWhiteSpace = fromString ";\n"+ | otherwise = singleton ';'+ +-instance Lift Mixin where+- lift (Mixin a b) = [|Mixin a b|]+-instance Lift (Attr Unresolved) where+- lift (Attr k v) = [|Attr k v :: Attr Unresolved |]+-instance Lift (Attr Resolved) where+- lift (Attr k v) = [|Attr $(liftBuilder k) $(liftBuilder v) :: Attr Resolved |]+-+-liftBuilder :: Builder -> Q Exp+-liftBuilder b = [|fromText $ pack $(lift $ TL.unpack $ toLazyText b)|]+-+-instance Lift Content where+- lift (ContentRaw s) = [|ContentRaw s|]+- lift (ContentVar d) = [|ContentVar d|]+- lift (ContentUrl d) = [|ContentUrl d|]+- lift (ContentUrlParam d) = [|ContentUrlParam d|]+- lift (ContentMixin m) = [|ContentMixin m|]+-instance Lift (Block Unresolved) where+- lift (Block a b c d) = [|Block a b c d|]+-instance Lift (Block Resolved) where+- lift (Block a b () ()) = [|Block $(liftBuilder a) b () ()|]+diff --git a/Text/CssCommon.hs b/Text/CssCommon.hs+index 719e0a8..0635cf4 100644+--- a/Text/CssCommon.hs++++ b/Text/CssCommon.hs+@@ -1,4 +1,3 @@+-{-# LANGUAGE TemplateHaskell #-}+ {-# LANGUAGE GeneralizedNewtypeDeriving #-}+ {-# LANGUAGE FlexibleInstances #-}+ {-# LANGUAGE CPP #-}+@@ -47,24 +46,6 @@ colorBlack = Color 0 0 0+ + -- CSS size wrappers+ +--- | Create a CSS size, e.g. $(mkSize "100px").+-mkSize :: String -> ExpQ+-mkSize s = appE nameE valueE+- where [(value, unit)] = reads s :: [(Double, String)]+- absoluteSizeE = varE $ mkName "absoluteSize"+- nameE = case unit of+- "cm" -> appE absoluteSizeE (conE $ mkName "Centimeter")+- "em" -> conE $ mkName "EmSize"+- "ex" -> conE $ mkName "ExSize"+- "in" -> appE absoluteSizeE (conE $ mkName "Inch")+- "mm" -> appE absoluteSizeE (conE $ mkName "Millimeter")+- "pc" -> appE absoluteSizeE (conE $ mkName "Pica")+- "pt" -> appE absoluteSizeE (conE $ mkName "Point")+- "px" -> conE $ mkName "PixelSize"+- "%" -> varE $ mkName "percentageSize"+- _ -> error $ "In mkSize, invalid unit: " ++ unit+- valueE = litE $ rationalL (toRational value)+-+ -- | Absolute size units.+ data AbsoluteUnit = Centimeter+ | Inch+@@ -156,6 +137,3 @@ showSize :: Rational -> String -> String+ showSize value' unit = printf "%f" value ++ unit+ where value = fromRational value' :: Double+ +-mkSizeType "EmSize" "em"+-mkSizeType "ExSize" "ex"+-mkSizeType "PixelSize" "px"+diff --git a/Text/Hamlet.hs b/Text/Hamlet.hs+index 4618be3..4ad3633 100644+--- a/Text/Hamlet.hs++++ b/Text/Hamlet.hs+@@ -11,36 +11,36 @@+ module Text.Hamlet+ ( -- * Plain HTML+ Html+- , shamlet+- , shamletFile+- , xshamlet+- , xshamletFile++ --, shamlet++ --, shamletFile++ --, xshamlet++ --, xshamletFile+ -- * Hamlet+ , HtmlUrl+- , hamlet+- , hamletFile+- , hamletFileReload+- , ihamletFileReload+- , xhamlet+- , xhamletFile++ --, hamlet++ -- , hamletFile++ -- , hamletFileReload++ -- , ihamletFileReload++ -- , xhamlet++ -- , xhamletFile+ -- * I18N Hamlet+ , HtmlUrlI18n+- , ihamlet+- , ihamletFile++ -- , ihamlet++ -- , ihamletFile+ -- * Type classes+ , ToAttributes (..)+ -- * Internal, for making more+ , HamletSettings (..)+ , NewlineStyle (..)+- , hamletWithSettings+- , hamletFileWithSettings++ -- , hamletWithSettings++ -- , hamletFileWithSettings+ , defaultHamletSettings+ , xhtmlHamletSettings+- , Env (..)+- , HamletRules (..)+- , hamletRules+- , ihamletRules+- , htmlRules++ --, Env (..)++ --, HamletRules (..)++ --, hamletRules++ --, ihamletRules++ --, htmlRules+ , CloseStyle (..)+ -- * Used by generated code+ , condH+@@ -109,48 +109,9 @@ type HtmlUrl url = Render url -> Html+ -- | A function generating an 'Html' given a message translator and a URL rendering function.+ type HtmlUrlI18n msg url = Translate msg -> Render url -> Html+ +-docsToExp :: Env -> HamletRules -> Scope -> [Doc] -> Q Exp+-docsToExp env hr scope docs = do+- exps <- mapM (docToExp env hr scope) docs+- case exps of+- [] -> [|return ()|]+- [x] -> return x+- _ -> return $ DoE $ map NoBindS exps+-+ unIdent :: Ident -> String+ unIdent (Ident s) = s+ +-bindingPattern :: Binding -> Q (Pat, [(Ident, Exp)])+-bindingPattern (BindAs i@(Ident s) b) = do+- name <- newName s+- (pattern, scope) <- bindingPattern b+- return (AsP name pattern, (i, VarE name):scope)+-bindingPattern (BindVar i@(Ident s))+- | s == "_" = return (WildP, [])+- | all isDigit s = do+- return (LitP $ IntegerL $ read s, [])+- | otherwise = do+- name <- newName s+- return (VarP name, [(i, VarE name)])+-bindingPattern (BindTuple is) = do+- (patterns, scopes) <- fmap unzip $ mapM bindingPattern is+- return (TupP patterns, concat scopes)+-bindingPattern (BindList is) = do+- (patterns, scopes) <- fmap unzip $ mapM bindingPattern is+- return (ListP patterns, concat scopes)+-bindingPattern (BindConstr con is) = do+- (patterns, scopes) <- fmap unzip $ mapM bindingPattern is+- return (ConP (mkConName con) patterns, concat scopes)+-bindingPattern (BindRecord con fields wild) = do+- let f (Ident field,b) =+- do (p,s) <- bindingPattern b+- return ((mkName field,p),s)+- (patterns, scopes) <- fmap unzip $ mapM f fields+- (patterns1, scopes1) <- if wild+- then bindWildFields con $ map fst fields+- else return ([],[])+- return (RecP (mkConName con) (patterns++patterns1), concat scopes ++ scopes1)+-+ mkConName :: DataConstr -> Name+ mkConName = mkName . conToStr+ +@@ -158,257 +119,15 @@ conToStr :: DataConstr -> String+ conToStr (DCUnqualified (Ident x)) = x+ conToStr (DCQualified (Module xs) (Ident x)) = intercalate "." $ xs ++ [x]+ +--- Wildcards bind all of the unbound fields to variables whose name+--- matches the field name.+---+--- For example: data R = C { f1, f2 :: Int }+--- C {..} is equivalent to C {f1=f1, f2=f2}+--- C {f1 = a, ..} is equivalent to C {f1=a, f2=f2}+--- C {f2 = a, ..} is equivalent to C {f1=f1, f2=a}+-bindWildFields :: DataConstr -> [Ident] -> Q ([(Name, Pat)], [(Ident, Exp)])+-bindWildFields conName fields = do+- fieldNames <- recordToFieldNames conName+- let available n = nameBase n `notElem` map unIdent fields+- let remainingFields = filter available fieldNames+- let mkPat n = do+- e <- newName (nameBase n)+- return ((n,VarP e), (Ident (nameBase n), VarE e))+- fmap unzip $ mapM mkPat remainingFields+-+--- Important note! reify will fail if the record type is defined in the+--- same module as the reify is used. This means quasi-quoted Hamlet+--- literals will not be able to use wildcards to match record types+--- defined in the same module.+-recordToFieldNames :: DataConstr -> Q [Name]+-recordToFieldNames conStr = do+- -- use 'lookupValueName' instead of just using 'mkName' so we reify the+- -- data constructor and not the type constructor if their names match.+- Just conName <- lookupValueName $ conToStr conStr+- DataConI _ _ typeName _ <- reify conName+- TyConI (DataD _ _ _ cons _) <- reify typeName+- [fields] <- return [fields | RecC name fields <- cons, name == conName]+- return [fieldName | (fieldName, _, _) <- fields]+-+-docToExp :: Env -> HamletRules -> Scope -> Doc -> Q Exp+-docToExp env hr scope (DocForall list idents inside) = do+- let list' = derefToExp scope list+- (pat, extraScope) <- bindingPattern idents+- let scope' = extraScope ++ scope+- mh <- [|F.mapM_|]+- inside' <- docsToExp env hr scope' inside+- let lam = LamE [pat] inside'+- return $ mh `AppE` lam `AppE` list'+-docToExp env hr scope (DocWith [] inside) = do+- inside' <- docsToExp env hr scope inside+- return $ inside'+-docToExp env hr scope (DocWith ((deref, idents):dis) inside) = do+- let deref' = derefToExp scope deref+- (pat, extraScope) <- bindingPattern idents+- let scope' = extraScope ++ scope+- inside' <- docToExp env hr scope' (DocWith dis inside)+- let lam = LamE [pat] inside'+- return $ lam `AppE` deref'+-docToExp env hr scope (DocMaybe val idents inside mno) = do+- let val' = derefToExp scope val+- (pat, extraScope) <- bindingPattern idents+- let scope' = extraScope ++ scope+- inside' <- docsToExp env hr scope' inside+- let inside'' = LamE [pat] inside'+- ninside' <- case mno of+- Nothing -> [|Nothing|]+- Just no -> do+- no' <- docsToExp env hr scope no+- j <- [|Just|]+- return $ j `AppE` no'+- mh <- [|maybeH|]+- return $ mh `AppE` val' `AppE` inside'' `AppE` ninside'+-docToExp env hr scope (DocCond conds final) = do+- conds' <- mapM go conds+- final' <- case final of+- Nothing -> [|Nothing|]+- Just f -> do+- f' <- docsToExp env hr scope f+- j <- [|Just|]+- return $ j `AppE` f'+- ch <- [|condH|]+- return $ ch `AppE` ListE conds' `AppE` final'+- where+- go :: (Deref, [Doc]) -> Q Exp+- go (d, docs) = do+- let d' = derefToExp ((specialOrIdent, VarE 'or):scope) d+- docs' <- docsToExp env hr scope docs+- return $ TupE [d', docs']+-docToExp env hr scope (DocCase deref cases) = do+- let exp_ = derefToExp scope deref+- matches <- mapM toMatch cases+- return $ CaseE exp_ matches+- where+- toMatch :: (Binding, [Doc]) -> Q Match+- toMatch (idents, inside) = do+- (pat, extraScope) <- bindingPattern idents+- let scope' = extraScope ++ scope+- insideExp <- docsToExp env hr scope' inside+- return $ Match pat (NormalB insideExp) []+-docToExp env hr v (DocContent c) = contentToExp env hr v c+-+-contentToExp :: Env -> HamletRules -> Scope -> Content -> Q Exp+-contentToExp _ hr _ (ContentRaw s) = do+- os <- [|preEscapedText . pack|]+- let s' = LitE $ StringL s+- return $ hrFromHtml hr `AppE` (os `AppE` s')+-contentToExp _ hr scope (ContentVar d) = do+- str <- [|toHtml|]+- return $ hrFromHtml hr `AppE` (str `AppE` derefToExp scope d)+-contentToExp env hr scope (ContentUrl hasParams d) =+- case urlRender env of+- Nothing -> error "URL interpolation used, but no URL renderer provided"+- Just wrender -> wrender $ \render -> do+- let render' = return render+- ou <- if hasParams+- then [|\(u, p) -> $(render') u p|]+- else [|\u -> $(render') u []|]+- let d' = derefToExp scope d+- pet <- [|toHtml|]+- return $ hrFromHtml hr `AppE` (pet `AppE` (ou `AppE` d'))+-contentToExp env hr scope (ContentEmbed d) = hrEmbed hr env $ derefToExp scope d+-contentToExp env hr scope (ContentMsg d) =+- case msgRender env of+- Nothing -> error "Message interpolation used, but no message renderer provided"+- Just wrender -> wrender $ \render ->+- return $ hrFromHtml hr `AppE` (render `AppE` derefToExp scope d)+-contentToExp _ hr scope (ContentAttrs d) = do+- html <- [|attrsToHtml . toAttributes|]+- return $ hrFromHtml hr `AppE` (html `AppE` derefToExp scope d)+-+-shamlet :: QuasiQuoter+-shamlet = hamletWithSettings htmlRules defaultHamletSettings+-+-xshamlet :: QuasiQuoter+-xshamlet = hamletWithSettings htmlRules xhtmlHamletSettings+-+-htmlRules :: Q HamletRules+-htmlRules = do+- i <- [|id|]+- return $ HamletRules i ($ (Env Nothing Nothing)) (\_ b -> return b)+-+-hamlet :: QuasiQuoter+-hamlet = hamletWithSettings hamletRules defaultHamletSettings+-+-xhamlet :: QuasiQuoter+-xhamlet = hamletWithSettings hamletRules xhtmlHamletSettings+-+ asHtmlUrl :: HtmlUrl url -> HtmlUrl url+ asHtmlUrl = id+ +-hamletRules :: Q HamletRules+-hamletRules = do+- i <- [|id|]+- let ur f = do+- r <- newName "_render"+- let env = Env+- { urlRender = Just ($ (VarE r))+- , msgRender = Nothing+- }+- h <- f env+- return $ LamE [VarP r] h+- return $ HamletRules i ur em+- where+- em (Env (Just urender) Nothing) e = do+- asHtmlUrl' <- [|asHtmlUrl|]+- urender $ \ur' -> return ((asHtmlUrl' `AppE` e) `AppE` ur')+- em _ _ = error "bad Env"+-+-ihamlet :: QuasiQuoter+-ihamlet = hamletWithSettings ihamletRules defaultHamletSettings+-+-ihamletRules :: Q HamletRules+-ihamletRules = do+- i <- [|id|]+- let ur f = do+- u <- newName "_urender"+- m <- newName "_mrender"+- let env = Env+- { urlRender = Just ($ (VarE u))+- , msgRender = Just ($ (VarE m))+- }+- h <- f env+- return $ LamE [VarP m, VarP u] h+- return $ HamletRules i ur em+- where+- em (Env (Just urender) (Just mrender)) e =+- urender $ \ur' -> mrender $ \mr -> return (e `AppE` mr `AppE` ur')+- em _ _ = error "bad Env"+-+-hamletWithSettings :: Q HamletRules -> HamletSettings -> QuasiQuoter+-hamletWithSettings hr set =+- QuasiQuoter+- { quoteExp = hamletFromString hr set+- }+-+-data HamletRules = HamletRules+- { hrFromHtml :: Exp+- , hrWithEnv :: (Env -> Q Exp) -> Q Exp+- , hrEmbed :: Env -> Exp -> Q Exp+- }+-+-data Env = Env+- { urlRender :: Maybe ((Exp -> Q Exp) -> Q Exp)+- , msgRender :: Maybe ((Exp -> Q Exp) -> Q Exp)+- }+-+-hamletFromString :: Q HamletRules -> HamletSettings -> String -> Q Exp+-hamletFromString qhr set s = do+- hr <- qhr+- hrWithEnv hr $ \env -> docsToExp env hr [] $ docFromString set s+-+ docFromString :: HamletSettings -> String -> [Doc]+ docFromString set s =+ case parseDoc set s of+ Error s' -> error s'+ Ok (_, d) -> d+ +-hamletFileWithSettings :: Q HamletRules -> HamletSettings -> FilePath -> Q Exp+-hamletFileWithSettings qhr set fp = do+-#ifdef GHC_7_4+- qAddDependentFile fp+-#endif+- contents <- fmap TL.unpack $ qRunIO $ readUtf8File fp+- hamletFromString qhr set contents+-+-hamletFile :: FilePath -> Q Exp+-hamletFile = hamletFileWithSettings hamletRules defaultHamletSettings+-+-hamletFileReload :: FilePath -> Q Exp+-hamletFileReload = hamletFileReloadWithSettings runtimeRules defaultHamletSettings+- where runtimeRules = HamletRuntimeRules { hrrI18n = False }+-+-ihamletFileReload :: FilePath -> Q Exp+-ihamletFileReload = hamletFileReloadWithSettings runtimeRules defaultHamletSettings+- where runtimeRules = HamletRuntimeRules { hrrI18n = True }+-+-xhamletFile :: FilePath -> Q Exp+-xhamletFile = hamletFileWithSettings hamletRules xhtmlHamletSettings+-+-shamletFile :: FilePath -> Q Exp+-shamletFile = hamletFileWithSettings htmlRules defaultHamletSettings+-+-xshamletFile :: FilePath -> Q Exp+-xshamletFile = hamletFileWithSettings htmlRules xhtmlHamletSettings+-+-ihamletFile :: FilePath -> Q Exp+-ihamletFile = hamletFileWithSettings ihamletRules defaultHamletSettings+-+-varName :: Scope -> String -> Exp+-varName _ "" = error "Illegal empty varName"+-varName scope v@(_:_) = fromMaybe (strToExp v) $ lookup (Ident v) scope+-+-strToExp :: String -> Exp+-strToExp s@(c:_)+- | all isDigit s = LitE $ IntegerL $ read s+- | isUpper c = ConE $ mkName s+- | otherwise = VarE $ mkName s+-strToExp "" = error "strToExp on empty string"+-+ -- | Checks for truth in the left value in each pair in the first argument. If+ -- a true exists, then the corresponding right action is performed. Only the+ -- first is performed. In there are no true values, then the second argument is+@@ -461,33 +180,6 @@ data HamletRuntimeRules = HamletRuntimeRules {+ hrrI18n :: Bool+ }+ +-hamletFileReloadWithSettings :: HamletRuntimeRules+- -> HamletSettings -> FilePath -> Q Exp+-hamletFileReloadWithSettings hrr settings fp = do+- s <- readFileQ fp+- let b = hamletUsedIdentifiers settings s+- c <- mapM vtToExp b+- rt <- if hrrI18n hrr+- then [|hamletRuntimeMsg settings fp|]+- else [|hamletRuntime settings fp|]+- return $ rt `AppE` ListE c+- where+- vtToExp :: (Deref, VarType) -> Q Exp+- vtToExp (d, vt) = do+- d' <- lift d+- c' <- toExp vt+- return $ TupE [d', c' `AppE` derefToExp [] d]+- where+- toExp = c+- where+- c :: VarType -> Q Exp+- c VTAttrs = [|EPlain . attrsToHtml . toAttributes|]+- c VTPlain = [|EPlain . toHtml|]+- c VTUrl = [|EUrl|]+- c VTUrlParam = [|EUrlParam|]+- c VTMixin = [|\r -> EMixin $ \c -> r c|]+- c VTMsg = [|EMsg|]+-+ -- move to Shakespeare.Base?+ readFileUtf8 :: FilePath -> IO String+ readFileUtf8 fp = fmap TL.unpack $ readUtf8File fp+diff --git a/Text/Julius.hs b/Text/Julius.hs+index 8c15a99..47b42fd 100644+--- a/Text/Julius.hs++++ b/Text/Julius.hs+@@ -14,17 +14,9 @@ module Text.Julius+ -- ** Template-Reading Functions+ -- | These QuasiQuoter and Template Haskell methods return values of+ -- type @'JavascriptUrl' url@. See the Yesod book for details.+- js+- , julius+- , juliusFile+- , jsFile+- , juliusFileDebug+- , jsFileDebug+- , juliusFileReload+- , jsFileReload+ + -- * Datatypes+- , JavascriptUrl++ JavascriptUrl+ , Javascript (..)+ , RawJavascript (..)+ +@@ -37,9 +29,9 @@ module Text.Julius+ , renderJavascriptUrl+ + -- ** internal, used by 'Text.Coffee'+- , javascriptSettings++ --, javascriptSettings+ -- ** internal+- , juliusUsedIdentifiers++ --, juliusUsedIdentifiers+ , asJavascriptUrl+ ) where+ +@@ -102,48 +94,3 @@ instance RawJS TL.Text where rawJS = RawJavascript . fromLazyText+ instance RawJS Builder where rawJS = RawJavascript+ instance RawJS Bool where rawJS = RawJavascript . unJavascript . toJavascript+ +-javascriptSettings :: Q ShakespeareSettings+-javascriptSettings = do+- toJExp <- [|toJavascript|]+- wrapExp <- [|Javascript|]+- unWrapExp <- [|unJavascript|]+- asJavascriptUrl' <- [|asJavascriptUrl|]+- return $ defaultShakespeareSettings { toBuilder = toJExp+- , wrap = wrapExp+- , unwrap = unWrapExp+- , modifyFinalValue = Just asJavascriptUrl'+- }+-+-js, julius :: QuasiQuoter+-js = QuasiQuoter { quoteExp = \s -> do+- rs <- javascriptSettings+- quoteExp (shakespeare rs) s+- }+-+-julius = js+-+-jsFile, juliusFile :: FilePath -> Q Exp+-jsFile fp = do+- rs <- javascriptSettings+- shakespeareFile rs fp+-+-juliusFile = jsFile+-+-+-jsFileReload, juliusFileReload :: FilePath -> Q Exp+-jsFileReload fp = do+- rs <- javascriptSettings+- shakespeareFileReload rs fp+-+-juliusFileReload = jsFileReload+-+-jsFileDebug, juliusFileDebug :: FilePath -> Q Exp+-juliusFileDebug = jsFileReload+-{-# DEPRECATED juliusFileDebug "Please use juliusFileReload instead." #-}+-jsFileDebug = jsFileReload+-{-# DEPRECATED jsFileDebug "Please use jsFileReload instead." #-}+-+--- | Determine which identifiers are used by the given template, useful for+--- creating systems like yesod devel.+-juliusUsedIdentifiers :: String -> [(Deref, VarType)]+-juliusUsedIdentifiers = shakespeareUsedIdentifiers defaultShakespeareSettings+diff --git a/Text/Lucius.hs b/Text/Lucius.hs+index 3226b79..fd0b7be 100644+--- a/Text/Lucius.hs++++ b/Text/Lucius.hs+@@ -9,13 +9,13 @@+ {-# OPTIONS_GHC -fno-warn-missing-fields #-}+ module Text.Lucius+ ( -- * Parsing+- lucius+- , luciusFile+- , luciusFileDebug+- , luciusFileReload++ -- lucius++ --, luciusFile++ --, luciusFileDebug++ --, luciusFileReload+ -- ** Mixins+- , luciusMixin+- , Mixin++ --, luciusMixin++ Mixin+ -- ** Runtime+ , luciusRT+ , luciusRT'+@@ -37,15 +37,12 @@ module Text.Lucius+ , colorRed+ , colorBlack+ -- ** Size+- , mkSize++ --, mkSize+ , AbsoluteUnit (..)+ , AbsoluteSize (..)+ , absoluteSize+- , EmSize (..)+- , ExSize (..)+ , PercentageSize (..)+ , percentageSize+- , PixelSize (..)+ -- * Internal+ , parseTopLevels+ , luciusUsedIdentifiers+@@ -72,13 +69,6 @@ import Text.Shakespeare (VarType)+ --+ -- >>> renderCss ([lucius|foo{bar:baz}|] undefined)+ -- "foo{bar:baz}"+-lucius :: QuasiQuoter+-lucius = QuasiQuoter { quoteExp = luciusFromString }+-+-luciusFromString :: String -> Q Exp+-luciusFromString s =+- topLevelsToCassius+- $ either (error . show) id $ parse parseTopLevels s s+ + whiteSpace :: Parser ()+ whiteSpace = many whiteSpace1 >> return ()+@@ -219,18 +209,6 @@ parseComment = do+ _ <- manyTill anyChar $ try $ string "*/"+ return $ ContentRaw ""+ +-luciusFile :: FilePath -> Q Exp+-luciusFile fp = do+-#ifdef GHC_7_4+- qAddDependentFile fp+-#endif+- contents <- fmap TL.unpack $ qRunIO $ readUtf8File fp+- luciusFromString contents+-+-luciusFileDebug, luciusFileReload :: FilePath -> Q Exp+-luciusFileDebug = cssFileDebug False [|parseTopLevels|] parseTopLevels+-luciusFileReload = luciusFileDebug+-+ parseTopLevels :: Parser [TopLevel Unresolved]+ parseTopLevels =+ go id+@@ -379,14 +357,3 @@ luciusRTMinified tl scope = either Left (Right . renderCss . CssNoWhitespace) $+ luciusUsedIdentifiers :: String -> [(Deref, VarType)]+ luciusUsedIdentifiers = cssUsedIdentifiers False parseTopLevels+ +-luciusMixin :: QuasiQuoter+-luciusMixin = QuasiQuoter { quoteExp = luciusMixinFromString }+-+-luciusMixinFromString :: String -> Q Exp+-luciusMixinFromString s' = do+- r <- newName "_render"+- case fmap compressBlock $ parse parseBlock s s of+- Left e -> error $ show e+- Right block -> blockToMixin r [] block+- where+- s = concat ["mixin{", s', "}"]+diff --git a/Text/Roy.hs b/Text/Roy.hs+index 6e5e246..a08b019 100644+--- a/Text/Roy.hs++++ b/Text/Roy.hs+@@ -39,12 +39,12 @@ module Text.Roy+ -- ** Template-Reading Functions+ -- | These QuasiQuoter and Template Haskell methods return values of+ -- type @'JavascriptUrl' url@. See the Yesod book for details.+- roy+- , royFile+- , royFileReload++ -- roy++ --, royFile++ --, royFileReload+ + #ifdef TEST_EXPORT+- , roySettings++ --, roySettings+ #endif+ ) where+ +@@ -52,47 +52,3 @@ import Language.Haskell.TH.Quote (QuasiQuoter (..))+ import Language.Haskell.TH.Syntax+ import Text.Shakespeare+ import Text.Julius+-+--- | The Roy language compiles down to Javascript.+--- We do this compilation once at compile time to avoid needing to do it during the request.+--- We call this a preConversion because other shakespeare modules like Lucius use Haskell to compile during the request instead rather than a system call.+-roySettings :: Q ShakespeareSettings+-roySettings = do+- jsettings <- javascriptSettings+- return $ jsettings { varChar = '#'+- , preConversion = Just PreConvert {+- preConvert = ReadProcess "roy" ["--stdio", "--browser"]+- , preEscapeIgnoreBalanced = "'\""+- , preEscapeIgnoreLine = "//"+- , wrapInsertion = Just WrapInsertion {+- wrapInsertionIndent = Just " "+- , wrapInsertionStartBegin = "(\\"+- , wrapInsertionSeparator = " "+- , wrapInsertionStartClose = " ->\n"+- , wrapInsertionEnd = ")"+- , wrapInsertionAddParens = True+- }+- }+- }+-+--- | Read inline, quasiquoted Roy.+-roy :: QuasiQuoter+-roy = QuasiQuoter { quoteExp = \s -> do+- rs <- roySettings+- quoteExp (shakespeare rs) s+- }+-+--- | Read in a Roy template file. This function reads the file once, at+--- compile time.+-royFile :: FilePath -> Q Exp+-royFile fp = do+- rs <- roySettings+- shakespeareFile rs fp+-+--- | Read in a Roy template file. This impure function uses+--- unsafePerformIO to re-read the file on every call, allowing for rapid+--- iteration.+-royFileReload :: FilePath -> Q Exp+-royFileReload fp = do+- rs <- roySettings+- shakespeareFileReload rs fp+diff --git a/Text/Shakespeare.hs b/Text/Shakespeare.hs+index 98c0c2d..2f6431b 100644+--- a/Text/Shakespeare.hs++++ b/Text/Shakespeare.hs+@@ -16,12 +16,12 @@ module Text.Shakespeare+ , WrapInsertion (..)+ , PreConversion (..)+ , defaultShakespeareSettings+- , shakespeare+- , shakespeareFile+- , shakespeareFileReload++ -- , shakespeare++ -- , shakespeareFile++ -- , shakespeareFileReload+ -- * low-level+- , shakespeareFromString+- , shakespeareUsedIdentifiers++ -- , shakespeareFromString++ -- , shakespeareUsedIdentifiers+ , RenderUrl+ , VarType (..)+ , Deref+@@ -153,38 +153,6 @@ defaultShakespeareSettings = ShakespeareSettings {+ , modifyFinalValue = Nothing+ }+ +-instance Lift PreConvert where+- lift (PreConvert convert ignore comment wrapInsertion) =+- [|PreConvert $(lift convert) $(lift ignore) $(lift comment) $(lift wrapInsertion)|]+-+-instance Lift WrapInsertion where+- lift (WrapInsertion indent sb sep sc e wp) =+- [|WrapInsertion $(lift indent) $(lift sb) $(lift sep) $(lift sc) $(lift e) $(lift wp)|]+-+-instance Lift PreConversion where+- lift (ReadProcess command args) =+- [|ReadProcess $(lift command) $(lift args)|]+- lift Id = [|Id|]+-+-instance Lift ShakespeareSettings where+- lift (ShakespeareSettings x1 x2 x3 x4 x5 x6 x7 x8 x9) =+- [|ShakespeareSettings+- $(lift x1) $(lift x2) $(lift x3)+- $(liftExp x4) $(liftExp x5) $(liftExp x6) $(lift x7) $(lift x8) $(liftMExp x9)|]+- where+- liftExp (VarE n) = [|VarE $(liftName n)|]+- liftExp (ConE n) = [|ConE $(liftName n)|]+- liftExp _ = error "liftExp only supports VarE and ConE"+- liftMExp Nothing = [|Nothing|]+- liftMExp (Just e) = [|Just|] `appE` liftExp e+- liftName (Name (OccName a) b) = [|Name (OccName $(lift a)) $(liftFlavour b)|]+- liftFlavour NameS = [|NameS|]+- liftFlavour (NameQ (ModName a)) = [|NameQ (ModName $(lift a))|]+- liftFlavour (NameU _) = error "liftFlavour NameU" -- [|NameU $(lift $ fromIntegral a)|]+- liftFlavour (NameL _) = error "liftFlavour NameL" -- [|NameU $(lift $ fromIntegral a)|]+- liftFlavour (NameG ns (PkgName p) (ModName m)) = [|NameG $(liftNS ns) (PkgName $(lift p)) (ModName $(lift m))|]+- liftNS VarName = [|VarName|]+- liftNS DataName = [|DataName|]+ + type QueryParameters = [(TS.Text, TS.Text)]+ type RenderUrl url = (url -> QueryParameters -> TS.Text)+@@ -348,6 +316,7 @@ pack' = TS.pack+ {-# NOINLINE pack' #-}+ #endif+ ++{-+ contentsToShakespeare :: ShakespeareSettings -> [Content] -> Q Exp+ contentsToShakespeare rs a = do+ r <- newName "_render"+@@ -399,16 +368,19 @@ shakespeareFile r fp =+ qAddDependentFile fp >>+ #endif+ readFileQ fp >>= shakespeareFromString r++-}+ + data VarType = VTPlain | VTUrl | VTUrlParam | VTMixin+ deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data, Generic)+ ++{-+ getVars :: Content -> [(Deref, VarType)]+ getVars ContentRaw{} = []+ getVars (ContentVar d) = [(d, VTPlain)]+ getVars (ContentUrl d) = [(d, VTUrl)]+ getVars (ContentUrlParam d) = [(d, VTUrlParam)]+ getVars (ContentMix d) = [(d, VTMixin)]++-}+ + data VarExp url = EPlain Builder+ | EUrl url+@@ -417,8 +389,10 @@ data VarExp url = EPlain Builder+ + -- | Determine which identifiers are used by the given template, useful for+ -- creating systems like yesod devel.++{-+ shakespeareUsedIdentifiers :: ShakespeareSettings -> String -> [(Deref, VarType)]+ shakespeareUsedIdentifiers settings = concatMap getVars . contentFromString settings++-}+ + type MTime = UTCTime+ +@@ -435,28 +409,6 @@ insertReloadMap :: FilePath -> (MTime, [Content]) -> IO [Content]+ insertReloadMap fp (mt, content) = atomicModifyIORef reloadMapRef+ (\reloadMap -> (M.insert fp (mt, content) reloadMap, content))+ +-shakespeareFileReload :: ShakespeareSettings -> FilePath -> Q Exp+-shakespeareFileReload settings fp = do+- str <- readFileQ fp+- s <- qRunIO $ preFilter (Just fp) settings str+- let b = shakespeareUsedIdentifiers settings s+- c <- mapM vtToExp b+- rt <- [|shakespeareRuntime settings fp|]+- wrap' <- [|\x -> $(return $ wrap settings) . x|]+- return $ wrap' `AppE` (rt `AppE` ListE c)+- where+- vtToExp :: (Deref, VarType) -> Q Exp+- vtToExp (d, vt) = do+- d' <- lift d+- c' <- c vt+- return $ TupE [d', c' `AppE` derefToExp [] d]+- where+- c :: VarType -> Q Exp+- c VTPlain = [|EPlain . $(return $+- InfixE (Just $ unwrap settings) (VarE '(.)) (Just $ toBuilder settings))|]+- c VTUrl = [|EUrl|]+- c VTUrlParam = [|EUrlParam|]+- c VTMixin = [|\x -> EMixin $ \r -> $(return $ unwrap settings) $ x r|]+ + + +diff --git a/Text/Shakespeare/Base.hs b/Text/Shakespeare/Base.hs+index a0e983c..23b4692 100644+--- a/Text/Shakespeare/Base.hs++++ b/Text/Shakespeare/Base.hs+@@ -52,34 +52,6 @@ data Deref = DerefModulesIdent [String] Ident+ | DerefTuple [Deref]+ deriving (Show, Eq, Read, Data, Typeable, Ord)+ +-instance Lift Ident where+- lift (Ident s) = [|Ident|] `appE` lift s+-instance Lift Deref where+- lift (DerefModulesIdent v s) = do+- dl <- [|DerefModulesIdent|]+- v' <- lift v+- s' <- lift s+- return $ dl `AppE` v' `AppE` s'+- lift (DerefIdent s) = do+- dl <- [|DerefIdent|]+- s' <- lift s+- return $ dl `AppE` s'+- lift (DerefBranch x y) = do+- x' <- lift x+- y' <- lift y+- db <- [|DerefBranch|]+- return $ db `AppE` x' `AppE` y'+- lift (DerefIntegral i) = [|DerefIntegral|] `appE` lift i+- lift (DerefRational r) = do+- n <- lift $ numerator r+- d <- lift $ denominator r+- per <- [|(%) :: Int -> Int -> Ratio Int|]+- dr <- [|DerefRational|]+- return $ dr `AppE` InfixE (Just n) per (Just d)+- lift (DerefString s) = [|DerefString|] `appE` lift s+- lift (DerefList x) = [|DerefList $(lift x)|]+- lift (DerefTuple x) = [|DerefTuple $(lift x)|]+-+ derefParens, derefCurlyBrackets :: UserParser a Deref+ derefParens = between (char '(') (char ')') parseDeref+ derefCurlyBrackets = between (char '{') (char '}') parseDeref+diff --git a/Text/Shakespeare/Text.hs b/Text/Shakespeare/Text.hs+index f490d7f..5154618 100644+--- a/Text/Shakespeare/Text.hs++++ b/Text/Shakespeare/Text.hs+@@ -7,20 +7,20 @@ module Text.Shakespeare.Text+ ( TextUrl+ , ToText (..)+ , renderTextUrl+- , stext+- , text+- , textFile+- , textFileDebug+- , textFileReload+- , st -- | strict text+- , lt -- | lazy text, same as stext :)+- , sbt -- | strict text whose left edge is aligned with bar ('|')+- , lbt -- | lazy text, whose left edge is aligned with bar ('|')++ --, stext++ --, text++ --, textFile++ --, textFileDebug++ --, textFileReload++ --, st -- | strict text++ --, lt -- | lazy text, same as stext :)++ --, sbt -- | strict text whose left edge is aligned with bar ('|')++ --, lbt -- | lazy text, whose left edge is aligned with bar ('|')+ -- * Yesod code generation+- , codegen+- , codegenSt+- , codegenFile+- , codegenFileReload++ --, codegen++ --, codegenSt++ --, codegenFile++ --, codegenFileReload+ ) where+ + import Language.Haskell.TH.Quote (QuasiQuoter (..))+@@ -59,66 +59,12 @@ settings = do+ }+ + +-stext, lt, st, text, lbt, sbt :: QuasiQuoter+-stext = +- QuasiQuoter { quoteExp = \s -> do+- rs <- settings+- render <- [|toLazyText|]+- rendered <- shakespeareFromString rs { justVarInterpolation = True } s+- return (render `AppE` rendered)+- }+-lt = stext+-+-st = +- QuasiQuoter { quoteExp = \s -> do+- rs <- settings+- render <- [|TL.toStrict . toLazyText|]+- rendered <- shakespeareFromString rs { justVarInterpolation = True } s+- return (render `AppE` rendered)+- }+-+-text = QuasiQuoter { quoteExp = \s -> do+- rs <- settings+- quoteExp (shakespeare rs) $ filter (/='\r') s+- }+-+ dropBar :: [TL.Text] -> [TL.Text]+ dropBar [] = []+ dropBar (c:cx) = c:dropBar' cx+ where+ dropBar' txt = reverse $ drop 1 $ map (TL.drop 1 . TL.dropWhile (/= '|')) $ reverse txt+ +-lbt = +- QuasiQuoter { quoteExp = \s -> do+- rs <- settings+- render <- [|TL.unlines . dropBar . TL.lines . toLazyText|]+- rendered <- shakespeareFromString rs { justVarInterpolation = True } s+- return (render `AppE` rendered)+- }+-+-sbt = +- QuasiQuoter { quoteExp = \s -> do+- rs <- settings+- render <- [|TL.toStrict . TL.unlines . dropBar . TL.lines . toLazyText|]+- rendered <- shakespeareFromString rs { justVarInterpolation = True } s+- return (render `AppE` rendered)+- }+-+-textFile :: FilePath -> Q Exp+-textFile fp = do+- rs <- settings+- shakespeareFile rs fp+-+-+-textFileDebug :: FilePath -> Q Exp+-textFileDebug = textFileReload+-{-# DEPRECATED textFileDebug "Please use textFileReload instead" #-}+-+-textFileReload :: FilePath -> Q Exp+-textFileReload fp = do+- rs <- settings+- shakespeareFileReload rs fp+-+ -- | codegen is designed for generating Yesod code, including templates+ -- So it uses different interpolation characters that won't clash with templates.+ codegenSettings :: Q ShakespeareSettings+@@ -135,40 +81,3 @@ codegenSettings = do+ , justVarInterpolation = True -- always!+ }+ +--- | codegen is designed for generating Yesod code, including templates+--- So it uses different interpolation characters that won't clash with templates.+--- You can use the normal text quasiquoters to generate code+-codegen :: QuasiQuoter+-codegen =+- QuasiQuoter { quoteExp = \s -> do+- rs <- codegenSettings+- render <- [|toLazyText|]+- rendered <- shakespeareFromString rs { justVarInterpolation = True } s+- return (render `AppE` rendered)+- }+-+--- | Generates strict Text+--- codegen is designed for generating Yesod code, including templates+--- So it uses different interpolation characters that won't clash with templates.+-codegenSt :: QuasiQuoter+-codegenSt =+- QuasiQuoter { quoteExp = \s -> do+- rs <- codegenSettings+- render <- [|TL.toStrict . toLazyText|]+- rendered <- shakespeareFromString rs { justVarInterpolation = True } s+- return (render `AppE` rendered)+- }+-+-codegenFileReload :: FilePath -> Q Exp+-codegenFileReload fp = do+- rs <- codegenSettings+- render <- [|TL.toStrict . toLazyText|]+- rendered <- shakespeareFileReload rs{ justVarInterpolation = True } fp+- return (render `AppE` rendered)+-+-codegenFile :: FilePath -> Q Exp+-codegenFile fp = do+- rs <- codegenSettings+- render <- [|TL.toStrict . toLazyText|]+- rendered <- shakespeareFile rs{ justVarInterpolation = True } fp+- return (render `AppE` rendered)+diff --git a/Text/TypeScript.hs b/Text/TypeScript.hs+index 85f6abd..3188272 100644+--- a/Text/TypeScript.hs++++ b/Text/TypeScript.hs+@@ -57,12 +57,12 @@ module Text.TypeScript+ -- ** Template-Reading Functions+ -- | These QuasiQuoter and Template Haskell methods return values of+ -- type @'JavascriptUrl' url@. See the Yesod book for details.+- tsc+- , typeScriptFile+- , typeScriptFileReload++ -- tsc++ --, typeScriptFile++ --, typeScriptFileReload+ + #ifdef TEST_EXPORT+- , typeScriptSettings++ --, typeScriptSettings+ #endif+ ) where+ +@@ -74,43 +74,3 @@ import Text.Julius+ -- | The TypeScript language compiles down to Javascript.+ -- We do this compilation once at compile time to avoid needing to do it during the request.+ -- We call this a preConversion because other shakespeare modules like Lucius use Haskell to compile during the request instead rather than a system call.+-typeScriptSettings :: Q ShakespeareSettings+-typeScriptSettings = do+- jsettings <- javascriptSettings+- return $ jsettings { varChar = '#'+- , preConversion = Just PreConvert {+- preConvert = ReadProcess "sh" ["-c", "TMP_IN=$(mktemp XXXXXXXXXX.ts); TMP_OUT=$(mktemp XXXXXXXXXX.js); cat /dev/stdin > ${TMP_IN} && tsc --out ${TMP_OUT} ${TMP_IN} && cat ${TMP_OUT}; rm ${TMP_IN} && rm ${TMP_OUT}"]+- , preEscapeIgnoreBalanced = "'\""+- , preEscapeIgnoreLine = "//"+- , wrapInsertion = Just WrapInsertion { +- wrapInsertionIndent = Nothing+- , wrapInsertionStartBegin = ";(function("+- , wrapInsertionSeparator = ", "+- , wrapInsertionStartClose = "){"+- , wrapInsertionEnd = "})"+- , wrapInsertionAddParens = False+- }+- }+- }+-+--- | Read inline, quasiquoted TypeScript+-tsc :: QuasiQuoter+-tsc = QuasiQuoter { quoteExp = \s -> do+- rs <- typeScriptSettings+- quoteExp (shakespeare rs) s+- }+-+--- | Read in a TypeScript template file. This function reads the file once, at+--- compile time.+-typeScriptFile :: FilePath -> Q Exp+-typeScriptFile fp = do+- rs <- typeScriptSettings+- shakespeareFile rs fp+-+--- | Read in a TypeScript template file. This impure function uses+--- unsafePerformIO to re-read the file on every call, allowing for rapid+--- iteration.+-typeScriptFileReload :: FilePath -> Q Exp+-typeScriptFileReload fp = do+- rs <- typeScriptSettings+- shakespeareFileReload rs fp+diff --git a/shakespeare.cabal b/shakespeare.cabal+index 37029fc..2c4b557 100644+--- a/shakespeare.cabal++++ b/shakespeare.cabal+@@ -62,18 +62,16 @@ library+ Text.Shakespeare.Base+ Text.Shakespeare+ Text.TypeScript+- other-modules: Text.Hamlet.Parse+ Text.Css++ Text.CssCommon++ other-modules: Text.Hamlet.Parse+ Text.MkSizeType+ Text.IndentToBrace+- Text.CssCommon+ ghc-options: -Wall+ + if flag(test_export)+ cpp-options: -DTEST_EXPORT+ +- extensions: TemplateHaskell+-+ if impl(ghc >= 7.4)+ cpp-options: -DGHC_7_4+ +-- +2.1.4
− standalone/no-th/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/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch
@@ -1,49 +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 -- 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,12 +1,8 @@-From 3aef808eee43c973ae1fbf6e8769d89b7f0d355b Mon Sep 17 00:00:00 2001+From a020dd27eda45263db6ac887df4a94efb6ca86db Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Tue, 10 Jun 2014 14:47:42 +0000+Date: Thu, 2 Jul 2015 21:36:02 +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 ++++----@@ -14,10 +10,10 @@ 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/Network/Wai/Application/Static.hs b/Network/Wai/Application/Static.hs-index db2b835..b2c1aec 100644+index 228582d..7d72bb0 100644 --- a/Network/Wai/Application/Static.hs +++ b/Network/Wai/Application/Static.hs-@@ -33,8 +33,6 @@ import Control.Monad.IO.Class (liftIO)+@@ -34,8 +34,6 @@ import Control.Monad.IO.Class (liftIO) import Blaze.ByteString.Builder (toByteString) @@ -26,10 +22,10 @@ import Data.Text (Text) import qualified Data.Text as T -@@ -198,8 +196,6 @@ staticAppPieces _ _ req sendResponse+@@ -218,8 +216,6 @@ staticAppPieces _ _ req sendResponse H.status405 [("Content-Type", "text/plain")]- "Only GET is supported"+ "Only GET or HEAD 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@@ -55,10 +51,10 @@ -import WaiAppStatic.Storage.Embedded.TH +--import WaiAppStatic.Storage.Embedded.TH diff --git a/wai-app-static.cabal b/wai-app-static.cabal-index ef6f898..9a59d71 100644+index 4cca237..3fbfcee 100644 --- a/wai-app-static.cabal +++ b/wai-app-static.cabal-@@ -33,7 +33,6 @@ library+@@ -35,7 +35,6 @@ library , containers >= 0.2 , time >= 1.1.4 , old-locale >= 1.0.0.2@@ -66,7 +62,7 @@ , text >= 0.7 , blaze-builder >= 0.2.1.4 , base64-bytestring >= 0.1-@@ -61,9 +60,8 @@ library+@@ -63,9 +62,8 @@ library WaiAppStatic.Listing WaiAppStatic.Types WaiAppStatic.CmdLine@@ -78,5 +74,5 @@ extensions: CPP -- -2.0.0+2.1.4
− standalone/no-th/haskell-patches/xml-hamlet_remove_TH.patch
@@ -1,108 +0,0 @@-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 f1feea61dcba0b16afed5ce8dd5d2433fe505461 Mon Sep 17 00:00:00 2001+From bec7dac77cc7fbe9a620c371d7c2cdbcf234eac6 Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 02:15:23 +0000+Date: Fri, 3 Jul 2015 00:39:53 +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 9b29317..7c0792d 100644+index f7436e6..2fa62cc 100644 --- a/Yesod/Core.hs +++ b/Yesod/Core.hs @@ -31,16 +31,16 @@ module Yesod.Core@@ -45,7 +45,7 @@ -- * Sessions , SessionBackend (..) , customizeSessionCookies-@@ -87,17 +87,15 @@ module Yesod.Core+@@ -90,17 +90,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 8631d27..c40eb10 100644+index c2e707a..b594353 100644 --- a/Yesod/Core/Class/Yesod.hs +++ b/Yesod/Core/Class/Yesod.hs-@@ -5,18 +5,22 @@+@@ -5,11 +5,15 @@ {-# LANGUAGE CPP #-} module Yesod.Core.Class.Yesod where @@ -88,15 +88,16 @@ import Blaze.ByteString.Builder (Builder) import Blaze.ByteString.Builder.Char.Utf8 (fromText)- import Control.Arrow ((***), second)+@@ -18,7 +22,7 @@ import Control.Exception (bracket) import Control.Monad (forM, when, void) import Control.Monad.IO.Class (MonadIO (liftIO))--import Control.Monad.Logger (LogLevel (LevelInfo, LevelOther),-+import Control.Monad.Logger (Loc, LogLevel (LevelInfo, LevelOther),- LogSource)+ import Control.Monad.Logger (LogLevel (LevelInfo, LevelOther),+- LogSource)++ LogSource, Loc)+ import Control.Monad.Trans.Resource (InternalState, createInternalState, closeInternalState) import qualified Data.ByteString.Char8 as S8 import qualified Data.ByteString.Lazy as L-@@ -33,7 +37,6 @@ import qualified Data.Text.Encoding.Error as TEE+@@ -35,7 +39,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)@@ -104,7 +105,7 @@ import Network.HTTP.Types (encodePath) import qualified Network.Wai as W import Data.Default (def)-@@ -94,18 +97,26 @@ class RenderRoute site => Yesod site where+@@ -87,18 +90,26 @@ class RenderRoute site => Yesod site where defaultLayout w = do p <- widgetToPageContent w mmsg <- getMessage@@ -143,7 +144,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-@@ -374,45 +385,103 @@ widgetToPageContent w = do+@@ -410,45 +421,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@@ -286,7 +287,7 @@ return $ PageContent title headAll $ case jsLoader master of-@@ -442,10 +511,13 @@ defaultErrorHandler NotFound = selectRep $ do+@@ -478,10 +547,13 @@ defaultErrorHandler NotFound = selectRep $ do r <- waiRequest let path' = TE.decodeUtf8With TEE.lenientDecode $ W.rawPathInfo r setTitle "Not Found"@@ -304,7 +305,7 @@ provideRep $ return $ object ["message" .= ("Not Found" :: Text)] -- For API requests.-@@ -455,10 +527,11 @@ defaultErrorHandler NotFound = selectRep $ do+@@ -491,10 +563,11 @@ defaultErrorHandler NotFound = selectRep $ do defaultErrorHandler NotAuthenticated = selectRep $ do provideRep $ defaultLayout $ do setTitle "Not logged in"@@ -320,7 +321,7 @@ provideRep $ do -- 401 *MUST* include a WWW-Authenticate header-@@ -480,10 +553,13 @@ defaultErrorHandler NotAuthenticated = selectRep $ do+@@ -516,10 +589,13 @@ defaultErrorHandler NotAuthenticated = selectRep $ do defaultErrorHandler (PermissionDenied msg) = selectRep $ do provideRep $ defaultLayout $ do setTitle "Permission Denied"@@ -338,7 +339,7 @@ provideRep $ return $ object $ [ "message" .= ("Permission Denied. " <> msg)-@@ -492,30 +568,42 @@ defaultErrorHandler (PermissionDenied msg) = selectRep $ do+@@ -528,30 +604,42 @@ defaultErrorHandler (PermissionDenied msg) = selectRep $ do defaultErrorHandler (InvalidArgs ia) = selectRep $ do provideRep $ defaultLayout $ do setTitle "Invalid Arguments"@@ -396,7 +397,7 @@ provideRep $ return $ object ["message" .= ("Bad method" :: Text), "method" .= TE.decodeUtf8With TEE.lenientDecode m] asyncHelper :: (url -> [x] -> Text)-@@ -682,8 +770,4 @@ loadClientSession key getCachedDate sessionName req = load+@@ -718,8 +806,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@@ -407,7 +408,7 @@ - char = show . snd . loc_start +fileLocationToString loc = "unknown" diff --git a/Yesod/Core/Dispatch.hs b/Yesod/Core/Dispatch.hs-index e0d1f0e..cc23fdd 100644+index 7e43f74..625a901 100644 --- a/Yesod/Core/Dispatch.hs +++ b/Yesod/Core/Dispatch.hs @@ -1,4 +1,3 @@@@ -444,9 +445,9 @@ , PathMultiPiece (..) , Texts -- * Convert to WAI-@@ -135,13 +134,6 @@ toWaiAppLogger logger site = do- , yreSite = site+@@ -141,13 +140,6 @@ toWaiAppLogger logger site = do , yreSessionBackend = sb+ , yreGen = gen } - messageLoggerSource - site@@ -458,10 +459,10 @@ middleware <- mkDefaultMiddlewares logger return $ middleware $ toWaiAppYre yre -@@ -170,14 +162,7 @@ warp port site = do- ]- -}- , Network.Wai.Handler.Warp.settingsOnException = const $ \e ->+@@ -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 -> - when (shouldLog' e) $ - messageLoggerSource - site@@ -469,12 +470,12 @@ - $(qLocation >>= liftLoc) - "yesod-core" - LevelError-- (toLogStr $ "Exception from Warp: " ++ show e)-+ when (shouldLog' e) $ error (show e)- }+- (toLogStr $ "Exception from Warp: " ++ show e)) $++ when (shouldLog' e) $ error (show e)) $+ Network.Wai.Handler.Warp.defaultSettings) where- shouldLog' =-@@ -211,7 +196,6 @@ defaultMiddlewaresNoLogging = acceptOverride . autohead . gzip def . methodOverr+ shouldLog' = Network.Wai.Handler.Warp.defaultShouldDisplayException+@@ -208,7 +193,6 @@ defaultMiddlewaresNoLogging = acceptOverride . autohead . gzip def . methodOverr -- | Deprecated synonym for 'warp'. warpDebug :: YesodDispatch site => Int -> site -> IO () warpDebug = warp@@ -483,10 +484,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 d2b196b..13cac17 100644+index 19f4152..c97fb24 100644 --- a/Yesod/Core/Handler.hs +++ b/Yesod/Core/Handler.hs-@@ -174,7 +174,7 @@ import Data.Text.Encoding (decodeUtf8With, encodeUtf8)+@@ -178,7 +178,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@@ -495,7 +496,7 @@ import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as L-@@ -203,6 +203,7 @@ import Control.Exception (throwIO)+@@ -206,6 +206,7 @@ import Control.Exception (throwIO) import Blaze.ByteString.Builder (Builder) import Safe (headMay) import Data.CaseInsensitive (CI)@@ -503,7 +504,7 @@ import qualified Data.Conduit.List as CL import Control.Monad (unless) import Control.Monad.Trans.Resource (MonadResource, InternalState, runResourceT, withInternalState, getInternalState, liftResourceT, resourceForkIO-@@ -855,19 +856,15 @@ redirectToPost :: (MonadHandler m, RedirectUrl (HandlerSite m) url)+@@ -848,19 +849,15 @@ redirectToPost :: (MonadHandler m, RedirectUrl (HandlerSite m) url) -> m a redirectToPost url = do urlText <- toTextUrl url@@ -533,7 +534,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 311f208..63f666f 100644+index 651c11c..46e1d2a 100644 --- a/Yesod/Core/Internal/Run.hs +++ b/Yesod/Core/Internal/Run.hs @@ -16,7 +16,7 @@ import Control.Exception.Lifted (catch)@@ -543,18 +544,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, createInternalState, closeInternalState)+ import Control.Monad.Trans.Resource (runResourceT, withInternalState, runInternalState) import qualified Data.ByteString as S-@@ -31,7 +31,7 @@ import qualified Data.Text as T- import Data.Text.Encoding (encodeUtf8)+@@ -32,7 +32,7 @@ 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- #if MIN_VERSION_wai(2, 0, 0)-@@ -158,8 +158,6 @@ safeEh :: (Loc -> LogSource -> LogLevel -> LogStr -> IO ())+ import Network.Wai.Internal+@@ -160,8 +160,6 @@ safeEh :: (Loc -> LogSource -> LogLevel -> LogStr -> IO ()) -> ErrorResponse -> YesodApp safeEh log' er req = do@@ -683,26 +684,26 @@ - ] - return $ LetE [fun] (VarE helper) diff --git a/Yesod/Core/Types.hs b/Yesod/Core/Types.hs-index 388dfe3..b3fce0f 100644+index 5fa5c3d..1646d54 100644 --- a/Yesod/Core/Types.hs +++ b/Yesod/Core/Types.hs-@@ -21,6 +21,7 @@ import Control.Monad.Catch (MonadCatch (..))+@@ -19,6 +19,7 @@ import Control.Monad.Base (MonadBase (liftBase))+ 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 (..))-@@ -191,7 +192,7 @@ data RunHandlerEnv site = RunHandlerEnv+@@ -179,7 +180,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@@ -764,5 +765,5 @@ ihamletToRepHtml :: (MonadHandler m, RenderMessage (HandlerSite m) message) => HtmlUrlI18n message (Route (HandlerSite m)) -- -2.1.1+2.1.4
standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch view
@@ -1,22 +1,27 @@-From 1b24ece1a40c9365f719472ca6e342c8c4065c25 Mon Sep 17 00:00:00 2001+From 4cf9a045569ea0b51b4ee11df2dadbde330f7813 Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 02:31:20 +0000+Date: Fri, 3 Jul 2015 01:06:34 +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 | 186 +++++++++--- Yesod/Form/Fields.hs | 816 +++++++++++++++++++++++++++++++++++------------- Yesod/Form/Functions.hs | 257 ++++++++++++---- Yesod/Form/Jquery.hs | 134 ++++++--+ Yesod/Form/Bootstrap3.hs | 189 +++++++++--+ Yesod/Form/Fields.hs | 811 ++++++++++++++++++++++++++++++++++++-----------+ Yesod/Form/Functions.hs | 255 ++++++++++++---+ Yesod/Form/Jquery.hs | 124 ++++++-- Yesod/Form/MassInput.hs | 226 ++++++++++---- Yesod/Form/Nic.hs | 67 +++-- 6 files changed, 1322 insertions(+), 364 deletions(-)+ Yesod/Form/Nic.hs | 60 +++-+ yesod-form.cabal | 2 +-+ 7 files changed, 1311 insertions(+), 356 deletions(-) diff --git a/Yesod/Form/Bootstrap3.hs b/Yesod/Form/Bootstrap3.hs-index 84e85fc..1954fb4 100644+index 8377a68..fa8b7d4 100644 --- a/Yesod/Form/Bootstrap3.hs +++ b/Yesod/Form/Bootstrap3.hs-@@ -26,6 +26,9 @@ import Data.String (IsString(..))+@@ -35,6 +35,9 @@ import Data.String (IsString(..)) import Yesod.Core import qualified Data.Text as T@@ -26,7 +31,7 @@ import Yesod.Form.Types import Yesod.Form.Functions-@@ -152,44 +155,144 @@ renderBootstrap3 formLayout aform fragment = do+@@ -155,44 +158,144 @@ renderBootstrap3 formLayout aform fragment = do let views = views' [] has (Just _) = True has Nothing = False@@ -59,22 +64,22 @@ - |] + widget = do { (asWidgetT . toWidget) (toHtml fragment); + Data.Foldable.mapM_-+ (\ view_as0a++ (\ view_a2d4p + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "<div class=\"form-group "); + Text.Hamlet.condH-+ [(fvRequired view_as0a, ++ [(fvRequired view_a2d4p, + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "required "))] + Nothing; + Text.Hamlet.condH-+ [(not (fvRequired view_as0a), ++ [(not (fvRequired view_a2d4p), + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "optional "))] + Nothing; + Text.Hamlet.condH-+ [(has (fvErrors view_as0a), ++ [(has (fvErrors view_a2d4p), + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "has-error"))] + Nothing;@@ -83,66 +88,66 @@ + case formLayout of { + ; BootstrapBasicForm + -> do { Text.Hamlet.condH-+ [((/=) (fvId view_as0a) bootstrapSubmitId, ++ [((/=) (fvId view_a2d4p) bootstrapSubmitId, + do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "<label for=\"");-+ (asWidgetT . toWidget) (toHtml (fvId view_as0a));++ (asWidgetT . toWidget) (toHtml (fvId view_a2d4p)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+ (asWidgetT . toWidget) (toHtml (fvLabel view_as0a));++ (asWidgetT . toWidget) (toHtml (fvLabel view_a2d4p)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "</label>") })] + Nothing;-+ (asWidgetT . toWidget) (fvInput view_as0a);-+ (asWidgetT . toWidget) (helpWidget view_as0a) }++ (asWidgetT . toWidget) (fvInput view_a2d4p);++ (asWidgetT . toWidget) (helpWidget view_a2d4p) } + ; BootstrapInlineForm + -> do { Text.Hamlet.condH-+ [((/=) (fvId view_as0a) bootstrapSubmitId, ++ [((/=) (fvId view_a2d4p) bootstrapSubmitId, + do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "<label class=\"sr-only\" for=\"");-+ (asWidgetT . toWidget) (toHtml (fvId view_as0a));++ (asWidgetT . toWidget) (toHtml (fvId view_a2d4p)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+ (asWidgetT . toWidget) (toHtml (fvLabel view_as0a));++ (asWidgetT . toWidget) (toHtml (fvLabel view_a2d4p)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "</label>") })] + Nothing;-+ (asWidgetT . toWidget) (fvInput view_as0a);-+ (asWidgetT . toWidget) (helpWidget view_as0a) }-+ ; BootstrapHorizontalForm labelOffset_as0b-+ labelSize_as0c-+ inputOffset_as0d-+ inputSize_as0e++ (asWidgetT . toWidget) (fvInput view_a2d4p);++ (asWidgetT . toWidget) (helpWidget view_a2d4p) }++ ; BootstrapHorizontalForm labelOffset_a2d4q++ labelSize_a2d4r++ inputOffset_a2d4s++ inputSize_a2d4t + -> Text.Hamlet.condH-+ [((/=) (fvId view_as0a) bootstrapSubmitId, ++ [((/=) (fvId view_a2d4p) bootstrapSubmitId, + do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "<label class=\"control-label ");-+ (asWidgetT . toWidget) (toHtml (toOffset labelOffset_as0b));++ (asWidgetT . toWidget) (toHtml (toOffset labelOffset_a2d4q)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) " ");-+ (asWidgetT . toWidget) (toHtml (toColumn labelSize_as0c));++ (asWidgetT . toWidget) (toHtml (toColumn labelSize_a2d4r)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "\" for=\"");-+ (asWidgetT . toWidget) (toHtml (fvId view_as0a));++ (asWidgetT . toWidget) (toHtml (fvId view_a2d4p)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+ (asWidgetT . toWidget) (toHtml (fvLabel view_as0a));++ (asWidgetT . toWidget) (toHtml (fvLabel view_a2d4p)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "</label><div class=\"");-+ (asWidgetT . toWidget) (toHtml (toOffset inputOffset_as0d));++ (asWidgetT . toWidget) (toHtml (toOffset inputOffset_a2d4s)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) " ");-+ (asWidgetT . toWidget) (toHtml (toColumn inputSize_as0e));++ (asWidgetT . toWidget) (toHtml (toColumn inputSize_a2d4t)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+ (asWidgetT . toWidget) (fvInput view_as0a);-+ (asWidgetT . toWidget) (helpWidget view_as0a);++ (asWidgetT . toWidget) (fvInput view_a2d4p);++ (asWidgetT . toWidget) (helpWidget view_a2d4p); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "</div>") })] + (Just@@ -153,15 +158,15 @@ + (toHtml + (toOffset + (addGO-+ inputOffset_as0d-+ (addGO labelOffset_as0b labelSize_as0c))));++ inputOffset_a2d4s++ (addGO labelOffset_a2d4q labelSize_a2d4r)))); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) " ");-+ (asWidgetT . toWidget) (toHtml (toColumn inputSize_as0e));++ (asWidgetT . toWidget) (toHtml (toColumn inputSize_a2d4t)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");-+ (asWidgetT . toWidget) (fvInput view_as0a);-+ (asWidgetT . toWidget) (helpWidget view_as0a);++ (asWidgetT . toWidget) (fvInput view_a2d4p);++ (asWidgetT . toWidget) (helpWidget view_a2d4p); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "</div>") })) };@@ -182,21 +187,21 @@ -|] +helpWidget view = do { Text.Hamlet.maybeH + (fvTooltip view)-+ (\ tt_as0k++ (\ tt_a2d5x + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "<span class=\"help-block\">");-+ (asWidgetT . toWidget) (toHtml tt_as0k);++ (asWidgetT . toWidget) (toHtml tt_a2d5x); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "</span>") }) + Nothing; + Text.Hamlet.maybeH + (fvErrors view)-+ (\ err_as0l++ (\ err_a2d5y + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) + "<span class=\"help-block\">");-+ (asWidgetT . toWidget) (toHtml err_as0l);++ (asWidgetT . toWidget) (toHtml err_a2d5y); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) "</span>") }) + Nothing }@@ -204,7 +209,7 @@ -- | How the 'bootstrapSubmit' button should be rendered.-@@ -244,7 +347,22 @@ mbootstrapSubmit+@@ -247,7 +350,23 @@ mbootstrapSubmit => BootstrapSubmit msg -> MForm m (FormResult (), FieldView site) mbootstrapSubmit (BootstrapSubmit msg classes attrs) = let res = FormSuccess ()@@ -221,40 +226,26 @@ + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . T.pack) ">"); + ((liftM (toHtml .) getMessageRender)-+ >>= (\ urender_as0w -> (asWidgetT . toWidget) (urender_as0w msg)));++ >>=++ (\ urender_a2d6f -> (asWidgetT . toWidget) (urender_a2d6f 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 c6091a9..9e6bd4e 100644+index 5fe123e..42fd7d6 100644 --- a/Yesod/Form/Fields.hs +++ b/Yesod/Form/Fields.hs-@@ -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+@@ -52,8 +52,6 @@ module Yesod.Form.Fields , Option (..) , OptionList (..) , mkOptionList@@ -263,7 +254,7 @@ , optionsPairs , optionsEnum ) where-@@ -72,6 +64,15 @@ import Control.Monad (when, unless)+@@ -80,6 +78,15 @@ import Control.Monad (when, unless) import Data.Either (partitionEithers) import Data.Maybe (listToMaybe, fromMaybe) @@ -279,14 +270,7 @@ import qualified Blaze.ByteString.Builder.Html.Utf8 as B import Blaze.ByteString.Builder (writeByteString, toLazyByteString) import Blaze.ByteString.Builder.Internal.Write (fromWriteList)-@@ -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 ((<$>), (<|>))+@@ -102,8 +109,6 @@ import Control.Applicative ((<$>), (<|>)) import Data.Attoparsec.Text (Parser, char, string, digit, skipSpace, endOfInput, parseOnly) @@ -295,7 +279,7 @@ defaultFormMessage :: FormMessage -> Text defaultFormMessage = englishFormMessage -@@ -111,10 +109,25 @@ intField = Field+@@ -115,10 +120,25 @@ intField = Field Right (a, "") -> Right a _ -> Left $ MsgInvalidInteger s @@ -303,7 +287,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_aJJh++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_a2nCq + -> do { id + ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); + id (toHtml theId);@@ -325,7 +309,7 @@ , fieldEnctype = UrlEncoded } where-@@ -128,10 +141,25 @@ doubleField = Field+@@ -133,10 +153,25 @@ doubleField = Field Right (a, "") -> Right a _ -> Left $ MsgInvalidNumber s @@ -333,7 +317,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_aJJu++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_a2nCV + -> do { id + ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); + id (toHtml theId);@@ -355,7 +339,7 @@ , fieldEnctype = UrlEncoded } where showVal = either id (pack . show)-@@ -139,10 +167,24 @@ $newline never+@@ -147,10 +182,24 @@ $newline never dayField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Day dayField = Field { fieldParse = parseHelper $ parseDate . unpack@@ -363,7 +347,7 @@ -$newline never -<input id="#{theId}" name="#{name}" *{attrs} type="date" :isReq:required="" value="#{showVal val}"> -|]-+ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJJF++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_a2nDh + -> do { id + ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); + id (toHtml theId);@@ -384,20 +368,22 @@ , fieldEnctype = UrlEncoded } where showVal = either id (pack . show)-@@ -150,10 +192,23 @@ $newline never- timeField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m TimeOfDay- timeField = Field+@@ -179,10 +228,25 @@ timeFieldTypeText = timeFieldOfType "text"+ timeFieldOfType :: Monad m => RenderMessage (HandlerSite m) FormMessage => Text -> Field m TimeOfDay+ timeFieldOfType inputType = Field { fieldParse = parseHelper parseTime - , fieldView = \theId name attrs val isReq -> toWidget [hamlet| -$newline never--<input id="#{theId}" name="#{name}" *{attrs} :isReq:required="" value="#{showVal val}">+-<input id="#{theId}" name="#{name}" *{attrs} type="#{inputType}" :isReq:required="" value="#{showVal val}"> -|]-+ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJJT++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_a2nDN + -> 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, @@ -412,7 +398,7 @@ , fieldEnctype = UrlEncoded } where-@@ -166,10 +221,23 @@ $newline never+@@ -196,10 +260,23 @@ $newline never htmlField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Html htmlField = Field { fieldParse = parseHelper $ Right . preEscapedText . sanitizeBalance@@ -420,7 +406,7 @@ -$newline never -<textarea :isReq:required="" id="#{theId}" name="#{name}" *{attrs}>#{showVal val} -|]-+ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJK4++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_a2nEc + -> do { id + ((Text.Blaze.Internal.preEscapedText . pack) "<textarea"); + condH@@ -440,21 +426,25 @@ , fieldEnctype = UrlEncoded } where showVal = either id (pack . renderHtml)-@@ -197,10 +265,18 @@ instance ToHtml Textarea where+@@ -231,10 +308,22 @@ 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}" *{attrs}>#{either id unTextarea val}+-<textarea id="#{theId}" name="#{name}" :isReq:required="" *{attrs}>#{either id unTextarea val} -|]-+ , fieldView = \theId name attrs val _isReq -> toWidget $ \ _render_aJKe++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_a2nEL + -> 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));@@ -463,7 +453,7 @@ , fieldEnctype = UrlEncoded } -@@ -208,10 +284,19 @@ hiddenField :: (Monad m, PathPiece p, RenderMessage (HandlerSite m) FormMessage)+@@ -243,10 +332,19 @@ hiddenField :: (Monad m, PathPiece p, RenderMessage (HandlerSite m) FormMessage) => Field m p hiddenField = Field { fieldParse = parseHelper $ maybe (Left MsgValueRequired) Right . fromPathPiece@@ -471,7 +461,7 @@ -$newline never -<input type="hidden" id="#{theId}" name="#{name}" *{attrs} value="#{either id toPathPiece val}"> -|]-+ , fieldView = \theId name attrs val _isReq -> toWidget $ \ _render_aJKo++ , fieldView = \theId name attrs val _isReq -> toWidget $ \ _render_a2nFl + -> do { id + ((Text.Blaze.Internal.preEscapedText . pack) + "<input type=\"hidden\" id=\"");@@ -487,7 +477,7 @@ , fieldEnctype = UrlEncoded } -@@ -219,20 +304,53 @@ textField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Tex+@@ -255,20 +353,53 @@ textField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Tex textField = Field { fieldParse = parseHelper $ Right , fieldView = \theId name attrs val isReq ->@@ -519,7 +509,7 @@ + , fieldEnctype = UrlEncoded }- + -- | Creates an input with @type="password"@. passwordField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Text passwordField = Field { fieldParse = parseHelper $ Right@@ -527,7 +517,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_aJKH++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_a2nG7 + -> do { id + ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); + id (toHtml theId);@@ -549,7 +539,7 @@ , fieldEnctype = UrlEncoded } -@@ -304,10 +422,24 @@ emailField = Field+@@ -342,10 +473,24 @@ emailField = Field case Email.canonicalizeEmail $ encodeUtf8 s of Just e -> Right $ decodeUtf8With lenientDecode e Nothing -> Left $ MsgInvalidEmail s@@ -557,7 +547,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_aJLq++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_a2nKu + -> do { id + ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); + id (toHtml theId);@@ -578,7 +568,7 @@ , fieldEnctype = UrlEncoded } -@@ -322,10 +454,25 @@ multiEmailField = Field+@@ -360,10 +505,25 @@ multiEmailField = Field in case partitionEithers addrs of ([], good) -> Right good (bad, _) -> Left $ MsgInvalidEmail $ cat bad@@ -586,7 +576,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_aJMd++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_a2nL5 + -> do { id + ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); + id (toHtml theId);@@ -608,7 +598,7 @@ , fieldEnctype = UrlEncoded } where-@@ -341,20 +488,75 @@ searchField :: Monad m => RenderMessage (HandlerSite m) FormMessage => AutoFocus+@@ -380,20 +540,74 @@ searchField :: Monad m => RenderMessage (HandlerSite m) FormMessage => AutoFocus searchField autoFocus = Field { fieldParse = parseHelper Right , fieldView = \theId name attrs val isReq -> do@@ -661,32 +651,31 @@ + ((Text.Blaze.Internal.preEscapedText . pack) + "').focus();}</script>") } +-+ toWidget $ \ _render_aJMx-+ -> (Text.Css.CssNoWhitespace-+ . (foldr ($) []))++ toWidget $ \ _render_a2nMA++ -> (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 [])@@ -695,8 +684,8 @@ + , fieldEnctype = UrlEncoded }- -@@ -365,7 +567,28 @@ urlField = Field+ -- | Creates an input with @type="url"@, validating the URL according to RFC3986.+@@ -404,7 +618,28 @@ urlField = Field Nothing -> Left $ MsgInvalidUrl s Just _ -> Right s , fieldView = \theId name attrs val isReq ->@@ -726,7 +715,7 @@ , fieldEnctype = UrlEncoded } -@@ -378,18 +601,54 @@ selectField :: (Eq a, RenderMessage site FormMessage)+@@ -423,18 +658,54 @@ selectField :: (Eq a, RenderMessage site FormMessage) => HandlerT site IO (OptionList a) -> Field (HandlerT site IO) a selectField = selectFieldHelper@@ -769,8 +758,8 @@ + ((Text.Blaze.Internal.preEscapedText . pack) ">"); + ((Control.Monad.liftM (toHtml .) getMessageRender) + >>=-+ (\ urender_aJMX-+ -> (asWidgetT . toWidget) (urender_aJMX MsgSelectNone)));++ (\ urender_a2nOk++ -> (asWidgetT . toWidget) (urender_a2nOk MsgSelectNone))); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</option>") }) + -- onOpt@@ -791,9 +780,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)- => [(msg, a)]-@@ -412,11 +671,45 @@ multiSelectField ioptlist =+@@ -459,11 +730,45 @@ multiSelectField ioptlist = view theId name attrs val isReq = do opts <- fmap olOptions $ handlerToWidget ioptlist let selOpts = map (id &&& (optselected val)) opts@@ -821,20 +810,20 @@ + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) ">"); + Data.Foldable.mapM_-+ (\ (opt_aJNs, optsel_aJNt)++ (\ (opt_a2nPy, optsel_a2nPz) + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "<option value=\"");-+ (asWidgetT . toWidget) (toHtml (optionExternalValue opt_aJNs));++ (asWidgetT . toWidget) (toHtml (optionExternalValue opt_a2nPy)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "\""); + condH-+ [(optsel_aJNt, ++ [(optsel_a2nPz, + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) " selected"))] + Nothing; + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) ">");-+ (asWidgetT . toWidget) (toHtml (optionDisplay opt_aJNs));++ (asWidgetT . toWidget) (toHtml (optionDisplay opt_a2nPy)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</option>") }) + selOpts;@@ -844,7 +833,7 @@ where optselected (Left _) _ = False optselected (Right vals) opt = (optionInternalValue opt) `elem` vals-@@ -439,54 +732,196 @@ checkboxesField ioptlist = (multiSelectField ioptlist)+@@ -489,37 +794,115 @@ checkboxesField ioptlist = (multiSelectField ioptlist) opts <- fmap olOptions $ handlerToWidget ioptlist let optselected (Left _) _ = False optselected (Right vals) opt = (optionInternalValue opt) `elem` vals@@ -861,25 +850,25 @@ + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "\">"); + Data.Foldable.mapM_-+ (\ opt_aJNI++ (\ opt_a2nQo + -> 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_aJNI));++ (asWidgetT . toWidget) (toHtml (optionExternalValue opt_a2nQo)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "\""); + condH-+ [(optselected val opt_aJNI, ++ [(optselected val opt_a2nQo, + (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_aJNI));++ (asWidgetT . toWidget) (toHtml (optionDisplay opt_a2nQo)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</label>") }) + opts;@@ -887,7 +876,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@@ -942,8 +931,8 @@ + ((Text.Blaze.Internal.preEscapedText . pack) ">"); + ((Control.Monad.liftM (toHtml .) getMessageRender) + >>=-+ (\ urender_aJNY-+ -> (asWidgetT . toWidget) (urender_aJNY MsgSelectNone)));++ (\ urender_a2nR7++ -> (asWidgetT . toWidget) (urender_a2nR7 MsgSelectNone))); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</div></label>") }) +@@ -983,6 +972,9 @@ + ((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@@ -992,6 +984,9 @@ - <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)@@ -1012,8 +1007,8 @@ + ((Text.Blaze.Internal.preEscapedText . pack) "-none\">"); + ((Control.Monad.liftM (toHtml .) getMessageRender) + >>=-+ (\ urender_aJOn-+ -> (asWidgetT . toWidget) (urender_aJOn MsgSelectNone)));++ (\ urender_a2nSk++ -> (asWidgetT . toWidget) (urender_a2nSk MsgSelectNone))); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })] + Nothing;@@ -1039,8 +1034,8 @@ + ((Text.Blaze.Internal.preEscapedText . pack) "-yes\">"); + ((Control.Monad.liftM (toHtml .) getMessageRender) + >>=-+ (\ urender_aJOo-+ -> (asWidgetT . toWidget) (urender_aJOo MsgBoolYes)));++ (\ urender_a2nSl++ -> (asWidgetT . toWidget) (urender_a2nSl MsgBoolYes))); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) + "</label><input id=\"");@@ -1064,21 +1059,18 @@ + ((Text.Blaze.Internal.preEscapedText . pack) "-no\">"); + ((Control.Monad.liftM (toHtml .) getMessageRender) + >>=-+ (\ urender_aJOp-+ -> (asWidgetT . toWidget) (urender_aJOp MsgBoolNo)));++ (\ urender_a2nSm++ -> (asWidgetT . toWidget) (urender_a2nSm 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-@@ -512,10 +947,24 @@ $newline never+@@ -570,10 +1017,24 @@ $newline never checkBoxField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Bool checkBoxField = Field { fieldParse = \e _ -> return $ checkBoxParser e@@ -1107,25 +1099,31 @@ , fieldEnctype = UrlEncoded } -@@ -559,69 +1008,6 @@ optionsPairs opts = do+@@ -619,66 +1080,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] --#if MIN_VERSION_persistent(2, 0, 0)+--- | 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 -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)@@ -1139,11 +1137,10 @@ - , 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@@ -1152,15 +1149,6 @@ - , 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)@@ -1174,17 +1162,18 @@ - , optionInternalValue = key - , optionExternalValue = toPathPiece key - }) pairs- +- selectFieldHelper :: (Eq a, RenderMessage site FormMessage)-@@ -665,9 +1051,21 @@ fileField = Field+ => (Text -> Text -> [(Text, Text)] -> WidgetT site IO () -> WidgetT site IO ())+@@ -722,9 +1123,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_aJPt++ , fieldView = \id' name attrs _ isReq -> toWidget $ \ _render_a2nUV + -> do { id + ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\""); + id (toHtml id');@@ -1202,7 +1191,7 @@ , fieldEnctype = Multipart } -@@ -694,10 +1092,19 @@ fileAFormReq fs = AForm $ \(site, langs) menvs ints -> do+@@ -751,10 +1164,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'@@ -1226,7 +1215,7 @@ , fvErrors = errs , fvRequired = True }-@@ -726,10 +1133,19 @@ fileAFormOpt fs = AForm $ \(master, langs) menvs ints -> do+@@ -783,10 +1205,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'@@ -1251,28 +1240,26 @@ , fvRequired = False } diff --git a/Yesod/Form/Functions.hs b/Yesod/Form/Functions.hs-index 9e6abaf..0c2a0ce 100644+index 0d83b79..61e9b66 100644 --- a/Yesod/Form/Functions.hs +++ b/Yesod/Form/Functions.hs-@@ -60,12 +60,16 @@ import Text.Blaze (Markup, toMarkup)+@@ -60,12 +60,14 @@ 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 +221,14 @@ postHelper form env = do+@@ -217,7 +219,14 @@ postHelper form env = do let token = case reqToken req of Nothing -> mempty@@ -1288,7 +1275,7 @@ m <- getYesod langs <- languages ((res, xml), enctype) <- runFormGeneric (form token) m langs env-@@ -297,7 +308,12 @@ getHelper :: MonadHandler m+@@ -298,7 +307,12 @@ getHelper :: MonadHandler m -> Maybe (Env, FileEnv) -> m (a, Enctype) getHelper form env = do@@ -1302,7 +1289,7 @@ langs <- languages m <- getYesod runFormGeneric (form fragment) m langs env-@@ -332,10 +348,15 @@ identifyForm+@@ -333,10 +347,15 @@ identifyForm identifyForm identVal form = \fragment -> do -- Create hidden <input>. let fragment' =@@ -1322,7 +1309,7 @@ -- Check if we got its value back. mp <- askParams-@@ -365,22 +386,70 @@ renderTable, renderDivs, renderDivsNoLabels :: Monad m => FormRender m a+@@ -366,22 +385,70 @@ renderTable, renderDivs, renderDivsNoLabels :: Monad m => FormRender m a renderTable aform fragment = do (res, views') <- aFormToForm aform let views = views' []@@ -1345,20 +1332,20 @@ + let widget = do { Text.Hamlet.condH + [(null views, (asWidgetT . toWidget) (toHtml fragment))] Nothing; + Data.Foldable.mapM_-+ (\ (isFirst_ab5u, view_ab5v)++ (\ (isFirst_aNqW, view_aNqX) + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "<tr"); + Text.Hamlet.condH-+ [(or [fvRequired view_ab5v, not (fvRequired view_ab5v)], ++ [(or [fvRequired view_aNqX, not (fvRequired view_aNqX)], + do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) " class=\""); + Text.Hamlet.condH-+ [(fvRequired view_ab5v, ++ [(fvRequired view_aNqX, + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "required "))] + Nothing; + Text.Hamlet.condH-+ [(not (fvRequired view_ab5v), ++ [(not (fvRequired view_aNqX), + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "optional"))] + Nothing;@@ -1368,37 +1355,37 @@ + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "><td>"); + Text.Hamlet.condH-+ [(isFirst_ab5u, (asWidgetT . toWidget) (toHtml fragment))] Nothing;++ [(isFirst_aNqW, (asWidgetT . toWidget) (toHtml fragment))] Nothing; + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "<label for=\"");-+ (asWidgetT . toWidget) (toHtml (fvId view_ab5v));++ (asWidgetT . toWidget) (toHtml (fvId view_aNqX)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "\">");-+ (asWidgetT . toWidget) (toHtml (fvLabel view_ab5v));++ (asWidgetT . toWidget) (toHtml (fvLabel view_aNqX)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</label>"); + Text.Hamlet.maybeH-+ (fvTooltip view_ab5v)-+ (\ tt_ab5w++ (fvTooltip view_aNqX)++ (\ tt_aNqY + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) + "<div class=\"tooltip\">");-+ (asWidgetT . toWidget) (toHtml tt_ab5w);++ (asWidgetT . toWidget) (toHtml tt_aNqY); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</div>") }) + Nothing; + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</td><td>");-+ (asWidgetT . toWidget) (fvInput view_ab5v);++ (asWidgetT . toWidget) (fvInput view_aNqX); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</td>"); + Text.Hamlet.maybeH-+ (fvErrors view_ab5v)-+ (\ err_ab5x++ (fvErrors view_aNqX)++ (\ err_aNqZ + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) + "<td class=\"errors\">");-+ (asWidgetT . toWidget) (toHtml err_ab5x);++ (asWidgetT . toWidget) (toHtml err_aNqZ); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</td>") }) + Nothing;@@ -1409,7 +1396,7 @@ return (res, widget) where addIsFirst [] = []-@@ -396,19 +465,66 @@ renderDivsMaybeLabels :: Monad m => Bool -> FormRender m a+@@ -397,19 +464,66 @@ renderDivsMaybeLabels :: Monad m => Bool -> FormRender m a renderDivsMaybeLabels withLabels aform fragment = do (res, views') <- aFormToForm aform let views = views' []@@ -1428,20 +1415,20 @@ -|] + let widget = do { (asWidgetT . toWidget) (toHtml fragment); + Data.Foldable.mapM_-+ (\ view_ab5K++ (\ view_aNsz + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "<div"); + Text.Hamlet.condH-+ [(or [fvRequired view_ab5K, not (fvRequired view_ab5K)], ++ [(or [fvRequired view_aNsz, not (fvRequired view_aNsz)], + do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) " class=\""); + Text.Hamlet.condH-+ [(fvRequired view_ab5K, ++ [(fvRequired view_aNsz, + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "required "))] + Nothing; + Text.Hamlet.condH-+ [(not (fvRequired view_ab5K), ++ [(not (fvRequired view_aNsz), + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "optional"))] + Nothing;@@ -1454,31 +1441,31 @@ + [(withLabels, + do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "<label for=\"");-+ (asWidgetT . toWidget) (toHtml (fvId view_ab5K));++ (asWidgetT . toWidget) (toHtml (fvId view_aNsz)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "\">");-+ (asWidgetT . toWidget) (toHtml (fvLabel view_ab5K));++ (asWidgetT . toWidget) (toHtml (fvLabel view_aNsz)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })] + Nothing; + Text.Hamlet.maybeH-+ (fvTooltip view_ab5K)-+ (\ tt_ab5L++ (fvTooltip view_aNsz)++ (\ tt_aNsL + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) + "<div class=\"tooltip\">");-+ (asWidgetT . toWidget) (toHtml tt_ab5L);++ (asWidgetT . toWidget) (toHtml tt_aNsL); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</div>") }) + Nothing;-+ (asWidgetT . toWidget) (fvInput view_ab5K);++ (asWidgetT . toWidget) (fvInput view_aNsz); + Text.Hamlet.maybeH-+ (fvErrors view_ab5K)-+ (\ err_ab5M++ (fvErrors view_aNsz)++ (\ err_aNsP + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) + "<div class=\"errors\">");-+ (asWidgetT . toWidget) (toHtml err_ab5M);++ (asWidgetT . toWidget) (toHtml err_aNsP); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</div>") }) + Nothing;@@ -1489,7 +1476,7 @@ return (res, widget) -- | Render a form using Bootstrap v2-friendly shamlet syntax.-@@ -436,19 +552,62 @@ renderBootstrap2 aform fragment = do+@@ -437,19 +551,62 @@ renderBootstrap2 aform fragment = do let views = views' [] has (Just _) = True has Nothing = False@@ -1508,53 +1495,53 @@ - |] + let widget = do { (asWidgetT . toWidget) (toHtml fragment); + Data.Foldable.mapM_-+ (\ view_ab5Y++ (\ view_aNw8 + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) + "<div class=\"control-group clearfix "); + Text.Hamlet.condH-+ [(fvRequired view_ab5Y, ++ [(fvRequired view_aNw8, + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "required "))] + Nothing; + Text.Hamlet.condH-+ [(not (fvRequired view_ab5Y), ++ [(not (fvRequired view_aNw8), + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "optional "))] + Nothing; + Text.Hamlet.condH-+ [(has (fvErrors view_ab5Y), ++ [(has (fvErrors view_aNw8), + (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_ab5Y));++ (asWidgetT . toWidget) (toHtml (fvId view_aNw8)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "\">");-+ (asWidgetT . toWidget) (toHtml (fvLabel view_ab5Y));++ (asWidgetT . toWidget) (toHtml (fvLabel view_aNw8)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) + "</label><div class=\"controls input\">");-+ (asWidgetT . toWidget) (fvInput view_ab5Y);++ (asWidgetT . toWidget) (fvInput view_aNw8); + Text.Hamlet.maybeH-+ (fvTooltip view_ab5Y)-+ (\ tt_ab5Z++ (fvTooltip view_aNw8)++ (\ tt_aNw9 + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) + "<span class=\"help-block\">");-+ (asWidgetT . toWidget) (toHtml tt_ab5Z);++ (asWidgetT . toWidget) (toHtml tt_aNw9); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</span>") }) + Nothing; + Text.Hamlet.maybeH-+ (fvErrors view_ab5Y)-+ (\ err_ab60++ (fvErrors view_aNw8)++ (\ err_aNwa + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) + "<span class=\"help-block\">");-+ (asWidgetT . toWidget) (toHtml err_ab60);++ (asWidgetT . toWidget) (toHtml err_aNwa); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . pack) "</span>") }) + Nothing;@@ -1566,16 +1553,15 @@ -- | Deprecated synonym for 'renderBootstrap2'. diff --git a/Yesod/Form/Jquery.hs b/Yesod/Form/Jquery.hs-index 362eb8a..1df9966 100644+index 63e3d57..47503c2 100644 --- a/Yesod/Form/Jquery.hs +++ b/Yesod/Form/Jquery.hs-@@ -17,11 +17,23 @@ import Yesod.Core+@@ -18,11 +18,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)@@ -1591,25 +1577,27 @@ +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-@@ -61,27 +73,59 @@ jqueryDayField jds = Field+@@ -71,27 +83,54 @@ jqueryDayField' jds inputType = Field . readMay . unpack , fieldView = \theId name attrs val isReq -> do - toWidget [shamlet| -$newline never--<input id="#{theId}" name="#{name}" *{attrs} type="date" :isReq:required="" value="#{showVal val}">+-<input id="#{theId}" name="#{name}" *{attrs} type="#{inputType}" :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=\"date\"");++ id ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"");++ id (toHtml inputType);++ id ((Text.Blaze.Internal.preEscapedText . pack) "\""); + Text.Hamlet.condH + [(isReq, + id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]@@ -1638,42 +1626,36 @@ -}); -|] + toWidget $ Text.Julius.asJavascriptUrl-+ (\ _render_a2l4S++ (\ _render_a3iGM + -> mconcat + [Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')-+ "\n$(function(){\n var i = document.getElementById(\""),++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++ "\n\n$(function(){\n\n var i = document.getElementById(\""), + Text.Julius.toJavascript (rawJS theId), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')-+ "\");\n if (i.type != \"date\") {\n $(i).datepicker({\n dateFormat:'yy-mm-dd',\n changeMonth:"),++ ((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:"), + Text.Julius.toJavascript (jsBool (jdsChangeMonth jds)), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')-+ ",\n changeYear:"),++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++ ",\n\n changeYear:"), + Text.Julius.toJavascript (jsBool (jdsChangeYear jds)), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')-+ ",\n numberOfMonths:"),++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++ ",\n\n numberOfMonths:"), + Text.Julius.toJavascript (rawJS (mos (jdsNumberOfMonths jds))), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')-+ ",\n yearRange:"),++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++ ",\n\n yearRange:"), + Text.Julius.toJavascript (toJSON (jdsYearRange jds)), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')-+ "\n });\n }\n});")])++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++ "\n\n });\n\n }\n\n});")]) + , fieldEnctype = UrlEncoded } where-@@ -108,16 +152,52 @@ jqueryAutocompleteField' :: (RenderMessage site FormMessage, YesodJquery site)+@@ -118,16 +157,47 @@ jqueryAutocompleteField' :: (RenderMessage site FormMessage, YesodJquery site) jqueryAutocompleteField' minLen src = Field { fieldParse = parseHelper $ Right , fieldView = \theId name attrs val isReq -> do@@ -1706,40 +1688,35 @@ -$(function(){$("##{rawJS theId}").autocomplete({source:"@{src}",minLength:#{toJSON minLen}})}); -|] + toWidget $ Text.Julius.asJavascriptUrl-+ (\ _render_a2l58++ (\ _render_a3iHO + -> mconcat + [Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')-+ "\n$(function(){$(\"#"),++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++ "\n\n$(function(){$(\"#"), + Text.Julius.toJavascript (rawJS theId), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack') + "\").autocomplete({source:\""), + Text.Julius.Javascript-+ (Data.Text.Lazy.Builder.fromText-+ (_render_a2l58 src [])),++ (Data.Text.Internal.Builder.fromText (_render_a3iHO src [])), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack') + "\",minLength:"), + Text.Julius.toJavascript (toJSON minLen), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack') + "})});")]) + , fieldEnctype = UrlEncoded } diff --git a/Yesod/Form/MassInput.hs b/Yesod/Form/MassInput.hs-index a2b434d..75eb484 100644+index a2b434d..29b45b5 100644 --- a/Yesod/Form/MassInput.hs +++ b/Yesod/Form/MassInput.hs-@@ -9,6 +9,16 @@ module Yesod.Form.MassInput- , massTable- ) where+@@ -22,6 +22,16 @@ import Data.Traversable (sequenceA)+ import qualified Data.Map as Map+ import Data.Maybe (listToMaybe) +import qualified Data.Text +import qualified Text.Blaze as Text.Blaze.Internal@@ -1751,9 +1728,9 @@ +import qualified Data.Foldable +import qualified Control.Monad +- import Yesod.Form.Types- import Yesod.Form.Functions- import Yesod.Form.Fields (checkBoxField)+ down :: Monad m => Int -> MForm m ()+ down 0 = return ()+ down i | i < 0 = error "called down with a negative number" @@ -70,16 +80,27 @@ inputList label fixXml single mdef = formToAForm $ do { fvLabel = label , fvTooltip = Nothing@@ -1772,7 +1749,7 @@ + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<p>"); + Data.Foldable.mapM_-+ (\ xml_a1yM1 -> (asWidgetT . toWidget) xml_a1yM1) xmls;++ (\ xml_a3hPg -> (asWidgetT . toWidget) xml_a3hPg) xmls; + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "<input class=\"count\" type=\"hidden\" name=\"");@@ -1829,27 +1806,27 @@ - <div .errors>#{err} -|] +massDivs viewss = Data.Foldable.mapM_-+ (\ views_a1yMm++ (\ views_a3hPz + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "<fieldset>"); + Data.Foldable.mapM_-+ (\ view_a1yMn++ (\ view_a3hPA + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<div"); + Text.Hamlet.condH-+ [(or [fvRequired view_a1yMn, not (fvRequired view_a1yMn)], ++ [(or [fvRequired view_a3hPA, not (fvRequired view_a3hPA)], + do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + " class=\""); + Text.Hamlet.condH-+ [(fvRequired view_a1yMn, ++ [(fvRequired view_a3hPA, + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "required "))] + Nothing; + Text.Hamlet.condH-+ [(not (fvRequired view_a1yMn), ++ [(not (fvRequired view_a3hPA), + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "optional"))]@@ -1861,38 +1838,38 @@ + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "><label for=\"");-+ (asWidgetT . toWidget) (toHtml (fvId view_a1yMn));++ (asWidgetT . toWidget) (toHtml (fvId view_a3hPA)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "\">");-+ (asWidgetT . toWidget) (toHtml (fvLabel view_a1yMn));++ (asWidgetT . toWidget) (toHtml (fvLabel view_a3hPA)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</label>"); + Text.Hamlet.maybeH-+ (fvTooltip view_a1yMn)-+ (\ tt_a1yMo++ (fvTooltip view_a3hPA)++ (\ tt_a3hPB + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "<div class=\"tooltip\">");-+ (asWidgetT . toWidget) (toHtml tt_a1yMo);++ (asWidgetT . toWidget) (toHtml tt_a3hPB); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "</div>") }) + Nothing;-+ (asWidgetT . toWidget) (fvInput view_a1yMn);++ (asWidgetT . toWidget) (fvInput view_a3hPA); + Text.Hamlet.maybeH-+ (fvErrors view_a1yMn)-+ (\ err_a1yMp++ (fvErrors view_a3hPA)++ (\ err_a3hPC + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "<div class=\"errors\">");-+ (asWidgetT . toWidget) (toHtml err_a1yMp);++ (asWidgetT . toWidget) (toHtml err_a3hPC); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "</div>") }) + Nothing; + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</div>") })-+ views_a1yMm;++ views_a3hPz; + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "</fieldset>") })@@ -1900,27 +1877,27 @@ + + +massTable viewss = Data.Foldable.mapM_-+ (\ views_a1yMv++ (\ views_a3hPH + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "<fieldset><table>"); + Data.Foldable.mapM_-+ (\ view_a1yMw++ (\ view_a3hPI + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<tr"); + Text.Hamlet.condH-+ [(or [fvRequired view_a1yMw, not (fvRequired view_a1yMw)], ++ [(or [fvRequired view_a3hPI, not (fvRequired view_a3hPI)], + do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + " class=\""); + Text.Hamlet.condH-+ [(fvRequired view_a1yMw, ++ [(fvRequired view_a3hPI, + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "required "))] + Nothing; + Text.Hamlet.condH-+ [(not (fvRequired view_a1yMw), ++ [(not (fvRequired view_a3hPI), + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "optional"))]@@ -1932,19 +1909,19 @@ + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "><td><label for=\"");-+ (asWidgetT . toWidget) (toHtml (fvId view_a1yMw));++ (asWidgetT . toWidget) (toHtml (fvId view_a3hPI)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "\">");-+ (asWidgetT . toWidget) (toHtml (fvLabel view_a1yMw));++ (asWidgetT . toWidget) (toHtml (fvLabel view_a3hPI)); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</label>"); + Text.Hamlet.maybeH-+ (fvTooltip view_a1yMw)-+ (\ tt_a1yMx++ (fvTooltip view_a3hPI)++ (\ tt_a3hPJ + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "<div class=\"tooltip\">");-+ (asWidgetT . toWidget) (toHtml tt_a1yMx);++ (asWidgetT . toWidget) (toHtml tt_a3hPJ); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "</div>") })@@ -1952,23 +1929,23 @@ + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "</td><td>");-+ (asWidgetT . toWidget) (fvInput view_a1yMw);++ (asWidgetT . toWidget) (fvInput view_a3hPI); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</td>"); + Text.Hamlet.maybeH-+ (fvErrors view_a1yMw)-+ (\ err_a1yMy++ (fvErrors view_a3hPI)++ (\ err_a3hPK + -> do { (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "<td class=\"errors\">");-+ (asWidgetT . toWidget) (toHtml err_a1yMy);++ (asWidgetT . toWidget) (toHtml err_a3hPK); + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "</td>") }) + Nothing; + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</tr>") })-+ views_a1yMv;++ views_a3hPH; + (asWidgetT . toWidget) + ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) + "</table></fieldset>") })@@ -1990,12 +1967,19 @@ - <td .errors>#{err} -|] diff --git a/Yesod/Form/Nic.hs b/Yesod/Form/Nic.hs-index 7e4af07..b59745a 100644+index 2862678..a773553 100644 --- a/Yesod/Form/Nic.hs +++ b/Yesod/Form/Nic.hs-@@ -9,11 +9,22 @@ module Yesod.Form.Nic- , nicHtmlField- ) where+@@ -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) +import qualified Text.Blaze as Text.Blaze.Internal +import qualified Text.Blaze.Internal@@ -2007,24 +1991,19 @@ +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 +- 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+ 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 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}" :isReq:required .html>#{showVal val}+- <textarea id="#{theId}" *{attrs} name="#{name}" .html>#{showVal val} -|] + toWidget $ do { id + ((Text.Blaze.Internal.preEscapedText . pack)@@ -2033,10 +2012,6 @@ + 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));@@ -2053,34 +2028,43 @@ -(function(){new nicEditor({fullPanel:true}).panelInstance("#{rawJS theId}")})(); -|] + BottomOfHeadBlocking -> Text.Julius.asJavascriptUrl-+ (\ _render_a2rMh++ (\ _render_a3hYy + -> Data.Monoid.mconcat + [Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')-+ "\nbkLib.onDomLoaded(function(){new nicEditor({fullPanel:true}).panelInstance(\""),++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++ "\n\nbkLib.onDomLoaded(function(){new nicEditor({fullPanel:true}).panelInstance(\""), + Text.Julius.toJavascript (rawJS theId), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack') + "\")});")]) + + _ -> Text.Julius.asJavascriptUrl-+ (\ _render_a2rMm++ (\ _render_a3i1Q + -> Data.Monoid.mconcat + [Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')-+ "\n(function(){new nicEditor({fullPanel:true}).panelInstance(\""),++ ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')++ "\n\n(function(){new nicEditor({fullPanel:true}).panelInstance(\""), + Text.Julius.toJavascript (rawJS theId), + Text.Julius.Javascript-+ ((Data.Text.Lazy.Builder.fromText-+ . Text.Shakespeare.pack')++ ((Data.Text.Internal.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.1+2.1.4
standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch view
@@ -1,6 +1,6 @@-From e82ed4e6fd7b5ea6dbe474b5de2755ec5794161c Mon Sep 17 00:00:00 2001+From 4d8650bd806f50aa2538270f80fa93261c43d056 Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 02:23:50 +0000+Date: Fri, 3 Jul 2015 00:12:02 +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 b116f3a..017b184 100644+index c3bc1bf..1727dba 100644 --- a/yesod-persistent.cabal +++ b/yesod-persistent.cabal-@@ -14,16 +14,6 @@ description: Some helpers for using Persistent from Yesod.+@@ -15,16 +15,6 @@ extra-source-files: README.md ChangeLog.md library build-depends: base >= 4 && < 5-- , yesod-core >= 1.2.2 && < 1.3-- , persistent >= 1.2 && < 2.1-- , persistent-template >= 1.2 && < 2.1+- , yesod-core >= 1.4.0 && < 1.5+- , persistent >= 2.1 && < 2.2+- , persistent-template >= 2.1 && < 2.2 - , transformers >= 0.2.2 - , blaze-builder - , conduit@@ -29,5 +29,5 @@ test-suite test -- -2.1.1+2.1.4
− standalone/no-th/haskell-patches/yesod-routes_remove-TH.patch
@@ -1,170 +0,0 @@-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 606c5f4f4b2d476d274907eb2bb8c12b60fc451f Mon Sep 17 00:00:00 2001+From 09d7340ff4c9b43f7c8c2ad6529a6c60871d265f Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Wed, 21 May 2014 04:43:30 +0000+Date: Fri, 3 Jul 2015 01:39:14 +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 725ebf4..33eaffd 100644+index a18d88e..afb1cda 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 "StaticRoute" False+ publicFiles dir = mkStaticFiles' dir False - +-} @@ -111,17 +111,17 @@ +{- mkStaticFiles :: Prelude.FilePath -> Q [Dec]- mkStaticFiles fp = mkStaticFiles' fp "StaticRoute" True+ mkStaticFiles fp = mkStaticFiles' fp True -@@ -357,6 +361,7 @@ mkStaticFilesList fp fs routeConName makeHash = do- [ Clause [] (NormalB $ (ConE route) `AppE` f' `AppE` qs) []+@@ -354,6 +358,7 @@ mkStaticFilesList fp fs makeHash = do+ [ Clause [] (NormalB $ (ConE 'StaticRoute) `AppE` f' `AppE` qs) [] ] ] +-} base64md5File :: Prelude.FilePath -> IO String base64md5File = fmap (base64 . encode) . hashFile-@@ -395,7 +400,7 @@ base64 = map tr+@@ -392,7 +397,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-@@ -429,7 +434,7 @@ combineStatics' combineType CombineSettings {..} routes = do+@@ -426,7 +431,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:-@@ -505,6 +510,7 @@ instance Default CombineSettings where+@@ -502,6 +507,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-@@ -551,4 +557,5 @@ combineScripts' :: Bool -- ^ development? if so, perform no combining+@@ -548,4 +554,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 2582a95..5df03b3 100644+index 4ccb0d7..8758aaa 100644 --- a/yesod-static.cabal +++ b/yesod-static.cabal-@@ -49,7 +49,6 @@ library+@@ -50,7 +50,6 @@ library+ , system-fileio >= 0.3 , data-default- , shakespeare-css >= 1.0.3 , mime-types >= 0.1 - , hjsmin , filepath >= 1.3 , resourcet >= 0.4 , unordered-containers >= 0.2-@@ -62,13 +61,6 @@ library+@@ -63,13 +62,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.0.0.rc2+2.1.4
standalone/no-th/haskell-patches/yesod_hack-TH.patch view
@@ -1,13 +1,13 @@-From 59091cd37958fee79b9e346fe3118d5ed7d0104b Mon Sep 17 00:00:00 2001+From 86e7cf433fcd3386893556d690748781f46d3f03 Mon Sep 17 00:00:00 2001 From: dummy <dummy@example.com>-Date: Thu, 16 Oct 2014 02:36:37 +0000+Date: Fri, 3 Jul 2015 01:33:03 +0000 Subject: [PATCH] hack TH --- Yesod.hs | 19 ++++++++++++--- Yesod/Default/Main.hs | 31 +----------------------- Yesod/Default/Util.hs | 69 ++-------------------------------------------------- 3 files changed, 20 insertions(+), 99 deletions(-)+ Yesod/Default/Main.hs | 28 +--------------------+ Yesod/Default/Util.hs | 68 ++-------------------------------------------------+ 3 files changed, 20 insertions(+), 95 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 565ed35..bf46642 100644+index 2694825..5a5fbb9 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) -@@ -55,33 +53,6 @@ defaultMain load getApp = do+@@ -56,30 +54,6 @@ defaultMain load getApp = do type LogFunc = Loc -> LogSource -> LogLevel -> LogStr -> IO () @@ -79,27 +79,24 @@ -defaultMainLog load getApp = do - config <- load - (app, logFunc) <- getApp config-- runSettings defaultSettings-- { settingsPort = appPort config-- , settingsHost = appHost config-- , settingsOnException = const $ \e -> when (shouldLog' e) $ logFunc+- runSettings +- ( setPort (appPort config)+- $ setHost (appHost config)+- $ setOnException (const $ \e -> when (shouldLog' e) $ logFunc - $(qLocation >>= liftLoc) - "yesod" - LevelError-- (toLogStr $ "Exception from Warp: " ++ show e)-- } app+- (toLogStr $ "Exception from Warp: " ++ show e))+- $ defaultSettings+- ) app - where-- shouldLog' =--#if MIN_VERSION_warp(2,1,3)-- Warp.defaultShouldDisplayException--#else-- const True--#endif- +- shouldLog' = Warp.defaultShouldDisplayException+- -- | Run your application continously, listening for SIGINT and exiting -- when received+ -- diff --git a/Yesod/Default/Util.hs b/Yesod/Default/Util.hs-index a10358e..0547424 100644+index 488312a..5476b54 100644 --- a/Yesod/Default/Util.hs +++ b/Yesod/Default/Util.hs @@ -5,10 +5,9 @@@@ -125,7 +122,7 @@ import Text.Hamlet (HamletSettings, defaultHamletSettings) import Data.Maybe (catMaybes) import Data.Default (Default (def))-@@ -69,68 +65,7 @@ data TemplateLanguage = TemplateLanguage+@@ -69,68 +65,8 @@ data TemplateLanguage = TemplateLanguage , tlReload :: FilePath -> Q Exp } @@ -143,7 +140,7 @@ { wfsLanguages :: HamletSettings -> [TemplateLanguage] , wfsHamletSettings :: HamletSettings }--+ -instance Default WidgetFileSettings where - def = WidgetFileSettings defaultTemplateLanguages defaultHamletSettings -@@ -162,7 +159,7 @@ - , func - , " on " - , show file-- , ", but no template were found."+- , ", but no templates were found." - ] - exps -> return $ DoE $ map NoBindS exps - where@@ -195,5 +192,5 @@ - else return $ Just ex - else return Nothing -- -2.1.1+2.1.4