Hi,

I've refactored get_common_and_uncommon and friends so now the return 
type correctly expresses what they do, which gets rid of a lot of nasty 
calls to head elsewhere and generally makes the world a better place.

I also added witnesses to several modules where it was easy to do so (in 
some cases enabled by the above refactoring).

I've sent one of these patches (the checkUnrelatedRepos one) but here 
are some more that depend on it.

Cheers,

Ganesh

Wed Sep  9 20:32:21 BST 2009  Ganesh Sittampalam <[email protected]>
  * change the type of gcau to reflect its behaviour
  Previously it returned RL (RL ...) but the outer RL was always singleton.
  Changing this to RL ... simplifies a lot of client code that was just assuming
  this behaviour by doing things like taking the head.

Tue Sep  8 22:06:52 BST 2009  Ganesh Sittampalam <[email protected]>
  * make type of checkUnrelatedRepos more general
  There's no reason why two repos we are comparing for relatedness should have
  the same ending context.
  

Wed Sep  9 20:30:13 BST 2009  Ganesh Sittampalam <[email protected]>
  * add witnesses to Darcs.Commands.Diff

Wed Sep  9 20:34:05 BST 2009  Ganesh Sittampalam <[email protected]>
  * add witnesses to Darcs.Commands.Remove

Wed Sep  9 20:34:41 BST 2009  Ganesh Sittampalam <[email protected]>
  * add witnesses to Darcs.Commands.TrackDown

Wed Sep  9 20:44:07 BST 2009  Ganesh Sittampalam <[email protected]>
  * add witnesses to Darcs.Commands.Pull

Wed Sep  9 20:48:00 BST 2009  Ganesh Sittampalam <[email protected]>
  * add witnesses to Darcs.Commands.Apply

Wed Sep  9 20:52:58 BST 2009  Ganesh Sittampalam <[email protected]>
  * add witnesses to Darcs.Commands.Push

Wed Sep  9 21:01:51 BST 2009  Ganesh Sittampalam <[email protected]>
  * add witnesses to Darcs.Commands.Send

Wed Sep  9 21:06:43 BST 2009  Ganesh Sittampalam <[email protected]>
  * need RankNTypes for some of the newly witnessed modules

Wed Sep  9 21:07:11 BST 2009  Ganesh Sittampalam <[email protected]>
  * add newly-witnessed modules to witnesses.hs

New patches:

[change the type of gcau to reflect its behaviour
Ganesh Sittampalam <[email protected]>**20090909193221
 Ignore-this: 5c6b665759572262c0bae0b4b1da20f4
 Previously it returned RL (RL ...) but the outer RL was always singleton.
 Changing this to RL ... simplifies a lot of client code that was just assuming
 this behaviour by doing things like taking the head.
] hunk ./src/Darcs/Commands/Apply.lhs 134
                                 then cannotApplyPartialRepo pinfo ""
                                 else cannotApplyMissing pinfo
                          Right x -> return x
