darcs hub

is the newest and most actively maintained hosting site for darcs repositories. The site's code is open source, so you can help make it better (or run your own). Here are darcs hub's news, changes and doc changes. Report bugs via #darcs, the issue tracker, or . Enjoy the simplicity of darcs & darcs hub!

[expand all]



What's darcs?

Darcs is a version control system, broadly similar to Git, Mercurial and others, but with a simpler conceptual model that many people find less costly to learn and use. If you don't have a lot of time to spend learning your version control tool, darcs (and darcs hub) may be a good choice.

What's darcs hub?

Darcs hub is a darcs repository hosting site, similar to patch-tag.com and darcsden.com. Announced in 2012 by Simon Michael, this site aims to:

  1. provide a reliable, usable and evolving hosting and collaboration hub for darcs users

  2. accelerate the development of darcs and its ecosystem, eg through an easier contribution process and increased visibility and dogfooding.

Darcs hub is a volunteer effort by Simon and the darcs team, but it's robust enough to host your project and to depend on for daily work. It is backed up nightly, but as with all cloud-based services, it's wise to also keep your own copies of important data. We currently host about 400 user accounts and 800 repos. The project roadmap gives some more overview.

How does it relate to darcsden.com and patch-tag.com?

This site is inspired by two fine projects: Thomas Hartmann's patch-tag.com (currently hosting ~1000 public repos), and Alex Suraci's darcsden.com (currently hosting ~200). I have contributed to both and know them pretty well. Due to their maintainers being busy elsewhere, both sites have reliability problems and neither has been actively maintained or developed for some time. This is unfortunate! I believe the way forward is to maintain this key piece of infrastructure closely alongside darcs itself, and turn the dogfooding knobs up to 11.

Darcs hub runs an updated version of Alex Suraci's darcsden software. The updates before 2012/9/15 excluding UI style tweaks were released as darcsden 1.0 on Hackage. darcsden 1.1 and later include all darcs hub-inspired changes, and can still be used for personal darcsden instances.

Can I rely on this site?

Yes. Currently, the overall stability is that of a usable beta; you can expect a serviceable UI, occasional limitations, decent reliability, and no data loss. Uptime and response time are checked every minute; reports are linked in the footer. The site is hosted and operated by Simon on a backed-up, multi-use Linode VPS. The long-term plan is to have it manageable by the darcs team.

What is the backup policy?

The VPS running hub.darcs.net and other sites is backed up nightly, between 0100 and 0300 GMT-8, by Linode's backup system. This keeps three backup images: the one from last night, the one from last Sunday, and the one from the previous Sunday. In other words, there is always a backup that's one day old, and a backup that's 1-2 weeks old, and that is all. You should also keep your own backup(s) of your repositories. Basically, keep one or more copies of the repo elsewhere and up to date, using darcs get and darcs pull.

What are some interesting repos here?

Hosted: acid-state, Agda, darcsden, divine-mainline, dnplayer, globalscript, happstack, netwire

Mirrored: darcs-reviewed, darcs-screened, darcs-wiki,

Biggest: ghc-old

How can I help?

  • Use hub.darcs.net and provide bug reports and feedback

  • Investigate and clarify open issues

  • Test the setup process by setting up your own instance:

    1. get the latest darcsden
    2. get the required dependencies installed, perhaps disabling unnecessary bits with cabal build flags
    3. Build with cabal build or make
    4. Run as described in the README
    5. Investigate and report problems
  • Contribute code and documentation patches. This is a fun project! It's a web app, so there's quick visual feedback. It's darcs-related, but easier to understand than darcs itself. Developers are online in #darcs, and useful changes will be quickly deployed to this site.

    1. fork hub's darcsden or documentation repos
    2. darcs get a local copy, make changes, push back to your fork. (Or, edit directly via the web.)
    3. Your changes will appear in hub's patch queue and get merged and/or discussed on #darcs.

    See also the project roadmap and planning board.

  • Contribute feature/reliability/performance/installability/api improvements to darcsden's dependencies, especially darcs, highlighting-kate, snap, and hsp.

Pulling and pushing

How do I get a local copy of a repo?

Via HTTP - works for any public repo and requires no authentication. Examples:

