module Darcs.Patch.Progress
( progressRL
, progressFL
, progressRLShowTags
) where
import Darcs.Prelude
import System.IO.Unsafe ( unsafePerformIO )
import Darcs.Patch.Info ( justName, isTag )
import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, info )
import Darcs.Patch.Witnesses.Ordered ( FL(..), RL(..), lengthRL, lengthFL )
import Darcs.Util.Progress ( minlist, beginTedious, endTedious, progress,
progressKeepLatest, tediousSize, finishedOne )
startProgress :: a -> String -> Int -> a
startProgress :: forall a. a -> String -> Int -> a
startProgress a
x String
k Int
len = forall a. IO a -> a
unsafePerformIO forall a b. (a -> b) -> a -> b
$ do String -> IO ()
beginTedious String
k
String -> Int -> IO ()
tediousSize String
k Int
len
forall (m :: * -> *) a. Monad m => a -> m a
return a
x
progressFL :: String -> FL a wX wY -> FL a wX wY
progressFL :: forall (a :: * -> * -> *) wX wY. String -> FL a wX wY -> FL a wX wY
progressFL String
_ FL a wX wY
NilFL = forall (a :: * -> * -> *) wX. FL a wX wX
NilFL
progressFL String
k xxs :: FL a wX wY
xxs@(a wX wY
x :>: FL a wY wY
xs) = if Int
xxsLen forall a. Ord a => a -> a -> Bool
< Int
minlist
then FL a wX wY
xxs
else forall a. a -> String -> Int -> a
startProgress a wX wY
x String
k Int
xxsLen forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: forall (a :: * -> * -> *) wX wY. FL a wX wY -> FL a wX wY
pl FL a wY wY
xs
where
xxsLen :: Int
xxsLen = forall (a :: * -> * -> *) wX wZ. FL a wX wZ -> Int
lengthFL FL a wX wY
xxs
pl :: FL a wX wY -> FL a wX wY
pl :: forall (a :: * -> * -> *) wX wY. FL a wX wY -> FL a wX wY
pl FL a wX wY
NilFL = forall (a :: * -> * -> *) wX. FL a wX wX
NilFL
pl (a wX wY
y :>: FL a wY wY
NilFL) = forall a. IO a -> a
unsafePerformIO forall a b. (a -> b) -> a -> b
$ do String -> IO ()
endTedious String
k
forall (m :: * -> *) a. Monad m => a -> m a
return (a wX wY
y forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: forall (a :: * -> * -> *) wX. FL a wX wX
NilFL)
pl (a wX wY
y :>: FL a wY wY
ys) = forall a. String -> a -> a
progress String
k a wX wY
y forall (a :: * -> * -> *) wX wY wZ.
a wX wY -> FL a wY wZ -> FL a wX wZ
:>: forall (a :: * -> * -> *) wX wY. FL a wX wY -> FL a wX wY
pl FL a wY wY
ys
progressRL :: String -> RL a wX wY -> RL a wX wY
progressRL :: forall (a :: * -> * -> *) wX wY. String -> RL a wX wY -> RL a wX wY
progressRL String
_ RL a wX wY
NilRL = forall (a :: * -> * -> *) wX. RL a wX wX
NilRL
progressRL String
k xxs :: RL a wX wY
xxs@(RL a wX wY
xs :<: a wY wY
x) =
if Int
xxsLen forall a. Ord a => a -> a -> Bool
< Int
minlist
then RL a wX wY
xxs
else forall (a :: * -> * -> *) wX wY. RL a wX wY -> RL a wX wY
pl RL a wX wY
xs forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> a wY wZ -> RL a wX wZ
:<: forall a. a -> String -> Int -> a
startProgress a wY wY
x String
k Int
xxsLen
where
xxsLen :: Int
xxsLen = forall (a :: * -> * -> *) wX wZ. RL a wX wZ -> Int
lengthRL RL a wX wY
xxs
pl :: RL a wX wY -> RL a wX wY
pl :: forall (a :: * -> * -> *) wX wY. RL a wX wY -> RL a wX wY
pl RL a wX wY
NilRL = forall (a :: * -> * -> *) wX. RL a wX wX
NilRL
pl (RL a wX wY
NilRL:<:a wY wY
y) = forall a. IO a -> a
unsafePerformIO forall a b. (a -> b) -> a -> b
$ do String -> IO ()
endTedious String
k
forall (m :: * -> *) a. Monad m => a -> m a
return (forall (a :: * -> * -> *) wX. RL a wX wX
NilRLforall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> a wY wZ -> RL a wX wZ
:<:a wY wY
y)
pl (RL a wX wY
ys:<:a wY wY
y) = forall (a :: * -> * -> *) wX wY. RL a wX wY -> RL a wX wY
pl RL a wX wY
ys forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> a wY wZ -> RL a wX wZ
:<: forall a. String -> a -> a
progress String
k a wY wY
y
progressRLShowTags :: String -> RL (PatchInfoAnd rt p) wX wY
-> RL (PatchInfoAnd rt p) wX wY
progressRLShowTags :: forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
String
-> RL (PatchInfoAnd rt p) wX wY -> RL (PatchInfoAnd rt p) wX wY
progressRLShowTags String
_ RL (PatchInfoAnd rt p) wX wY
NilRL = forall (a :: * -> * -> *) wX. RL a wX wX
NilRL
progressRLShowTags String
k xxs :: RL (PatchInfoAnd rt p) wX wY
xxs@(RL (PatchInfoAnd rt p) wX wY
xs :<: PatchInfoAnd rt p wY wY
x) =
if Int
xxsLen forall a. Ord a => a -> a -> Bool
< Int
minlist
then RL (PatchInfoAnd rt p) wX wY
xxs
else forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
RL (PatchInfoAnd rt p) wX wY -> RL (PatchInfoAnd rt p) wX wY
pl RL (PatchInfoAnd rt p) wX wY
xs forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> a wY wZ -> RL a wX wZ
:<: forall a. a -> String -> Int -> a
startProgress PatchInfoAnd rt p wY wY
x String
k Int
xxsLen
where
xxsLen :: Int
xxsLen = forall (a :: * -> * -> *) wX wZ. RL a wX wZ -> Int
lengthRL RL (PatchInfoAnd rt p) wX wY
xxs
pl :: RL (PatchInfoAnd rt p) wX wY -> RL (PatchInfoAnd rt p) wX wY
pl :: forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
RL (PatchInfoAnd rt p) wX wY -> RL (PatchInfoAnd rt p) wX wY
pl RL (PatchInfoAnd rt p) wX wY
NilRL = forall (a :: * -> * -> *) wX. RL a wX wX
NilRL
pl (RL (PatchInfoAnd rt p) wX wY
NilRL :<: PatchInfoAnd rt p wY wY
y) = forall a. IO a -> a
unsafePerformIO forall a b. (a -> b) -> a -> b
$ do String -> IO ()
endTedious String
k
forall (m :: * -> *) a. Monad m => a -> m a
return (forall (a :: * -> * -> *) wX. RL a wX wX
NilRL forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> a wY wZ -> RL a wX wZ
:<: PatchInfoAnd rt p wY wY
y)
pl (RL (PatchInfoAnd rt p) wX wY
ys :<: PatchInfoAnd rt p wY wY
y) =
if PatchInfo -> Bool
isTag PatchInfo
iy
then forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
RL (PatchInfoAnd rt p) wX wY -> RL (PatchInfoAnd rt p) wX wY
pl RL (PatchInfoAnd rt p) wX wY
ys forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> a wY wZ -> RL a wX wZ
:<: forall a. String -> String -> a -> a
finishedOne String
k (String
"back to "forall a. [a] -> [a] -> [a]
++ PatchInfo -> String
justName PatchInfo
iy) PatchInfoAnd rt p wY wY
y
else forall (rt :: RepoType) (p :: * -> * -> *) wX wY.
RL (PatchInfoAnd rt p) wX wY -> RL (PatchInfoAnd rt p) wX wY
pl RL (PatchInfoAnd rt p) wX wY
ys forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> a wY wZ -> RL a wX wZ
:<: forall a. String -> a -> a
progressKeepLatest String
k PatchInfoAnd rt p wY wY
y
where
iy :: PatchInfo
iy = forall (rt :: RepoType) (p :: * -> * -> *) wA wB.
PatchInfoAndG rt p wA wB -> PatchInfo
info PatchInfoAnd rt p wY wY
y