[darcs-users] darcs patch: Refactor changes --summary core code. (and 1 more)
Reinier Lamers
tux_rocker at reinier.de
Tue Aug 18 21:03:16 UTC 2009
Hi Eric and others,
Here's a review. It have not actually tested that this code produces the
correct output, just checked that the code is readable and that its general
approach is sound. There are a few questions but no big problems. If you'd
like to push without renaming 'summarize', go ahead (or ask me to do it :-)).
May I ask why you decided to refactor this code, and not refactor other
code, or fix something from the bug tracker?
Reinier
PS: I have disabled line wrapping to not screw up the code formatting. If
this annoys anybody, please tell me so, and I'll never do it again.
> [Refactor changes --summary core code.
> Eric Kow <kowey at darcs.net>**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.
> ] hunk ./src/Darcs/Patch/Viewing.hs 146
> +-- | High-level representation of a piece of patch summary
> +data SummChunk = SummChunk FileName SummDetail ConflictState
> + deriving (Ord, Eq)
> +
> +data SummDetail = SummAddDir
> + | SummRmDir
> + | SummFile SummOp Int Int Int
> + | SummNone
> + deriving (Ord, Eq)
> +
> +data SummOp = SummAdd | SummRm | SummMod deriving (Ord, Eq)
This still allows for combination of things that don't belong together
AFAICS. Those integers only make sense with hunk patches, not with add or
remove. Why not pull them into the SummOp type? Like:
data SummDetail = SummAddDir
| SummRmDir
| SummFile SummOp
| SummNone
data SummOp = SummAdd | SummRm | SummMod Int Int Int
> hunk ./src/Darcs/Patch/Viewing.hs 163
> - 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]
> + s2 (IsC c x) = map (\(f,d) -> SummChunk f d c) $ s x
> + s :: Prim C(x y) -> [(FileName,SummDetail)]
> + s (FP f (Hunk _ o n)) = [(f,SummFile SummMod (length o) (length n) 0)]
> + s (FP f (Binary _ _)) = [(f,SummNone)]
> + s (FP f AddFile) = [(f,SummFile SummAdd 0 0 0)]
> + s (FP f RmFile) = [(f,SummFile SummRm 0 0 0)]
> + s (FP f (TokReplace _ _ _)) = [(f,SummFile SummMod 0 0 1)]
> + s (DP d AddDir) = [(d,SummAddDir)]
> + s (DP d RmDir) = [(d,SummRmDir)]
I liked yesterday's version of this paragraph better. Those tuples distract
a bit from what the code really does. Those filenames are just being passed
on, they get a bit much of attention now. But I'm getting philosophical
here, there's nothing really *wrong* about coding it this way.
> hunk ./src/Darcs/Patch/Viewing.hs 174
> - 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 _ _) = [(fp2fn "",SummNone)]
> + s (ChangePref _ _ _) = [(fp2fn "",SummNone)]
> + s Identity = [(fp2fn "",SummNone)]
> + combine (x1@(SummChunk f1 d1 c1) : x2@(SummChunk f2 d2 c2) : ss)
> + | f1 == f2 = case combineDetail d1 d2 of
> + Nothing -> x1 : combine (x2:ss)
> + Just d3 -> combine $ SummChunk f1 d3 (combineConflitStates c1 c2) : ss
> + combine (x:ss) = x : combine ss
> combine [] = []
There's some untangling going on here, good thing. Though this one also
forms a challenge to someone from the
explicit-recursion-is-the-goto-of-functional-programming sect: how does one
rewrite this in a clearer way without using explicit recursion? I don't see
it with my tired head.
> hunk ./src/Darcs/Patch/Viewing.hs 183
> + --
> + combineDetail (SummFile o1 r1 a1 x1) (SummFile o2 r2 a2 x2) =
> + do o3 <- combineOp o1 o2
> + return $ SummFile o3 (r1 + r2) (a1 + a2) (x1 + x2)
> + combineDetail _ _ = Nothing
> + --
What are those comment signs for? And where do you handle the case where one
of the counts of added or removed lines is -1?
> hunk ./src/Darcs/Patch/Viewing.hs 194
> 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
Looks fine.
> hunk ./src/Darcs/Patch/Viewing.hs 205
> - 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
The duplication of the conditional makes this look like some seriously good
riddance.
> hunk ./src/Darcs/Patch/Viewing.hs 217
> +summChunkToXML :: SummChunk -> Doc
> +summChunkToXML (SummChunk f chunk c) =
> + case chunk of
> + SummRmDir -> xconf c "remove_directory" (xfn f)
> + SummAddDir -> xconf c "add_directory" (xfn f)
> + SummFile SummRm _ _ _ -> xconf c "remove_file" (xfn f)
> + SummFile SummAdd _ _ _ -> xconf c "add_file" (xfn f)
> + SummFile SummMod 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 = escapeXML . drop_dotslash .fn2fp
> + --
> + 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 -> Doc
> +summChunkToLine (SummChunk f chunk c) =
> + case chunk of
> + SummRmDir -> lconf c "R" $ text (fn2fp f) <> text "/"
> + SummAddDir -> lconf c "A" $ text (fn2fp f) <> text "/"
> + SummFile SummRm _ _ _ -> lconf c "R" $ text (fn2fp f)
> + SummFile SummAdd _ _ _ -> lconf c "A" $ text (fn2fp f)
> + SummFile SummMod r a x -> lconf c "M" $ text (fn2fp f) <+> rm r <+> ad a <+> rp x
> + SummNone -> case c of
> + Okay -> empty
> + _ -> lconf c "" empty
> + where
> + lconf Okay t x = text t <+> x
> + lconf Conflicted t x = text (t ++ "!") <+> x
> + lconf Duplicated 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
And this code looks like it's indeed an improved over the old stuff.
> [Resolve issue183: Do not sort changes --summary output.
> Eric Kow <kowey at darcs.net>**20090817225814
> Ignore-this: 2749e08a69592f49bb7e2400ae89e8a6
> This adds move patches to our high-level representation of summary output.
> ] hunk ./src/Darcs/Patch/Viewing.hs 153
> data SummDetail = SummAddDir
> | SummRmDir
> | SummFile SummOp Int Int Int
> + | SummMv FileName
> | SummNone
> deriving (Ord, Eq)
Fine.
hunk ./src/Darcs/Patch/Viewing.hs 161
> gen_summary :: Bool -> [IsConflictedPrim] -> Doc
> gen_summary use_xml p
> - = vcat themoves
> - $$ vcat themods
> - where themods = map summ $ combine $ sort $ concatMap s2 p
> + = vcat themods
> + where themods = map summ $ combine $ concatMap s2 p
As for code quality, nothing wrong. I don't know if there are people out
there who rely on the sortedness of output, if so, this may not be such a
good idea.
hunk ./src/Darcs/Patch/Viewing.hs 174
> - s (Move _ _) = [(fp2fn "",SummNone)]
> + s (Move f1 f2) = [(f1,SummMv f2)]
So we include moves in summary output...
hunk ./src/Darcs/Patch/Viewing.hs 205
> - themoves :: [Doc]
> - themoves = map showmoves p
> - showmoves :: IsConflictedPrim -> Doc
> - showmoves (IsC _ (Move a b))
> - = if use_xml
> - then text "<move from=\""
> - <> escapeXML (drop_dotslash $ fn2fp a) <> text "\" to=\""
> - <> escapeXML (drop_dotslash $ fn2fp b) <> text"\"/>"
> - else text " " <> text (fn2fp a)
> - <> text " -> " <> text (fn2fp b)
> - showmoves _ = empty
There goes a special function to show a bunch of moves at once...
> hunk ./src/Darcs/Patch/Viewing.hs 63
> -summarize = gen_summary False . conflictedEffect
> +summarize = vcat . map summChunkToLine . gen_summary . conflictedEffect
Looks good, let's see how the new gen_summary looks...
hunk ./src/Darcs/Patch/Viewing.hs 131
> xml_summary :: (Effect p, Patchy p, Conflict p) => Named p C(x y) -> Doc
> xml_summary p = text "<summary>"
> - $$ gen_summary True (conflictedEffect $ patchcontents p)
> + $$ (vcat . map summChunkToXML . gen_summary . conflictedEffect . patchcontents $ p)
> $$ text "</summary>"
So xml_summary is the xml variant of summarize? Why not rename summarize to
plain_summary or plaintext_summary or line_summary if we're going for the
ultimate in stylized code?
hunk ./src/Darcs/Patch/Viewing.hs 159
> -gen_summary :: Bool -> [IsConflictedPrim] -> Doc
> -gen_summary use_xml p
> - = vcat themods
> - where themods = map summ $ combine $ concatMap s2 p
> - s2 :: IsConflictedPrim -> [SummChunk]
> +gen_summary :: [IsConflictedPrim] -> [SummChunk]
> +gen_summary p
> + = combine $ concatMap s2 p
> + where s2 :: IsConflictedPrim -> [SummChunk]
This removes the conversion from SummChunk to text.
The introduction of this abstract data type for chunks is working well here
for readability: so we have gen_summary to give us a summary datatype (and
the implication is that you can easily display that in a format of choice).
Much better than the old Doc return type.
hunk ./src/Darcs/Patch/Viewing.hs 202
> - summ = if use_xml then summChunkToXML else summChunkToLine
This can go away as this function no longer generates either XML or
plaintext, but just a [SummChunk].
summChunkToXML :: SummChunk -> Doc
summChunkToXML (SummChunk f chunk c) =
[Camel-case some Darcs.Patch.Viewing functions.
Eric Kow <kowey at darcs.net>**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 <trentbuck at gmail.com>**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 <tux_rocker at reinier.de>**20090809163015
Ignore-this: 30952fddf0ae0f60b3af442e90411ca7
]
[Remove optimize --checkpoint cruft.
Eric Kow <kowey at darcs.net>**20090811143734
Ignore-this: c36c818704171289ff388cdd539626d5
]
[darcs.cabal turn on -fwarn-tabs per dupree
gwern0 at gmail.com**20090807013047
Ignore-this: c7961b5512d2f8392f3484c81ca197e0
]
[Add script that tricks cabal into installing our build-depends only.
Petr Rockai <me at mornfall.net>**20090805152653
Ignore-this: 6a70f5ff464d26a944b81967606e7af0
]
[Avoid unescaped hyphens and backslashes in manpage.
Trent W. Buck <trentbuck at gmail.com>**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 <trentbuck at gmail.com>**20090803042007
Ignore-this: fcbe6f2cbcb3743872b0431b11dea10c
Thanks to http://lintian.debian.org/tags/spelling-error-in-binary.html.
]
[Update hpc.README to use Cabal.
Petr Rockai <me at mornfall.net>**20090730190304
Ignore-this: 7f63751a7daa418ffdca2ca6d20af1b1
]
[Add a flag for enabling HPC for the darcs library.
Petr Rockai <me at mornfall.net>**20090730185959
Ignore-this: e0246133e84e8547e223f61b67a28066
]
[Combine the HPC tix files after each test in ShellHarness.
Petr Rockai <me at mornfall.net>**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 <me at mornfall.net>**20090722091325
Ignore-this: 348c1fd005fe19900e4a9706567b4ee0
]
[Fix link to autoconf tarball.
Eric Kow <kowey at darcs.net>**20090723135420
Ignore-this: cfe87256fbd5af286a00fbb84ca443d0
]
[Update web page for 2.3.0 release.
Eric Kow <kowey at darcs.net>**20090723134705
Ignore-this: dfa04b99e5c0170448d635bf0e496a66
]
[Resolve conflict between autoconf removal and version number updates.
Eric Kow <kowey at darcs.net>**20090723133543
Ignore-this: efcf724bf0230243cee1e88502428ccd
]
[Makefile: fix dependency on no longer existing distclean target.
Eric Kow <kowey at darcs.net>**20090722093438
Ignore-this: d0f8da797e26b0c42a2da76eddd4ed31
]
[Make utf8-string mandatory.
Eric Kow <kowey at darcs.net>**20090721194433
Ignore-this: cd8a94b3e4e41bb938e82dffbcb27e2d
]
[Remove UTF8 module completely.
Eric Kow <kowey at darcs.net>**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 <me at mornfall.net>**20090720095346
Ignore-this: 133cb02e8cca03a4678068450cb150a9
]
[Remove the --checkpoint option from the UI.
Petr Rockai <me at mornfall.net>**20090720093634
Ignore-this: 2fb627cd1e64bbe264fda6e19f0b085b
]
[Remove the support for writing out new checkpoints.
Petr Rockai <me at mornfall.net>**20090720091809
Ignore-this: 87eb23fe7604ed0abe5c38daafb87a7e
]
[Remove unused determine_release_state.pl.
Eric Kow <kowey at darcs.net>**20090721205227
Ignore-this: 15331bbb258fbdeb6bd4887c8dabb8ed
]
[Remove ununsed test/shell_harness.hs.
Eric Kow <kowey at darcs.net>**20090721192027
Ignore-this: 7efbe97744c698beecd4f17a09868467
]
[Remove autoconf support and cut GNUmakefile to only build manual and tags.
Petr Rockai <me at mornfall.net>**20090717160355
Ignore-this: 8a45c095c566172076adbe6e44b37827
]
[Slightly refactor the run function in ShellHarness.
Petr Rockai <me at mornfall.net>**20090714134205
Ignore-this: 92c7f05b9c4d6973e95706f23ea27dfc
]
[Slightly refactor test machinery in Setup.lhs.
Petr Rockai <me at mornfall.net>**20090714134119
Ignore-this: 32206a331658d407d9c0fb3b48405db6
]
[Use tee in pending_has_conflicts.sh for easier debugging.
Petr Rockai <me at mornfall.net>**20090713180404
Ignore-this: 7b96b7f7df6358ddb0466cfe58803f71
]
[Roll back the getSymbolicLinkStatus workaround, since it constitutes a fd leak.
Petr Rockai <me at mornfall.net>**20090710143149
Ignore-this: cd2aa7e13cc902852a7c5d0855d55538
rolling back:
Sun Jun 21 17:39:42 CEST 2009 Petr Rockai <me at mornfall.net>
* 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 <kowey at darcs.net>**20090716133323
Ignore-this: bbe9c36213a07890816b8599f2f29aee
]
[Remove website automation from Makefile.
Eric Kow <kowey at darcs.net>**20090716133230
Ignore-this: f0cdb9afaa9d314321b345a08e2784bf
]
[Rename index.html.in to index.html, forgoing website automation.
Eric Kow <kowey at darcs.net>**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 <kowey at darcs.net>**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 <tux_rocker at reinier.de>**20090629203409
Ignore-this: 3187d24822e7a125a46e0a273956d792
]
[Teach cabal about new Darcs.Test modules
Reinier Lamers <tux_rocker at reinier.de>**20090629193208
Ignore-this: c27c8398fd637e100259fdf1f4d42e0a
]
[Move unit tests to Darcs.Test module space
Reinier Lamers <tux_rocker at reinier.de>**20090629192934
Ignore-this: e88d9ecb7ca8f0b5679fba2cd2813ff0
]
[Bound size of trees generated in Darcs.Patch.QuickCheck
Reinier Lamers <tux_rocker at reinier.de>**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 <tux_rocker at reinier.de>**20090628134908
Ignore-this: c66a386865832e75427f99febfb91a91
]
[Avoid getSymbolicLinkStatus in mmap implementation, works around GHC 6.8.2 bug.
Petr Rockai <me at mornfall.net>**20090621153942
Ignore-this: 91092453d97c87edfc4e46b11e4ae208
]
[TAG 2.3.0
Petr Rockai <me at mornfall.net>**20090723115125
Ignore-this: e326d4ddff92c578e8fe8a3c23d00193
]
Patch bundle hash:
25663ad28178b79e835288589454e073ae24134d
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.osuosl.org/pipermail/darcs-users/attachments/20090818/f015cb45/attachment-0001.pgp>
More information about the darcs-users
mailing list