Hi Reinier,

Would you mind reviewing this?

Mon Aug 17 16:34:43 BST 2009  Eric Kow <[email protected]>
  * Refactor changes --summary core code.
  
  Switch from an anonymous tuple to our own custom type representing summary
  output on a high level.  The type differentiates things that should not be
  combined with each other from from things that should.  For example, hunk
  patches in the summary may combine with addfile patches, but not with
  add-directory patches.
  
  Note that some UI has changed along the way (duplicate directories no longer
  have a bang by their A/R symbol), not to mention other things which may have
  accidentally changed like the sorting order of primitive patches.

Mon Aug 17 16:37:51 BST 2009  Eric Kow <[email protected]>
  * Camel-case some Darcs.Patch.Viewing functions.

As for the camel-casing, I don't think we should spend any
time/energy/breath/attention on this kind of thing but just do it ant-trail
style updating things as we touch them.

New patches:

[Refactor changes --summary core code.
Eric Kow <[email protected]>**20090817153443
 Ignore-this: bde1da3a0ed5c42b50f74add71f9a08d
 
 Switch from an anonymous tuple to our own custom type representing summary
 output on a high level.  The type differentiates things that should not be
 combined with each other from from things that should.  For example, hunk
 patches in the summary may combine with addfile patches, but not with
 add-directory patches.
 
 Note that some UI has changed along the way (duplicate directories no longer
 have a bang by their A/R symbol), not to mention other things which may have
 accidentally changed like the sorting order of primitive patches.
] hunk ./src/Darcs/Patch/Viewing.hs 146
   | otherwise = z : (strReplace x y zs)
 -- end yuck duplicated code.
 
+-- | High-level representation of a piece of patch summary
+data SummChunk = SummAddDir  FileName
+               | SummRmDir   FileName
+               | SummFile    SummOp FileName Int Int Int
+               | SummNone
+  deriving (Ord, Eq)
+
+data SummOp = SummAdd | SummRm | SummMod deriving (Ord, Eq)
+
 gen_summary :: Bool -> [IsConflictedPrim] -> Doc
 gen_summary use_xml p
     = vcat themoves
hunk ./src/Darcs/Patch/Viewing.hs 160
    $$ vcat themods
     where themods = map summ $ combine $ sort $ concatMap s2 p
-          s2 :: IsConflictedPrim -> [(FileName, Int, Int, Int, Bool, ConflictState)]
-          s2 (IsC c x) = map (append56 c) $ s x
-          s :: Prim C(x y) -> [(FileName, Int, Int, Int, Bool)]
-          s (FP f (Hunk _ o n)) = [(f, length o, length n, 0, False)]
-          s (FP f (Binary _ _)) = [(f, 0, 0, 0, False)]
-          s (FP f AddFile) = [(f, -1, 0, 0, False)]
-          s (FP f RmFile) = [(f, 0, -1, 0, False)]
-          s (FP f (TokReplace _ _ _)) = [(f, 0, 0, 1, False)]
-          s (DP d AddDir) = [(d, -1, 0, 0, True)]
-          s (DP d RmDir) = [(d, 0, -1, 0, True)]
+          s2 :: IsConflictedPrim -> [(SummChunk, ConflictState)]
+          s2 (IsC c x) = map (\y -> (y, c)) $ s x
+          s :: Prim C(x y) -> [SummChunk]
+          s (FP f (Hunk _ o n)) = [SummFile SummMod f (length o) (length n) 0]
+          s (FP f (Binary _ _)) = [SummNone]
+          s (FP f AddFile) = [SummFile SummAdd f 0 0 0]
+          s (FP f RmFile) = [SummFile SummRm f 0 0 0]
+          s (FP f (TokReplace _ _ _)) = [SummFile SummMod f 0 0 1]
+          s (DP d AddDir) = [SummAddDir d]
+          s (DP d RmDir) = [SummRmDir d]
           s (Split xs) = concat $ mapFL s xs