darcs get http://hub.darcs.net/OWNER/REPO
darcs get http://hub.darcs.net/simon/darcsden

Or via SSH - works for any public repo, and private repos that you own or are a member of. You'll need to create an account and configure SSH access. Examples:

darcs get [YOU@]hub.darcs.net:[OWNER/]REPO
darcs get hub.darcs.net:simon/darcsden
darcs get hub.darcs.net:myrepo

YOU is your darcs hub username; you can omit it if it's the same as your local username. OWNER/ can be omitted if the repo is yours.

How do I pull new changes from hub.darcs.net?

Once you've got a local copy of a repo, you can merge any new changes from the upstream repo on darcs hub by running:

darcs pull

in your repo. It uses the original get address by default.

How do I push my changes back to hub.darcs.net?

Pushing requires SSH access. If you got the repo via SSH, just

darcs push

If you got it via HTTP, you must configure ssh access and then push to the SSH address:

darcs push [YOU@]hub.darcs.net:[OWNER/]REPO [--set-default]

The --set-default flag will make it remember this as the upstream address, so you can just type darcs push in future.

How do I push to someone else's repo?

You can push to someone else's repo if they've added you as a repo member in the repo settings. Otherwise, make a fork of their repo and push to that, so they can review and merge your changes themselves (on their repo branches page).

How do I create and push to a new repo?

  1. ssh [YOU@]hub.darcs.net init REPO DESCRIPTION (or: log in -> my repos -> new repo)
  2. darcs push -a [YOU@]hub.darcs.net:REPO

How do I configure ssh access?

After (or while) creating an account, configure your ssh public key in user settings. Then test your ssh access and look for the following output, which indicates a successful connection:

$ ssh YOU@hub.darcs.net
PTY allocation request failed on channel 0
shell request failed on channel 0

You might need some additional configuration for your ssh client since not all ssh features have been implemented in the darcsden ssh server or ssh package - symptoms include complaints about X11Forwarding, darcs push failing with "Apply Failed!", and others. To fix this, add to your ssh client's config file (~/.ssh/config on unix):

Host hub.darcs.net
  ControlMaster no
  ForwardAgent no
  ForwardX11 no


What are repo members ?

In your repo's settings, you can add other darcs hub users as members. They will be able to push to your repo (but not delete changes from it, nor change its settings), and view it even if it's private.

How do I delete changes from my hub repo?

ssh [YOU@]hub.darcs.net obliterate REPO

This runs darcs obliterate in your repo on hub, prompting interactively for each change, most recently pushed first. You must be the repo owner, not just a member. Options like --dry-run are not supported, so you'll sometimes have to figure out which later depending patches also need to be selected for obliteration. Another option is to obliterate locally, then delete the hub repo and re-publish it.

Obliterate rewrites your repo's history, so be mindful - if others have forked your repo and you obliterate, they'll need to do the same or the change will show up again in your branches page.

How do I view a file's raw content ?

Click the file name in the page heading. Currently this forces the text/plain content type.

How do I get a feed of a repo's changes ?

Add /atom to the changes url. Eg http://hub.darcs.net/simon/darcsden/changes/atom.

How do I tell a repo owner that I have some patches they may like to pull?

After pushing some patches to your fork of someone's repo, those patches will automatically appear in the branches page of the parent repo. However, the parent repo's owner may not notice. Currently there are two ways to notify them:

  1. track down their email or IRC name and ping them. Eg look for a nick in #darcs matching their hub username, or check the READMEs in their public repos.

  2. if the parent repo has its darcs hub issue tracker enabled, you can open a new issue and attach your new patches as a bundle - this will send them a notification email

Can I reference or close issues with a commit ?

When a patch is pushed to an issue-tracker-enabled repo, and the patch name contains a reference to an open issue, that issue will be closed automatically, and the commit will be mentioned in an issue comment. Here is the syntax. Some valid examples:

some patch (closes #1)
resolves #52, blah blah
this fixes #100 I think

I think the following are not yet supported:

  • the issue comment should link to the commit
  • referencing/commenting an issue without closing it
  • closing multiple issues at once

More questions ? Ask on #darcs and/or contribute doc patches.