darcs repository web UI and hosting app. This is the main darcsden trunk, which also runs hub.darcs.net. (https://hub.darcs.net)
I've started working on this a little already but I thought I should open an issue here for the records and discussion.
With pattern matching the feed should be filtered by the following attributes using checkboxes or something:
- darcsden-instance-wide changes
- user-wide repo changes
- repo-wide changes
- upstream branch changes
- downstream branch changes
- issue changes for the above
When logged-in show the feed on the front page ( http://hub.darcs.net/ ) instead of showing the FAQ. Move the FAQ under a help button next to the settings button.
Because darcs is not history-centric it would be nice for the darcsden feed to work like an interactive camp-view. There are some graphical arrows already with the "merge selected" ui.
Here are some things I'd love to see:
Repo feeds: - patches applied (ie, the changes view) - issues created
Site feeds: - repos created and maybe: - patches applied (all repos) - issues created (all repos)
Discoverability: - for each feed, a feed icon, link, and HTML meta tags in a suitable place (changes page, issues page, front page)
PS also feeds should be efficient to serve.
@sm regarding the feeds' load on the server, my strategy for keeping the feeds efficient is to avoid having the server sort all the patchsets on darcshub on page load hahas.
I just merge one pageful of updates from selected channels and assume that they are already sorted.
Hopefully you won't end up doing a bunch of work that I callously reject. So let me say that I think most/all feeds should be cached as static files.
Focussing on the repo patch feed: I have an old script that generates this, saving it as _darcs/feed.xml or similar; I could dig it up if you need. Then the question is when to run it. It could be done from darcsden, wherever patches are changed (push, merge, obliterate, darcsden-ssh..). Or possibly it could be done at a lower level, by setting --posthook for apply, obliterate etc. in _darcs/prefs/defaults, if libdarcs obeys that. This would have to be arranged for all repos of course.
Initial news feed support: http://hub.darcs.net/pointfree/darcsden-feed-couchdb/patch/4edafd3199acdd5353c3867e812c860e94bd6a50
News feed items are stored in couchdb. News feed items for repo patches are generated by darcsden-post-hook The front page is replaced with the personal news feed when logged in. I'm thinking the current front page could then be moved to /faq or /help
There's still more things to be done and improvements to make, but it's working.
The news feed now does Issues and patches.
NewsItems for patches are timestamped by the date pushed not the date recorded.
It is easy to add new "news item" types.
The different icons are used for the different news item types.
Maybe natural language sentences would look better for describing the events in the news feed.
I think it would be good to have pulled patches collapsed into "x patches pulled from user1/repo into user2/repo" ...That way the news feed won't be spammed every time someone forks a repo. Perhaps patches with the same hash across repos should use the same couchdb document, updating the list of that NewsItem's subscribers upon a push or a pull. The NewsItem's EventOrigin field can be checked against the current repo, and if it differs, then these patches were pulled from another repo. This system could also be of use for Issue cross referencing, perhaps.
If a repo is made private, news items pertaining to that repo should be hidden from all but that repo's members. The same thing should be done for Issue emails, btw.
NewsItems are now sorted in descending order.
Pagination can be done with couchdb "limit" if it's a performance issue to have it done in Haskell.
A lot of darcsden functionality could just be folded into the NewsItems feed if various filters (couchdb views) are available. For instance, to list a user's repos filter by "repo init for user1" ...what I'm saying is, a lot of code could be deleted and result in more flexibility and maintainability. But... this would require an update script of sorts. I should look into this newfangled CouchDB Mango.
A script to will be need to retroactively generate the feeds for existing patches, issues, etc. on darcshub. I think patches can be done by their record date for the purposes of this script.
Note to self: In the NewsItem documents, a repository should be identified by repo id, not by name because repositories can be renamed.
Question: How does darcs know when a repository is compatible with another repository and can therefore be pushed to or pulled from?
Now that the front page documentation has been moved to /faq, and replaced with a user news feed when logged in, where should the link to the faq go? Should there be a new button at the top or a link in the footer?
Another thought is that the front page could be replaced with a site-wide feed of public activity when logged out.