-  when (null $ unsafeUnRL $ head $ unsafeUnRL them') $
+  when (null $ unsafeUnRL them') $
        do putStr $ "All these patches have already been applied.  " ++
                      "Nothing to do.\n"
           exitWith ExitSuccess
hunk ./src/Darcs/Commands/Apply.lhs 140
   let their_ps = mapFL_FL (n2pia . conscientiously (text ("We cannot apply this patch "
                                                           ++"bundle, since we're missing:") $$))
-                 $ reverseRL $ head $ unsafeUnRL them'
+                 $ reverseRL them'
   with_selected_changes "apply" fixed_opts their_ps $
                             \ (to_be_applied:>_) -> do
    print_dry_run_message_and_exit "apply" opts to_be_applied
hunk ./src/Darcs/Commands/Apply.lhs 150
    check_paths opts to_be_applied
    redirect_output opts from_whom $ do
     when am_verbose $ putStrLn "We have the following extra patches:"
-    when am_verbose $ putDocLn $ vcat $ mapRL description $ head $ unsafeUnRL us'
+    when am_verbose $ putDocLn $ vcat $ mapRL description us'
     when am_verbose $ putStrLn "Will apply the following patches:"
     when am_verbose $ putDocLn $ vcat $ mapFL description to_be_applied
     definePatches to_be_applied
hunk ./src/Darcs/Commands/Apply.lhs 155
     Sealed pw <- tentativelyMergePatches repository "apply" opts
-                 (reverseRL $ head $ unsafeUnRL us') to_be_applied
+                 (reverseRL us') to_be_applied
     invalidateIndex repository
     withSignalsBlocked $ do finalizeRepositoryChanges repository
                             wait_a_moment -- so work will be more recent than rec
hunk ./src/Darcs/Commands/Changes.lhs 166
                  -> ([(PatchInfoAnd p, [FilePath])], [FilePath], Doc)
 get_changes_info opts plain_fs ps =
   case get_common_and_uncommon (p2s,p1s) of
-  (_,us:\/:_) -> filter_patches_by_names (maxCount opts) fs $ filter pf $ unsafeUnRL $ concatRL us
+  (_,us:\/:_) -> filter_patches_by_names (maxCount opts) fs $ filter pf $ unsafeUnRL us
   where fs = map (\x -> "./" ++ x) $ plain_fs
         p1s = if first_match opts then unsafeUnseal $ match_first_patchset opts ps
                                   else NilRL:<:NilRL
hunk ./src/Darcs/Commands/Get.lhs 54
 import Darcs.Repository.Checkpoint ( write_checkpoint_patch, get_checkpoint )
 import Darcs.Patch ( RepoPatch, Patch, apply, patch2patchinfo, invert,
                      effect, description )
-import Darcs.Ordered ( (:\/:)(..), RL(..), unsafeUnRL, mapRL, concatRL, reverseRL, lengthFL )
+import Darcs.Ordered ( (:\/:)(..), RL(..), mapRL, concatRL, reverseRL, lengthFL )
 import Darcs.External ( copyFileOrUrl, Cachable(..) )
 import Darcs.Patch.Depends ( get_common_and_uncommon, get_patches_beyond_tag )
 import Darcs.Repository.Prefs ( set_defaultrepo )
hunk ./src/Darcs/Commands/Get.lhs 273
        Sealed context <- get_one_patchset repository opts
        let (_,us':\/:them') = get_common_and_uncommon (patches, context)
        case them' of
-           NilRL:<:NilRL -> return ()
+           NilRL -> return ()
            _ -> errorDoc $ text "Missing these patches from context:"
hunk ./src/Darcs/Commands/Get.lhs 275
-                        $$ (vcat $ mapRL description $ head $ unsafeUnRL them')
-       let ps = patchSetToPatches us'
+                        $$ (vcat $ mapRL description them')
+       let ps = patchSetToPatches (us':<:NilRL)
        putInfo $ text $ "Unapplying " ++ (show $ lengthFL ps) ++ " " ++
                    (englishNum (lengthFL ps) (Noun "patch") "")
        invalidateIndex repository
hunk ./src/Darcs/Commands/Pull.lhs 49
                           read_repo, checkUnrelatedRepos )
 import Darcs.Hopefully ( info )
 import Darcs.Patch ( RepoPatch, description )
-import Darcs.Ordered ( (:>)(..), (:\/:)(..), RL(..), concatRL,
+import Darcs.Ordered ( (:>)(..), (:\/:)(..), RL(..),
                              mapFL, nullFL, reverseRL, mapRL )
 import Darcs.Patch.Permutations ( partitionFL )
 import Darcs.SlurpDirectory ( wait_a_moment )
hunk ./src/Darcs/Commands/Pull.lhs 130
   (common, us' :\/: them'') <- return $ get_common_and_uncommon (us, them)
   (_     ,   _ :\/: compl') <- return $ get_common_and_uncommon (us, compl)
   checkUnrelatedRepos opts common us them
-  let avoided = mapRL info (concatRL compl')
-  ps :> _ <- return $ partitionFL (not . (`elem` avoided) . info) $ reverseRL $ concatRL them''
+  let avoided = mapRL info compl'
+  ps :> _ <- return $ partitionFL (not . (`elem` avoided) . info) $ reverseRL them''
   do when (Verbose `elem` opts) $
           do case us' of
hunk ./src/Darcs/Commands/Pull.lhs 134
-               (x@(_:<:_):<:_) -> putDocLn $ text "We have the following new (to them) patches:"
-                                             $$ (vcat $ mapRL description x)
+               (x@(_:<:_)) -> putDocLn $ text "We have the following new (to them) patches:"
+                                         $$ (vcat $ mapRL description x)
                _ -> return ()
              when (not $ nullFL ps) $ putDocLn $ text "They have the following patches to pull:"
                                                  $$ (vcat $ mapFL description ps)
hunk ./src/Darcs/Commands/Pull.lhs 155
       let merge_opts | NoAllowConflicts `elem` opts = opts
                      | AllowConflicts   `elem` opts = opts
                      | otherwise                    = MarkConflicts : opts
-      Sealed pw <- case us' of
-                     h_us :<: NilRL -> tentativelyMergePatches repository "pull" merge_opts
-                                        (reverseRL h_us) to_be_pulled
-                     _ -> impossible -- we believe that get_common_and_uncommon should guarantee this,
-                                     -- at least in this case. Error out if we're wrong, so that
-                                     -- we find out. An alternative would be to do a concatRL of the whole
-                                     -- us' list, but the code originally just took the head, and so we
-                                     -- might instead introduce some subtle bug by doing a concat.
+      Sealed pw <- tentativelyMergePatches repository "pull" merge_opts
+                   (reverseRL us') to_be_pulled
       invalidateIndex repository
       withGutsOf repository $ do finalizeRepositoryChanges repository
                                  -- so work will be more recent than rec:
hunk ./src/Darcs/Commands/Push.lhs 43
                           read_repo, amInRepository, checkUnrelatedRepos )
 import Darcs.Patch ( description )
 import Darcs.Ordered ( RL(..), (:>)(..), (:\/:)(..),
-                             nullFL, reverseRL, mapFL_FL, unsafeUnRL, mapRL, lengthRL )
+                             nullFL, reverseRL, mapFL_FL, mapRL, lengthRL )
 import Darcs.Repository.Prefs ( defaultrepo, set_defaultrepo, get_preflist )
 import Darcs.External ( maybeURLCmd, signString )
 import Darcs.URL ( is_url, is_file )
hunk ./src/Darcs/Commands/Push.lhs 138
     (common, us' :\/: them') -> do
      checkUnrelatedRepos opts common us them
      putVerbose $ text "We have the following patches to push:"
-               $$ (vcat $ mapRL description $ head $ unsafeUnRL us')
-     firstUs <- case us' of
-                   NilRL:<:NilRL -> do putInfo $ text "No recorded local changes to push!"
-                                       exitWith ExitSuccess
-                   NilRL -> bug "push_cmd: us' is empty!"
-                   (x:<:_) -> return x
-     with_selected_changes "push" opts (reverseRL firstUs) $
+               $$ (vcat $ mapRL description us')
+     case us' of
+       NilRL -> do putInfo $ text "No recorded local changes to push!"
+                   exitWith ExitSuccess
+       _ -> return ()
+     with_selected_changes "push" opts (reverseRL us') $
       \ (to_be_pushed:>_) -> do
       definePatches to_be_pushed
       print_dry_run_message_and_exit "push" opts to_be_pushed
hunk ./src/Darcs/Commands/Push.lhs 151
           putInfo $
             text "You don't want to push any patches, and that's fine with me!"
           exitWith ExitSuccess
-      let num_to_pull = lengthRL $ head $ unsafeUnRL them'
+      let num_to_pull = lengthRL them'
           bundle = make_bundle []
                      (bug "using slurpy in make_bundle called from Push")
                      common (mapFL_FL hopefully to_be_pushed)
hunk ./src/Darcs/Commands/Send.lhs 53
                           amInRepository, identifyRepositoryFor, withRepoReadLock, ($-),
                           read_repo, slurp_recorded, prefsUrl, checkUnrelatedRepos )
 import Darcs.Patch ( RepoPatch, description, apply_to_slurpy, invert )
-import Darcs.Ordered ( FL(..), RL(..), (:>)(..), (:\/:)(..), unsafeUnRL,
+import Darcs.Ordered ( FL(..), RL(..), (:>)(..), (:\/:)(..),
                        mapRL_RL, mapFL, mapRL, reverseRL, mapFL_FL, lengthFL, nullFL )
 import Darcs.Patch.Bundle ( make_bundle, scan_context )
 import Darcs.Patch.Info ( just_name )
hunk ./src/Darcs/Commands/Send.lhs 177
     (common, us' :\/: _) -> do
      checkUnrelatedRepos opts common us them
      case us' of
-         NilRL:<:NilRL -> do putInfo "No recorded local changes to send!"
-                             exitWith ExitSuccess
+         NilRL -> do putInfo "No recorded local changes to send!"
+                     exitWith ExitSuccess
          _ -> putVerbose $ text "We have the following patches to send:"
hunk ./src/Darcs/Commands/Send.lhs 180
-                        $$ (vcat $ mapRL description $ head $ unsafeUnRL us')
+                        $$ (vcat $ mapRL description us')
      s <- slurp_recorded repo
hunk ./src/Darcs/Commands/Send.lhs 182
-     let our_ps = reverseRL $ head $ unsafeUnRL us'
+     let our_ps = reverseRL us'
      with_selected_changes "send" opts our_ps $
       \ (to_be_sent :> _) -> do
       print_dry_run_message_and_exit "send" opts to_be_sent
hunk ./src/Darcs/Commands/Send.lhs 193
       bundle <- signString opts $ make_bundle (Unified:opts)
                 (fromJust $ apply_to_slurpy
                  (invert $
-                  mapRL_RL hopefully $ head $ unsafeUnRL us') s)
+                  mapRL_RL hopefully us') s)
                 common (mapFL_FL hopefully to_be_sent)
       let outname = get_output opts (make_fname to_be_sent)
       case outname of
hunk ./src/Darcs/Commands/Unrecord.lhs 48
 import Darcs.Patch ( Patchy, RepoPatch, invert, commutex, effect )
 import Darcs.Ordered ( RL(..), (:<)(..), (:>)(..), (:\/:)(..), (+<+),
                              mapFL_FL, nullFL,
-                             concatRL, reverseRL, mapRL )
+                             reverseRL, mapRL )
 import Darcs.Patch.Depends ( get_common_and_uncommon )
 import Darcs.SelectChanges ( with_selected_last_changes_reversed )
 import Progress ( debugMessage )
hunk ./src/Darcs/Commands/Unrecord.lhs 179
 get_last_patches opts ps =
   case match_first_patchset opts ps of
   Sealed p1s -> case get_common_and_uncommon (ps,p1s) of
-                (_,us :\/: _) -> FlippedSeal $ concatRL us
+                (_,us :\/: _) -> FlippedSeal us
 
 unpull_description :: String
 unpull_description =
hunk ./src/Darcs/Commands/Unrevert.lhs 41
                           slurp_recorded,
                           applyToWorking )
 import Darcs.Patch ( RepoPatch, Prim, commutex, namepatch, fromPrims )
-import Darcs.Ordered ( RL(..), FL(..), (:<)(..), (:>)(..), (:\/:)(..), reverseRL,
+import Darcs.Ordered ( FL(..), (:<)(..), (:>)(..), (:\/:)(..), reverseRL,
                        (+>+) )
 import Darcs.SelectChanges ( with_selected_changes_to_files' )
 import Darcs.SlurpDirectory ( Slurpy )
hunk ./src/Darcs/Commands/Unrevert.lhs 92
   rec <- slurp_recorded repository
   unrec <- get_unrecorded repository
   case get_common_and_uncommon (us, them) of
-    (_, (h_us:<:NilRL) :\/: (h_them:<:NilRL)) -> do
+    (_, h_us :\/: h_them) -> do
       Sealed pw <- considerMergeToWorking repository "pull" (MarkConflicts:opts)
                    (reverseRL h_us) (reverseRL h_them)
       with_selected_changes_to_files' "unrevert" opts [] pw $
hunk ./src/Darcs/Commands/Unrevert.lhs 107
              write_unrevert repository skipped rec (unrec+>+p)
         sync_repo repository
         debugMessage "Finished unreverting."
-    _ -> impossible
 unrevert_cmd _ _ = impossible
 
 write_unrevert :: RepoPatch p => Repository p C(r u t) -> FL Prim C(x y) -> Slurpy -> FL Prim C(r x) -> IO ()
hunk ./src/Darcs/Patch/Depends.hs 58
 #include "impossible.h"
 
 get_common_and_uncommon :: RepoPatch p => (PatchSet p C(x),PatchSet p C(y)) ->
-                           ([PatchInfo],(RL (RL (PatchInfoAnd p)) :\/: RL (RL (PatchInfoAnd p))) C(x y))
+                           ([PatchInfo],(RL (PatchInfoAnd p) :\/: RL (PatchInfoAnd p)) C(x y))
 get_common_and_uncommon_or_missing :: RepoPatch p => (PatchSet p C(x),PatchSet p C(y)) ->
hunk ./src/Darcs/Patch/Depends.hs 60
-                                      Either PatchInfo ([PatchInfo],(RL (RL (PatchInfoAnd p)) :\/: RL (RL (PatchInfoAnd p))) C(x y))
+                                      Either PatchInfo ([PatchInfo],(RL (PatchInfoAnd p) :\/: RL (PatchInfoAnd p)) C(x y))
 
 get_common_and_uncommon = 
     either missingPatchError id . get_common_and_uncommon_err
hunk ./src/Darcs/Patch/Depends.hs 69
     either (\(MissingPatch x _) -> Left x) Right . get_common_and_uncommon_err
 
 get_common_and_uncommon_err :: RepoPatch p => (PatchSet p C(x),PatchSet p C(y)) ->
-                               Either MissingPatch ([PatchInfo],(RL (RL (PatchInfoAnd p)) :\/: RL (RL (PatchInfoAnd p))) C(x y))
+                               Either MissingPatch ([PatchInfo],(RL (PatchInfoAnd p) :\/: RL (PatchInfoAnd p)) C(x y))
 get_common_and_uncommon_err (ps1,ps2) = gcau (optimize_patchset ps1) ps2
 
 {-|
hunk ./src/Darcs/Patch/Depends.hs 187
 -}
 
 gcau :: forall p C(x y). RepoPatch p => PatchSet p C(x) -> PatchSet p C(y)
-     -> Either MissingPatch ([PatchInfo],(RL (RL (PatchInfoAnd p)) :\/: RL (RL (PatchInfoAnd p))) C(x y))
-gcau NilRL ps2 = return ([], NilRL:<:NilRL :\/: concatRL ps2 :<: NilRL)
-gcau ps1 NilRL = return ([], concatRL ps1 :<: NilRL :\/: NilRL:<:NilRL)
+     -> Either MissingPatch ([PatchInfo],(RL (PatchInfoAnd p) :\/: RL (PatchInfoAnd p)) C(x y))
+gcau NilRL ps2 = return ([], NilRL :\/: concatRL ps2)
+gcau ps1 NilRL = return ([], concatRL ps1 :\/: NilRL)
 gcau (NilRL:<:ps1) ps2 = gcau ps1 ps2
 gcau ps1 (NilRL:<:ps2) = gcau ps1 ps2
 gcau ((pi1:<:NilRL):<:_) ((pi2:<:NilRL):<:_)
hunk ./src/Darcs/Patch/Depends.hs 195
  | info pi1 == info pi2
  , IsEq <- sloppyIdentity pi1
- , IsEq <- sloppyIdentity pi2 = return ([info pi1], NilRL:<:NilRL :\/: unsafeCoerceP (NilRL:<:NilRL))
+ , IsEq <- sloppyIdentity pi2 = return ([info pi1], NilRL :\/: unsafeCoerceP NilRL)
 gcau (orig_ps1:<:orig_ps1s) (orig_ps2:<:orig_ps2s)
  = f (lengthRL orig_ps1) (unseal info $ lastRL orig_ps1) (orig_ps1:>:NilFL) orig_ps1s
      (lengthRL orig_ps2) (unseal info $ lastRL orig_ps2) (orig_ps2:>:NilFL) orig_ps2s
hunk ./src/Darcs/Patch/Depends.hs 203
                          lx = last $ concatReverseFL psx   -}
           f :: Int -> PatchInfo -> FL (RL (PatchInfoAnd p)) C(r x) -> PatchSet p C(r)
             -> Int -> PatchInfo -> FL (RL (PatchInfoAnd p)) C(u y) -> PatchSet p C(u)
-            -> Either MissingPatch ([PatchInfo],(RL (RL (PatchInfoAnd p)) :\/: RL (RL (PatchInfoAnd p))) C(x y))
+            -> Either MissingPatch ([PatchInfo],(RL (PatchInfoAnd p) :\/: RL (PatchInfoAnd p)) C(x y))
           f _n1 l1 ps1 _ps1s _n2 l2 ps2 _ps2s
            | l1 == l2 = gcau_simple (unsafeCoerceP (concatReverseFL ps1)) (unsafeCoerceP (concatReverseFL ps2))
           f n1 l1 ps1 ps1s n2 l2 ps2 ps2s
hunk ./src/Darcs/Patch/Depends.hs 245
 -- | Filters the common elements from @ps1@ and @ps2@ and returns the simplified sequences.
 gcau_simple :: RepoPatch p => RL (PatchInfoAnd p) C(x y) -- ^ @ps1@
             -> RL (PatchInfoAnd p) C(u v) -- ^ @ps2@
-            -> Either MissingPatch ([PatchInfo],(RL (RL (PatchInfoAnd p)) :\/: RL (RL (PatchInfoAnd p))) C(y v))
+            -> Either MissingPatch ([PatchInfo],(RL (PatchInfoAnd p) :\/: RL (PatchInfoAnd p)) C(y v))
 gcau_simple ps1 ps2 = do
  FlippedSeal ex1 <- get_extra common ps1
  FlippedSeal ex2 <- get_extra common ps2
hunk ./src/Darcs/Patch/Depends.hs 250
  let ps1' = filter (`elem` common) $ ps1_info
- return (ps1', (unsafeCoerceP ex1 :<: NilRL) :\/: ex2 :<: NilRL)
+ return (ps1', (unsafeCoerceP ex1 :\/: ex2))
   where common   = ps1_info `intersect` mapRL info ps2
         ps1_info = mapRL info ps1
 
hunk ./src/Darcs/Patch/Depends.hs 510
   f common a b = g_s $ gcau_simple a b
     where
       g_s :: Either MissingPatch
-                    ([PatchInfo],(RL (RL (PatchInfoAnd p)) :\/: RL (RL (PatchInfoAnd p))) C(x y))
+                    ([PatchInfo],(RL (PatchInfoAnd p) :\/: RL (PatchInfoAnd p)) C(x y))
           -> SealedPatchSet p
       g_s (Left e) = missingPatchError e
hunk ./src/Darcs/Patch/Depends.hs 513
-      g_s (Right (_, (a' :<: NilRL) :\/: (b' :<: NilRL))) =
+      g_s (Right (_, a' :\/: b')) =
           case (merge_sets (a' :\/: b')) of
           Sealed a'b' -> seal $ (a'b' +<+ b) :<: common
hunk ./src/Darcs/Patch/Depends.hs 516
-      g_s _ = impossible
 
 merge_sets :: RepoPatch p => (RL (PatchInfoAnd p) :\/: RL (PatchInfoAnd p)) C(x y) -> Sealed (RL (PatchInfoAnd p) C(y))
 merge_sets (l :\/: r) =
hunk ./src/Darcs/Repository/Internal.hs 920
             debugMessage "Adjusting the context of the unrevert changes..."
             ref <- readTentativeRepo repository
             case get_common_and_uncommon (bundle, ref) of
-                 (common,(h_us:<:NilRL):<:NilRL :\/: NilRL:<:NilRL) ->
+                 (common,(h_us:<:NilRL) :\/: NilRL) ->
                     case commuteRL (reverseFL ps :> hopefully h_us) of
                     Nothing -> unrevert_impossible unrevert_loc
                     Just (us' :> _) -> do
hunk ./src/Darcs/Repository/Internal.hs 928
                         writeDocBinFile unrevert_loc $
                              make_bundle [] s
                              (common \\ pis) (us':>:NilFL)
-                 (common,(x:<:NilRL):<:NilRL:\/:_)
+                 (common,(x:<:NilRL):\/:_)
                         | isr && any (`elem` common) pis -> unrevert_impossible unrevert_loc
                         | isr -> return ()
                         where isr = isJust $ hopefullyM x
[make type of checkUnrelatedRepos more general
Ganesh Sittampalam <[email protected]>**20090908210652
 Ignore-this: 8f2559da573ea899cef219e67dd5229a
 There's no reason why two repos we are comparing for relatedness should have
 the same ending context.
 
] hunk ./src/Darcs/Repository.hs 279
     pristineFromWorking repo
     return repo
 
-checkUnrelatedRepos :: [DarcsFlag] -> [PatchInfo] -> PatchSet p C(x) -> PatchSet p C(x) -> IO ()
+checkUnrelatedRepos :: [DarcsFlag] -> [PatchInfo] -> PatchSet p C(x) -> PatchSet p C(y) -> IO ()
 checkUnrelatedRepos opts common us them
     | AllowUnrelatedRepos `elem` opts || not (null common)
        || concatRL us `isShorterThanRL` 5 || concatRL them `isShorterThanRL` 5
[add witnesses to Darcs.Commands.Diff
Ganesh Sittampalam <[email protected]>**20090909193013
 Ignore-this: 5fb4fb83967232f11dde5c62c919a531
] hunk ./src/Darcs/Commands/Diff.lhs 56
 import Darcs.Patch.Info ( PatchInfo, human_friendly )
 import Darcs.External ( execPipeIgnoreError, clonePaths )
 import Darcs.Lock ( withTempDir )
-import Darcs.Sealed ( unsafeUnseal )
+import Darcs.Sealed ( unseal )
 import Printer ( Doc, putDoc, vcat, empty, ($$) )
 #include "impossible.h"
 
hunk ./src/Darcs/Commands/Diff.lhs 60
+#include "gadts.h"
+
 diff_description :: String
 diff_description = "Create a diff between two versions of the repository."
 
hunk ./src/Darcs/Commands/Diff.lhs 234
                     return ()
                  return output
 
-get_diff_info :: RepoPatch p => [DarcsFlag] -> PatchSet p -> [PatchInfo]
+get_diff_info :: RepoPatch p => [DarcsFlag] -> PatchSet p C(x) -> [PatchInfo]
 get_diff_info opts ps =
hunk ./src/Darcs/Commands/Diff.lhs 236
-    let pi1s = mapRL info $ concatRL $ if first_match opts
-                                       then unsafeUnseal $ match_first_patchset opts ps
-                                       else ps
-        pi2s = mapRL info $ concatRL $ if second_match opts
-                                       then unsafeUnseal $ match_second_patchset opts ps
-                                       else ps
-        in pi2s \\ pi1s
+    let infos = mapRL info . concatRL
+        handle (match_cond, do_match)
+          | match_cond opts = unseal infos (do_match opts ps)
+          | otherwise = infos ps
+    in handle (second_match, match_second_patchset)
+         \\ handle (first_match, match_first_patchset)
 
 changelog :: [PatchInfo] -> Doc
 changelog pis = vcat $ map human_friendly pis
[add witnesses to Darcs.Commands.Remove
Ganesh Sittampalam <[email protected]>**20090909193405
 Ignore-this: b2b55b15428a0d174338ab5ad13d8f9b
] hunk ./src/Darcs/Commands/Remove.lhs 45
 import Darcs.Gorsvet( invalidateIndex )
 #include "impossible.h"
 
+#include "gadts.h"
+
 remove_description :: String
 remove_description = "Remove files from version control."
 
hunk ./src/Darcs/Commands/Remove.lhs 85
     invalidateIndex repository
     add_to_pending repository p
 
-make_remove_patch :: RepoPatch p => Repository p -> [SubPath] -> IO (FL Prim)
+make_remove_patch :: RepoPatch p => Repository p C(r u t) -> [SubPath] -> IO (FL Prim C(x x))
 make_remove_patch repository files =
                           do s <- slurp_pending repository
                              srecorded <- slurp_recorded repository
[add witnesses to Darcs.Commands.TrackDown
Ganesh Sittampalam <[email protected]>**20090909193441
 Ignore-this: 8081b7aa9856ca109b9ef41a5b24725e
] hunk ./src/Darcs/Commands/TrackDown.lhs 33
 import Darcs.Hopefully ( hopefully )
 import Darcs.Repository ( amInRepository, read_repo, withRepoReadLock, ($-), withRecorded,
                           setScriptsExecutable )
-import Darcs.Ordered ( unsafeUnRL, concatRL )
-import Darcs.Patch ( RepoPatch, Named, description, apply, invert )
+import Darcs.Ordered ( FL(..), mapRL_RL, concatRL )
+import Darcs.Patch ( RepoPatch, Named, description, apply, invert, invertRL )
 import Printer ( putDocLn )
 import Darcs.Test ( get_test )
 import Darcs.Lock ( withTempDir )
hunk ./src/Darcs/Commands/TrackDown.lhs 39
 
+#include "gadts.h"
+
 trackdown_description :: String
 trackdown_description = "Locate the most recent version lacking an error."
 
hunk ./src/Darcs/Commands/TrackDown.lhs 84
   withRecorded repository (withTempDir "trackingdown") $ \_ -> do
     when (SetScriptsExecutable `elem` opts) setScriptsExecutable
     init
-    track_next opts test $ map (invert . hopefully) $ unsafeUnRL $ concatRL patches
+    track_next opts test . invertRL . mapRL_RL hopefully . concatRL $ patches
 
hunk ./src/Darcs/Commands/TrackDown.lhs 86
-track_next :: RepoPatch p => [DarcsFlag] -> (IO ExitCode) -> [Named p] -> IO ()
-track_next opts test (p:ps) = do
+track_next :: RepoPatch p => [DarcsFlag] -> (IO ExitCode) -> FL (Named p) C(x y) -> IO ()
+track_next opts test (p:>:ps) = do
     test_result <- test
     if test_result == ExitSuccess
        then putStrLn "Success!"
hunk ./src/Darcs/Commands/TrackDown.lhs 96
                putDocLn $ description $ invert p
                hFlush stdout
                track_next opts test ps
-track_next _ _ [] = putStrLn "Noone passed the test!"
+track_next _ _ NilFL = putStrLn "Noone passed the test!"
 \end{code}
 
 Trackdown is helpful for locating when something was broken.  It creates
[add witnesses to Darcs.Commands.Pull
Ganesh Sittampalam <[email protected]>**20090909194407
 Ignore-this: 51eb38f21152e1d3d348bff37aea0ddd
] 
<
[Tweak user manual's title page.
Trent W. Buck <[email protected]>**20081227011031
 It annoyed me that the user manual was just called "Darcs", not "Darcs
 User Manual".
] 
[Get setpref description in manual.
Dave Love <[email protected]>**20090111151941
 Ignore-this: 89b0d00a82582d03fdf51cd9822dba65
] 
[Resolve issue1310: create merged \darcsCommand{add}.
Trent W. Buck <[email protected]>**20090124144058
 Ignore-this: 945f45d0671c1e5a613ebfb3c4f90f59
 This replaces inconsistent use of \haskell{add_description},
 \options{add} and \haskell{add_help}. 
] 
[Refactor "darcs get" help.
Trent W. Buck <[email protected]>**20090314062729
 Ignore-this: 21b6229625c608bd027145ca47d36930
] 
[Refactor English patch/patches in darcs get.
Eric Kow <[email protected]>**20090413180400
 Ignore-this: 3762aa5af1a16467a2a1ce00db3fb946
] 
[Invalidate index at key positions in relevant (pristine-modifying) commands.
Petr Rockai <[email protected]>**20090524092616
 Ignore-this: aaff5ce75478c57047c0c9398aa1ebde
] 
[make type of checkUnrelatedRepos more general
Ganesh Sittampalam <[email protected]>**20090908210652
 Ignore-this: 8f2559da573ea899cef219e67dd5229a
 There's no reason why two repos we are comparing for relatedness should have
 the same ending context.
 
] 
[make an assumption in the pull code explicit
Ganesh Sittampalam <[email protected]>**20090908214917
 Ignore-this: c573c45fb13012ebd28022f44508d6c8
 It seems like get_common_and_uncommon always returns a singleton list,
 which is then relied on later. This patch makes that assumption explicit,
 by erroring out if it's not true.
] 
> hunk ./src/Darcs/Commands/Pull.lhs 64
 import Darcs.Gorsvet( invalidateIndex )
 #include "impossible.h"
 
+#include "gadts.h"
+
 pull_description :: String
 pull_description =
  "Copy and apply patches from another repository to this one."
hunk ./src/Darcs/Commands/Pull.lhs 192
 the second patchset(s) to be complemented against Rc.
 -}
 
-read_repos :: RepoPatch p => Repository p -> [DarcsFlag] -> [String] -> IO (SealedPatchSet p,SealedPatchSet p)
+read_repos :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> [String] -> IO (SealedPatchSet p,SealedPatchSet p)
 read_repos _ _ [] = impossible
 read_repos to_repo opts us =
     do rs <- mapM (\u -> do r <- identifyRepositoryFor to_repo u
[add witnesses to Darcs.Commands.Apply
Ganesh Sittampalam <[email protected]>**20090909194800
 Ignore-this: d7975514d3aea9b53a0b9248c2a50b06
] hunk ./src/Darcs/Commands/Apply.lhs 58
                   )
 import Darcs.Patch ( RepoPatch, description )
 import Darcs.Patch.Info ( human_friendly )
-import Darcs.Ordered ( (:\/:)(..), (:>)(..), unsafeUnRL,
-                             mapFL, nullFL, mapFL_FL, mapRL, concatRL, reverseRL )
+import Darcs.Ordered ( (:\/:)(..), (:>)(..),
+                             mapFL, nullFL, mapFL_FL, nullRL, mapRL, concatRL, reverseRL )
 import Darcs.SlurpDirectory ( wait_a_moment )
 
 import ByteStringUtils ( linesPS, unlinesPS )
hunk ./src/Darcs/Commands/Apply.lhs 78
 import Darcs.Gorsvet( invalidateIndex )
 #include "impossible.h"
 
+#include "gadts.h"
+
 apply_description :: String
 apply_description = "Apply a patch bundle created by `darcs send'."
 
hunk ./src/Darcs/Commands/Apply.lhs 124
   let from_whom = get_from ps
   us <- read_repo repository
   either_them <- get_patch_bundle opts ps
-  them <- case either_them of
-          Right (Sealed t) -> return t
+  Sealed them
+     <- case either_them of
+          Right t -> return t
           Left er -> do forwarded <- consider_forwarding opts ps
                         if forwarded
                           then exitWith ExitSuccess
hunk ./src/Darcs/Commands/Apply.lhs 137
                                 then cannotApplyPartialRepo pinfo ""
                                 else cannotApplyMissing pinfo
                          Right x -> return x
-  when (null $ unsafeUnRL them') $
+  when (nullRL them') $
        do putStr $ "All these patches have already been applied.  " ++
                      "Nothing to do.\n"
           exitWith ExitSuccess
[add witnesses to Darcs.Commands.Push
Ganesh Sittampalam <[email protected]>**20090909195258
 Ignore-this: c0ce49e56d76fc29fb17a9476d95bac5
] hunk ./src/Darcs/Commands/Push.lhs 57
 import English (englishNum, Noun(..))
 #include "impossible.h"
 
+#include "gadts.h"
+
 push_description :: String
 push_description =
  "Copy and apply patches from this repository to another one."
hunk ./src/Darcs/Commands/Push.lhs 141
      checkUnrelatedRepos opts common us them
      putVerbose $ text "We have the following patches to push:"
                $$ (vcat $ mapRL description us')
-     case us' of
+     (case us' of
        NilRL -> do putInfo $ text "No recorded local changes to push!"
                    exitWith ExitSuccess
hunk ./src/Darcs/Commands/Push.lhs 144
-       _ -> return ()
+       _ -> return ()) :: IO ()
      with_selected_changes "push" opts (reverseRL us') $
       \ (to_be_pushed:>_) -> do
       definePatches to_be_pushed
[add witnesses to Darcs.Commands.Send
Ganesh Sittampalam <[email protected]>**20090909200151
 Ignore-this: ab87388a6d4469998568784aa36087d8
] hunk ./src/Darcs/Commands/Send.lhs 73
 import HTTP ( postUrl )
 #include "impossible.h"
 
+#include "gadts.h"
+
 send_description :: String
 send_description =
  "Send by email a bundle of one or more patches."
hunk ./src/Darcs/Commands/Send.lhs 164
           the_context (_:fs) = the_context fs
 send_cmd _ _ = impossible
 
-send_to_them :: RepoPatch p => Repository p -> [DarcsFlag] -> [WhatToDo] -> String -> PatchSet p -> IO ()
+send_to_them :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> [WhatToDo] -> String -> PatchSet p C(x) -> IO ()
 send_to_them repo opts wtds their_name them = do
   let am_verbose = Verbose `elem` opts
       am_quiet = Quiet `elem` opts
hunk ./src/Darcs/Commands/Send.lhs 171
       putVerbose s = when am_verbose $ putDocLn s
       putInfo s = when (not am_quiet) $ putStrLn s
       patch_desc p = just_name $ info p
-      make_fname tbs = patch_filename $ patch_desc $ headFL tbs
-      headFL (x:>:_) = x
-      headFL _ = impossible
+      make_fname (tb:>:_) = patch_filename $ patch_desc tb
+      make_fname _ = impossible
   us <- read_repo repo
   case get_common_and_uncommon (us, them) of
     (common, us' :\/: _) -> do
hunk ./src/Darcs/Commands/Send.lhs 177
      checkUnrelatedRepos opts common us them
-     case us' of
+     (case us' of
          NilRL -> do putInfo "No recorded local changes to send!"
                      exitWith ExitSuccess
          _ -> putVerbose $ text "We have the following patches to send:"
hunk ./src/Darcs/Commands/Send.lhs 181
-                        $$ (vcat $ mapRL description us')
+                        $$ (vcat $ mapRL description us')) :: IO ()
      s <- slurp_recorded repo
      let our_ps = reverseRL us'
      with_selected_changes "send" opts our_ps $
hunk ./src/Darcs/Commands/Send.lhs 206
                          cleanup f
         Nothing ->
          let
+           auto_subject :: forall p C(x y) . FL (PatchInfoAnd p) C(x y) -> String
            auto_subject (p:>:NilFL)  = "darcs patch: " ++ trim (patch_desc p) 57
            auto_subject (p:>:ps) = "darcs patch: " ++ trim (patch_desc p) 43 ++
                             " (and " ++ show (lengthFL ps) ++ " more)"
hunk ./src/Darcs/Commands/Send.lhs 322
     | SendMail String    -- ^ send patch via email
 
 
-decide_on_behavior :: RepoPatch p => [DarcsFlag] -> Repository p -> IO [WhatToDo]
+decide_on_behavior :: RepoPatch p => [DarcsFlag] -> Repository p C(r u t) -> IO [WhatToDo]
 decide_on_behavior opts the_remote_repo =
     case the_targets of
     [] ->
hunk ./src/Darcs/Commands/Send.lhs 421
 \end{verbatim}
 
 \begin{code}
-get_description :: RepoPatch p => [DarcsFlag] -> FL (PatchInfoAnd p) -> IO (Doc, Maybe String)
+get_description :: RepoPatch p => [DarcsFlag] -> FL (PatchInfoAnd p) C(x y) -> IO (Doc, Maybe String)
 get_description opts patches =
     case get_filename of
         Just f -> do file <- f
[need RankNTypes for some of the newly witnessed modules
Ganesh Sittampalam <[email protected]>**20090909200643
 Ignore-this: d9bd0724f91b6a435d75ca8d93ac24fd
] hunk ./darcs.cabal 124
                     src/Crypt/sha2.c
 
   extensions:
-    CPP
+    CPP, RankNTypes
 
   if !flag(type-witnesses)
     buildable: False
[add newly-witnessed modules to witnesses.hs
Ganesh Sittampalam <[email protected]>**20090909200711
 Ignore-this: 5f6c6ec561586c01956c3a7ff228ab3d
] 
<
[make type of checkUnrelatedRepos more general
Ganesh Sittampalam <[email protected]>**20090908210652
 Ignore-this: 8f2559da573ea899cef219e67dd5229a
 There's no reason why two repos we are comparing for relatedness should have
 the same ending context.
 
] 
[add witnesses to Darcs.Commands.Diff
Ganesh Sittampalam <[email protected]>**20090909193013
 Ignore-this: 5fb4fb83967232f11dde5c62c919a531
] 
[add witnesses to Darcs.Commands.Remove
Ganesh Sittampalam <[email protected]>**20090909193405
 Ignore-this: b2b55b15428a0d174338ab5ad13d8f9b
] 
[add witnesses to Darcs.Commands.TrackDown
Ganesh Sittampalam <[email protected]>**20090909193441
 Ignore-this: 8081b7aa9856ca109b9ef41a5b24725e
] 
[add witnesses to Darcs.Commands.Pull
Ganesh Sittampalam <[email protected]>**20090909194407
 Ignore-this: 51eb38f21152e1d3d348bff37aea0ddd
] 
[add witnesses to Darcs.Commands.Apply
Ganesh Sittampalam <[email protected]>**20090909194800
 Ignore-this: d7975514d3aea9b53a0b9248c2a50b06
] 
[add witnesses to Darcs.Commands.Push
Ganesh Sittampalam <[email protected]>**20090909195258
 Ignore-this: c0ce49e56d76fc29fb17a9476d95bac5
] 
[add witnesses to Darcs.Commands.Send
Ganesh Sittampalam <[email protected]>**20090909200151
 Ignore-this: ab87388a6d4469998568784aa36087d8
] 
[need RankNTypes for some of the newly witnessed modules
Ganesh Sittampalam <[email protected]>**20090909200643
 Ignore-this: d9bd0724f91b6a435d75ca8d93ac24fd
] 
> hunk ./src/witnesses.hs 13
 import Darcs.Repository.Pristine
 import Darcs.Repository.DarcsRepo
 import Darcs.Repository.Internal
-import Darcs.Commands.Unrevert
-import Darcs.Commands.WhatsNew
-import Darcs.Commands.Show
-import Darcs.Commands.Unrecord
+import Darcs.Commands.Annotate
+import Darcs.Commands.Apply
+import Darcs.Commands.Diff
 import Darcs.Commands.Dist
hunk ./src/witnesses.hs 17
-import Darcs.Commands.TransferMode
 import Darcs.Commands.GZCRCs
hunk ./src/witnesses.hs 18
+import Darcs.Commands.Init
+import Darcs.Commands.Pull
+import Darcs.Commands.Push
+import Darcs.Commands.Send
+import Darcs.Commands.Show
+import Darcs.Commands.TrackDown
+import Darcs.Commands.TransferMode
+import Darcs.Commands.Unrevert
+import Darcs.Commands.Unrecord
+import Darcs.Commands.WhatsNew
 
 main = return ()

Context:

[More descriptive name for issue1488 test.
Eric Kow <[email protected]>**20090909192238
 Ignore-this: 6bc0dddf87b12f0b269110ae5d29796d
] 
[Accept issue1488: a 'fromJust error' in 'darcs whatsnew -l'
Marnix Klooster <[email protected]>**20090909180046
 Ignore-this: d064a42a78efef5c327d41e425a6fefc
] 
[Make the ./tests/issue1465_ortryrunning.sh a little more foolproof.
Petr Rockai <[email protected]>**20090909144349
 Ignore-this: 2e0f7370f2e53e3c104e68a9c5aeeafe
] 
[Skip the time-stamps test on windows.
Petr Rockai <[email protected]>**20090909142844
 Ignore-this: 72b0bc3d549cab38bceda55113334dd
] 
[Print expansions of simple commands in testsuite output.
Petr Rockai <[email protected]>**20090907072337
 Ignore-this: d78e78a155da6f30ebcc592780cfd699
 
 This helps with debugging failures, since we see the exact command that was
 executed, after all shell expansion has been done. Moreover, we see exactly
 which command failed -- the existing -v will eg. print a whole "if" statement
 with body and it cannot be discerned which branch was taken or which command
 exactly has failed.
] 
[make an assumption in the pull code explicit
Ganesh Sittampalam <[email protected]>**20090908214917
 Ignore-this: c573c45fb13012ebd28022f44508d6c8
 It seems like get_common_and_uncommon always returns a singleton list,
 which is then relied on later. This patch makes that assumption explicit,
 by erroring out if it's not true.
] 
[Use the correct slash in push-formerly-pl.
Petr Rockai <[email protected]>**20090906131345
 Ignore-this: b2fe686adcdccbcaf58ca839c19634c9
 
 This is usually not required, but in this particular case, the bad slash
 confuses darcs path comparison (it keeps around the mixed slashes in one of the
 paths, but has backslashes-only in the other one and wrongly concludes that the
 paths are different).
] 
[Exit 200 in abort_windows to indicate the skip to the harness.
Petr Rockai <[email protected]>**20090906131236
 Ignore-this: 18c60417b1c986eebbfddba896738ddb
] 
[Add a simple testcase for the --external-merge option.
Petr Rockai <[email protected]>**20090806063953
 Ignore-this: e848f9b8d5d926fbcc05064d85c49316
] 
[Add a rudimentary release script.
Petr Rockai <[email protected]>**20090906154343
 Ignore-this: 7ace3f8e435b04258b270dcd094b9f13
 
 This should automate most of the boring and (more importantly) error-prone work
 that needs to be done upon a darcs release. Work in progress.
] 
[Avoid relying on /dev/stdin in tests/emailformat.sh.
Petr Rockai <[email protected]>**20090903115749
 Ignore-this: 43b85a6dd1fcefeb7fd32628a5311a8c
] 
[More extensive haddocks on Darcs.Patch.Depends.get_extra.
Eric Kow <[email protected]>**20090905222525
 Ignore-this: c8e2ac70e5f61ea12afc479636d9e0cd
] 
[specify CPP globally for witnesses build
Ganesh Sittampalam <[email protected]>**20090829061922] 
[missing LANGUAGE in Darcs.ProgressPatches
Ganesh Sittampalam <[email protected]>**20090829061256] 
[missing LANGUAGE in Darcs.Commands.Unrevert
Ganesh Sittampalam <[email protected]>**20090829061208] 
[remove some derived classes from Tag
Ganesh Sittampalam <[email protected]>**20090727060203
 Ignore-this: 933bd408aff78744925ec2e6cb2475ce
 This helps to make the representation more abstract
 
] 
[couple of GADT build fixes for recent GHCs
Ganesh Sittampalam <[email protected]>**20090803050514
 Ignore-this: 6c20e60426da722d0119e00be4eb6816
] 
[add a comment
Ganesh Sittampalam <[email protected]>**20090803055736
 Ignore-this: aad4e733fede7c8abe552893159e0fef
] 
[minor clean up in TouchesFiles
Jason Dagit <[email protected]>**20090830080712
 Ignore-this: dd23aa84c47234c72f14948981214960
] 
[silence a warning that happens when compiling witnesses
Jason Dagit <[email protected]>**20090830022548
 Ignore-this: 58f61bce80505de12ede5095d209b577
] 
[remove unused argument to readPrim
Jason Dagit <[email protected]>**20090830022354
 Ignore-this: df9164c70fa9be8f274bdb8e634956d1
] 
[use gzipFormat instead of GZip to work around deprecation warning.
Jason Dagit <[email protected]>**20090830022209
 Ignore-this: a556704bf2c974c10619a8051ebb90b4
] 
[Resolve issue1578: Don't put newlines in the Haskeline prompts.
Judah Jacobson <[email protected]>**20090829072733
 Ignore-this: 48a17fb0f45f3aee76aa56361bfd97df
 
 Haskeline doesn't expect to get control characters in its prompt.
 The fix is to manually print all but the last line of a prompt message
 separately, and then pass the last line as the Haskeline prompt.
 
 So far we've only seen this cause a problem when mark-conflicts is run in
 the emacs shell (see the issue for more information).
] 
[Whoops, one more obviated line from Darcs.Repository.Checkpoint.
Trent W. Buck <[email protected]>**20090829070738
 Ignore-this: b9aef33a8b34db9d41f8d0b83025c85b
] 
[Resolve issue1548: show contents requires at least one argument.
Trent W. Buck <[email protected]>**20090829073643
 Ignore-this: c15286919e827a5e7fdad01c75acccfe
] 
[Add a hidden alias "darcs log" for "darcs changes".
Trent W. Buck <[email protected]>**20090829032545
 Ignore-this: 96d8bec96c5bf39387a534fa62a79e28
 Reduces disparity with CVS, svn, hg, git &c, who all use "log".
] 
[Mark issue68 test as failing (and fix issue number).
Eric Kow <[email protected]>**20090828101717
 Ignore-this: 63c0ba22d171cefe5a0244b4ee57a991
] 
[Resolve issue1373: don't use a broken example.
Trent W. Buck <[email protected]>**20090828062131
 Ignore-this: 35d59b69c8018f55191486c6a0175c9a
] 
[Reorder paragraphs and minor rewrite of darcs replace --help.
Trent W. Buck <[email protected]>**20090828041241
 Ignore-this: 72137bca5de55b77173db6758445b4a7
] 
[Remove unused code from Darcs.Repository.Checkpoint.
Trent W. Buck <[email protected]>**20090828030127
 Ignore-this: 25ab977e5ac0b735ca6ee90aea0349c9
] 
[The record-scaling test still fails.
Trent W. Buck <[email protected]>**20090828025648
 Ignore-this: 5ca16bd011676b083cdfcd4359f4744a
] 
[Clean up leftover conflicts from merge with David's test suite work.
Eric Kow <[email protected]>**20090824104840
 Ignore-this: ec4ef00d4c5b4da6e24f008f854da2e8
] 
[Resolve conflicts between David and mainline test suite work.
Eric Kow <[email protected]>**20090815232335
 Ignore-this: 72f386bd5345c344f32ca2db9f5594e3
 
 Patches involved from David's end:
   * add failing test demonstrating nasty conflict markings.
   * mark check.sh test as passing.
   * mark issue27 test as passing.
   * mark issue 1043 test as passing.
   * mark nfs-failure.sh as passing (even though it might not be fixed).
   * mark dist-v as passing.
   * mark check.sh as failing.
   * clean up and mark as passing the broken-pipe.sh test.
   * mark issue 525 is no longer failing.
   * move bugs into tests/ directory.
 
 The main patch involved is the 'move bugs into tests/ directory'
 which conflicts with some new bugs we added.  I re-added these
 manually from the mainline branch of darcs along with some bugs
 we added that we later marked as passing.
 
 I also had to clean up a few tests along the way:
 - check.sh because of conflicts,
 - broken-pipe.sh because of temp dir garbage and
 - record-scaling.sh because of MacOS X incompatiblity
] 
[add failing test demonstrating nasty conflict markings.
David Roundy <[email protected]>**20090329022150
 Ignore-this: 17b0df1e2a33e5efccd92f1930850c15fbf12b1e
] 
[mark check.sh test as passing.
David Roundy <[email protected]>**20081207192451
 Ignore-this: bb0d26124eb69bb88e981d06caa88206
] 
[mark issue27 test as passing.
David Roundy <[email protected]>**20081201170526
 Ignore-this: 49c7b75f79d9bf25610162d079f7dde9
] 
[mark issue 1043 test as passing.
David Roundy <[email protected]>**20081119150515
 Ignore-this: 8b46c9feb0680f0ee9b4f95ee93eb580
] 
[mark nfs-failure.sh as passing (even though it might not be fixed).
David Roundy <[email protected]>**20081117160036
 Ignore-this: d13ebd26c2a799668068132f9c4d05bc
] 
[mark dist-v as passing.
David Roundy <[email protected]>**20081115221319
 Ignore-this: 6fbea237af32801e7207f25af032f408
] 
[mark check.sh as failing.
David Roundy <[email protected]>**20081115220504
 Ignore-this: 812ad08924c9d713646c7adc26d34b75
] 
[clean up and mark as passing the broken-pipe.sh test.
David Roundy <[email protected]>**20081115213750
 Ignore-this: db9fb0de61a4099c73e42365047dc9d2
] 
[mark issue 525 is no longer failing.
David Roundy <[email protected]>**20081115212158
 Ignore-this: 8398c09d03c2e900251f46c41106d94
] 
[move bugs into tests/ directory.
David Roundy <[email protected]>**20081115205509
 Ignore-this: 6b249e3ba90b455331ba31fee36ef5ad
] 
[Eliminate references to the autotools-based build system.
Taylor R Campbell <[email protected]>**20090826170519
 
 Now that the autotools-based build system is gone, various vestiges
 of it can be eliminated.  This patch also eliminates some text in
 src/darcs.tex about the Darcs cgi script in contrib/cgi/, which was
 built using `make install-server' and appears to have no way to be
 built now.  This does not eliminate the script, however.
 
 The following tests still refer to the old autotools- and make-based
 build system:
 
   release/darcs.spec.in
   src/Darcs/Commands/Send.lhs
   tests/README.test_maintainers.txt
   tests/run-all-tests
 
 I didn't change them because I don't know what to substitute for them.
 The sendmail options could use some clearer documentation anyway, which
 is outside the scope of this patch.
] 
[Mark issue1317 test as failing (and note issue number).
Eric Kow <[email protected]>**20090824110437
 Ignore-this: bbecb8d3a4e60c3bc96b28b729375b6c
] 
[Regression test for issue1317.
Marco Túlio Gontijo e Silva <[email protected]>**20090811220616
 Ignore-this: 846d37873b06a70bed87afeb0fbf2d38
] 
[Explain a slightly obtuse one-liner.
Trent W. Buck <[email protected]>**20090824033200
 Ignore-this: 8d6ed336b0a2d932eed879fc85183943
] 
[Support tests/failing-foo.sh convention for bugs.
Eric Kow <[email protected]>**20090814103659
 Ignore-this: 4729f6553910660be921af7d1199abb1
] 
[Minor style tweaks in cabal test.
Eric Kow <[email protected]>**20090814102234
 Ignore-this: 9ce3479022f3c177af3c4fa17426b177
] 
[Support command line arguments in PAGER or DARCS_PAGER
[email protected]**20090823011449
 Ignore-this: d979af618b5f193b58867e43dd2e0171
 For example:
   PAGER="less -is" darcs help
] 
[Rename xml_summary to xmlSummary and summarize to plainSummary.
Eric Kow <[email protected]>**20090818220119
 Ignore-this: b1e29f45f0599a406ffb6496acac2488
] 
[Cut unused imports in Darcs.Patch.Viewing.
Eric Kow <[email protected]>**20090818214432
 Ignore-this: f83f5ce55279a5b96a14770dbcb7dd0b
] 
[Simpler types for changes --summary.
Eric Kow <[email protected]>**20090818213946
 Ignore-this: 22fdc7984753eedf3d35ff88762a2eb2
] 
[update docs for darcs mv to reflect reality
Ganesh Sittampalam <[email protected]>**20090827230453
 Ignore-this: 7f5c30b5711b8bbcbec47f6217662b0d
] 
[Print helpful message in gzcrcs command when visiting other repos
Ganesh Sittampalam <[email protected]>**20090827054315
 Ignore-this: a7f997c441f0e246c4d31d827ebc9d2b
] 
[Camel-case some Darcs.Patch.Viewing functions.
Eric Kow <[email protected]>**20090817153751
 Ignore-this: b3b03f3408f1097e5b476a35215ecec6
] 
[A tiny bit more separation of concerns in changes --summary core.
Eric Kow <[email protected]>**20090817230414
 Ignore-this: b9f5e9625862d19c356667dc2ce6710d
] 
[Resolve issue183: Do not sort changes --summary output.
Eric Kow <[email protected]>**20090817225814
 Ignore-this: 2749e08a69592f49bb7e2400ae89e8a6
 This adds move patches to our high-level representation of summary output.
] 
[Refactor changes --summary core code.
Eric Kow <[email protected]>**20090817225735
 Ignore-this: 1078c3bf42fa5e2acef6e6a31c81c42b
 
 This uses some custom types representing summarised changes on a higher level
 and also moves the XML and 'line' based rendering of summaries into separate
 blocks of code.
] 
[Accept issue1472: "darcs record ./foo" shouldn't open ./bar.
Trent W. Buck <[email protected]>**20090815084306
 Ignore-this: 23d5392008872369ba9b509b75aeb5bc
 This bug was present in Darcs 2.0, but gone by 2.3.
 Thus, this patch simply adds a regression test.
] 
[Remove tabs from src/Exec.hs
Reinier Lamers <[email protected]>**20090809163015
 Ignore-this: 30952fddf0ae0f60b3af442e90411ca7
] 
[Remove optimize --checkpoint cruft.
Eric Kow <[email protected]>**20090811143734
 Ignore-this: c36c818704171289ff388cdd539626d5
] 
[darcs.cabal turn on -fwarn-tabs per dupree
[email protected]**20090807013047
 Ignore-this: c7961b5512d2f8392f3484c81ca197e0
] 
[Add script that tricks cabal into installing our build-depends only.
Petr Rockai <[email protected]>**20090805152653
 Ignore-this: 6a70f5ff464d26a944b81967606e7af0
] 
[Avoid unescaped hyphens and backslashes in manpage.
Trent W. Buck <[email protected]>**20090803063335
 Ignore-this: 4db2b484b68590f754d36f4751e93962
 Fixes these bugs:
 
   W: darcs: manpage-has-errors-from-man darcs.1.gz:
        297: a tab character is not allowed in an escape name
   I: darcs: hyphen-used-as-minus-sign darcs.1.gz (87 times)
 
 http://lintian.debian.org/tags/manpage-has-errors-from-man.html
 http://lintian.debian.org/tags/hyphen-used-as-minus-sign.html
] 
[Typo: s/comand/command/.
Trent W. Buck <[email protected]>**20090803042007
 Ignore-this: fcbe6f2cbcb3743872b0431b11dea10c
 Thanks to http://lintian.debian.org/tags/spelling-error-in-binary.html.
] 
[Update hpc.README to use Cabal.
Petr Rockai <[email protected]>**20090730190304
 Ignore-this: 7f63751a7daa418ffdca2ca6d20af1b1
] 
[Add a flag for enabling HPC for the darcs library.
Petr Rockai <[email protected]>**20090730185959
 Ignore-this: e0246133e84e8547e223f61b67a28066
] 
[Combine the HPC tix files after each test in ShellHarness.
Petr Rockai <[email protected]>**20090730185951
 Ignore-this: 577a6e1614aa8c5ff6f25d9df6f81554
 
 This is done when HPCTIXDIR is set, so presumably we are generating coverage
 report. We need to do this, because otherwise, a full testsuite run produces
 over a gigabyte of tixfiles, even though the combined tix is less than 200K.
] 
[Require haskell zlib, dropping the legacy internal zlib binding.
Petr Rockai <[email protected]>**20090722091325
 Ignore-this: 348c1fd005fe19900e4a9706567b4ee0
] 
[Fix link to autoconf tarball.
Eric Kow <[email protected]>**20090723135420
 Ignore-this: cfe87256fbd5af286a00fbb84ca443d0
] 
[Update web page for 2.3.0 release.
Eric Kow <[email protected]>**20090723134705
 Ignore-this: dfa04b99e5c0170448d635bf0e496a66
] 
[Resolve conflict between autoconf removal and version number updates.
Eric Kow <[email protected]>**20090723133543
 Ignore-this: efcf724bf0230243cee1e88502428ccd
] 
[Makefile: fix dependency on no longer existing distclean target.
Eric Kow <[email protected]>**20090722093438
 Ignore-this: d0f8da797e26b0c42a2da76eddd4ed31
] 
[Make utf8-string mandatory.
Eric Kow <[email protected]>**20090721194433
 Ignore-this: cd8a94b3e4e41bb938e82dffbcb27e2d
] 
[Remove UTF8 module completely.
Eric Kow <[email protected]>**20090721194220
 Ignore-this: f4ec3fe853ecbc928a8d3e3c3b9aa07c
 The utf8-string package has been the default for a while.
 Now we're wholly dependent on it.
] 
[Add support for skipping tests (exit 200).
Petr Rockai <[email protected]>**20090720095346
 Ignore-this: 133cb02e8cca03a4678068450cb150a9
] 
[Remove the --checkpoint option from the UI.
Petr Rockai <[email protected]>**20090720093634
 Ignore-this: 2fb627cd1e64bbe264fda6e19f0b085b
] 
[Remove the support for writing out new checkpoints.
Petr Rockai <[email protected]>**20090720091809
 Ignore-this: 87eb23fe7604ed0abe5c38daafb87a7e
] 
[Remove unused determine_release_state.pl.
Eric Kow <[email protected]>**20090721205227
 Ignore-this: 15331bbb258fbdeb6bd4887c8dabb8ed
] 
[Remove ununsed test/shell_harness.hs.
Eric Kow <[email protected]>**20090721192027
 Ignore-this: 7efbe97744c698beecd4f17a09868467
] 
[Remove autoconf support and cut GNUmakefile to only build manual and tags.
Petr Rockai <[email protected]>**20090717160355
 Ignore-this: 8a45c095c566172076adbe6e44b37827
] 
[Slightly refactor the run function in ShellHarness.
Petr Rockai <[email protected]>**20090714134205
 Ignore-this: 92c7f05b9c4d6973e95706f23ea27dfc
] 
[Slightly refactor test machinery in Setup.lhs.
Petr Rockai <[email protected]>**20090714134119
 Ignore-this: 32206a331658d407d9c0fb3b48405db6
] 
[Use tee in pending_has_conflicts.sh for easier debugging.
Petr Rockai <[email protected]>**20090713180404
 Ignore-this: 7b96b7f7df6358ddb0466cfe58803f71
] 
[Roll back the getSymbolicLinkStatus workaround, since it constitutes a fd leak.
Petr Rockai <[email protected]>**20090710143149
 Ignore-this: cd2aa7e13cc902852a7c5d0855d55538
 
 rolling back:
 
 Sun Jun 21 17:39:42 CEST 2009  Petr Rockai <[email protected]>
   * Avoid getSymbolicLinkStatus in mmap implementation, works around GHC 6.8.2 bug.
] 
[Note darcs 2.3 pre-release and darcs 2.2 stable versions in website.
Eric Kow <[email protected]>**20090716133323
 Ignore-this: bbe9c36213a07890816b8599f2f29aee
] 
[Remove website automation from Makefile.
Eric Kow <[email protected]>**20090716133230
 Ignore-this: f0cdb9afaa9d314321b345a08e2784bf
] 
[Rename index.html.in to index.html, forgoing website automation.
Eric Kow <[email protected]>**20090716133023
 Ignore-this: a4c62db2d3ca341e95262cd05328473f
 
 The website automation allowed us to avoid duplication of information (ie.
 version numbers), but we're in the process of changing our build and
 release system, which breaks the site.  For now, we go for simplicity and
 robustness, perhaps restoring the automation in the future when things
 have settled down somewhat.
] 
[Remove bytestring flag from darcs.cabal.
Eric Kow <[email protected]>**20090714165021
 Ignore-this: 4325773231f9679054c7d045657bdae0
 Now that we're requiring GHC 6.8 or above, we always use the external bytestring
 package.
] 
[Move email unit tests to Darcs.Test module space
Reinier Lamers <[email protected]>**20090629203409
 Ignore-this: 3187d24822e7a125a46e0a273956d792
] 
[Teach cabal about new Darcs.Test modules
Reinier Lamers <[email protected]>**20090629193208
 Ignore-this: c27c8398fd637e100259fdf1f4d42e0a
] 
[Move unit tests to Darcs.Test module space
Reinier Lamers <[email protected]>**20090629192934
 Ignore-this: e88d9ecb7ca8f0b5679fba2cd2813ff0
] 
[Bound size of trees generated in Darcs.Patch.QuickCheck
Reinier Lamers <[email protected]>**20090628134952
 Ignore-this: c499b850ad5ca15d4bada56b69ee98f3
 
 This keeps the 'Checking that tree flattenings are consistent' test from
 occasionally taking hours and hours to complete. The maximum depth of 5 was
 found by experiment.
] 
[Add some comments in Darcs.Patch.QuickCheck
Reinier Lamers <[email protected]>**20090628134908
 Ignore-this: c66a386865832e75427f99febfb91a91
] 
[Avoid getSymbolicLinkStatus in mmap implementation, works around GHC 6.8.2 bug.
Petr Rockai <[email protected]>**20090621153942
 Ignore-this: 91092453d97c87edfc4e46b11e4ae208
] 
[TAG 2.3.0
Petr Rockai <[email protected]>**20090723115125
 Ignore-this: e326d4ddff92c578e8fe8a3c23d00193
] 
Patch bundle hash:
d4ce7a2a705b67bea078af934c2a2698e4690e3b
_______________________________________________
darcs-users mailing list
[email protected]
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to