Today we accidentally pushed a broken patch. No excuse for it, just
sloppily failed to run all automated checks, and realised we added one
file we didn't mean to, and forgot one we did. Oh well, it's
Sunday :) Locally, we can obliterate in the main repo, and push a new
version from the branch, but we'd pushed to Patch-Tag.
Any chance of a web interface to obliterate patches?
Another idea: you could make it send email announcements to all users
added to the repo. This would be a big win - it'd avoid post-
obliterate conflicts. (Although, obliterating and amend-recording a
patch that someone has pulled is probably always going to be risky.)
WDYT?
Thanks
Ashley
--
http://www.patchspace.co.uk/
http://www.linkedin.com/in/ashleymoran
http://aviewfromafar.net/
http://twitter.com/ashleymoran
> What about just deleting the project from patch-tag, recreating with
> the same name, and push from local? (This already works.)
>
> The only thing you wouldn't have here is the repo members list,
> which you'd have to recreate manually.
>
> If we allowed adding repo members from a list, which we currently
> don't, you could do this in one shot as well.
>
> What do you think of that as an alternative?
Obliterating the enitire repository is one solution, I guess =)
Hmmm... it's a workaround, but it could be risky in a team. If
someone else had pushed another patch without you realising, you'd be
deleting their work. (Likely they'd still have a copy, but they might
not appreciate it.) Also, if in future you start maintaining other
metadata around the project, this would be lost too. I'm more
comfortable doing correction patches.
Web obliterate is not very high priority to me, but I still think it
could be useful.
> As Thomas says, the Darcs documentation strongly discourages that
> you do an obliteration on a shared repository. All the work that
> goes into having to notify people to obliterate it locally is one
> pain.
Well, that was why I thought sending email notifications would be
handy ;)
> And suppose that someone doesn't get the notification to do this and
> pushes some new changes, the patch you just obliterated will show
> its ugly face again.
True, but I would imagine this only being used after a very short
time. IE it's an emergency rescue operation.
There's another valid use for this - continuous integration. Say I
set up two repositories - "project" and "project-unstable". Then I
set up a server to continuously poll the project-unstable repo, and
run all automated tests every time a new patch is detected. If that
patch is successful it could be pushed to the stable project repo,
ready for pulling. If it causes failures I'd love to be able to
obliterate it on the server and have the pushing user notified.
This CI application of obliterate would be a KILLER feature for me, as
I'm completely obsessed with automated testing*, and anything that
helps keep code deployable is a huge win for me.
> Overall I think that the idea of obliteration doesn't fit into the
> use case for a shared repository. Darcs rollback is the only sane
> way to do this. I know your history won't be as neat, but obliterate
> is a tool that is really only practical for a single author to
> single repo relationship -- AND before they share any of these
> changes..
I see your perspective on this. And in general, I agree. However, I
think there's a use for obliterate buried in there somewhere.
> I do like Thomases idea of being able to "revirginize" the
> repository without losing your metadata -- but again, this is in a
> different vein than the original obliterate idea. We really need to
> add some faqs and documentation about best practices :)
Yes, I think this could be useful too.
> Thank you for the feedback and please continue to keep us in the
> loop as you experience issues :)
Don't worry, I'm an opinionated and vociferous user, I hope you can
put up with me =)
Ashley
* it's how I earn my living...
> Have you considered the darcs rollback command?
>
> It's meant for just this kind of situation, i.e. wanting to undo the
> changes in a patch without getting rid of the patch.
I could use this - but I really want to get rid of the patch :) I
actually use darcs obliterate quite a lot locally. I think it's an
under-used command. I have a feeling that beyond the danger of
obliterating a shared patch, there could be a useable implementation
of this feature. With some record of meta-data round patch pulling/
pushing, I think it could become generally safer. Must give this some
though...
> Using obliterate on patches which are already in the wild and on the
> official repository is generally not advisable. The reason is not
> technical but social; darcs will be just fine, but people may be
> confused if you do it.
> <snip>
> I'll bet you can mitigate the confusion by telling everybody else to
> obliterate the same patch (for example, by editing your _darcs/prefs/
> motd file) or take a chance that most people haven't pulled the patch
> yet, and that you don't mind if only a small handful of people are so
> confused. So avoiding the use of obliterate on public patches is
> really just a "best practice" more than anything else.
Hey Eric - you've hit the nail on the head =) And also answered
Matthew and Thomas's concerns. This is exactly what I was thinking
but failed to express - the problem is not obliterate, but the
communication needs around it. But with Patch-Tag, we have something
that could potentially solve this issue, right?
I mean - could Patch-Tag know that a patch was obliterated, and inform
owners of forked repos that a patch has been recalled? I think this
could be a really powerful GitHub-beating social feature: rather than
release a correction patch, release a "recall", implemented with darcs
obliterate.
Not saying that this would be easy - it may require changes to darcs?
(To track obliterated patches perhaps, just brainstorming.) And not
saying it's high priority either. But I think having a hosted darcs
solution might change some of the social mechanics around patch-based
SCM.
WDYAT?
Ashley