hunk ./src/Darcs/Patch/Viewing.hs 171
-          s (Move _ _) = [(fp2fn "", 0, 0, 0, False)]
-          s (ChangePref _ _ _) = [(fp2fn "", 0, 0, 0, False)]
-          s Identity = [(fp2fn "", 0, 0, 0, False)]
-          append56 f (a,b,c,d,e) = (a,b,c,d,e,f)
-          (-1) .+ _ = -1
-          _ .+ (-1) = -1
-          a .+ b = a + b
-          combine ((f,a,b,r,isd,c):(f',a',b',r',_,c'):ss)
-              -- Don't combine AddFile and RmFile: (maybe an old revision of) darcs
-              -- allows a single patch to add and remove the same file, see issue 185
-              | f == f' && (a /= -1 || b' /= -1) && (a' /= -1 || b /= -1) =
-                  combine ((f,a.+a',b.+b',r+r',isd,combineConflitStates c c'):ss)
-          combine ((f,a,b,r,isd,c):ss) = (f,a,b,r,isd,c) : combine ss
+          s (Move _ _) = [SummNone]
+          s (ChangePref _ _ _) = [SummNone]
+          s Identity = [SummNone]
+          combine (s1@(SummFile o1 f1 r1 a1 x1, c1):s2@(SummFile o2 f2 r2 a2 x2 , c2):ss)
+              | f1 == f2 =
+                 case combineOp o1 o2 of
+                   Nothing -> s1 : combine (s2:ss)
+                   Just o3 -> combine ((SummFile o3 f1 (r1+r2) (a1+a2) (x1+x2), combineConflitStates c1 c2) : ss)
+          combine (x:ss) = x  : combine ss
           combine [] = []
           combineConflitStates Conflicted _ = Conflicted
           combineConflitStates _ Conflicted = Conflicted
hunk ./src/Darcs/Patch/Viewing.hs 186
           combineConflitStates Duplicated _ = Duplicated
           combineConflitStates _ Duplicated = Duplicated
           combineConflitStates Okay Okay = Okay
+          -- Don't combine AddFile and RmFile: (maybe an old revision of) darcs
+          -- allows a single patch to add and remove the same file, see issue 185
+          combineOp SummAdd SummRm  = Nothing
+          combineOp SummRm  SummAdd = Nothing
+          combineOp SummAdd _ = Just SummAdd
+          combineOp _ SummAdd = Just SummAdd
+          combineOp SummRm  _ = Just SummRm
+          combineOp _ SummRm  = Just SummRm
+          combineOp SummMod SummMod = Just SummMod
+          summ = if use_xml then summChunkToXML else summChunkToLine
 
hunk ./src/Darcs/Patch/Viewing.hs 197
-          summ (f,_,-1,_,False,Okay)
-              = if use_xml then text "<remove_file>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</remove_file>"
-                           else text "R" <+> text (fn2fp f)
-          summ (f,_,-1,_,False,Conflicted)
-              = if use_xml then text "<remove_file conflict='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</remove_file>"
-                           else text "R!" <+> text (fn2fp f)
-          summ (f,_,-1,_,False,Duplicated)
-              = if use_xml then text "<remove_file duplicate='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</remove_file>"
-                           else text "R" <+> text (fn2fp f) <+> text "(duplicate)"
-          summ (f,-1,_,_,False,Okay)
-              = if use_xml then text "<add_file>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</add_file>"
-                           else text "A" <+> text (fn2fp f)
-          summ (f,-1,_,_,False,Conflicted)
-              = if use_xml then text "<add_file conflict='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</add_file>"
-                           else text "A!" <+> text (fn2fp f)
-          summ (f,-1,_,_,False,Duplicated)
-              = if use_xml then text "<add_file duplicate='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</add_file>"
-                           else text "A" <+> text (fn2fp f) <+> text "(duplicate)"
-          summ (f,0,0,0,False,Okay) | f == fp2fn "" = empty
-          summ (f,0,0,0,False,Conflicted) | f == fp2fn ""
-              = if use_xml then empty -- don't know what to do here...
-                           else text "!" <+> text (fn2fp f)
-          summ (f,0,0,0,False,Duplicated) | f == fp2fn ""
-              = if use_xml then empty -- don't know what to do here...
-                           else text (fn2fp f) <+> text "(duplicate)"
-          summ (f,a,b,r,False,Okay)
-              = if use_xml then text "<modify_file>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                                    <> xrm a <> xad b <> xrp r
-                             $$ text "</modify_file>"
-                           else text "M" <+> text (fn2fp f)
-                                         <+> rm a <+> ad b <+> rp r
-          summ (f,a,b,r,False,Conflicted)
-              = if use_xml then text "<modify_file conflict='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                                    <> xrm a <> xad b <> xrp r
-                             $$ text "</modify_file>"
-                           else text "M!" <+> text (fn2fp f)
-                                    <+> rm a <+> ad b <+> rp r
-          summ (f,a,b,r,False,Duplicated)
-              = if use_xml then text "<modify_file duplicate='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                                    <> xrm a <> xad b <> xrp r
-                             $$ text "</modify_file>"
-                           else text "M" <+> text (fn2fp f)
-                                    <+> rm a <+> ad b <+> rp r <+> text "(duplicate)"
-          summ (f,_,-1,_,True,Okay)
-              = if use_xml then text "<remove_directory>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</remove_directory>"
-                           else text "R" <+> text (fn2fp f) <> text "/"
-          summ (f,_,-1,_,True,Conflicted)
-              = if use_xml then text "<remove_directory conflict='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</remove_directory>"
-                           else text "R!" <+> text (fn2fp f) <> text "/"
-          summ (f,_,-1,_,True,Duplicated)
-              = if use_xml then text "<remove_directory duplicate='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</remove_directory>"
-                           else text "R" <+> text (fn2fp f) <> text "/ (duplicate)"
-          summ (f,-1,_,_,True,Okay)
-              = if use_xml then text "<add_directory>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</add_directory>"
-                           else text "A" <+> text (fn2fp f) <> text "/"
-          summ (f,-1,_,_,True,Conflicted)
-              = if use_xml then text "<add_directory conflict='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</add_directory>"
-                           else text "A!" <+> text (fn2fp f) <> text "/"
-          summ (f,-1,_,_,True,Duplicated)
-              = if use_xml then text "<add_directory duplicate='true'>"
-                             $$ escapeXML (drop_dotslash $ fn2fp f)
-                             $$ text "</add_directory>"
-                           else text "A!" <+> text (fn2fp f) <> text "/ (duplicate)"
-          summ _ = empty
-          ad 0 = empty
-          ad a = plus <> text (show a)
-          xad 0 = empty
-          xad a = text "<added_lines num='" <> text (show a) <> text "'/>"
-          rm 0 = empty
-          rm a = minus <> text (show a)
-          xrm 0 = empty
-          xrm a = text "<removed_lines num='" <> text (show a) <> text "'/>"
-          rp 0 = empty
-          rp a = text "r" <> text (show a)
-          xrp 0 = empty
-          xrp a = text "<replaced_tokens num='" <> text (show a) <> text "'/>"
-          drop_dotslash ('.':'/':str) = drop_dotslash str
-          drop_dotslash str = str
           themoves :: [Doc]
           themoves = map showmoves p
           showmoves :: IsConflictedPrim -> Doc
hunk ./src/Darcs/Patch/Viewing.hs 209
                   <> text " -> " <> text (fn2fp b)
           showmoves _ = empty
 
+summChunkToXML :: (SummChunk, ConflictState) -> Doc
+summChunkToXML (chunk,c) =
+ case chunk of
+   SummRmDir f   -> xconf c "remove_directory" (xfn f)
+   SummAddDir f  -> xconf c "add_directory" (xfn f)
+   SummFile SummRm  f _ _ _ -> xconf c "remove_file"      (xfn f)
+   SummFile SummAdd f _ _ _ -> xconf c "add_file"      (xfn f)
+   SummFile SummMod f r a x -> xconf c "modify_file" $ xfn f <> xrm r <> xad a <> xrp x
+   SummNone      -> empty
+ where
+   xconf Okay t x       = text ('<':t++">") $$ x $$ text ("</"++t++">")
+   xconf Conflicted t x = text ('<':t++" conflict='true'>") $$ x $$ text ("</"++t++">")
+   xconf Duplicated t x = text ('<':t++" duplicate='true'>") $$ x $$ text ("</"++t++">")
+   xfn f = escapeXML (drop_dotslash $ fn2fp f)
+   --
+   xad 0 = empty
+   xad a = text "<added_lines num='" <> text (show a) <> text "'/>"
+   xrm 0 = empty
+   xrm a = text "<removed_lines num='" <> text (show a) <> text "'/>"
+   xrp 0 = empty
+   xrp a = text "<replaced_tokens num='" <> text (show a) <> text "'/>"
+
+summChunkToLine :: (SummChunk, ConflictState) -> Doc
+summChunkToLine (chunk, c) =
+  case chunk of
+   SummRmDir f   -> lconf c "R" $ text (fn2fp f) <> text "/"
+   SummAddDir f  -> lconf c "A" $ text (fn2fp f) <> text "/"
+   SummFile SummRm  f _ _ _ -> lconf c "R" $ text (fn2fp f)
+   SummFile SummAdd f _ _ _ -> lconf c "A" $ text (fn2fp f)
+   SummFile SummMod f r a x -> lconf c "M" $ text (fn2fp f) <+> rm r <+> ad a <+> rp x
+   SummNone -> lconf c ""  empty
+  where
+   lconf Okay       t x = text t <+> x
+   lconf Conflicted t x = text (t ++ "!") <+> x
+   lconf Conflicted t x = text t <+> x <+> text "duplicate"
+   --
+   ad 0 = empty
+   ad a = plus <> text (show a)
+   rm 0 = empty
+   rm a = minus <> text (show a)
+   rp 0 = empty
+   rp a = text "r" <> text (show a)
+
+drop_dotslash :: FilePath -> FilePath
+drop_dotslash ('.':'/':str) = drop_dotslash str
+drop_dotslash str = str
+
 instance (Conflict p, ShowPatch p) => ShowPatch (Named p) where
     showPatch (NamedP n [] p) = showPatchInfo n <> showPatch p
     showPatch (NamedP n d p) = showNamedPrefix n d <+> showPatch p
[Camel-case some Darcs.Patch.Viewing functions.
Eric Kow <[email protected]>**20090817153751
 Ignore-this: b3b03f3408f1097e5b476a35215ecec6
] replace ./src/Darcs/Patch/Viewing.hs [A-Za-z_0-9] drop_dotslash dropDotSlash
replace ./src/Darcs/Patch/Viewing.hs [A-Za-z_0-9] gen_summary genSummary

Context:

[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:
f6b1f0c66d9e23a9c28f5763683e7c9ef6cdbcd3
_______________________________________________
darcs-users mailing list
[email protected]
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to