Commit graph

25 commits

Author SHA1 Message Date
Joey Hess
345ee4f37c Switch to MonadCatchIO-transformers for better handling of state while catching exceptions.
As seen in this bug report, the lifted exception handling using the StateT
monad throws away state changes when an action throws an exception.
http://git-annex.branchable.com/bugs/git_annex_fork_bombs_on_gpg_file/
  .. Which can result in cached values being redundantly calculated, or other
     possibly worse bugs when the annex state gets out of sync with reality.

This switches from a StateT AnnexState to a ReaderT (MVar AnnexState).
All changes to the state go via the MVar. So when an Annex action is
running inside an exception handler, and it makes some changes, they
immediately go into affect in the MVar. If it then throws an exception
(or even crashes its thread!), the state changes are still in effect.

The MonadCatchIO-transformers change is actually only incidental.
I could have kept on using lifted-base for the exception handling.
However, I'd have needed to write a new instance of MonadBaseControl
for the new monad.. and I didn't write the old instance.. I begged Bas
and he kindly sent it to me. Happily, MonadCatchIO-transformers is
able to derive a MonadCatchIO instance for my monad.

This is a deep level change. It passes the test suite! What could it break?

Well.. The most likely breakage would be to code that runs an Annex action
in an exception handler, and *wants* state changes to be thrown away.
Perhaps the state changes leaves the state inconsistent, or wrong. Since
there are relatively few places in git-annex that catch exceptions in the
Annex monad, and the AnnexState is generally just used to cache calculated
data, this is unlikely to be a problem.

Oh yeah, this change also makes Assistant.Types.ThreadedMonad a bit
redundant. It's now entirely possible to run concurrent Annex actions in
different threads, all sharing access to the same state! The ThreadedMonad
just adds some extra work on top of that, with its own MVar, and avoids
such actions possibly stepping on one-another's toes. I have not gotten
rid of it, but might try that later. Being able to run concurrent Annex
actions would simplify parts of the Assistant code.
2013-05-19 14:16:36 -04:00
Joey Hess
ebe10edf67 add dep needed with newer ghc 2013-05-17 11:24:07 -04:00
Joey Hess
dc66b1f27d Merge branch 'master' into windows
Conflicts:
	Annex/Environment.hs
	Build/Configure.hs
	Git/Construct.hs
	Utility/FileMode.hs
2013-05-14 15:37:24 -04:00
Joey Hess
b28358509f update
No need to edit Makefile to disable webapp build anymore; just build w/o
dependencies installed.
2013-05-13 13:47:11 -04:00
Joey Hess
924ed999c5 add unix-compat to deps 2013-05-11 17:21:12 -04:00
Joey Hess
25aabf4ffe add TList, built on DList 2013-04-24 16:01:01 -04:00
Joey Hess
7d11511d54 new build dep 2013-04-16 19:00:44 -04:00
Joey Hess
a2d94bd627 Switch from using regex-compat to regex-tdfa, as the C regex library is rather buggy. 2013-03-08 15:29:01 -04:00
Joey Hess
0151f42cdf Stop depending on testpack. 2013-02-27 23:23:41 -04:00
Joey Hess
521398cc3d Now uses the Haskell Glob library, rather than pcre-light, avoiding the need to install libpcre. Currently done only for Cabal or when the Makefile is made to use -DWITH_GLOB 2013-02-11 11:47:53 -04:00
Joey Hess
f202d997f4 Now uses the Haskell uuid library, rather than needing a uuid program.
Been meaning to do this for some time; Android port was last straw.

Note that newer versions of the uuid library have a Data.UUID.V4 that
generates random UUIDs slightly more cleanly, but Debian has an old version
of the library, so I do it slightly round-about.
2013-02-10 14:52:54 -04:00
Joey Hess
d3d791c7e7 addurl --fast: Use curl, rather than haskell HTTP library, to support https. 2013-01-27 09:30:53 +11:00
Joey Hess
9ba8abffc6 depend on both wget and curl
wget is used due to having better progress output, but curl is used
in some cases where wget is not appropriate.
2013-01-27 08:48:16 +11:00
Joey Hess
1713ed95f7 use async to track and manage threads 2013-01-26 14:14:32 +11:00
Joey Hess
66c0da1fa9 build-depend on a recent mtl
Old versions have an insufficiently generic definition of reader,
which only works on ReaderT and not on newtypes made of it, or something
like that.
2012-11-25 16:24:05 -04:00
Joey Hess
0cba0cb2dd skeltal webdav special remote
Doesn't actually store anything yet, but initremote works and tests the
server.
2012-11-14 20:25:31 -04:00
Joey Hess
cf565c0098 remove async build dep
Not needed.. At least for now..
2012-11-14 11:53:59 -04:00
Joey Hess
b312e54ba7 added a runTimeout function
This adds a dep on haskell's async library, but since that's been
added to the recent haskell platform release, it should not be
much hardship to my poor long-suffering library chasing users.
2012-11-11 13:38:08 -04:00
Joey Hess
a4c6b30e2c avoid using Blaze directly
New 0.5 changes the api, rather gratuitously, so run away. I can juse use
Hamlet here.
2012-10-31 13:27:56 -04:00
Joey Hess
4757bd3728 added a missing build-dep 2012-10-31 11:50:43 -04:00
Joey Hess
87ebdc8f90 add build-dep on blaze-markup
which blaze-html depends on, so not a significant new dep
2012-10-30 12:59:05 -04:00
Joey Hess
9173c66e40 support using haskell-dns for SRV lookups
This library should be easier to install than ADNS, so I've made it
be used by default.
2012-10-28 19:14:30 -04:00
Joey Hess
2c788a28a1 added network-protocol-xmpp and -DWITH_XMPP 2012-10-23 20:24:23 -04:00
Joey Hess
33a2af36f2 Depend on and use the Haskell SafeSemaphore library, which provides exception-safe versions of SampleVar and QSemN. Thanks, Ben Gamari for an excellent patch set. 2012-10-05 17:50:17 -04:00
Joey Hess
9e75071e16 update install page 2012-09-27 17:19:06 -04:00