diff options
author | 2014-07-03 13:11:09 +0000 | |
---|---|---|
committer | 2014-07-03 13:11:09 +0000 | |
commit | b3b8db5a9c136fc05b4fe492e919f2fe1bffe14a (patch) | |
tree | 4184bc5f591e111b0c2402f8d0a3b0decaacddd7 /dev-vcs/darcs | |
parent | Keyworded on alpha, bug #514448 (diff) | |
download | gentoo-2-b3b8db5a9c136fc05b4fe492e919f2fe1bffe14a.tar.gz gentoo-2-b3b8db5a9c136fc05b4fe492e919f2fe1bffe14a.tar.bz2 gentoo-2-b3b8db5a9c136fc05b4fe492e919f2fe1bffe14a.zip |
Update darcs-2.8.4-r6 from the gentoo-haskell overlay so it will build with recent haskell packages and ghc 7.8
(Portage version: 2.2.10/cvs/Linux x86_64, signed Manifest commit with key 618E971F)
Diffstat (limited to 'dev-vcs/darcs')
-rw-r--r-- | dev-vcs/darcs/ChangeLog | 11 | ||||
-rw-r--r-- | dev-vcs/darcs/darcs-2.8.4-r6.ebuild | 133 | ||||
-rw-r--r-- | dev-vcs/darcs/files/darcs-2.8.4-fix-nonatomic-global.patch | 20 | ||||
-rw-r--r-- | dev-vcs/darcs/files/darcs-2.8.4-ghc-7.8-part-2.patch | 14 | ||||
-rw-r--r-- | dev-vcs/darcs/files/darcs-2.8.4-issue2364-part-2.patch | 52 | ||||
-rw-r--r-- | dev-vcs/darcs/files/darcs-2.8.4-issue2364.patch | 70 |
6 files changed, 299 insertions, 1 deletions
diff --git a/dev-vcs/darcs/ChangeLog b/dev-vcs/darcs/ChangeLog index 36d76c9ddd9d..c6f486a41c06 100644 --- a/dev-vcs/darcs/ChangeLog +++ b/dev-vcs/darcs/ChangeLog @@ -1,6 +1,15 @@ # ChangeLog for dev-vcs/darcs # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/dev-vcs/darcs/ChangeLog,v 1.54 2014/02/22 07:56:09 slyfox Exp $ +# $Header: /var/cvsroot/gentoo-x86/dev-vcs/darcs/ChangeLog,v 1.55 2014/07/03 13:11:09 gienah Exp $ + +*darcs-2.8.4-r6 (03 Jul 2014) + + 03 Jul 2014; Mark Wright <gienah@gentoo.org> +darcs-2.8.4-r6.ebuild, + +files/darcs-2.8.4-fix-nonatomic-global.patch, + +files/darcs-2.8.4-ghc-7.8-part-2.patch, + +files/darcs-2.8.4-issue2364-part-2.patch, +files/darcs-2.8.4-issue2364.patch: + Update darcs-2.8.4-r6 from the gentoo-haskell overlay so it will build with + recent haskell packages and ghc 7.8 22 Feb 2014; Sergei Trofimovich <slyfox@gentoo.org> -darcs-2.8.0.ebuild, -files/darcs-2.8.0-mtl-2.1.patch: diff --git a/dev-vcs/darcs/darcs-2.8.4-r6.ebuild b/dev-vcs/darcs/darcs-2.8.4-r6.ebuild new file mode 100644 index 000000000000..5c7da0e8e864 --- /dev/null +++ b/dev-vcs/darcs/darcs-2.8.4-r6.ebuild @@ -0,0 +1,133 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/dev-vcs/darcs/darcs-2.8.4-r6.ebuild,v 1.1 2014/07/03 13:11:09 gienah Exp $ + +EAPI=5 + +# ebuild generated by hackport 0.3.9999 + +CABAL_FEATURES="bin lib profile haddock hoogle hscolour" +inherit eutils haskell-cabal bash-completion-r1 + +DESCRIPTION="a distributed, interactive, smart revision control system" +HOMEPAGE="http://darcs.net/" +SRC_URI="mirror://hackage/packages/archive/${PN}/${PV}/${P}.tar.gz" + +LICENSE="GPL-2" +SLOT="0/${PV}" +KEYWORDS="~alpha ~amd64 ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~x86-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos ~x86-solaris" +IUSE="doc test" + +RDEPEND="=dev-haskell/extensible-exceptions-0.1*:=[profile?] + >=dev-haskell/hashed-storage-0.5.6:=[profile?] + <dev-haskell/hashed-storage-0.6:=[profile?] + >=dev-haskell/haskeline-0.6.3:=[profile?] + <dev-haskell/haskeline-0.8:=[profile?] + =dev-haskell/html-1.0*:=[profile?] + =dev-haskell/mmap-0.5*:=[profile?] + >=dev-haskell/mtl-1.0:=[profile?] + <dev-haskell/mtl-2.3:=[profile?] + >=dev-haskell/parsec-2.0:=[profile?] + <dev-haskell/parsec-3.2:=[profile?] + =dev-haskell/random-1.0*:=[profile?] + >=dev-haskell/regex-compat-0.95.1:=[profile?] + >=dev-haskell/tar-0.3:=[profile?] + <dev-haskell/tar-0.5:=[profile?] + >=dev-haskell/terminfo-0.3:=[profile?] <dev-haskell/terminfo-0.5:=[profile?] + >=dev-haskell/text-0.11.0.6:=[profile?] + >=dev-haskell/vector-0.7:=[profile?] + >=dev-haskell/zlib-0.5.1.0:=[profile?] + <dev-haskell/zlib-0.6.0.0:=[profile?] + >=dev-lang/ghc-6.10.4:= + net-misc/curl" +DEPEND="${RDEPEND} + >=dev-haskell/cabal-1.8 + doc? ( virtual/latex-base + || ( dev-tex/latex2html[png] + dev-tex/latex2html[gif] + ) + ) + test? ( >=dev-haskell/cmdlib-0.2.1[profile?] + <dev-haskell/cmdlib-0.4[profile?] + =dev-haskell/findbin-0.0*[profile?] + >=dev-haskell/quickcheck-2.3 + >=dev-haskell/shellish-0.1.3[profile?] + <dev-haskell/shellish-0.2[profile?] + >=dev-haskell/test-framework-0.4.0[profile?] + >=dev-haskell/test-framework-hunit-0.2.2[profile?] + >=dev-haskell/test-framework-quickcheck2-0.2.8[profile?] + ) + " + +src_prepare() { + rm "${S}/tests/add_permissions.sh" || die "Could not rm add_permissions.sh" + rm "${S}/tests/send-output-v1.sh" || die "Could not rm send-output-v1.sh" + rm "${S}/tests/send-output-v2.sh" || die "Could not rm send-output-v2.sh" + rm "${S}/tests/utf8.sh" || die "Could not rm utf8.sh" + + epatch "${FILESDIR}"/${P}-ghc-7.8-part-1.patch + epatch "${FILESDIR}"/${P}-ghc-7.8-part-2.patch + epatch "${FILESDIR}"/${P}-fix-nonatomic-global.patch + epatch "${FILESDIR}"/${P}-issue2364.patch + epatch "${FILESDIR}"/${P}-issue2364-part-2.patch + + cabal_chdeps \ + 'text >= 0.11.0.6 && < 0.12.0.0' 'text >= 0.11.0.6' \ + 'terminfo == 0.3.*' 'terminfo >= 0.3 && < 0.5' \ + 'array >= 0.1 && < 0.5' 'array >= 0.1 && <0.6' \ + 'process >= 1.0.0.0 && < 1.2.0.0' 'process >= 1.0.0.0 && < 1.3' \ + 'unix >= 1.0 && < 2.7' 'unix >=1.0 && <2.8' \ + 'base >= 4.5 && < 4.7' 'base >= 4.5 && < 4.8' \ + 'ghc >= 6.10 && < 7.8' 'ghc >= 6.10' \ + 'mtl >= 1.0 && < 2.2' 'mtl >= 1.0 && < 2.3' +} + +src_configure() { + # checking whether ghc supports -threaded flag + # Beware: http://www.haskell.org/ghc/docs/latest/html/users_guide/options-phases.html#options-linker + # contains: 'The ability to make a foreign call that does not block all other Haskell threads.' + # It might have interactivity impact. + + threaded_flag="" + if $(ghc-getghc) --info | grep "Support SMP" | grep -q "YES"; then + threaded_flag="--flags=threaded" + einfo "$P will be built with threads support" + else + threaded_flag="--flags=-threaded" + einfo "$P will be built without threads support" + fi + + # Use curl for net stuff to avoid strict version dep on HTTP and network + cabal_src_configure \ + --flags=curl \ + --flags=-http \ + --flags=color \ + --flags=terminfo \ + --flags=mmap \ + --flags=force-char8-encoding \ + $threaded_flag \ + $(cabal_flag test) +} + +src_test() { + # run cabal test from haskell-cabal + haskell-cabal_src_test || die "cabal test failed" +} + +src_install() { + cabal_src_install + newbashcomp "${S}/contrib/darcs_completion" "${PN}" + + # fixup perms in such an an awkward way + mv "${ED}/usr/share/man/man1/darcs.1" "${S}/darcs.1" || die "darcs.1 not found" + doman "${S}/darcs.1" || die "failed to register darcs.1 as a manpage" +} + +pkg_postinst() { + ghc-package_pkg_postinst + + ewarn "NOTE: in order for the darcs send command to work properly," + ewarn "you must properly configure your mail transport agent to relay" + ewarn "outgoing mail. For example, if you are using ssmtp, please edit" + ewarn "${EPREFIX}/etc/ssmtp/ssmtp.conf with appropriate values for your site." +} diff --git a/dev-vcs/darcs/files/darcs-2.8.4-fix-nonatomic-global.patch b/dev-vcs/darcs/files/darcs-2.8.4-fix-nonatomic-global.patch new file mode 100644 index 000000000000..c3fce6fbc9e8 --- /dev/null +++ b/dev-vcs/darcs/files/darcs-2.8.4-fix-nonatomic-global.patch @@ -0,0 +1,20 @@ +There is a bug in speculateFileOrUrl. +It puts downloaded file nonatomically. + +There is a window when copyFileOrUrl can (and does) +copy partially downloaded file. + +Darcs-bug: http://bugs.darcs.net/issue2364 +diff --git a/src/Darcs/External.hs b/src/Darcs/External.hs +index 2e0e791..d5a0b9f 100644 +--- a/src/Darcs/External.hs ++++ b/src/Darcs/External.hs +@@ -184,7 +184,7 @@ copyFileOrUrl rd fou out _ | isSshUrl fou = copySSH rd (splitSshUrl fou) + copyFileOrUrl _ fou _ _ = fail $ "unknown transport protocol: " ++ fou + + speculateFileOrUrl :: String -> FilePath -> IO () +-speculateFileOrUrl fou out | isHttpUrl fou = speculateRemote fou out ++speculateFileOrUrl fou out | isHttpUrl fou = speculateRemote fou out >> waitUrl fou + | otherwise = return () + + copyLocal :: String -> FilePath -> IO () diff --git a/dev-vcs/darcs/files/darcs-2.8.4-ghc-7.8-part-2.patch b/dev-vcs/darcs/files/darcs-2.8.4-ghc-7.8-part-2.patch new file mode 100644 index 000000000000..33786477b3fa --- /dev/null +++ b/dev-vcs/darcs/files/darcs-2.8.4-ghc-7.8-part-2.patch @@ -0,0 +1,14 @@ +diff --git a/src/Darcs/Test/Patch.hs b/src/Darcs/Test/Patch.hs +index 0f7ed24..078fbc3 100644 +--- a/src/Darcs/Test/Patch.hs ++++ b/src/Darcs/Test/Patch.hs +@@ -2,6 +2,9 @@ + #if __GLASGOW_HASKELL__ >= 700 + {-# LANGUAGE ImpredicativeTypes #-} + #endif ++#if __GLASGOW_HASKELL__ >= 708 ++{-# LANGUAGE AllowAmbiguousTypes #-} ++#endif + -- Copyright (C) 2002-2005,2007 David Roundy + -- + -- This program is free software; you can redistribute it and/or modify diff --git a/dev-vcs/darcs/files/darcs-2.8.4-issue2364-part-2.patch b/dev-vcs/darcs/files/darcs-2.8.4-issue2364-part-2.patch new file mode 100644 index 000000000000..6164a4a00074 --- /dev/null +++ b/dev-vcs/darcs/files/darcs-2.8.4-issue2364-part-2.patch @@ -0,0 +1,52 @@ +Tue May 13 22:07:19 FET 2014 Sergei Trofimovich <slyfox@community.haskell.org> + * resolve issue2364: don't break list of 'bad sources' + + This time the bug manifested on a simple operation: + $ darcs record -a -m "something" + + Attempt to write a patch resulted in something like: + Failed to record patch 'hello' + + HINT: I could not reach the following repositories: + http://repetae.net/repos/jhc + /home/st/.darcs/cache + /home/st/.cache/darcs + /home/st/dev/darcs/jhc + If you're not using them, you should probably delete + + The sequence should be the following: + 1. store patch to inventory/foo + 2. try to store to a writable cache (say, ~/.darcs/cache/patches) + 3. fail to write + 4. filter out bad caches + 5. try again + 6. copy from cache to patches/ + + Due to missing NOINLINE step 4. led to + all caches treated as writable, thus step 5 + failed without a chance for patch to + go to 'patches/'. + + As a side-effect building darcs with -O0 produced seemingly working darcs. + Reported-by: Ivan Miljenovic +diff -rN -u old-darcs.net/src/Darcs/Util/Global.hs new-darcs.net/src/Darcs/Util/Global.hs +--- old-darcs.net/src/Darcs/Global.hs 2014-05-13 22:23:29.897329750 +0300 ++++ new-darcs.net/src/Darcs/Global.hs 2014-05-13 22:23:29.979329754 +0300 +@@ -135,7 +135,7 @@ + + _badSourcesList :: IORef [String] + _badSourcesList = unsafePerformIO $ newIORef [] +-{- NOINLINE _badSourcesList -} ++{-# NOINLINE _badSourcesList #-} + + + addBadSource :: String -> IO () +@@ -154,7 +154,7 @@ + + _reachableSourcesList :: IORef [String] + _reachableSourcesList = unsafePerformIO $ newIORef [] +-{- NOINLINE _reachableSourcesList -} ++{-# NOINLINE _reachableSourcesList #-} + + + addReachableSource :: String -> IO () diff --git a/dev-vcs/darcs/files/darcs-2.8.4-issue2364.patch b/dev-vcs/darcs/files/darcs-2.8.4-issue2364.patch new file mode 100644 index 000000000000..97c4e0f1ad2b --- /dev/null +++ b/dev-vcs/darcs/files/darcs-2.8.4-issue2364.patch @@ -0,0 +1,70 @@ +* resolve issue2364: fix file corruption on double fetch + +The bug is the result of attempt to fetch the same file +(say F) by the same URL (U) multiple times concurrently. + +First time U gets fetched by speculative prefetch logic. +Second time as an ordinary file (while first fetch is not finished). + +The function 'copyUrlWithPriority' sends download request +to 'urlChan' both times (it's already not a nice situation, +fixed by this patch). + +Later urlThread satisfies first request, notifies receiver, +and starts downloading exactly the same U again. + +I don't know exact data corruption mechanics yet, but it has +to do with non-random intermediate file names of downloaded +files and 'truncate' call when temp file is opened for a new +downlaod job. + +All temp names are completely non-random for a single darcs run: + + urlThread :: Chan UrlRequest -> IO () + urlThread ch = do + junk <- flip showHex "" `fmap` randomRIO rrange + evalStateT urlThread' (UrlState Map.empty emptyQ 0 junk) + + createDownloadFileName :: FilePath -> UrlState -> FilePath + createDownloadFileName f st = f ++ "-new_" ++ randomJunk st + +My theory is next download manages to step on toes of previous job. + +I'll try to make file names truly random in other patch. +That way such errors should manifest as read erros instead of data +corruption. + +Thanks! +diff --git a/src/URL.hs b/src/URL.hs +index 4cb85ee..26de278 100644 +--- a/src/URL.hs ++++ b/src/URL.hs +@@ -18,11 +18,12 @@ module URL ( copyUrl, copyUrlFirst, setDebugHTTP, + import Data.IORef ( newIORef, readIORef, writeIORef, IORef ) + import Data.Map ( Map ) + import qualified Data.Map as Map ++import Data.Tuple ( swap ) + import System.Directory ( copyFile ) + import System.IO.Unsafe ( unsafePerformIO ) + import Control.Concurrent ( forkIO ) + import Control.Concurrent.Chan ( isEmptyChan, newChan, readChan, writeChan, Chan ) +-import Control.Concurrent.MVar ( isEmptyMVar, modifyMVar_, newEmptyMVar, newMVar, putMVar, readMVar, withMVar, MVar ) ++import Control.Concurrent.MVar ( isEmptyMVar, modifyMVar, modifyMVar_, newEmptyMVar, newMVar, putMVar, readMVar, withMVar, MVar ) + import Control.Monad ( unless, when ) + import Control.Monad.Trans ( liftIO ) + import Control.Monad.State ( evalStateT, get, modify, put, StateT ) +@@ -196,10 +197,10 @@ copyUrlWithPriority p u f c = do + debugMessage ("URL.copyUrlWithPriority ("++u++"\n"++ + " -> "++f++")") + v <- newEmptyMVar +- let fn _ old_val = old_val +- modifyMVar_ urlNotifications (return . (Map.insertWith fn u v)) +- let r = UrlRequest u f c p +- writeChan urlChan r ++ old_mv <- modifyMVar urlNotifications (return . swap . Map.insertLookupWithKey (\_k _n old -> old) u v) ++ case old_mv of ++ Nothing -> writeChan urlChan $ UrlRequest u f c p -- ok, new URL ++ Just _ -> debugMessage $ "URL.copyUrlWithPriority already in progress, skip (" ++ u ++ "\n" ++ "-> " ++ f ++ ")" + + waitNextUrl :: StateT UrlState IO () + waitNextUrl = do |