Created on 2019-09-24.19:05:35 by ganesh, last changed 2019-09-26.22:24:52 by bfrk.
File name |
Status |
Uploaded |
Type |
Edit |
Remove |
bugfix-for-_remove-instances-of-annotate-for-repo-patches_.dpatch
|
|
ganesh,
2019-09-25.22:37:51
|
application/x-darcs-patch |
|
|
bugfix-for-_remove-instances-of-annotate-for-repo-patches_.dpatch
|
|
ganesh,
2019-09-26.17:25:29
|
application/x-darcs-patch |
|
|
patch-preview.txt
|
|
ganesh,
2019-09-24.19:05:34
|
text/x-darcs-patch |
|
|
patch-preview.txt
|
|
ganesh,
2019-09-24.20:44:37
|
text/x-darcs-patch |
|
|
patch-preview.txt
|
|
ganesh,
2019-09-25.22:37:51
|
text/x-darcs-patch |
|
|
patch-preview.txt
|
|
ganesh,
2019-09-26.17:25:29
|
text/x-darcs-patch |
|
|
patch-preview.txt
|
|
bfrk,
2019-09-26.21:29:20
|
text/x-darcs-patch |
|
|
remove-instances-of-annotate-for-repo-patches.dpatch
|
|
ganesh,
2019-09-24.20:44:37
|
application/x-darcs-patch |
|
|
remove-redundant-import-in-d_p_annotate.dpatch
|
|
bfrk,
2019-09-26.21:29:20
|
application/x-darcs-patch |
|
|
unnamed
|
|
ganesh,
2019-09-24.19:05:34
|
text/plain |
|
|
unnamed
|
|
ganesh,
2019-09-24.20:44:37
|
text/plain |
|
|
unnamed
|
|
ganesh,
2019-09-25.22:37:51
|
text/plain |
|
|
unnamed
|
|
ganesh,
2019-09-26.17:25:29
|
text/plain |
|
|
unnamed
|
|
bfrk,
2019-09-26.21:29:20
|
text/plain |
|
|
wip_-remove-instances-of-annotate-repopatch.dpatch
|
dead |
ganesh,
2019-09-24.19:05:34
|
application/x-darcs-patch |
|
|
See mailing list archives
for discussion on individual patches.
msg21573 (view) |
Author: ganesh |
Date: 2019-09-24.19:05:34 |
|
This is an idea that came out of reviewing patch1913,
specifically
"annotate: push inversion down to the prim level"
The type names could be improved - I originally came up
with AnnotateRP thinking of MatchableRP, but they don't
actually have the same structure.
1 patch for repository darcs-unstable@darcs.net:screened:
patch b6bfea77cac3089829da695b8ebc182e5386965f
Author: Ganesh Sittampalam <ganesh@earth.li>
Date: Tue Sep 24 19:21:14 BST 2019
* WIP: remove instances of Annotate RepoPatch
Attachments
|
msg21577 (view) |
Author: bfrk |
Date: 2019-09-24.20:22:30 |
|
Nice!
> The type names could be improved - I originally came up
> with AnnotateRP thinking of MatchableRP, but they don't
> actually have the same structure.
Yeah, it's not perfectly consistent. But AnnotateRP is concise and
pretty much conveys the idea. We can rename it when we have a better idea.
BTW, you could use AnnotateRP to shorten the constraint for annotateRP :-)
|
msg21579 (view) |
Author: ganesh |
Date: 2019-09-24.20:44:37 |
|
Final version for screened.
It look me a little while to realise how I'd managed
to not use AnnotateRP for annotateRP :-) (it originated from
the default in the Annotate class)
1 patch for repository darcs-unstable@darcs.net:screened:
patch c4872621a4b2e17df32c5a6903088a1867f32b44
Author: Ganesh Sittampalam <ganesh@earth.li>
Date: Tue Sep 24 21:42:29 BST 2019
* remove instances of Annotate for repo patches
They are all expected to use the default anyway, so
it's better to just encode that directly.
Attachments
|
msg21581 (view) |
Author: bfrk |
Date: 2019-09-25.09:07:39 |
|
This is much better than the default methods and RepoPatch instances
we had before which I really didn't like but saw no way to avoid.
|
msg21601 (view) |
Author: ganesh |
Date: 2019-09-25.20:29:16 |
|
Turns out this breaks the annotate tests. I didn't run them because
I thought it was clearly safe :-)
|
msg21602 (view) |
Author: ganesh |
Date: 2019-09-25.22:37:51 |
|
I've found the bug after some head-scratching. I should have
been more suspicious about why I could remove the instances
for Named/PatchInfoAnd.
But I want to think a bit more about the right fix, as it
was quite subtle. This quick fix demonstrated what the
problem was, but I am more inclined to promote AnnotateRP
to be a typeclass instead, to avoid any future surprises
like it.
Apologies if the breakage in screened is causing any
trouble.
1 patch for repository darcs-unstable@darcs.net:screened:
patch 540b726979f01607d7f97df89f69a1c09ede385b
Author: Ganesh Sittampalam <ganesh@earth.li>
Date: Wed Sep 25 23:36:48 BST 2019
* Bugfix for "remove instances of Annotate for repo patches"
We were inadvertently calling annotateRP on PatchInfoAnd,
and omitting the reverseFL that was previously called in
instance Annotate Named.
Attachments
|
msg21607 (view) |
Author: bfrk |
Date: 2019-09-26.12:33:40 |
|
> I've found the bug after some head-scratching. I should have
> been more suspicious about why I could remove the instances
> for Named/PatchInfoAnd.
I was briefly wondering about that one but didn't investigate. And then
I didn't run the tests either. So I completely failed as reviewer.
We should automate running the tests when we push to reviewed! That will
slow it down considerably but perhaps for reviewed this is okay?
|
msg21610 (view) |
Author: ganesh |
Date: 2019-09-26.12:55:57 |
|
> We should automate running the tests when we push to reviewed! That will
> slow it down considerably but perhaps for reviewed this is okay?
I always run the tests before pushing to reviewed, that's why the
accepted-pending-tests status exists - it means I (or anyone else) can
decouple reading/understanding the code from actually running the tests.
I guess ideally we'd have some kind of CI setup but then we'd have to
maintain it. Nowadays for me running the tests is a single command-line
invocation anyway (cabal v2-run test:darcs-test -- -j8) so a script
wouldn't really add anything.
|
msg21612 (view) |
Author: ganesh |
Date: 2019-09-26.14:04:29 |
|
So the fundamental problem here is that what is actually
going on in Annotate seems a bit complicated.
Going back to before my patch, a "correct" Annotate instance on a
prim would act "forwards" on the annotate state, in the sense that
something like annotate (Hunk old new) takes an annotate state
with old in it and replaces it with new. But then Annotate on a
RepoPatch inverts the effect, so it operates backwards on the annotate
state, which is actually how annotate is supposed to work in the end.
And there's a reverseFL in the Named instance which is also
important in conjunction with a later mapRL call (and is what I'd lost).
Clearly my refactoring doesn't look so clever now given that it
silently caused a breakage, so one sensible option would be to
simply roll it back completely.
Another option would be to push forward and try to simplify
annotatePIAP that I introduced to replace the old PatchInfoAnd/Named
instances:
annotatePIAP =
sequence_ . mapRL annotateRP . reverseFL . patchcontents . hopefully
If you inlined the annotateRP definition and the Annotate RL instance,
you get:
sequence_ .
mapRL (sequence_ . mapRL annotate . invertFL . effect) . reverseFL .
patchcontents . hopefully
after a fair amount of experimenting and informal equational reasoning,
I simplified that to:
sequence_ .
mapFL annotate . invert . effect .
patchcontents . hopefully
at least if we don't care about the treatment of conflicts (because
they can have multiple prim patches in the effect of a single repo
patch).
That final version does pass the two tests with 'annotate' in the name
and seems a lot simpler than any of the logic we had before (once
disentangled), so I'm inclined to go with it if it passes all the tests.
But comments welcome.
Longer-term annotate seems like a good use case for more witnesses and/or
an indexed monad.
|
msg21615 (view) |
Author: ganesh |
Date: 2019-09-26.17:25:29 |
|
The annotatePIAP refactor does pass all the tests. Let me
know what you think.
In an ideal world I would write some tests for annotating
conflicts and see if we've regressed (or vice-versa) but I'm
not too keen on spending the effort right now.
2 patches for repository darcs-unstable@darcs.net:screened:
patch 540b726979f01607d7f97df89f69a1c09ede385b
Author: Ganesh Sittampalam <ganesh@earth.li>
Date: Wed Sep 25 23:36:48 BST 2019
* Bugfix for "remove instances of Annotate for repo patches"
We were inadvertently calling annotateRP on PatchInfoAnd,
and omitting the reverseFL that was previously called in
instance Annotate Named.
patch 4d368fbb25a148c5cab6d8a19b63629be28cac8f
Author: Ganesh Sittampalam <ganesh@earth.li>
Date: Thu Sep 26 16:40:52 BST 2019
* inline annotateRP and instance Annotate RL and simplify
The new definition should be equivalent on unconflicted
patches. For conflicts it may not be identical but this
is probably not a well-supported case anyway and we don't
have any tests to specify the expected behaviour.
Attachments
|
msg21616 (view) |
Author: bfrk |
Date: 2019-09-26.17:30:50 |
|
>> We should automate running the tests when we push to reviewed! That will
>> slow it down considerably but perhaps for reviewed this is okay?
>
> I always run the tests before pushing to reviewed, that's why the
> accepted-pending-tests status exists - it means I (or anyone else) can
> decouple reading/understanding the code from actually running the tests.
I understand and this is how I do it, too.
> I guess ideally we'd have some kind of CI setup but then we'd have to
> maintain it. Nowadays for me running the tests is a single command-line
> invocation anyway (cabal v2-run test:darcs-test -- -j8) so a script
> wouldn't really add anything.
I meant on the server as an apply posthook, so we reject applying it in
case someone (like me) one day forgets to run them or gets confused and
thinks they ran them when in fact they didn't. But this means the push
will hang for several minutes while the tests are running.
|
msg21617 (view) |
Author: ganesh |
Date: 2019-09-26.17:33:29 |
|
> I meant on the server as an apply posthook, so we reject applying it in
> case someone (like me) one day forgets to run them or gets confused and
> thinks they ran them when in fact they didn't. But this means the push
> will hang for several minutes while the tests are running.
My feeling is that it'd be more pain than it's worth, particularly as
I've seen at least one test (issue1465_ortryrunning) fail occasionally
even on Linux. But I don't mind if you want to give it a go.
|
msg21621 (view) |
Author: bfrk |
Date: 2019-09-26.18:22:58 |
|
Looks good to me.
|
msg21622 (view) |
Author: bfrk |
Date: 2019-09-26.18:39:40 |
|
> So the fundamental problem here is that what is actually
> going on in Annotate seems a bit complicated.
You name it.
> Going back to before my patch, a "correct" Annotate instance on a
> prim would act "forwards" on the annotate state, in the sense that
> something like annotate (Hunk old new) takes an annotate state
> with old in it and replaces it with new. But then Annotate on a
> RepoPatch inverts the effect, so it operates backwards on the annotate
> state, which is actually how annotate is supposed to work in the end.
> And there's a reverseFL in the Named instance which is also
> important in conjunction with a later mapRL call (and is what I'd lost).
This became worse due to my patch that pushes the inversion down to the
prim level. Before that we inverted the whole sequence of PatchInfoAnds
inside the command implementation and everything inside D.P.Annotate
worked in "forward mode". (Not too obvious either I guess.)
> Clearly my refactoring doesn't look so clever now given that it
> silently caused a breakage, so one sensible option would be to
> simply roll it back completely.
I don't like this option. Splitting things into separate implementations
for the various patch types in our "stack" only obscures what is going on.
> That final version does pass the two tests with 'annotate' in the name
> and seems a lot simpler than any of the logic we had before (once
> disentangled), so I'm inclined to go with it if it passes all the tests.
I agree and have accepted your fix and the simplification.
> Longer-term annotate seems like a good use case for more witnesses and/or
> an indexed monad.
Yes. This applies (no pun intended) to all stateful operations we do
with patches (apply, applyToPaths, annotate). They all suffer from the
rather uninformative type of the monadic operation that changes the
state. States should be indexed with a witness, but how to make that
work with monadically updating the state is an open problem. Perhaps for
things like annotate we can get away with passing the state explicitly
instead of using a state monad.
|
msg21623 (view) |
Author: bfrk |
Date: 2019-09-26.21:29:20 |
|
Trivial follow-up, will self-accept.
1 patch for repository http://darcs.net/screened:
patch 90c63ed246b70c8adb7b0042af061d283c34e982
Author: Ben Franksen <ben.franksen@online.de>
Date: Thu Sep 26 23:32:51 CEST 2019
* remove redundant import in D.P.Annotate
Attachments
|
msg21624 (view) |
Author: ganesh |
Date: 2019-09-26.21:31:45 |
|
> * remove redundant import in D.P.Annotate
Thanks, I completely forgot to remove that when I finished experimenting
with the logic.
|
|
Date |
User |
Action |
Args |
2019-09-24 19:05:35 | ganesh | create | |
2019-09-24 19:05:50 | ganesh | set | status: needs-screening -> in-discussion |
2019-09-24 20:22:31 | bfrk | set | messages:
+ msg21577 |
2019-09-24 20:44:31 | ganesh | set | status: in-discussion -> needs-review |
2019-09-24 20:44:37 | ganesh | set | files:
+ patch-preview.txt, remove-instances-of-annotate-for-repo-patches.dpatch, unnamed messages:
+ msg21579 |
2019-09-24 20:45:03 | ganesh | set | title: WIP: remove instances of Annotate RepoPatch -> remove instances of Annotate RepoPatch |
2019-09-25 09:07:39 | bfrk | set | status: needs-review -> accepted-pending-tests messages:
+ msg21581 |
2019-09-25 20:29:16 | ganesh | set | status: accepted-pending-tests -> followup-in-progress messages:
+ msg21601 |
2019-09-25 22:37:51 | ganesh | set | files:
+ patch-preview.txt, bugfix-for-_remove-instances-of-annotate-for-repo-patches_.dpatch, unnamed messages:
+ msg21602 |
2019-09-26 12:33:40 | bfrk | set | messages:
+ msg21607 |
2019-09-26 12:55:57 | ganesh | set | messages:
+ msg21610 |
2019-09-26 14:04:29 | ganesh | set | messages:
+ msg21612 |
2019-09-26 17:25:29 | ganesh | set | files:
+ patch-preview.txt, bugfix-for-_remove-instances-of-annotate-for-repo-patches_.dpatch, unnamed messages:
+ msg21615 |
2019-09-26 17:30:50 | bfrk | set | messages:
+ msg21616 |
2019-09-26 17:33:29 | ganesh | set | messages:
+ msg21617 |
2019-09-26 18:22:58 | bfrk | set | status: followup-in-progress -> accepted-pending-tests messages:
+ msg21621 |
2019-09-26 18:39:40 | bfrk | set | messages:
+ msg21622 |
2019-09-26 21:29:20 | bfrk | set | files:
+ patch-preview.txt, remove-redundant-import-in-d_p_annotate.dpatch, unnamed messages:
+ msg21623 |
2019-09-26 21:31:45 | ganesh | set | messages:
+ msg21624 |
2019-09-26 22:24:52 | bfrk | set | status: accepted-pending-tests -> accepted |
|