Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time

Contributing to this project

Thank you for being interested in contributing to igraph! We need the help of volunteers to keep the package going, so every little bit is welcome. You can help out the project in several different ways.

This repository only hosts the C code of the igraph project. Even if you are not so experienced with C, you can contribute in a number of ways:

  1. Respond to user questions on our support forum.
  2. Correct or improve our documentation.
  3. Go over open issues:

Using the issue tracker

Bug reports

A bug is a demonstrable problem that is caused by the code in the repository. Good bug reports are extremely helpful — thank you for reporting!

Guidelines for bug reports:

  1. Make sure that the bug is in the C code of igraph and not in one of the higher level interfaces — if you are using igraph from R, Python or Mathematica, consider submitting your issue in igraph/rigraph, igraph/python-igraph or szhorvat/IGraphM instead. If you are unsure whether your issue is in the C layer, submit a bug report in the repository of the higher level interface — we will transfer the issue here if it indeed affects the C layer.

  2. Use the GitHub issue search — check if the issue has already been reported.

  3. Check if the issue has been fixed — try to reproduce it using the latest master or development branch in the repository.

  4. Isolate the problem — create a short, self-contained, correct example.

Please try to be as detailed as possible in your report and provide all necessary information. What is your environment? What steps will reproduce the issue? What would you expect to be the outcome? All these details will help us to fix any potential bugs.

Example:

Short and descriptive example bug report title

A summary of the issue and the compiler/OS environment in which it occurs. If suitable, include the steps required to reproduce the bug.

  1. This is the first step
  2. This is the second step
  3. Further steps, etc.

<url> - a link to the reduced test case

Any other information you want to share that is relevant to the issue being reported. This might include the lines of code that you have identified as causing the bug, and potential solutions (and your opinions on their merits).

Feature requests

Feature requests are always welcome. First, take a moment to find out whether your idea fits with the scope and aims of the project. Please provide as much detail and context as possible, and where possible, references to relevant literature. Having said that, implementing new features can be quite time consuming, and as such they might not be implemented quickly. In addition, the development team might decide not to implement a certain feature. It is up to you to make a case to convince the project's developers of the merits of this feature.

Pull requests

Good pull requests - patches, improvements, new features - are a fantastic help. They should remain focused in scope and avoid containing unrelated commits. Please also take a look at our tips on writing igraph code before getting your hands dirty.

Please ask first before embarking on any significant pull request (e.g. implementing features, refactoring code, porting to a different language), otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project.

Please adhere to the coding conventions used throughout a project (indentation, accurate comments, etc.) and any other requirements (such as test coverage).

Follow the following steps if you would like to make a new pull request:

  1. Fork the project, clone your fork, and configure the remotes:

    # Clone your fork of the repo into the current directory
    git clone https://github.com/<your-username>/<repo-name>
    # Navigate to the newly cloned directory
    cd <repo-name>
    # Assign the original repo to a remote called "upstream"
    git remote add upstream https://github.com/<upstream-owner>/<repo-name>
  2. Please checkout the section on branching to see whether you need to branch off from the master branch or the develop branch.

    If you cloned a while ago, get the latest changes from upstream:

    git checkout <dev-branch>
    git pull --rebase upstream <dev-branch>
  3. Create a new topic branch (off the targeted branch, see branching section) to contain your feature, change, or fix:

    git checkout -b <topic-branch-name>
  4. Please commit your changes in logical chunks, and try to provide clear commit messages. It helps us during the review process if we can follow your thought process during the implementation. If you hit a dead end, use git revert to revert your commits or just go back to an earlier commit with git checkout and continue your work from there.

  5. We have a checklist for new igraph functions. If you have added any new functions to igraph, please go through the checklist to ensure that your functions play nicely with the rest of the library.

  6. Make sure that your PR is based off the latest code and locally merge (or rebase) the upstream development branch into your topic branch:

    git pull [--rebase] upstream <dev-branch>

    Rebasing is preferable over merging as you do not need to deal with merge conflicts; however, if you already have many commits, merging the upstream development branch may be faster.

  7. WHen your topic branch is up-to-date with the upstream development branch, you can push your topic branch up to your fork:

    git push origin <topic-branch-name>
  8. Open a pull request with a clear title and description.

IMPORTANT: By submitting a pull request, you agree to allow the project owner to license your work under the same license as that used by the project, see also Legal Stuff.

Branching

igraph is committed to semantic versioning. We are currently still in the development release (0.x), which in principle is a mark that the public API is not yet stable. Regardless, we try to maintain semantic versioning also for the development releases. We do so as follows. Any released minor version (0.x.z) will be API backwards-compatible with any previous release of the same minor version (0.x.y, with y < z). This means that if there is an API incompatible change, we will increase the minor version. For example, release 0.8.1 is API backwards-compatible with release 0.8.0, while release 0.9.0 might be API incompatible with version 0.8.1. Note that this only concerns the public API, internal functions may change also within a minor version.

There will always be two versions of igraph: the most recent released version, and the next upcoming minor release, which is by definition not yet released. The most recent release version is in the master branch, while the next upcoming minor release is in the develop branch. If you make a change that is API incompatible with the most recent release, it must be merged to the develop branch. If the change is API backwards-compatible, it can be merged to the master branch. It is possible that you build on recent improvements in the develop branch, in which case your change should of course target the develop branch. If you only add new functionality, but do not change anything of the existing API, this should be backwards-compatible, and can be merged in the master branch.

When you make a new pull request, please specify the correct target branch. The maintainers of igraph may decide to retarget your pull request to the correct branch. Retargeting you pull request may result in merge conflicts, so it is always good to decide before starting to work on something whether you should start from the master branch or from the develop branch. In most cases, changes in the master branch will also be merged to the develop branch by the maintainers.

If you are unsure about the branch to target, open an issue about your proposed feature and we can discuss the appropriate target branch in the issue before you send a PR.

Writing igraph Code

Some tips on writing igraph code.

Ask Us!

In general, if you are not sure about something, please ask! You can open an issue on GitHub, open a thread in our igraph support forum, or write to @ntamas, @vtraag, @szhorvat, @iosonofabio or @gaborcsardi. We prefer open communication channels, because others can then learn from it too.

Legal Stuff

This is a pain to deal with, but we can't avoid it, unfortunately.

igraph is licensed under the "General Public License (GPL) version 2, or later". The igraph manual is licensed under the "GNU Free Documentation License". By submitting a patch or pull request, you agree to allow the project owner to license your work under the same license as that used by the project.