To begin, you will need a [http://github.com github] account, and to fork and clone some of the diagrams repositories. See [https://help.github.com/articles/fork-a-repo here for help on how to fork a repo]. At a minimum, you will need the following repositories:

To begin, you will need a [http://github.com github] account, and to fork and clone some of the diagrams repositories. See [https://help.github.com/articles/fork-a-repo here for help on how to fork a repo]. At a minimum, you will need the following repositories:

Contents

1 Getting involved

There are two major ways to get involved in the diagrams community and find out what is going on:

The IRC channel (#diagrams on freenode.org) is fairly active and a good place to interact with other diagrams users and developers. (Be patient: sometimes no one is watching the channel, but if you say something or ask a question, you can be sure that someone will eventually see it and respond.)

The mailing list is the place to stay up-to-date with announcements, and also a good place to ask questions, especially longer or more involved ones.

(In fact, hub makes it easy to later convert a direct clone into your own fork if you wish, via the hub fork command; see the hub documentation for more information.)

4.2 Building

It's recommended to use some sort of sandboxing tool while working on diagrams. Because diagrams consists of several separate packages, using cabal-dev can be something of a pain. Instead, we recommend using hsenv---though you will have to build it from source, and it is only known to work on Linux systems. Good suggestions of similar tools for Windows or Mac are welcome.

In any case, there is an important trick for building multiple local packages at once that you should know, which works with cabal as well as cabal-dev. Instead of installing each package one at a time, simply go up to the parent directory and issue a command such as

The trailing slashes tell cabal to install packages from local directories, rather than trying to download packages from Hackage. In addition, it doesn't even matter in what order you list the directories; cabal will figure out the correct order based on dependencies.

4.3 Making changes

Now that you have your cloned/forked repositories and know how to build them, go ahead and make some edits. You can see what changes you've made using the git diff command, stage certain changes with git add (try the -p flag!), and create a commit from staged changes with git commit.

You are also encouraged to update the diagrams user manual in parallel with any changes you make; see the diagrams-doc repository.

4.4 Submitting a pull request

Once you have a set of commits you are happy with, push them to your forked repository on github and open a pull request. At this point your code will be reviewed by someone with push access to the repository. They may very well leave some comments; feel free to respond with comments of your own.

If any errors are pointed out, changes requested, etc., simply make some new commits and push them to your forked repo. There is no need to create another pull request; any newly pushed commits will be automatically added to the existing pull request.

4.5 Pull requests and topic branches

The important thing to realize about pull requests is that they do not correspond to a particular set of commits, but to a branch. In particular, you add new commits to a pull request simply by pushing to the branch which the pull request is from. This has some interesting implications:

If you are going to be working on multiple features/bug fixes at once---or even if you just want to be able to get started on a new feature while your previous one is still undergoing review---it is best to create a "topic branch" for each feature, rather than making all your changes on your "master" branch. You can create a new branch called foo with git branch foo; see all branches with git branch; and switch between branches using git checkout.

Once your pull request is merged, you can delete the branch, using git branch -d foo for the branch in your local repo, and something like git push origin --delete foo for a remote repo named origin.

Another interesting point is that there's not necessarily any reason to wait until you are "done" to open a pull request. Just make sure you state that the feature is "in progess", and then you can get useful early feedback as you continue to work on the feature and push more commits. Of course, branches/pull requests also make for a nice way to work on a new feature collaboratively.