.. _develop: .. currentmodule:: prody Contributing to ProDy ===================== .. contents:: :local: Install Git and a GUI --------------------- ProDy source code is managed using Git_ distributed revision controlling system. You need to install :program:`git`, and if you prefer a GUI for it, on your computer to be able to contribute to development of ProDy. On Debian/Ubuntu Linux, for example, you can run the following to install :program:`git` and :program:`gitk`:: $ sudo apt-get install git gitk For other operating systems, you can obtain installation instructions and files from Git_. You will only need to use a few basic :program:`git` commands. These commands are provided below, but usually without an adequate description. Please refer to `Git book`_ and `Git docs`_ for usage details and examples. Fork and Clone ProDy -------------------- ProDy source code an issue tracker are hosted on Github_. You need to create an account on this service, if you do not have one already. If you work on Mac OS or Windows, you may consider getting `GitHub Mac`_ or `GitHub Windows`_ to help you manage a copy of the repository. Once you have an account, you need to make a fork of ProDy, which is creating a copy of the repository in your account. You will see a link for this on ProDy_ source code page. You will have write access to this fork and later will use it share your changes with others. The next step is cloning the fork from your online account (e.g. jamesmkrieger) to your local system. If you are not using the GitHub software, you can do it as follows:: $ git clone https://github.com/jamesmkrieger/ProDy.git This will create :file:`ProDy` folder with a copy of the project files in it:: $ cd ProDy $ ls bdist_wininst.bat docs INSTALL.rst LICENSE.rst Makefile MANIFEST.in prody README.rst scripts setup.py Setup Working Environment ------------------------- You can use ProDy directly from this clone by adding :file:`ProDy` folder to your :envvar:`PYTHONPATH` environment variable, e.g.:: export PYTHONPATH=$PYTHONPATH:$/home/USERNAME/path/to/ProDy This will not be enough though, since you also need to compile C extensions. You can run the following series of commands to build and copy C modules to where they need to be:: $ cd ProDy $ python setup.py build_ext --inplace --force or, on Linux you can:: $ make build You may also want to make sure that you can run :ref:`prody-apps` from anywhere on your system. One way to do this by adding :file:`ProDy/scripts` folder to your :envvar:`PATH` environment variable, e.g.:: export PATH=$PATH:$/home/USERNAME/path/to/ProDy/scripts Modify, Test, and Commit ------------------------ When modifying ProDy files you may want to follow the :ref:`styleguide`. Closely following the guidelines therein will allow for incorporation of your changes to ProDy quickly. If you changed :file:`.py` files, you should ensure to check the integrity of the package. To do this, you should at least run fast ProDy tests as follows:: $ cd ProDy $ nosetests See :ref:`testing` for alternate and more comprehensive ways of testing. ProDy unittest suit may not include a test for the function or the class that you just changed, but running the tests will ensure that the ProDy package can be imported and run without problems. After ensuring that the package runs, you can commit your changes as follows:: $ git commit modified_file_1.py modified_file_2.py or:: $ git commit -a This command will open a text editor for you to describe the changes that you just committed. Push and Pull Request --------------------- After you have committed your changes, you will need to push them to your GitHub account:: git push origin master This step will ask for your account user name. If you are going to push to your GitHub account frequently, you may add an SSH key for automatic authentication. To add an SSH key for your system, go to :menuselection:`Edit Your Profile --> SSH keys` page on GitHub. After pushing your changes, you will need to make a pull request from your to notify ProDy developers of the changes you made and facilitate their incorporation to ProDy. Update Local Copy ----------------- You can also keep an up-to-date copy of ProDy by pulling changes from the master ProDy_ repository on a regular basis. You need add to the master repository as a remote to your local copy. You can do this running the following command from the ProDy project folder:: $ cd prody $ git remote add prodymaster git@github.com:prody/ProDy.git You may use any name other than `prodymaster`, except for `origin`, which points to the ProDy fork in your account. After setting up this remote, calling :program:`git pull` command will fetch latest changes from ProDy_ master repository and merge them to your local copy:: $ git pull prodymaster master Note that when there are changes in C modules, you need to run the following commands again to update the binary module files:: $ python setup.py build_ext --inplace --force .. _Git: http://git-scm.com/downloads .. _Git book: http://git-scm.com/book .. _Git docs: http://git-scm.com/docs .. _GitHub Mac: http://mac.github.com .. _GitHub Windows: http://windows.github.com