From efed80d829af8c862cd87d3438ef3b9932ad9602 Mon Sep 17 00:00:00 2001 From: Darren Dale Date: Sat, 19 Feb 2011 11:41:29 -0500 Subject: [PATCH 1/4] update examples to use sample_data from github --- examples/misc/sample_data_demo.py | 2 +- examples/misc/sample_data_test.py | 6 +++--- lib/matplotlib/cbook.py | 29 ++++++++++++++++------------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/examples/misc/sample_data_demo.py b/examples/misc/sample_data_demo.py index eb34a92ceb4e..1af97be752ac 100644 --- a/examples/misc/sample_data_demo.py +++ b/examples/misc/sample_data_demo.py @@ -1,6 +1,6 @@ """ Grab mpl data from the ~/.matplotlib/sample_data cache if it exists, else -fetch it from svn and cache it +fetch it from github and cache it """ import matplotlib.cbook as cbook import matplotlib.pyplot as plt diff --git a/examples/misc/sample_data_test.py b/examples/misc/sample_data_test.py index e59eaf0704e8..ba6a50eb580b 100644 --- a/examples/misc/sample_data_test.py +++ b/examples/misc/sample_data_test.py @@ -1,11 +1,11 @@ """ -Demonstrate how get_sample_data works with svn revisions in the data. +Demonstrate how get_sample_data works with git revisions in the data. - svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/sample_data + git clone git@github.com/matplotlib/sample_data.git and edit testdata.csv to add a new row. After committing the changes, when you rerun this script you will get the updated data (and the new -svn version will be cached in ~/.matplotlib/sample_data) +git version will be cached in ~/.matplotlib/sample_data) """ import matplotlib.mlab as mlab diff --git a/lib/matplotlib/cbook.py b/lib/matplotlib/cbook.py index e3dc292c2205..7b89769d552d 100644 --- a/lib/matplotlib/cbook.py +++ b/lib/matplotlib/cbook.py @@ -448,12 +448,13 @@ def to_filehandle(fname, flag='rU', return_opened=False): def is_scalar_or_string(val): return is_string_like(val) or not iterable(val) -class ViewVCCachedServer(urllib2.BaseHandler): +class ViewVCCachedServer(urllib2.HTTPSHandler): """ Urllib2 handler that takes care of caching files. The file cache.pck holds the directory of files that have been cached. """ def __init__(self, cache_dir, baseurl): + urllib2.HTTPSHandler.__init__(self) self.cache_dir = cache_dir self.baseurl = baseurl self.read_cache() @@ -544,7 +545,7 @@ def cache_file(self, url, data, headers): # http_error_304 for handling 304 Not Modified responses # http_response for postprocessing requests - def http_request(self, req): + def https_request(self, req): """ Make the request conditional if we have a cached file. """ @@ -555,20 +556,21 @@ def http_request(self, req): req.add_header("If-Modified-Since", lastmod) return req - def http_error_304(self, req, fp, code, msg, hdrs): + def https_error_304(self, req, fp, code, msg, hdrs): """ Read the file from the cache since the server has no newer version. """ url = req.get_full_url() fn, _, _ = self.cache[url] - matplotlib.verbose.report('ViewVCCachedServer: reading data file from cache file "%s"' - %fn, 'debug') + matplotlib.verbose.report( + 'ViewVCCachedServer: reading data file from cache file "%s"' %fn, + 'debug') file = open(fn, 'rb') handle = urllib2.addinfourl(file, hdrs, url) handle.code = 304 return handle - def http_response(self, req, response): + def https_response(self, req, response): """ Update the cache with the returned file. """ @@ -589,7 +591,7 @@ def http_response(self, req, response): def get_sample_data(self, fname, asfileobj=True): """ Check the cachedirectory for a sample_data file. If it does - not exist, fetch it with urllib from the svn repo and + not exist, fetch it with urllib from the git repo and store it in the cachedir. If asfileobj is True, a file object will be returned. Else the @@ -637,9 +639,9 @@ def get_sample_data(self, fname, asfileobj=True): def get_sample_data(fname, asfileobj=True): """ Check the cachedirectory ~/.matplotlib/sample_data for a sample_data - file. If it does not exist, fetch it with urllib from the mpl svn repo + file. If it does not exist, fetch it with urllib from the mpl git repo - http://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/sample_data/ + https://github.com/matplotlib/sample_data/raw/master and store it in the cachedir. @@ -647,11 +649,11 @@ def get_sample_data(fname, asfileobj=True): path to the file as a string will be returned To add a datafile to this directory, you need to check out - sample_data from matplotlib svn:: + sample_data from matplotlib git:: - svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/sample_data + git clone git@github.com:matplotlib/sample_data - and svn add the data file you want to support. This is primarily + and git add the data file you want to support. This is primarily intended for use in mpl examples that need custom data. To bypass all downloading, set the rc parameter examples.download to False @@ -670,12 +672,13 @@ def get_sample_data(fname, asfileobj=True): if myserver is None: configdir = matplotlib.get_configdir() cachedir = os.path.join(configdir, 'sample_data') - baseurl = 'http://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/sample_data/' + baseurl = 'https://github.com/matplotlib/sample_data/raw/master/' myserver = get_sample_data.myserver = ViewVCCachedServer(cachedir, baseurl) return myserver.get_sample_data(fname, asfileobj=asfileobj) get_sample_data.myserver = None + def flatten(seq, scalarp=is_scalar_or_string): """ this generator flattens nested containers such as From 914a43aade5c6607b5c00f573e13c7f39e71fa23 Mon Sep 17 00:00:00 2001 From: Darren Dale Date: Sat, 19 Feb 2011 12:16:16 -0500 Subject: [PATCH 2/4] Remove svn references, or change to git --- MIGRATION.txt | 86 --------- Makefile | 3 +- doc/_templates/indexsidebar.html | 4 +- doc/devel/coding_guide.rst | 253 +------------------------ doc/devel/documenting_mpl.rst | 6 +- doc/devel/release_guide.rst | 20 +- doc/faq/howto_faq.rst | 68 ++++--- doc/faq/installing_faq.rst | 70 +++---- doc/faq/troubleshooting_faq.rst | 10 +- doc/sphinxext/gen_rst.py | 4 +- doc/users/credits.rst | 6 +- doc/users/installing.rst | 6 +- lib/matplotlib/__init__.py | 2 - lib/matplotlib/backends/backend_pdf.py | 6 +- matplotlibrc.template | 5 +- release/osx/README.txt | 4 +- release/osx/data/setup.cfg | 1 - release/win32/data/setup.cfg | 1 - setup.cfg.template | 1 - setup.py | 5 +- unit/threading_test.py | 2 +- 21 files changed, 116 insertions(+), 447 deletions(-) delete mode 100644 MIGRATION.txt diff --git a/MIGRATION.txt b/MIGRATION.txt deleted file mode 100644 index 1d09f28e114c..000000000000 --- a/MIGRATION.txt +++ /dev/null @@ -1,86 +0,0 @@ -Migrating to the new matplotlib codebase -======================================== - -Michael Droettboom has spent the last several months working on the -"transforms branch" of matplotlib, in which he rewrote from the ground -up the transformation infrastructure in matplotlib, which many found -unintuitive and hard to extend. In addition to a cleaner code base, -the reorganization allows you to define your own transformations and -projections (e.g. map projections) within matplotlib. He has merged his -work into the HEAD of the svn trunk, and this will be the basis for -future matplotlib releases. - -If you are a svn user, we encourage you to continue using the trunk as -before, but with the understanding that you are now truly on the -bleeding edge. Michael has made sure all the examples still pass with -the new code base, so for the vast majority of you, I expect to see -few problems. But we need to get as many people as possible using the -new code base so we can find and fix the remaining problems. We have -take the svn code used in the last stable release in the 0.91 series, -and made it a maintenance branch so we can still fix bugs and support -people who are not ready to migrate to the new transformation -infrastructure but nonetheless need access to svn bug fixes. - -Using the new code -================== - -To check out the trunk with the latest transforms changes: - - > svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/matplotlib - -If you already have a working copy of the trunk, your next "svn up" will -include the latest transforms changes. - -IMPORTANT: Before installing, make sure you completely remove the old matplotlib -build and install directories, eg: - - > cd matplotlib - > sudo rm -rf build - > sudo rm -rf /usr/local/lib/python2.5/site-packages/matplotlib - > sudo python setup.py install - -Using the old svn code -====================== - -To check out the maintenance branch, in order to commit bugfixes to 0.91.x: - - > svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/branches/v0_91_maint matplotlib_0_91_maint - -Any applicable bugfixes on the 0.91.x maintenance branch should be -merged into the trunk so they are fixed there as well. Svnmerge.py -makes this process rather straightforward, but you may also manually -merge if you prefer. - -Merging bugfixes on the maint branch to the trunk using svnmerge.py -------------------------------------------------------------------- - -Download svnmerge.py from here: - - http://www.orcaware.com/svn/wiki/Svnmerge.py - -From the working copy of the *trunk* (svnmerge.py always pulls *to* -the current working copy), so - - > svnmerge.py merge - -to pull in changes from the maintenance branch. Manually resolve any -conflicts, if necessary, test them, and then commit with - - > svn commit -F svnmerge-commit-message.txt - -(Note the above will stop working when the maintenance branch is -abandoned.) - -API CHANGES in the new transformation infrastructure -==================================================== - -While Michael worked hard to keep the API mostly unchanged while -performing what has been called "open heart surgery on matplotlib", -there have been some changes, as discussed below. - -The primary goal of these changes was to make it easier to -extend matplotlib to support new kinds of projections. This is -primarily an internal improvement, and the possible user-visible -changes it allows are yet to come. - -These changes are detailed in the API_CHANGES document. diff --git a/Makefile b/Makefile index cc476446ed3d..8ac97ffe718b 100644 --- a/Makefile +++ b/Makefile @@ -36,12 +36,11 @@ build_osx105: jdh_doc_snapshot: - svn up;\ + git pull;\ python setup.py install --prefix=~/dev;\ cd doc;\ rm -rf build;\ python make.py clean;\ - svn up;\ python make.py html latex sf sfpdf; diff --git a/doc/_templates/indexsidebar.html b/doc/_templates/indexsidebar.html index 11bf6def4722..f13aba4e53ca 100644 --- a/doc/_templates/indexsidebar.html +++ b/doc/_templates/indexsidebar.html @@ -9,7 +9,7 @@

News

pathto('users/installing') }}">installing

-

Sandro Tosi has a new book +

Sandro Tosi has a new book Matplotlib for python developers also @@ -64,7 +64,7 @@

Need help?

but it is a good idea to ping us on the mailing list too.

For details on what's new, see the detailed changelog or browse the source code. Anything that could +pathto('_static/CHANGELOG', 1) }}">changelog or browse the source code. Anything that could require changes to your existing codes is logged in the api changes file.

diff --git a/doc/devel/coding_guide.rst b/doc/devel/coding_guide.rst index 3a1181996f95..6d3164d07244 100644 --- a/doc/devel/coding_guide.rst +++ b/doc/devel/coding_guide.rst @@ -4,33 +4,6 @@ Coding guide ************ -.. _version-control: - -Version control -=============== - -.. _using-svn: - -svn checkouts -------------- - -Checking out everything in the trunk (matplotlib and toolkits):: - - svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk \ - matplotlib --username=youruser --password=yourpass - -Checking out the main source:: - - svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/\ - matplotlib mpl --username=youruser --password=yourpass - -Branch checkouts, eg the 1.0.x maintenance branch:: - - svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/branches/\ - v1_0_maint mpl1 --username=youruser --password=yourpass - - - Committing changes ------------------ @@ -60,231 +33,7 @@ in mind. :file:`MANIFEST.in`. This file determines what goes into the source distribution of the mpl build. -* Keep the maintenance branch (0.91) the latest release branch (eg - 0.98.4) and trunk in sync where it makes sense. If there is a bug - on both that needs fixing, use `svnmerge.py - `_ to keep them in - sync. See :ref:`svn-merge` below. - -.. _svn-merge: - -Using svnmerge --------------- - -svnmerge is useful for making bugfixes to a maintenance branch, and -then bringing those changes into the trunk. - -The basic procedure is: - -* install ``svnmerge.py`` in your PATH:: - - > wget http://svn.apache.org/repos/asf/subversion/trunk/contrib/\ - client-side/svnmerge/svnmerge.py - -* get a svn checkout of the branch you'll be making bugfixes to and - the trunk (see above) - -* Create and commit the bugfix on the branch. - -* Then make sure you svn upped on the trunk and have no local - modifications, and then from your checkout of the svn trunk do:: - - svnmerge.py merge -S BRANCHNAME - - Where BRANCHNAME is the name of the branch to merge *from*, - e.g. v1_0_maint. - - If you wish to merge only specific revisions (in an unusual - situation), do:: - - > svnmerge.py merge -rNNN1-NNN2 - - where the ``NNN`` are the revision numbers. Ranges are also - acceptable. - - The merge may have found some conflicts (code that must be manually - resolved). Correct those conflicts, build matplotlib and test your - choices. If you have resolved any conflicts, you can let svn clean - up the conflict files for you:: - - > svn -R resolved . - - ``svnmerge.py`` automatically creates a file containing the commit - messages, so you are ready to make the commit:: - - > svn commit -F svnmerge-commit-message.txt - - -.. _setting-up-svnmerge: - -Setting up svnmerge -~~~~~~~~~~~~~~~~~~~ - -.. note:: - The following applies only to release managers when there is - a new release. Most developers will not have to concern themselves - with this. - -* Creating a new branch from the trunk (if the release version is - 1.0 at revision 8503):: - - > svn copy \ - https://matplotlib.svn.sf.net/svnroot/matplotlib/trunk/matplotlib@8503 \ - https://matplotlib.svn.sf.net/svnroot/matplotlib/branches/v1_0_maint \ - -m "Creating maintenance branch for 1.0" - -* You can add a new branch for the trunk to "track" using - "svnmerge.py init", e.g., from a working copy of the trunk:: - - > svnmerge.py init https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/branches/v1_0_maint - property 'svnmerge-integrated' set on '.' - - After doing a "svn commit" on this, this merge tracking is available - to everyone, so there's no need for anyone else to do the "svnmerge - init". - -* Tracking can later be removed with the "svnmerge.py uninit" command, - e.g.:: - - > svnmerge.py -S v1_0_maint uninit - -.. _using-git: - -Using git ---------- - -Some matplotlib developers are experimenting with using git on top of -the subversion repository. Developers are not required to use git, as -subversion will remain the canonical central repository for the -foreseeable future. - -Cloning the git mirror -~~~~~~~~~~~~~~~~~~~~~~ - -There is an experimental `matplotlib github mirror`_ of the subversion -repository. To make a local clone of it in the directory ``matplotlib``, -enter the following commands:: - - # Download the entire git repository into "matplotlib", name the source repository "svn". - git clone --origin svn git@github.com:astraw/matplotlib.git - - # Change into the newly created git repository. - cd matplotlib - - # Setup the subversion mirroring. - git svn init --trunk=trunk/matplotlib --prefix=svn/ https://matplotlib.svn.sourceforge.net/svnroot/matplotlib - - # Tell git svn to analyze the subversion history - git svn rebase -l - -.. _matplotlib github mirror: http://github.com/astraw/matplotlib - -To install from this cloned repository, use the commands in the -:ref:`svn installation ` section:: - - > cd matplotlib - > python setup.py install - -Note that it is not possible to interact with the matplotlib -maintenance branches through git due to different representations of -source code repositories in svnmerge and git. - -An example git workflow -~~~~~~~~~~~~~~~~~~~~~~~ - -The following is a suggested workflow for git/git-svn. - -Start with a virgin tree in sync with the svn trunk on the git branch -"trunk":: - - git checkout trunk - git svn rebase - -To create a new, local branch called "whizbang-branch":: - - git checkout -b whizbang-branch - -Do make commits to the local branch:: - - # hack on a bunch of files - git add bunch of files - git commit -m "modified a bunch of files" - # repeat this as necessary - -Now, go back to the trunk branch and append the history of your branch -to the git trunk branch, which will end up as the svn trunk:: - - git checkout trunk - git svn rebase # Ensure we have most recent svn - git rebase whizbang-branch # Append whizbang changes to trunk branch - git svn dcommit -n # Check that this will apply to svn - git svn dcommit # Actually apply to svn - -Finally, you may want to continue working on your whizbang-branch, so -rebase it to the new trunk:: - - git checkout whizbang-branch - git rebase trunk - -How was this git mirror set up? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -These are notes for those interested in mirroring a subversion -repository on github. I pieced this together by lots of -trial-and-error. - -Step 1: Create a local mirror of the svn repository - -:: - - rsync -avzP rsync://matplotlib.svn.sourceforge.net/svn/matplotlib/ matplotlib-svn-rsync/ - -Step 2: Import the svn history into a new git repository - -:: - - #!/bin/bash - set -e - - TARGET=mpl.git.fixed - GIT=/home/astraw/git/bin/git - TRUNKBRANCH=trunk - SVNBRANCHPREFIX="svn/" - - rm -rf $TARGET - mkdir $TARGET - cd $TARGET - - $GIT init - $GIT svn init --rewrite-root=https://matplotlib.svn.sourceforge.net/svnroot/matplotlib \ - --trunk=trunk/matplotlib --prefix=$SVNBRANCHPREFIX file:///mnt/workdisk/tmp/matplotlib-svn-rsync - $GIT svn fetch - - # now, make master branch track ${SVNBRANCHPREFIX}trunk - $GIT checkout master -b tmp - $GIT branch -d master - $GIT checkout ${SVNBRANCHPREFIX}trunk -b $TRUNKBRANCH - $GIT branch -D tmp - $GIT svn rebase -l - -Step 3: Upload the git repository to github - -:: - - #!/bin/bash - set -e - - TARGET=mpl.git.fixed - GIT=/home/astraw/git/bin/git - TRUNKBRANCH=trunk - SVNBRANCHPREFIX="svn/" - - cd $TARGET - - $GIT remote add github git@github.com:astraw/matplotlib.git - git push github $TRUNKBRANCH:master - -.. _style-guide: +* Keep the maintenance branches and trunk in sync where it makes sense. Style guide =========== diff --git a/doc/devel/documenting_mpl.rst b/doc/devel/documenting_mpl.rst index 08c3e6eab953..e46c1784d62f 100644 --- a/doc/devel/documenting_mpl.rst +++ b/doc/devel/documenting_mpl.rst @@ -229,9 +229,9 @@ included. The path should be relative to the ``doc`` directory. Any plots specific to the documentation should be added to the ``doc/pyplots`` -directory and committed to SVN. Plots from the ``examples`` directory +directory and committed to git. Plots from the ``examples`` directory may be referenced through the symlink ``mpl_examples`` in the ``doc`` -directory. eg.:: +directory. e.g.:: .. plot:: mpl_examples/pylab_examples/simple_plot.py @@ -249,7 +249,7 @@ little differently. These figures are not to be generated during the documentation build, in order to keep the prerequisites to the documentation effort as low as possible. Please run the :file:`doc/pyplots/make.py` script when adding such figures, and commit the script **and** the images to -svn. Please also add a line to the README in doc/pyplots for any additional +git. Please also add a line to the README in doc/pyplots for any additional requirements necessary to generate a new figure. Once these steps have been taken, these figures can be included in the usual way:: diff --git a/doc/devel/release_guide.rst b/doc/devel/release_guide.rst index 167fd541422e..4f9710cd690f 100644 --- a/doc/devel/release_guide.rst +++ b/doc/devel/release_guide.rst @@ -37,10 +37,12 @@ Branching ============ Once all the tests are passing and you are ready to do a release, you -need to create a release branch and configure svn-merge to use it; -Michael Droettboom should probably handle this step, but if he is not -available see instructions at :ref:`setting-up-svnmerge`. On the -bracnh, do any additional testing you want to do, and then build +need to create a release branch:: + + git checkout -b v1.1.x + git push git@github.com:matplotlib/matplotlib.git v1.1.x + +On the branch, do any additional testing you want to do, and then build binaries and source distributions for testing as release candidates. @@ -53,9 +55,7 @@ Packaging * Make sure the :file:`MANIFEST.in` us up to date and remove :file:`MANIFEST` so it will be rebuilt by MANIFEST.in -* run `svn-clean - `_ - from in the mpl svn directory before building the sdist +* run `git clean` in the mpl git directory before building the sdist * unpack the sdist and make sure you can build from that directory @@ -92,8 +92,8 @@ replacing 'jdh2358' with your sourceforge login. Any changes to fix bugs in the release candidate should be fixed in -the release branch and merged into the trunk with svn-merge; see -:ref:`svn-merge`. When the release candidate is signed off on, build +the release branch and merged into the trunk with `git merge`; see +:ref:`git merge`. When the release candidate is signed off on, build the final sdist, binaries and eggs, and upload them to the sourceforge release area. @@ -110,7 +110,7 @@ Uploading * ftp the source and binaries to the anonymous FTP site:: - mpl> svn-clean + mpl> git clean mpl> python setup.py sdist mpl> cd dist/ dist> sftp jdh2358@frs.sourceforge.net diff --git a/doc/faq/howto_faq.rst b/doc/faq/howto_faq.rst index 90973db4ea52..07d47f823837 100644 --- a/doc/faq/howto_faq.rst +++ b/doc/faq/howto_faq.rst @@ -525,35 +525,51 @@ Contributing: howto Submit a patch ----------------- -First obtain a copy of matplotlib svn (see :ref:`install-svn`) and -make your changes to the matplotlib source code or documentation and -apply a `svn diff`. If it is feasible, do your diff from the top -level directory, the one that contains :file:`setup.py`. Eg,:: - - > cd /path/to/matplotlib/source - > svn diff > mypatch.diff - -and then post your patch to the `matplotlib-devel -`_ mailing list. If you -do not get a response within 24 hours, post your patch to the -sourceforge patch `tracker -`_, -and follow up on the mailing list with a link to the sourceforge patch -submissions. If you still do not hear anything within a week (this -shouldn't happen!), send us a kind and gentle reminder on the mailing -list. - -If you have made lots of local changes and do not want to a diff -against the entire tree, but rather against a single directory or -file, that is fine, but we do prefer svn diffs against the top level -(where setup.py lives) since it is nice to have a consistent way to -apply them. +If you have a github account, or are willing to make one, make a private fork +of the repository at ``_. Then +clone the repository:: + + git clone git@github.com:your_github_id/matplotlib.git + +if you don't have a github account:: + + git clone git://github.com/matplotlib/matplotlib.git + +If your changes are relative to a release branch, change branches, for example:: + + git checkout v1.0.x + +Then make a new branch:: + + cd matplotlib + git checkout -b topic + +Make your changes, making commits as you see fit. To submit the changes, if you +don't have a github account:: + + git diff topic v1.0.x > topic.diff + +Post your patch the :file:`topic.diff` to the `matplotlib-devel +`_ mailing list. + +If you do have a github account, push the topic branch to your fork:: + + git push origin topic + +Then visit your profile at github, select the new branch, and file a pull +request. + +If you don't want to create a github account:: + + git clone git://github.com/matplotlib/matplotlib.git + cd matplotlib + git checkout If you are posting a patch to fix a code bug, please explain your patch in words -- what was broken before and how you fixed it. Also, even if your patch is particularly simple, just a few lines or a -single function replacement, we encourage people to submit svn diffs -against HEAD or the branch they are patching. It just makes life +single function replacement, we encourage people to submit git diffs +against HEAD of the branch they are patching. It just makes life simpler for us, since we (fortunately) get a lot of contributions, and want to receive them in a standard format. If possible, for any non-trivial change, please include a complete, free-standing example @@ -619,7 +635,7 @@ your documents. Once your documentation contributions are working (and hopefully tested by actually *building* the docs) you can submit them as a patch -against svn. See :ref:`install-svn` and :ref:`how-to-submit-patch`. +against git. See :ref:`install-git` and :ref:`how-to-submit-patch`. Looking for something to do? Search for `TODO <../search.html?q=todo>`_. diff --git a/doc/faq/installing_faq.rst b/doc/faq/installing_faq.rst index 3e95cb0e61e4..8a439d6ca5a7 100644 --- a/doc/faq/installing_faq.rst +++ b/doc/faq/installing_faq.rst @@ -92,14 +92,18 @@ install directory. To cleanly rebuild: ` -.. _install-svn: +.. _install-git: -Install from svn +Install from git ================ -Checking out the main source:: +Clone the main source using one of:: + + git clone git@github.com:matplotlib/matplotlib.git + +or:: - svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/matplotlib matplotlib + git clone git://github.com/matplotlib/matplotlib.git and build and install as usual with:: @@ -114,12 +118,13 @@ the last step with (Make sure you have **setuptools** installed):: This creates links in the right places and installs the command line script to the appropriate places. Then, if you want to update your **matplotlib** at any time, just do:: - > svn update + > git pull -When you run `svn update`, if the output shows that only Python files have been updated, you are all set. -If C files have changed, you need to run the `python setupegg develop` command again to compile them. +When you run `git pull`, if the output shows that only Python files have been +updated, you are all set. If C files have changed, you need to run the `python +setupegg.py develop` command again to compile them. -There is more information on :ref:`using Subversion ` in +There is more information on :ref:`using git ` in the developer docs. Install from git @@ -393,38 +398,33 @@ previous version of MPL was installed (Looks something like ``./matplotlib-0.98. 3. Save the following as a shell script , for example ``./install-matplotlib-epd-osx.sh`` :: - NAME=matplotlib - VERSION=0_99 - PREFIX=$HOME - #branch="release" - branch="trunk" - if [ $branch = "trunk" ] - then - echo getting the trunk - svn co https://matplotlib.svn.sourceforge.net/svnroot/$NAME/trunk/$NAME $NAME - cd $NAME - - fi - if [ $branch = "release" ] - then - echo getting the maintenance branch - svn co https://matplotlib.svn.sf.net/svnroot/matplotlib/branches/v${VERSION}_maint $NAME$VERSION - cd $NAME$VERSION - fi - export CFLAGS="-Os -arch i386" - export LDFLAGS="-Os -arch i386" - export PKG_CONFIG_PATH="/usr/x11/lib/pkgconfig" - export ARCHFLAGS="-arch i386" - python setup.py build - python setup.py install #--prefix=$PREFIX #Use this if you don't want it installed into your default location - cd .. + NAME=matplotlib + VERSION=v1.0.x + PREFIX=$HOME + #branch="release" + branch="trunk" + git clone git://github.com/matplotlib/matplotlib.git + cd matplotlib + if [ $branch = "release" ] + then + echo getting the maintenance branch + git checkout -b $VERSION origin/$VERSION + fi + export CFLAGS="-Os -arch i386" + export LDFLAGS="-Os -arch i386" + export PKG_CONFIG_PATH="/usr/x11/lib/pkgconfig" + export ARCHFLAGS="-arch i386" + python setup.py build + # use --prefix if you don't want it installed in the default location: + python setup.py install #--prefix=$PREFIX + cd .. Run this script (for example ``sh ./install-matplotlib-epd-osx.sh``) in the directory in which you want the source code to be placed, or simply type the commands in the terminal command line. This script sets some local variable (CFLAGS, LDFLAGS, PKG_CONFIG_PATH, ARCHFLAGS), removes previous installations, -checks out the source from svn, builds and installs it. The backend seems to be -set to MacOSX. +checks out the source from github, builds and installs it. The backend seems +to be set to MacOSX. Windows questions diff --git a/doc/faq/troubleshooting_faq.rst b/doc/faq/troubleshooting_faq.rst index 7156c6dfebde..dd232642982a 100644 --- a/doc/faq/troubleshooting_faq.rst +++ b/doc/faq/troubleshooting_faq.rst @@ -127,18 +127,18 @@ a bug and can not be quickly solved, you may be asked to file a bug in the tracker so the issue doesn't get lost. -.. _svn-trouble: +.. _git-trouble: -Problems with recent svn versions -=============================================================== +Problems with recent git versions +================================= First make sure you have a clean build and install (see -:ref:`clean-install`), get the latest svn update, install it and run a +:ref:`clean-install`), get the latest git update, install it and run a simple test script in debug mode:: rm -rf build rm -rf /path/to/site-packages/matplotlib* - svn up + git pull python setup.py install > build.out python examples/pylab_examples/simple_plot.py --verbose-debug > run.out diff --git a/doc/sphinxext/gen_rst.py b/doc/sphinxext/gen_rst.py index 94418ac4a497..fe600fb776c0 100644 --- a/doc/sphinxext/gen_rst.py +++ b/doc/sphinxext/gen_rst.py @@ -31,8 +31,8 @@ def generate_example_rst(app): datad = {} for root, subFolders, files in os.walk(rootdir): for fname in files: - if ( fname.startswith('.') or fname.startswith('#') or fname.startswith('_') or - fname.find('.svn')>=0 or not fname.endswith('.py') ): + if ( fname.startswith('.') or fname.startswith('#') + or fname.startswith('_') or not fname.endswith('.py') ): continue fullpath = os.path.join(root,fname) diff --git a/doc/users/credits.rst b/doc/users/credits.rst index 8c9e1be4e33a..a8b24b6c7e89 100644 --- a/doc/users/credits.rst +++ b/doc/users/credits.rst @@ -120,13 +120,13 @@ Jeffrey Whitaker at `NOAA `_ wrote the :ref:`toolkit_basemap` tookit -Sigve Tjoraand, Ted Drain, James Evans +Sigve Tjoraand, Ted Drain, James Evans and colleagues at the `JPL `_ collaborated on the QtAgg backend and sponsored development of a number of features including custom unit types, datetime support, scale free ellipses, broken bar plots and more. The JPL team wrote the unit testing image comparison `infrastructure - `_ + `_ for regression test image comparisons. James Amundson @@ -155,7 +155,7 @@ The `brainvisa `_ Orsay team and Fernando Perez Charlie Moad contributed work to matplotlib's Cocoa support and has done a lot of work on the OSX and win32 binary releases. -Jouni K. Seppänen +Jouni K. Seppänen wrote the PDF backend and contributed numerous fixes to the code, to tex support and to the get_sample_data handler diff --git a/doc/users/installing.rst b/doc/users/installing.rst index a0ef036b6b74..427c053e1666 100644 --- a/doc/users/installing.rst +++ b/doc/users/installing.rst @@ -98,7 +98,7 @@ build everything yourself, it is not difficult to build matplotlib from source. Grab the latest *tar.gz* release file from `sourceforge `_, or if you want to develop matplotlib or just need the latest bugfixed -version, grab the latest svn version :ref:`install-svn`. +version, grab the latest git version :ref:`install-git`. Once you have satisfied the requirements detailed below (mainly python, numpy, libpng and freetype), you build matplotlib in the usual @@ -109,7 +109,7 @@ way:: python setup.py install We provide a `setup.cfg -`_ +`_ file that lives along :file:`setup.py` which you can use to customize the build process, for example, which default backend to use, whether some of the optional libraries that matplotlib ships with are @@ -210,7 +210,7 @@ The build situation on OSX is complicated by the various places one can get the png and freetype requirements from (darwinports, fink, /usr/X11R6) and the different architectures (x86, ppc, universal) and the different OSX version (10.4 and 10.5). We recommend that you build -the way we do for the OSX release: by grabbing the tarbar or svn +the way we do for the OSX release: by grabbing the tarbar or git repository, cd-ing into the release/osx dir, and following the instruction in the README. This directory has a Makefile which will automatically grab the zlib, png and freetype dependencies from the diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index 3c9cb7407d2f..938ff22318cc 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -100,8 +100,6 @@ from __future__ import generators __version__ = '1.0.1' -__revision__ = '$Revision$' -__date__ = '$Date$' import os, re, shutil, subprocess, sys, warnings import distutils.sysconfig diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py index 9ac73c81cf06..84ba120dbf37 100644 --- a/lib/matplotlib/backends/backend_pdf.py +++ b/lib/matplotlib/backends/backend_pdf.py @@ -398,11 +398,7 @@ def __init__(self, filename): 'Pages': self.pagesObject } self.writeObject(self.rootObject, root) - svn_special_string = '$Rev$' # on checkout, gets replaced by svn client - if ':' in svn_special_string: - revision = ' r'+svn_special_string.strip('$').split(':')[1].strip() - else: - revision = '' + revision = '' self.infoDict = { 'Creator': 'matplotlib %s, http://matplotlib.sf.net' % __version__, 'Producer': 'matplotlib pdf backend%s' % revision, diff --git a/matplotlibrc.template b/matplotlibrc.template index 3346ec36dff2..67933f94849b 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -371,11 +371,10 @@ backend : %(backend)s #keymap.all_axes : a # enable all axes # Control downloading of example data. Various examples download some -# data from the Matplotlib svn repository to avoid distributing extra +# data from the Matplotlib git repository to avoid distributing extra # files, but sometimes you want to avoid that. In that case set # examples.download to False and examples.directory to the directory -# where you have a checkout of -# https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/sample_data +# where you have a checkout of https://github.com/matplotlib/sample_data #examples.download : True # False to bypass downloading mechanism #examples.directory : '' # directory to look in if download is false diff --git a/release/osx/README.txt b/release/osx/README.txt index 1c8492f855b0..de5e19edc672 100644 --- a/release/osx/README.txt +++ b/release/osx/README.txt @@ -87,9 +87,9 @@ Build the mpl sdist:: cd ../.. python setup.py sdist - mv dist/matplotlib-0.98.6svn.tar.gz release/osx/ + mv dist/matplotlib-0.98.6.tar.gz release/osx/ -Set the version number in the Makefile to 0.98.6svn and build the +Set the version number in the Makefile to 0.98.6 and build the installers :: cd release/osx diff --git a/release/osx/data/setup.cfg b/release/osx/data/setup.cfg index f711111a34d0..c4f9682284c8 100644 --- a/release/osx/data/setup.cfg +++ b/release/osx/data/setup.cfg @@ -2,7 +2,6 @@ # build options. [egg_info] -tag_svn_revision = 1 [status] # To suppress display of the dependencies and their versions diff --git a/release/win32/data/setup.cfg b/release/win32/data/setup.cfg index 3f2b860597de..03fecb25d0a0 100644 --- a/release/win32/data/setup.cfg +++ b/release/win32/data/setup.cfg @@ -2,7 +2,6 @@ # build options. [egg_info] -tag_svn_revision = 0 [status] # To suppress display of the dependencies and their versions diff --git a/setup.cfg.template b/setup.cfg.template index 6ea8cfe73565..0e55d9741c4c 100644 --- a/setup.cfg.template +++ b/setup.cfg.template @@ -2,7 +2,6 @@ # build options. [egg_info] -tag_svn_revision = 1 [directories] # Uncomment to override the default basedir in setupext.py. diff --git a/setup.py b/setup.py index a319228e9646..660fae3716b9 100644 --- a/setup.py +++ b/setup.py @@ -209,9 +209,10 @@ def add_pytz(): packages.append('pytz') resources = ['zone.tab', 'locales/pytz.pot'] - for dirpath, dirnames, filenames in os.walk(os.path.join('lib', 'pytz', 'zoneinfo')): + for dirpath, dirnames, filenames in os.walk( + os.path.join('lib', 'pytz', 'zoneinfo') + ): - if '.svn' in dirpath: continue # remove the 'pytz' part of the path basepath = os.path.join(*dirpath.split(os.path.sep)[2:]) #print dirpath, basepath diff --git a/unit/threading_test.py b/unit/threading_test.py index d31a346cc226..10d5458dea6e 100644 --- a/unit/threading_test.py +++ b/unit/threading_test.py @@ -2,7 +2,7 @@ """ Test by Karen Tracey for threading problem reported in http://www.mail-archive.com/matplotlib-devel@lists.sourceforge.net/msg04819.html -and solved by JDH with svn r7008. +and solved by JDH in git commit 175e3ec5bed9144. """ import os From fa26fa116c9ca18b327f219bc9d8e30bc298ca35 Mon Sep 17 00:00:00 2001 From: Jarrod Millman Date: Sun, 20 Feb 2011 18:33:48 -0800 Subject: [PATCH 3/4] DOC - added gitwash directory using gitwash_dumper.py --- doc/devel/gitwash/branch_list.png | Bin 0 -> 13361 bytes doc/devel/gitwash/branch_list_compare.png | Bin 0 -> 10679 bytes doc/devel/gitwash/configure_git.rst | 123 +++++++++++ doc/devel/gitwash/development_workflow.rst | 239 +++++++++++++++++++++ doc/devel/gitwash/dot2_dot3.rst | 28 +++ doc/devel/gitwash/following_latest.rst | 36 ++++ doc/devel/gitwash/forking_button.png | Bin 0 -> 13092 bytes doc/devel/gitwash/forking_hell.rst | 32 +++ doc/devel/gitwash/git_development.rst | 15 ++ doc/devel/gitwash/git_install.rst | 26 +++ doc/devel/gitwash/git_intro.rst | 18 ++ doc/devel/gitwash/git_links.inc | 54 +++++ doc/devel/gitwash/git_resources.rst | 59 +++++ doc/devel/gitwash/index.rst | 16 ++ doc/devel/gitwash/known_projects.inc | 41 ++++ doc/devel/gitwash/links.inc | 4 + doc/devel/gitwash/patching.rst | 134 ++++++++++++ doc/devel/gitwash/pull_button.png | Bin 0 -> 12893 bytes doc/devel/gitwash/set_up_fork.rst | 67 ++++++ doc/devel/gitwash/this_project.inc | 5 + 20 files changed, 897 insertions(+) create mode 100644 doc/devel/gitwash/branch_list.png create mode 100644 doc/devel/gitwash/branch_list_compare.png create mode 100644 doc/devel/gitwash/configure_git.rst create mode 100644 doc/devel/gitwash/development_workflow.rst create mode 100644 doc/devel/gitwash/dot2_dot3.rst create mode 100644 doc/devel/gitwash/following_latest.rst create mode 100644 doc/devel/gitwash/forking_button.png create mode 100644 doc/devel/gitwash/forking_hell.rst create mode 100644 doc/devel/gitwash/git_development.rst create mode 100644 doc/devel/gitwash/git_install.rst create mode 100644 doc/devel/gitwash/git_intro.rst create mode 100644 doc/devel/gitwash/git_links.inc create mode 100644 doc/devel/gitwash/git_resources.rst create mode 100644 doc/devel/gitwash/index.rst create mode 100644 doc/devel/gitwash/known_projects.inc create mode 100644 doc/devel/gitwash/links.inc create mode 100644 doc/devel/gitwash/patching.rst create mode 100644 doc/devel/gitwash/pull_button.png create mode 100644 doc/devel/gitwash/set_up_fork.rst create mode 100644 doc/devel/gitwash/this_project.inc diff --git a/doc/devel/gitwash/branch_list.png b/doc/devel/gitwash/branch_list.png new file mode 100644 index 0000000000000000000000000000000000000000..1196eb754d361dbb2e53a25745f913c2f0cdb83e GIT binary patch literal 13361 zcmX}TV|XS_*R~zowr!ge+qRR5&53cwww+9D+nU(6ZNGEP{e0h#?ylOZdZB)G@5fr< zit-ZhFgP$kKtS+PlA_8$K){}V$7)azfA5tzNrQhM&<>JX&Oku0sQ+ESKp9zBKtM!5 zQli4D9>AA+kh-cPOW%wg7jqbK1^yrybO3yt6%*MDdYnS>+_xy^>mjuJt~BFG6;u`d zg79!9lgO?-@de9^2=VY0blL)c<)Q|e)nQ+YtE>J%q7G=l$t0rNb+*@$-=8dQXY(t) z_#6fAha9 zssG#ccZH~~*}koEdQ0Zcj?S>`{{+wLWUgRApK7BCJrL5|)(NTZp^5CE#P*IZj zn{SV?!z#!BTmr}VvqNdxjIqMzPV3zjwh#DFiD{E^hvIp+}tmb7P)k=@)NRz7EjE#-mJUoaB2>}%; zmlum!+XyTjCncfnT2gD=v8P05ImGm;gb5{6d7AgJf*aK6ca{xc;7Vo;Fe$icGh**Ih9CIQ=VS6mb?_OfPGMP_pLTG*wFH z`v07Si{xd{d(s;#Tn#U6B13emVzwT$>QeMv{2hDR6FAwO=^wqt~8}qG=pIC*dVO zGD!1G13gPde5+(TW6rf=EY~+MjbU{(1X}^0$Nrda%?!k-XFlXE%9Jaqza?wbN!V!- zCx=dU&h(SMcJ_pI#bqAs^hWwqXc=+OpQFjp$q=n5=uPdSXC{BXvW%MBRhe5J?OQVE zht|0T4CA0Ho$t;uA?4@e%Z$YgEvi`$hvoU8u_ym-eE?r!bte*lo~D~M9qe|XyTOgs z>*{!w?#W&+QQ;^t4>}62n+C2OO(k zHGLj`<0jpf*3!`t1eL`2+dobVnercyI^CO#)`c}Qo-kQB>72-g<=$NzS$J?QTv{7F z)ru=x%R!s%r~7!(HV?k+HZkKX8dp>Cz8l2I@wA}xDzyAKXT%k%ERgEz&q!KnvB70% zO7mAjU^zINyQi*%Q0CNiP0|{F4VYRb8uSP zJE5UL<$?unUW3u8o`jP+b|e01ESRKuw58aofUr}vaxp7O#V*&_B^f))C2qPwztvC! z_Jd~HSZRU5m8XDOOdnpm4A#uz#|XfrkQ3AJD`m;_QYNiZzDr&W57b$YK=T=WL1b$4 z{E!hd?cu=+4w4uDt}$Iwz6aKuliSAmRMM(xR&7Jin}Z=; zJaRoC$dUfGvt}?4Y%C&qHfZC?g=W0(55~`8sY~=!_MSP@EwMK}_XVfsFdj<6*c_Be z8Etp^_?b$2*HBVwn`m%pf&0B{uBrr+JAk32XxmK1oFnZK2ZK1CC=dJQh8TiGIROm1 zQkE-nt%c! zIf_n#EpJpdGip_K0Ek}Q56p?IT_QED(t~pL@GLqW>3l^!SRPV>%KpfKZhg4KLVqFEYpgY>0xbrT#}k(8H3`{q={;W1@B#Wq10bc|GFK>TE3b$z#pRRk540vC}>j!(;wHhEu z%s=8QYUrVzoRFWmGH}oCm$UXlw7S}Cn9q>(BXd%=@viqs-Cs7y@|5+>S+hoirk(6< zf}K$4{K|FiV<2>z&4}0q+BdMLp?(T}xYL|7| zL`<68-oH*TJfV>_pwhn{^EFI&=K`2M+*s6SEadg+nJf>G*j!se7!FZLm$9=uktG7Ft_V9nHWI&SjB2(x)igrK~SCz%bD~ZZuuyR zT&X+E^ADHRN5p@J>vgW`jF(jZSWAQ%M-89unG%bo@O&ZFj)+$Y?akCBhHIdY*E(T; zQfqX=giWi_#td=WAI{G%t=8QV%J#2Ke&5|AY?6(VcGx_Cs9%Es$)rn4Z08M?ILnw@Dn5njrrkw>j#ym z>7BD4lb0-vfQ~0h-53d5rAb%}qg&tXqY+@KQ9>n?513R%PwjQ8mAIhpxiP zdFp`&y-Pft&Xu@PtEJZ4n(GfG5~E}ePUypMoG<<^&C-5fn}bb{9_;1^`brxmOkYhm zd7KQ=98KsgCoHl~%ifOy&^HC_XdnutVWNW5o0WibFl8AZHWRYW;JOqklW6VR^I*=A zlKsp_B`zmscws#=fMy3y%O|9vOIeL#&|4pOrIz_L(tL>WgN?k|+fBC{S(NoUKNj+vre3QAqpz?z@8-(VF7z#g^OOO1M^VBT3~A zb-vTg8?vK=d4$t@7pn~`0!`6z1Wl$WUsfeMTBd^;S|^;o{7&JHuVa+R=;$GU7hREG zB=mc+_`T_@BXMyOGII03M7fUsq($C%>@@#?HGA-SAovt`5*vZ8F&LeUDm=WR#JagQ zPy!<7=-figWdfi6xoANm@RQO!3Oj(muF>;`OT-sJj?-V}nV?K!oQ-omZwDM@bno=@ z2+!wT$&X7)l&i-IxH&P<{d$J5P~s_+>lB9LqZWxXnN8m*AwDkNKk*%rbbuEuJEM*0 za2&W&6FKypqx)p7oO%I!RmdbLCInsf;uL^LjNP>5IX+;lLz zcR#!frDsk^Kt-yv5UjS&+TGs=r7X;h^xQ=uSuz~TxgUKv3n%8s9SB#)I}*-D3*ud< zc+vyOUq;LGPip(s3*^J|j7#@n1EUKty(e;e5}WAFfx1I0^xyD({Rz*KFdt0!fJNAq zA_C|AJ?v1L=Db{Qs4<>uudkt|doIk9n-NgiC~IU>zg;&vIvNsF`PLuEtJ!Qw|0kZa z_&iR7snVN&gS#QD@*+_YRq%dJ(ykDZGzyI`3pcMiHnUcc7=_teJ>WC)c%O-SQ~WcO zWN-ponU#3qxRf}a#_@^(h7rda#;6iK=y;)(9%rsG!Qqg{g+<47Q))PykHrQL?qkNR z6uAdAPHKNnKOx|z1{2yA+y&pi`%>3|G~z_p9fzktB^xI!s>9R4#f=IFva&mqn`HE| z*dqx~JJPdB>n^4$Y^N#jP!mH=9fo@5^}!zIQetY*uM{yz<4Ve>j!qlk>-dH;iL*{n zE|F?@;ysZUn-h!QqW=RIOW)7tiaarWTk&+yTkymCiuYt?4$)gMmu7*M@bK3!gXz$$oKvCucy%ER3d2*#>-p?@8ikZ~gf^jMi`aa*za z%K5whT_j`9NdV$`%K-46)5Yw4gtRbcy_+b2pGk-&MCVQvIg)1v(Z!4T>nt&ra}&f>U7n|Z{uMrN` z9Res*tqzdt<$7Vtl(HxddK~u)5u?UE6&5XJG}An5NcCip#C8mrpdDlMqFByRhx<>>yG|M#BXOMnlCTb~^q=n3`x`f`TYkhdG13 zp>^yNyo87jDb=L4Hg9g=xu+>)nQez_L_aaI6kUzviOiIIh%K%byzunI4wNLXjTMUG zASfJNo;%njf|Br#N2RSx+l!7u=;%UcXscTITQLIGGy)Mr zCrT7El8f`zVr}a%?1nI+`vqb$)KL+^tmxxTn>=dEp!Po%wU*BUy5koR3WXbPxSXh@ zqj`CU^v!h{cgA(jr*>Jg$oV6K=~!FCs2O~3A-sCb39n<%V1*2=`nE=u<#JpYN_#Qw zb|fq)i&Un(11!xkwE-*QWQNtLSmy=Lnr1ocVfQr1Z(Z-~Z%e7d6{i8_1hhAw)!Rsg zXCT<Z}Iz(InhhHeL77Lyix4y$Hz;Y(~S9zDi-f+ut#f!!a%ZF(D_e=PC(E&Z;zOQD8 zRDLztO*z+BucF;u>9?o|Z=lgh>B{C2`@#7ovD}t%B^$wdiccVvwzOUhlMRwZPERP^ zgTI+P?t~RBC#4o+8yOo*ef2n8V^I;ag1B@_+(u&vqYDjry)$*aI%;s-T~~R2YAN(Hqw1wFOk@5|WX=2Cl)&PD1*PW5FHwly299lp(Oa0U6?{U`FN8H%^AWUBLQAVRMT7^)$N+pZb&336e6HZwAq1^CMG~L+!Uv#& z^oj-y_IRUCq&sVF){x~Kgy{$8(~FWsV#yjc8Ba0J-eN#?5LVt|9ggSdVNae7E6 zxeb@$V}WelR*VKpc3;9UrvYMz#%#&206{5lNo1C#)LIB4qZKx<~jt_6P< zJ_2(4f`;Xj&{Mn^Qbz<&xHmTFy3;oQ9O(71~#+%$=|spmQSr8Ib?R3V*!+z%It9sS3Qiea47{=59u`aY9$^tj7UVml(}cT;QyRo; z?s(7oB!nHzY3tr3M~Y;#(}iZ{vs%pMj?gj~_MUxz`r;^PJp3~qLv_X8q)Z_h4FrYD z_85!N)beHJC?`NHMXwT`Mn#0_8CO{J(e7KRYF@>Pjm*$OA>C0eK`Z6!k}23q2Fec& zc7&Xew$gTF0i%lRAslCt;SEpeAnY$Lk<{}ijfxeGrmG1k6!*=Fa)I)+V8n#w48lQ5 za(VR*PXV~_UhtP$8E*sQ)(fgzl9(!=bXAh7r~OH(O*AOpMhlhLt-r3wejaWP|I zzj;9+_rJxP>s~yFD$W@p_jj0+C_(Tu4F~;!=w59Jefc*#TD5Hv<}8s!#Ib%ti74Y# z8f@Y7^y^5}R1i%>jb$UHJuUDSIO1|WLms)o|lW-AK=}c&UFO>ysFC zUjb*15)9#@`f6KB-J)geo=RPdNO!p-(rOU&UHCQ9@Zg&e_1~nMxHK_sow`hFbIPz+ z$S8bp+){*dV5NTg2Azhvn4(%P(LhH3|}gl%ZE<#Y3*WZJqufNHmx`7>+aq z9}=S*V$Ju!e`W@zC1@#9J1gyIN`5LP!d8Lute_PHM2gmam7|K8J+{kkaN^U{3nA!f zW&VIg_e-ilo}jWuiDOBqj2Z8&#mb$eG?Q0M!IX?rVBLM>UT`Ejid%g|&E z{dgu8-YVVQ$6>2y<$ewqGmM>Kjj2nRF>ygei}dS_#)%T5kC{8+<0AB7E|(;c-S{|m zhX^?)zT#x1Pv*r!kqX8xG=JiRu^d2%L5EF+hQ15#)AR((mfsO9XxS8>7NG4Kv}>8r zJ_nz+sez;3{5Vrh;K1Yti7?poL!!m_==ZhQo+is_QOe~GWh^C~T5EDzv=HHd(DL#2 z2)(i_g0drYKy5xbap5!>S;zumfW8XYW6)Ry;8GmpEI7J!Z)4KTp2}cDFG#duFVrg< zeO6pkc$~X(9Y6M%0&e8MF35;+YGh39zLq@3S2{ty49!$9MvkBLESyce(4s^5c zqwX3>Ne(pC2CQoZ-8D-T;A$C0o%r@+n!_AAv(-e$fvXCE&+;H4U%@e?|6uU!)@})g z%Mpz?1|%o{*RIwGbhPN}3Z^)6{S(v!l89@pTx;x3G%|y_Ydi_XP;sj3klz<83g@z4 z=wYe5;qep@oQDaY|Dgl*_O3RCky2QT5qfUMI%qZSS)bMbZfj+FpUxe6f=(Y zT>(VUa$BM)RHq7+Z~Wj*)~h5naq`I2SEONk#g&8+WE+&!j^>YAL}4~wCa&5jlg;>a zWBQ(+8E`(JU#i&zvuOg2u%XeovAfe@hLal(`N%y1T|4LNkc5pE=`6RG2U}R*SLY|J zH~chx5L2*NveMg|(QHJpN(RQGg2U*=xFi$rEaJ=Wv`0P+5&zaWzLcnM|I)n1UlPjTlULdwtP$eBT^9-(ceXT976Z>bnsq$tlS)8JMd@w#A7Fbv^Cq-#mKS&Nupilr;LPLlMV0F zEyQq5eY?E*iVMGW@GuiR0Ao}(T=>ro=VGNm5l8ucdsV?w-{*j@fw5< zFe$4`iH~cx8}R(Xci)V#Xo){045z?&U6#g5!~5ba(HyVNC;AHFkp>)hl4vB&dnZ$9 zYZv^1rBuyqM4X74{tacgd=E1BuElb;S?3FOSc(jeU4Q zmyzz!Cg}y#nnYphaL03-ru0d;D>i0her@P!l&!(Waw{4hebYoqw;F|!K6jf2?=a_E z#%r6rvgxJME zLumPwqqtzeA7{!}1tj6aDnQ zK)YYRFhz?;k$9d!UGDPWY3?Q(3}qtJropxjI?TE$Q4P}FwarIMDb18!{bTIpzzTI^%a%C-pk&1lew}0?r(7!;yV%QIc$XejoY)U54 zCsN8d(r^+!F2+12YMqx!2QMB)uS>->|6+3Y<)(W99Hkx{oI_39Is6#rv1kHlKQ=J zO3vH{I`MP*PYva8&k7!Roy5)jhyBg|u!!OsxZ&BuZrpsZCJ{-FqGx(}r_vuYFu028 zY9&NCIG50~H;ydRb(`WhvfDGjxA(r8QRPt9N)Y=*>V8Wk_8=lR-zqctkP+R67lCv# zTz1%F!9b3SkLxO;X7eW)4mfVkf`!T8Fg;jJ&j!3(dA#P=J_wz5L#)%%&`RugxYr=k zww=gq%u&qw`_hg#4l45%aFX=neCynN{8Yq&qQhx&K^I-8CSKdx$$TIZF0S=0BLTn1 z4NzYngv@H-@4p{#;^x4t#bj~bUIUAUP{~xkiyFER(QsB07WY)9?}-iU++Vm+D52@q*d-;9Wt3eqxpGdG=kKW#c2VDULaak2_V5_u7b*^nl8o{_c zNN)I`Z-$?rA-^qP>Ok?g<$E_5SLw3%*MSz z{X-77ockgl%c)~@bCXDgHm-!prgHqiE>7lDQm-AP*?gJqS>#ZRrL}GT52@{-Ig-7m zo-)rwR*uMs?3e+yvr7S?ALY5URHp84kb@)C*i&Lc&bKOH$a-_t2-$%F?x-6YL=Fch z=fWv(cKneEYNK?RUn#43iYJf*eGttY+G{f<0$ekp6rf5PLL;vyk3dN@1<*4&9H)4u z##F3xC!-{`HXW@4v(0f=tihyF%`prQKnS+V%1| zCh0L50^fYmboA1M{wDFUR4pm^7*pw-PY=mOFyukg

_7R111LPD;|HP^UiQJ< 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 VTJiw>+XDn7B_=Og{lhTu{{jB^XlDQb literal 0 HcmV?d00001 diff --git a/doc/devel/gitwash/branch_list_compare.png b/doc/devel/gitwash/branch_list_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..336afa3746040f118c073e7d02a5843bc8eed152 GIT binary patch literal 10679 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.7 you can ensure that the link is correctly set by using the +``--set-upstream`` option:: + + git push --set-upstream origin my-new-feature + +From now on git_ will know that ``my-new-feature`` is related to the +``my-new-feature`` branch in the github_ repo. + +The editing workflow +==================== + +Overview +-------- + +:: + + # hack hack + git add my_new_file + git commit -am 'NF - some message' + git push + +In more detail +-------------- + +#. Make some changes +#. See which files have changed with ``git status`` (see `git status`_). + You'll see a listing like this one:: + + # On branch ny-new-feature + # Changed but not updated: + # (use "git add ..." to update what will be committed) + # (use "git checkout -- ..." to discard changes in working directory) + # + # modified: README + # + # Untracked files: + # (use "git add ..." to include in what will be committed) + # + # INSTALL + no changes added to commit (use "git add" and/or "git commit -a") + +#. Check what the actual changes are with ``git diff`` (`git diff`_). +#. Add any new files to version control ``git add new_file_name`` (see + `git add`_). +#. To commit all modified files into the local copy of your repo,, do + ``git commit -am 'A commit message'``. Note the ``-am`` options to + ``commit``. The ``m`` flag just signals that you're going to type a + message on the command line. The ``a`` flag |emdash| you can just take on + faith |emdash| or see `why the -a flag?`_ |emdash| and the helpful use-case + description in the `tangled working copy problem`_. The `git commit`_ manual + page might also be useful. +#. To push the changes up to your forked repo on github_, do a ``git + push`` (see `git push`). + +Asking for code review +====================== + +#. Go to your repo URL |emdash| e.g. ``http://github.com/your-user-name/matplotlib``. +#. Click on the *Branch list* button: + + .. image:: branch_list.png + +#. Click on the *Compare* button for your feature branch |emdash| here ``my-new-feature``: + + .. image:: branch_list_compare.png + +#. If asked, select the *base* and *comparison* branch names you want to + compare. Usually these will be ``master`` and ``my-new-feature`` + (where that is your feature branch name). +#. At this point you should get a nice summary of the changes. Copy the + URL for this, and post it to the `matplotlib mailing list`_, asking for + review. The URL will look something like: + ``http://github.com/your-user-name/matplotlib/compare/master...my-new-feature``. + There's an example at + http://github.com/matthew-brett/nipy/compare/master...find-install-data + See: http://github.com/blog/612-introducing-github-compare-view for + more detail. + +The generated comparison, is between your feature branch +``my-new-feature``, and the place in ``master`` from which you branched +``my-new-feature``. In other words, you can keep updating ``master`` +without interfering with the output from the comparison. More detail? +Note the three dots in the URL above (``master...my-new-feature``) and +see :ref:`dot2-dot3`. + +Asking for your changes to be merged with the main repo +======================================================= + +When you are ready to ask for the merge of your code: + +#. Go to the URL of your forked repo, say + ``http://github.com/your-user-name/matplotlib.git``. +#. Click on the 'Pull request' button: + + .. image:: pull_button.png + + Enter a message; we suggest you select only ``matplotlib`` as the + recipient. The message will go to the `matplotlib mailing list`_. Please + feel free to add others from the list as you like. + +Merging from trunk +================== + +This updates your code from the upstream `matplotlib github`_ repo. + +Overview +-------- + +:: + + # go to your master branch + git checkout master + # pull changes from github + git fetch upstream + # merge from upstream + git merge upstream/master + +In detail +--------- + +We suggest that you do this only for your ``master`` branch, and leave +your 'feature' branches unmerged, to keep their history as clean as +possible. This makes code review easier:: + + git checkout master + +Make sure you have done :ref:`linking-to-upstream`. + +Merge the upstream code into your current development by first pulling +the upstream repo to a copy on your local machine:: + + git fetch upstream + +then merging into your current branch:: + + git merge upstream/master + +Deleting a branch on github_ +============================ + +:: + + git checkout master + # delete branch locally + git branch -D my-unwanted-branch + # delete branch on github + git push origin :my-unwanted-branch + +(Note the colon ``:`` before ``test-branch``. See also: +http://github.com/guides/remove-a-remote-branch + +Several people sharing a single repository +========================================== + +If you want to work on some stuff with other people, where you are all +committing into the same repository, or even the same branch, then just +share it via github_. + +First fork matplotlib into your account, as from :ref:`forking`. + +Then, go to your forked repository github page, say +``http://github.com/your-user-name/matplotlib`` + +Click on the 'Admin' button, and add anyone else to the repo as a +collaborator: + + .. image:: pull_button.png + +Now all those people can do:: + + git clone git@githhub.com:your-user-name/matplotlib.git + +Remember that links starting with ``git@`` use the ssh protocol and are +read-write; links starting with ``git://`` are read-only. + +Your collaborators can then commit directly into that repo with the +usual:: + + git commit -am 'ENH - much better code' + git push origin master # pushes directly into your repo + +Exploring your repository +========================= + +To see a graphical representation of the repository branches and +commits:: + + gitk --all + +To see a linear list of commits for this branch:: + + git log + +You can also look at the `network graph visualizer`_ for your github_ +repo. + +.. include:: links.inc diff --git a/doc/devel/gitwash/dot2_dot3.rst b/doc/devel/gitwash/dot2_dot3.rst new file mode 100644 index 000000000000..7759e2e60d68 --- /dev/null +++ b/doc/devel/gitwash/dot2_dot3.rst @@ -0,0 +1,28 @@ +.. _dot2-dot3: + +======================================== + Two and three dots in difference specs +======================================== + +Thanks to Yarik Halchenko for this explanation. + +Imagine a series of commits A, B, C, D... Imagine that there are two +branches, *topic* and *master*. You branched *topic* off *master* when +*master* was at commit 'E'. The graph of the commits looks like this:: + + + A---B---C topic + / + D---E---F---G master + +Then:: + + git diff master..topic + +will output the difference from G to C (i.e. with effects of F and G), +while:: + + git diff master...topic + +would output just differences in the topic branch (i.e. only A, B, and +C). diff --git a/doc/devel/gitwash/following_latest.rst b/doc/devel/gitwash/following_latest.rst new file mode 100644 index 000000000000..4419abd82d69 --- /dev/null +++ b/doc/devel/gitwash/following_latest.rst @@ -0,0 +1,36 @@ +.. _following-latest: + +============================= + Following the latest source +============================= + +These are the instructions if you just want to follow the latest +*matplotlib* source, but you don't need to do any development for now. + +The steps are: + +* :ref:`install-git` +* get local copy of the git repository from github_ +* update local copy from time to time + +Get the local copy of the code +============================== + +From the command line:: + + git clone git://github.com/matplotlib/matplotlib.git + +You now have a copy of the code tree in the new ``matplotlib`` directory. + +Updating the code +================= + +From time to time you may want to pull down the latest code. Do this with:: + + cd matplotlib + git pull + +The tree in ``matplotlib`` will now have the latest changes from the initial +repository. + +.. include:: links.inc diff --git a/doc/devel/gitwash/forking_button.png b/doc/devel/gitwash/forking_button.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e04134d4d086d0c78c45188848c4a0b71b157d GIT binary patch literal 13092 zcmdtJQ*dVA6E+&#w%*vbjfrh*qBoc%6Wg}U2`08}+qUg|^ZS1{=jPP8KNoxNUiI|q zs?}Ays@L;$hbt*aA;RIofq;M@%1Dc=fPjGN|Fbn* zTHgUM)Ne)9WC0l7en!F`(4=#u!e##CAt(uPa59|jqfeXP>7H)$(t~j%>9?t!Zl%+1 zQ(n$T6ZEpS7(L)pet;g-9he0eusJ;IV6MJ@HV}dv3=AyGrIqYIi@+aG+%M4{F<>%t z?|;xg0O|h|=qZO<|D!6eU8S+n_6z=JW1B*BJ1^Av;UOe3F|l;<;X1@K-w;9Q*-S}B zRUs>D;*DpUn-n#d!xjVpl8dXkeZI$AhpwG7CpVV~r8+m)u(hxwm*t2%iSEslwYH9x zZab-kD)edkM9towQBP0r3pcwn)Pp8o8e#*-2Q&B`*EB{6durO|K`|Fo!xa zKHgvPw=3dsJQcn@e$IKbyB3?t0OEZ=-xX!&D!4s}&zTOm+?O4wi+gc}VJg`+!O?3k zHDbn^HhJW!p|KdL@A!kkE@DB13Md9_-*-TJg(KN?{+#IU)R96RIT;lbNv zw;sadd<5frA;88~-3{E?j0{t?nH`0$!O5LYwiq9+F6NIiX? zVR^m2c|M%|n6nwB)nuEl#Ldp$peM&=zexp_g0NrUtB$WqwA8sy{Ap+iU3D<^rl((w zhK>$DGx*M*gEiIAH@ZkeVY^}u)BaQgvg*%4RZwxotW}M1KNJCv6U5io z7Y?(LA2X=y^;WceCMPWV=V@s!b;q5LPaMkjGHk6$Ikkc3px{OQeQ^Y-4^Vg(MH z1;X3IsjAUoibXaK;;X1*Zj=7(mSM+Rsv8@z{}&NEr47ZfS)hniJCVTV7*I7JD2SG@ zN&_8JTBoXKdi@QML>Q+6EMf)9ROrSiX0zFre)w5tGngm8Jb= zYvF0-dtX?(Dkf&3uRh_;pwbd^Br4IKrQzq*cru+PL@rq-f{2Jn8ix(mN~bF4>-+O{ z?6lxJ0yHuahL^+N&L=#bCR^>NBBRZe4Z&peC;Fa-U*%Ry2rHfE5FL1rJp<{v1>QrH zUUfGxP(JL~{TTyBN1pe_o>pij(bkcjhTZ|{XH#kShty`5`XQ_J{c+-pTxaYk`&33MoajcDBan2lc@KN9%cwz8O&G7x&AkSo{p;(q(eWl!W};Y zE@?R4sbyQ3I&K1LdRVZ*-|3=(kxy5H<#IP(a&(nQVWTFCr8z^f^MXTd^*o|WM5coM zQu}Ycs>Gq!TiJmR7UBxSU*eJJLOuG_rG97@7rOlDHq)Cufu<#|Z4eU6DA?#Y} zhz+MR0&mg?L_(>&?of%4Z-XcVz?@6H!}V)_J`ixDNJmS34wo41752EHTlU=iwSL(t z$C??w>}gkRG8xJGo%ff!^$gmp(S*y1oc00dm9iwtm!Rv&<>Ff_d(I-s(@HQH@JZ4yMZW zQjs>jHuQePj3E-xx#d)%R({Es>ke2+Lti0ON4{3T@yj|ufAM-#XyL4mT`9t`jp>j$ za3q2@Nw_^8a-Jb2Y=6pbd*b zhp8kK7)-+hJ1^Cf+>G$z=)O$c<7JS~_$yEQ?P)}=AanMA_o}FL`_!e&${xE@zsBhP z!i0uQxJ?d?!K5(U7<%0X3pd!ZnB3<2e(_K$WKp9yX)~;`bD?+&;La+C)-v7I#Z77+ zg6Z0`Czuo%xjKfThYNg~(3@13B$m{`)EV-X9S0g9sG)MzvWiz0J%VUS6 zOob%eC8-6|STK=g75BzruSr;$z@5ME^MzYtV|_5E+Ff^FT5$#rq<8+X?>X6`G0wN+ zUxF}{&<~WE#sk#JeEQYA8ceW7hdX1-(LHv=S5nh{ILWQvCknS9N9RUgm&OdN>eJm! zE}20z(^OyQR7c3hmRH6ve;`m-P(5q&v)PZ;<;m(`{y2?1GGBtpB#;2-yP)}fV#f+j@>1$jvMc7yDD{4VI9+{gKL7DQmh9;s?&j>tw|XFRMAFw2J+S9O}8s4x-K zv)E-x4e0MPU$?fjwCwnNT0cyPDy-gUu^KpT?Jbd)$hifjzC#Cwpy9{rM@<`EK~Kswc{J85O&l83?Pt84XbKn(bM`G`+ZOvZc@FEw;jn!d*l@I#~=*5G4~c z@L|NTr}rgOkjm;|^e|<8`DwzXHPkd12AW7h0dH`WhV{T$OqjP|pD7y`8zv+!r(rP` zICMncklJvM@xY`SN<*OEjK|oyZnSVde|zD}n-|ZDBhUx;s9#Vj@n=9QC_q9mBDO&~ z;4?Y#>N0KPF>RR06T#o#U#rcf+{p2AqZK_0=4d*XDGucQ^d?8ZGswr?-F;`0Yg_#N z>C#~xjMnR{H*!JW=2@T)jI!_~)FmOZz&uez;g&ZV53Rlo2@PVWx7QA(=_jfnuSCjI zk|L?@Eo6y;phRQvPCWF7CR@$iIQ zZ78x5{*KrNvG4C_loRX&)NFuS+Z+>%P4;~3yJlWyD!NmF&tReHvGMTK zJkDp4mDdY9GWl6j-s=9fk*EV(z~+5z3Y_PPc^(H}*`hMQjxj6!C^43srHwhEQ>Fto zkBrJ+m92x#2W-NCaK>U}KF!!F1i&)O-DwA2R|9IJnguj+lF}(#p%(XE#vOC($8acn zaNwYOoqGow4#Cm!=uXPLnl3@{@#M0YLU}x%1s4^O_f`QvUK|Moy>KpQ6=h{3;)e9# zk@|jV(Z=wa3nD7VUId@hZ4X5??sC_evIy!vVwYP`6IopuOu(6$!*R`VHk{7>1$l;k z7YJa~A2>BW=ft=ih5fyMW+>|MygQw531DNK<$|4LQDTrZkq@UtqB3RMC7wz1KnZSz zZ`yhA$HWo5;^^Q%r$&H;U@{m+gOw{w_(@HOJ={W|$l|t|8{=gzuqwovlr8Tg0(Y_P zXat>Vn>t&rN<|veN~oocC0o_6KuMWMRKnkQ6N_EG$TQ;X0Hz_fFgJaB-a8LtD1d#Q zR$Ar^!ytq}%1dD4JWm#rxXTEe9ksdM9fI6Bo!Nkq-hj;1IH~dw9Fc@SRxzwR6F+>L zEifMGTm-9#hnx*Lr!b7%8~w4XI!(OA=%0`3dCU9`aO^~xpscf&5nSgo+P)Qd**yo6W<0rDZD~k=PlvGj9ZA;^NcCeG zd#cgKOnaivcWp;#h*9njUsHxX7FmzhxiXeq4+3deLlSOHAd7vS<`@W5+lj`*QnhO* zj)y*MCiZxJzdCM)6&5Y0bE09s`7YIp%gFBt&BG zD>`(Z4X;Fs47QLACqbjyS*v4vQ{|B+lFSrVWJkWFIUu3`s^WDse3ZIb2h#qzN0ko8NpBOx7gdntpL65)#|ch_tF<%MB@Ug z#a}*kC7tLr`bI}Y^c_uR27COw%S0_Ks0|Dc!(TyR;bLKh+}zyMeRHtAhleK)gwqd@ zd7A5rb=2Q@HxvVgUWq#*)9DmINDFISoeWL%;Pqf=-B{~vDUi4Xz~1)eE!R;pgN%2l z%#5K`E&~}0`;K#c4Wx0o?Da%q=Jw#wBD>;ng|P_5=oo&-Afc4_08J7XU6hk!P+X-+&i=! zHkt~N=6{-^a;H5I`PlX~L>c)ymr<=D`v_4|c)5WYv@s1!`0LO+oM=JXp11;_9PVQZBD0I#-RFXy^Lh#1F`Tee zSus=Jdg*4>z-;&vm-;#h1{RUEm7==jD3dEdxGvP>#F}9K)wDj+B(AR#9$dY-V)bqw zlITX#5eAh1jb{~&rBf~dSv(D>n6^sp+ni6NY!9#GWT-4sqGfWs<5PLP&|A?Hux_Ue zR{!g-V@dg)g-aR9=Jg>!gIxb(ghSZw@X*RAk&dLaDm$P9=Zt_50ZM={XZ2pCwL@=B zgRixJK3ZpdJiklnJL0i;fJD|yUQSL-T3R}MWzUc<@b>&~w}Fz?1V-~CUOv5kN$Ll>Mmk)_|gQfQj4x1ptUb|B?$kPZqGj>T4H(4{I2J7VZ zp5g53!PSu^%P;*Du4RZ=F#3tX$G>?N5Kw{tUhSBZ)Qi9nmtbDJHVAnI;t6L|7sxx2o&ONnr|put|njA^Qc5hlQf z`nq^eU%jD5FcU6j4|YQ<`kP(Eu5jfuI5pVT7T&7(7^6~`cZlM>Zd-Gy=ry0-L?38p z5b@QRY9(XSCZxNssTd&gR}G<*jTA661I+Z3T5go=pJb_0R2^gv>$j4T)Y?jmEzE-I zO$Ooo)d-9FD3K#gg9fD22e*HtjGj%6Z*L~p+Ft13=xPxZDQiUj$njN#F86x%Qq!1E zj%;Q^Xg0Ut{bTFjD#YL~6}Xf%abeH0BHMOA0Q+DzG9jT^Xtf|nZ z9#CTYPCD7)@oQ8Y_kuQ%WxQVxdLn@#qr0KS6SecK$A9s*dE~(W;;2cmwZL)y z$ZU2V)G*%AVk@Nzii|b^mueFa1sWe!+LsngL&r#>xv!HS>^AJx z;A&T>!NK<2<69ToO^O?VYnX8EPN!x2KhlWm)03_0e=LuF0wG_XF*Mr8cf7_gKU{l+ z?ufq67?$CDGQ^gDWD$VP$8(o)G`hmR+hzOmndekEM6oZybt51mKZC=fJzy5p_F`x%V|boEcv z=dqE`Ng)u=4eyhWg#J(qek+!b7#du08R_^`CQ->may*_UW%+mX@!?lz#~Szd-u@*2 z`(yOHvSVoT(a{n)rio*m3p?(kos*|PW_Fm6SZ8BMtU{#UlCW8qhxFQ-HKyOcAR6Js zHtOK+&|w{XIGFa zF^R_bDEZgHF@{{h6GnYPd!Yl(WHq+K$`8IaAbJ=IBP~uSbUv$rx=263+xI6mq4S9* z4cwA(|J6kZ(PAa}!5bGN$^b>NpX8jj(bSDqPy!+Q#r~Jd+}?7N8s71o;AH(xJ7&w+ zH@{SgaekznRb>8THIpNQ$t`RF=iH8@+qB?r}t_`#{)$1>)oF~U{Qig2XjGneZE zM0AyMHyx`diaS2;x5A|3ZnofTB6l06n$HOcpiTb6AMfgf$jSLLW|mN(f;y5GwmNF! z=Y`=HI1)v~ohmg3Gme#G1b+kr;@fWL@_T=MRDv&+jvD|?_enf1$3@r_xo;+Bdb_;7 zpw8{U0O(lyQ$T-5a?GH`RbxTTt_0uFb{>h9G-n`BW6O^P)L7`6vd_+M_u9+PE$1A* zC}*Ir=00x5PcP#^!dD1fqlyQ*luz`;A!<>kfz2c46Jp!v9fJdrKEl*4EbEDrwD7Fe%T%C?cj2&^WXT0M3H^zHc1_7jstE=A4bYrq7pUzIQ4 z_$Ce);M$wK?=4ER%GfC8+=ZMFSOqdX(l&^b_36!0k%hpd1{cZEC~-$}wml7T6sYCd zY(L$c-Y`YwGQ;+-F9xcd%GL(ON5UUaP-e=FQ^DP}CRr4p?%k|^u?NMtVew@sk@hAXIiUI-Qdp)v&;_QaAcG zQjk3`sN8l&(EeeA@pwBD7Jstdr#X_KBbmVhK%>*l9t59`CLP4EYfcK=uKoH6-og0? zTd%Bv@sXeN?>jilDjqdIUjF;O;%+>Wzi6i)9;)t=>G7)BZo8Bc7ytc5B8;n>E&Ju_ ziSZBK7y%jKzqiPYK7vYFWwdoWKQreAoP3CaW*gMHL~BpN9V4rr1#Ih#2r3f z&ppJ`+wvRPyN4=&ht`t0Y4-kPnfvJwGEgoE72``7qP@L4QT?g(ObCv=X1o!>6ZD9W z`mAIDWpz4MoS3IA7Z1Z};15r+iJmBhSU*?1s9wx z-)btOIZ`Uk;S8`2Fm&NA8ruBA$9vt2EnxMF9d^s62SC3#yof+oy5bn}izkI&rM4F0uQ z?2&Jj2^=yb3AEP1sOKCO22vWLf*Wep%%w#A%W|BkyB>MpHKj9a6u69S)L>7exMXH%YPYfE`l6Yt8zmdeC|>Y|GXfP(Ux@d4EXl%< zDJ#+bnJ2UG12W!05Xk(!xgv^{I@I43&|~Yr^)7DoKiLz_Ma8Ai`^LT|wqUHU<;asE zvj-s8#&vH#*TALKfA!t40A?Du7zhAfOSzL|6$?R?5B1X1Zh-TVu<`i#k*T(j@p35Y z(a=;>w}_hMd=Y@qiE1K>rxg{FUQ@wxzc)(J%nr47v~o@_Q zKom^>h_>X_4N}W)Xe85@F^C_olzhVF!X5H}D2c`Z7rC76pKOhL$(S-_7#L|y8T8}} zAs=m7doTP$XQ_1=_p6Wg@x@fV=4aRQuafUpeNLik+y(wfdDR#rlNxj7r{!UJM z3Ts2Akz)FdK`e-6NN+qO%jN!UaJ+_wsPE*PUjYy{l&nUlea5TTo&g!|Y{~xIM9Oqe zYm#UZCo8DQsuWC8DQ{Lr|6&Z-n^(i(y;F9_Nrb=S*)Dn3(QB{tcYdat`C%a z20_P|Z#zJ4dB|P9uaX3xorWuDDTm+|!Q)+bwo2DIXmVAU&^3fczd=+^PL=i|yXa6u z(wEahW)?}q#F_GtefK1$Gl>*~*!LL^Y@~tn=^}v8*^=ZV*4e#D7r6+PXU%q!8F&M@ zVLO@4kH=22o$y;4MU<^C>A|tAIygKQ*_*}PQei`oWHSqDl;4v(Fbmf1ul&`t6A4xm zuazB^X6t0wP*C;DY)*cp9g0+_+rq0o_|xbURVFpsAM#ofw5ObUpxBbkSCc&NET&vF zH&jSlc5|)C&uPn+V9Ob+ztkn*eF-P4G<>7ph7wJsoOzUf*90xAy-|W+V3!YOa)Ug~ zq)yGX_ua6|Pm+~xp{g>i>4AFAsn|Vlq}#!Pl+IW;3bi-3J6a}C7o`<0UTq?KKey2-?_xy#SJ&IFFk~?Qf*6W`{kin~*Z0&wyy&+ky4@ zTQztcHE4mL&F#saE^ndN-Pa&|}E>S*BT4#X|EL)<^+tELMemccd_+83zql}3!~Lp z@q<zaOntNkq4?qn|ww1-;{&+YsNsYE#!|4j- zwBki92sZ4Ub-Nw?j1WV@K6QYxL;Z{~xJ@c$c^@$?S$Y8G;w&L_^O|(L%*q>`BQyVe zk_sVgOcclW!X`N!DST&eD&F}B)5*8A8<`$D`+*Nj{Py2pnZg7-7=b^UrDjCT`)lb& zXSn1f5(bbrJzI7TZskVm-bi^DLw1bwl~$r^a7OcI8lh3Ean~;Ncv&1|*Eb7|?zhUr zf*nSRO@F~vtwZ*j%!p=7rFk@qYU=Qt%A-*W=$cLxVWWEPx_xxefG*D`3U3BXDk9-( zBcz9io9#Y|!PMZP3v zwQNcF1)OK0`YD%F=V66TE@E<_zM+=5D6x625Xr4t>M9QNKBe!^E6${KCcq03f2a^@ zE-~D@MUk%6Nc|(sjuS|Y$~a0(h27Alh7)iKvHd zO|b?{`fOL!y!)GAN23NP)P)!9dK@`MAU6mjwJd<-?>hGJLU59!`-BE_&u=a%-M6C5!?fkUeZggLI%N)|XVQBra?? zj!30!^7`4&pf9NxC8;3T5sDV(UMK&UdozSHR#bf`{gO-7Sm-kfbQUJ|dNZICClH9K zKW5x{*mZwfk6{FC_w8_Y(o{*5TgTGE7h4yO_R{lbe(uE$6iAk&tmXGZC(^`f{B)#1 z@~YtjW2jcbx9a<{L8EjfHQcJ*4~ysu652m?P&Mti`HIX7u4I;mQJVwo>B6ZYH=35X zl6$OmoihCUx5g#S*y?q0;2^k^W}6A>)*_-*83Cj-Sh?zsse%1-=9An&)XavRp=kCD zzvz>SBuOJcL1SFOi45#uSH!dQN;~$N>r;Pi;;|#Aio6+i#PIuafB62oBkf$Ov{r!S z$g>TL8Ju0so1I#$f0eLG0*!8-7C~a<3!H02?@jr!3@hoO*=G{-ctTF)@BV1u#FuMs z93OKF=Gqeuob`qU0U3OZcAa&)S#A92p7=azu6AM4d?g!N^g zh9?E7Q;m}T)1#6CR$??3DX7?*M#!JL}^*GBQNPi0HJ) zz3XI+gC@iiu|-8DF)zD%uPyl|U0(#5N>IL~7{sZ=&RWS~%gQYSI|`6#K{~`zdDGa` zLPSB_f@79(;7dP@{?9r&YzpNO%-S<4~OlITI?TqY5<0#xtE^%~NAnR08f^+>uXJ;}tF>e&@r zyn!JUpe&gBQ8b7f?4Ex6PNSpZToKt}0j$gC4lhBAHnC3~eNbpsQ1v_v0^vP~Wc**U z%NM4!`*+BJGIJ}56yaVtyTm!HNZv8&R8V;<&({}a@7k6OTXFEae3o;rFBNukAmul) zog={x`YN56Zrq?a7E^NJus(8(2Am_R?&1*Pz?J)%Z@&UeNd<$gbUD{(QV|Jl3hHfb zIXln0pX(=cqct+Y8+zt9#D}Kp1d35pfT88z3NK?~DH~I0zHu&$Os{FW%p>Xsd?S4=gr^dcGyOI}_h;4uL zc#P|1!>DQ6Bv?ASoeALQiI|J*c69jm)xca0eA+AhYrQsBuyy@%Gcupn1<+ zoxv?TD5|Ffhd3Q$*=YJ6-Nku33%8NevUd- z#{Fi1ZTus4rn%orpjDC;ic}YF<~NAf{HCby1wEb({+c0|gg4okNR1 zj%#wJ*MLM|QWP$}ZZCYM@ZIR-iff^EIl+@2748D>d&Iw52yRQ_sDeaw^q^o;>!HEB zvj(@luo}Se2~}Wyx0z>sbS@<%%$$;aB=ZcqD$Y}5jbFVbJGiR<-49zA0l_wY6w#!A zE|yRW4d0wK(1^c`T5AW1Wh)SVE=ge*d5ZC(gBBBXIdGVSP()!U;UbD>Tr4~eWdOMh z9Pr^QbW}BLyNC;*fA5;4DyjgE)V;r}hmB7SEvn+z>~>&{O}U^cBG8R2W(A%PSpQ(Q zrC@BJku7j^>&jhiM|}VO0RN|s_g5ndnSQMS*aeY09?tgJ$DmGTwITJif^+*#^JcA4 z@wuVNSHF}8;*NO_2w!?FM z`pORoPMi{JY!;yoW=&qK{+7fg5NE|Z>8TOe59kj}8CsZrGyI%zN5_5DV7FS2pmc`P z_-Kgy82qUx)QD*u)QUo`Ff%}JiRLH|*)K1bx~go5G+0RRtGjs^Vo|$2BKRB$aNP+>`oAjJOMU!Z%!P z_<)clvgvJ9?nxgBu57x?lSsdjM!TRBrUp?vR2467yN`k5vmyD(TKWdhVN`gd0cU8TDotYxqCpY;vM}U=||mMTr-T*uEkIZ^dCiwexvQfCq<&={<@IkHl?p zk#;dHLIMAI47&6^vZ{R2KLPa74?acv)bts(ee096kl5MndSR;7aEJVH zCr}Thfe?(MVVXImvCDoupfXEATMrRh5cE4UNzwnkhgwkmaWcH=M0JN zfrpR~tiVUn2=Zn0(R=m&&DwQu5p3+y$?7WP@U%hCN3=f6efcoU6APlo7itW}b};-Q z_-JxsMnPVnn%e{MDzT=9rb5o0-;oP;a5b8N{9v50gAT^w$?XQ+h+aq3nju+(L!se~ zz~?LkyBiB2wQ_hZp_Ez4y--5VO?)_GwoxCX6=fxs07f+e+3q^9jBV8ldo2tL`i@Ga zLyh*#FEI)xnBW|(FMTwixDk+Re-NC^eLIfi@;mw}OV#KVCmL&68B=FAW&dM0v4zJh zZHEY*wH`U4-DsaDu{-;Kt|csJ;769AeCSj@;_eTu+>9g8b94Eikj~s;x$5^?S1AbB zP<=WpmDw}pj@juD;?$vp*!0sf^%+G@i{4~2^#ZZ(9PYYXZl4^wDf8_ofmxo&jcn{? zQ{B?3_Yj6$TL@yI1>SLUQaR=UAHr$hcRNctGnF2DjZO$dFO(Wxc4Eil|qCy~F!fgE^^ znY3|pr$)g%{iCf0UP?L_UlxK2&3KWk{h4Ib_6pKf7Q8N|=jmWy(I5FF@Z#AL&$u*4 z7iZclJ{8CoQ(jQA@>ouE&OepaAI3+Rl-+xl#U6fPO_~%ZE_%r`J|Mv-V+0cD&LmDx zjZQ*?ZZ))$u}&%{e#=r*`$v{CZ5)U%Xlng`>c}o98ZN=6crip-P?ddv_lTQ}jiWYeyBJaCpSx)U(|L8MyT}a$ z5F{kmmr`lF>F`Py+_9&xBCli6`tFiU$U=}%94>8)1*F^Ksww0M-{p?q+#73l@V!&G z&tS5=1C6Ja`+wYzOm?GojH(x@TEgE|%m3!(Jw7`G*IYwASG0PLfSV-5a*c-i2tmqMV-h`}?-!U4K3V-S%kI07@SHi0wsxOb zrafr{L}$a7Ss|&)n8i=AdCv~n_cxzUnI1Ga%*rLl>hf^73F%*8PdXQ)pZY1J&BJM4 z2k`uzjn8SDj|qDSy7I-CRaBl|&HtOT5fHk_>6W!EI zS?|r{z@%%Ck%S~%hVu#T^*U~M;uUO=w+a^$d^#(do zOl%tU>OyPBdkOB#3ghM~ z)*~4iCi5bHx_L#WUr|^gt->2un|8weH%(d#j{(XoUP~HUDwS^cXvNb#KRXgwzz~zMMg^}BS2jxha(;`PX!%R_dMt%!C2j$Ke*0P; zI`xnlBD>{jf0GkrrOB-IZO}HDPug?{Dk)p z3lV&`Hu$`lgVEcLFqt;`At_xe`zBqx1!*xqQbnFs?E&B2DON@P2sYcRV6^1EUC?-4 zQmTbHNSYj#o<<6&8JSJB+KshSW|{nwefeo67#yQK(NH%Z_dd?%r1LM@J~VPQjTG(E zn3aRbc%Z|l1A@(^EHr$9I>VBagO3gzkjYX--DcTZPBzGbyyEHUwP()iwjQ0)X6Yvl zx!#k064jw&4RfSRkn9+G9S8#MB0iUbl*pOE#XwNgwX1gx{6j9KA~eS0EduV3?w|99 z;!#uTT47^<<`W15sZH5BzPvQo+N^A1f!feA&}m5NX+)dNIakNN=iO7+c6zZ3 zpPWe4TzBfBrk(EYRRthX|Fa|3%t4@gP{*rQdMI-R!(`}|<}^~Z3zSa=OA7MQIygW4 zp?h}GhfiO8@IEZT;+9U_%KwNt{hoo7Nlr@Y?<^}%GP(YLr#ym$8{4qC3;w6R{u5FK z!PNitx%hbVC;!t&|MM6V@zZTP^y^RjHwN-gTm1#-Vc0yAOj;iPe?euM+fWZ59sj5G pI{h~x;ncG$^MAG7Hq;kiGX{lA^2xWLe`7BoG7<{n)uKiL{|CB|K&Joz literal 0 HcmV?d00001 diff --git a/doc/devel/gitwash/forking_hell.rst b/doc/devel/gitwash/forking_hell.rst new file mode 100644 index 000000000000..350d50e7fccf --- /dev/null +++ b/doc/devel/gitwash/forking_hell.rst @@ -0,0 +1,32 @@ +.. _forking: + +========================================== +Making your own copy (fork) of matplotlib +========================================== + +You need to do this only once. The instructions here are very similar +to the instructions at http://help.github.com/forking/ |emdash| please see +that page for more detail. We're repeating some of it here just to give the +specifics for the matplotlib_ project, and to suggest some default names. + +Set up and configure a github_ account +====================================== + +If you don't have a github_ account, go to the github_ page, and make one. + +You then need to configure your account to allow write access |emdash| see +the ``Generating SSH keys`` help on `github help`_. + +Create your own forked copy of matplotlib_ +=========================================== + +#. Log into your github_ account. +#. Go to the matplotlib_ github home at `matplotlib github`_. +#. Click on the *fork* button: + + .. image:: forking_button.png + + Now, after a short pause and some 'Hardcore forking action', you + should find yourself at the home page for your own forked copy of matplotlib_. + +.. include:: links.inc diff --git a/doc/devel/gitwash/git_development.rst b/doc/devel/gitwash/git_development.rst new file mode 100644 index 000000000000..3808ca9fa1c4 --- /dev/null +++ b/doc/devel/gitwash/git_development.rst @@ -0,0 +1,15 @@ +.. _git-development: + +===================== + Git for development +===================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + forking_hell + set_up_fork + configure_git + development_workflow diff --git a/doc/devel/gitwash/git_install.rst b/doc/devel/gitwash/git_install.rst new file mode 100644 index 000000000000..a87224d4e412 --- /dev/null +++ b/doc/devel/gitwash/git_install.rst @@ -0,0 +1,26 @@ +.. _install-git: + +============= + Install git +============= + +Overview +======== + +================ ============= +Debian / Ubuntu ``sudo apt-get install git-core`` +Fedora ``sudo yum install git-core`` +Windows Download and install msysGit_ +OS X Use the git-osx-installer_ +================ ============= + +In detail +========= + +See the git_ page for the most recent information. + +Have a look at the github_ install help pages available from `github help`_ + +There are good instructions here: http://book.git-scm.com/2_installing_git.html + +.. include:: links.inc diff --git a/doc/devel/gitwash/git_intro.rst b/doc/devel/gitwash/git_intro.rst new file mode 100644 index 000000000000..786eb84d5bd3 --- /dev/null +++ b/doc/devel/gitwash/git_intro.rst @@ -0,0 +1,18 @@ +============== + Introduction +============== + +These pages describe a git_ and github_ workflow for the matplotlib_ +project. + +There are several different workflows here, for different ways of +working with *matplotlib*. + +This is not a comprehensive git_ reference, it's just a workflow for our +own project. It's tailored to the github_ hosting service. You may well +find better or quicker ways of getting stuff done with git_, but these +should get you started. + +For general resources for learning git_ see :ref:`git-resources`. + +.. include:: links.inc diff --git a/doc/devel/gitwash/git_links.inc b/doc/devel/gitwash/git_links.inc new file mode 100644 index 000000000000..a679f2d78a36 --- /dev/null +++ b/doc/devel/gitwash/git_links.inc @@ -0,0 +1,54 @@ +.. This (-*- rst -*-) format file contains commonly used link targets + and name substitutions. It may be included in many files, + therefore it should only contain link targets and name + substitutions. Try grepping for "^\.\. _" to find plausible + candidates for this list. + +.. NOTE: reST targets are + __not_case_sensitive__, so only one target definition is needed for + nipy, NIPY, Nipy, etc... + +.. git stuff +.. _git: http://git-scm.com/ +.. _github: http://github.com +.. _github help: http://help.github.com +.. _msysgit: http://code.google.com/p/msysgit/downloads/list +.. _git-osx-installer: http://code.google.com/p/git-osx-installer/downloads/list +.. _subversion: http://subversion.tigris.org/ +.. _git cheat sheet: http://github.com/guides/git-cheat-sheet +.. _pro git book: http://progit.org/ +.. _git svn crash course: http://git-scm.com/course/svn.html +.. _learn.github: http://learn.github.com/ +.. _network graph visualizer: http://github.com/blog/39-say-hello-to-the-network-graph-visualizer +.. _git user manual: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html +.. _git tutorial: http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html +.. _git community book: http://book.git-scm.com/ +.. _git ready: http://www.gitready.com/ +.. _git casts: http://www.gitcasts.com/ +.. _Fernando's git page: http://www.fperez.org/py4science/git.html +.. _git magic: http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html +.. _git concepts: http://www.eecs.harvard.edu/~cduan/technical/git/ +.. _git clone: http://www.kernel.org/pub/software/scm/git/docs/git-clone.html +.. _git checkout: http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html +.. _git commit: http://www.kernel.org/pub/software/scm/git/docs/git-commit.html +.. _git push: http://www.kernel.org/pub/software/scm/git/docs/git-push.html +.. _git pull: http://www.kernel.org/pub/software/scm/git/docs/git-pull.html +.. _git add: http://www.kernel.org/pub/software/scm/git/docs/git-add.html +.. _git status: http://www.kernel.org/pub/software/scm/git/docs/git-status.html +.. _git diff: http://www.kernel.org/pub/software/scm/git/docs/git-diff.html +.. _git log: http://www.kernel.org/pub/software/scm/git/docs/git-log.html +.. _git branch: http://www.kernel.org/pub/software/scm/git/docs/git-branch.html +.. _git remote: http://www.kernel.org/pub/software/scm/git/docs/git-remote.html +.. _git config: http://www.kernel.org/pub/software/scm/git/docs/git-config.html +.. _why the -a flag?: http://www.gitready.com/beginner/2009/01/18/the-staging-area.html +.. _git staging area: http://www.gitready.com/beginner/2009/01/18/the-staging-area.html +.. _tangled working copy problem: http://tomayko.com/writings/the-thing-about-git +.. _git management: http://kerneltrap.org/Linux/Git_Management +.. _linux git workflow: http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html +.. _git parable: http://tom.preston-werner.com/2009/05/19/the-git-parable.html +.. _git foundation: http://matthew-brett.github.com/pydagogue/foundation.html + +.. other stuff +.. _python: http://www.python.org + +.. |emdash| unicode:: U+02014 diff --git a/doc/devel/gitwash/git_resources.rst b/doc/devel/gitwash/git_resources.rst new file mode 100644 index 000000000000..e081328967a3 --- /dev/null +++ b/doc/devel/gitwash/git_resources.rst @@ -0,0 +1,59 @@ +.. _git-resources: + +================ + git_ resources +================ + +Tutorials and summaries +======================= + +* `github help`_ has an excellent series of how-to guides. +* `learn.github`_ has an excellent series of tutorials +* The `pro git book`_ is a good in-depth book on git. +* A `git cheat sheet`_ is a page giving summaries of common commands. +* The `git user manual`_ +* The `git tutorial`_ +* The `git community book`_ +* `git ready`_ |emdash| a nice series of tutorials +* `git casts`_ |emdash| video snippets giving git how-tos. +* `git magic`_ |emdash| extended introduction with intermediate detail +* The `git parable`_ is an easy read explaining the concepts behind git. +* Our own `git foundation`_ expands on the `git parable`_. +* Fernando Perez' git page |emdash| `Fernando's git page`_ |emdash| many + links and tips +* A good but technical page on `git concepts`_ +* `git svn crash course`_: git_ for those of us used to subversion_ + +Advanced git workflow +===================== + +There are many ways of working with git_; here are some posts on the +rules of thumb that other projects have come up with: + +* Linus Torvalds on `git management`_ +* Linus Torvalds on `linux git workflow`_ . Summary; use the git tools + to make the history of your edits as clean as possible; merge from + upstream edits as little as possible in branches where you are doing + active development. + +Manual pages online +=================== + +You can get these on your own machine with (e.g) ``git help push`` or +(same thing) ``git push --help``, but, for convenience, here are the +online manual pages for some common commands: + +* `git add`_ +* `git branch`_ +* `git checkout`_ +* `git clone`_ +* `git commit`_ +* `git config`_ +* `git diff`_ +* `git log`_ +* `git pull`_ +* `git push`_ +* `git remote`_ +* `git status`_ + +.. include:: links.inc diff --git a/doc/devel/gitwash/index.rst b/doc/devel/gitwash/index.rst new file mode 100644 index 000000000000..48053bc19b71 --- /dev/null +++ b/doc/devel/gitwash/index.rst @@ -0,0 +1,16 @@ +.. _using-git: + +Working with *matplotlib* source code +====================================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + git_intro + git_install + following_latest + patching + git_development + git_resources diff --git a/doc/devel/gitwash/known_projects.inc b/doc/devel/gitwash/known_projects.inc new file mode 100644 index 000000000000..297235287796 --- /dev/null +++ b/doc/devel/gitwash/known_projects.inc @@ -0,0 +1,41 @@ +.. Known projects + +.. PROJECTNAME placeholders +.. _PROJECTNAME: http://neuroimaging.scipy.org +.. _`PROJECTNAME github`: http://github.com/nipy +.. _`PROJECTNAME mailing list`: http://projects.scipy.org/mailman/listinfo/nipy-devel + +.. numpy +.. _numpy: hhttp://numpy.scipy.org +.. _`numpy github`: http://github.com/numpy/numpy +.. _`numpy mailing list`: http://mail.scipy.org/mailman/listinfo/numpy-discussion + +.. scipy +.. _scipy: http://www.scipy.org +.. _`scipy github`: http://github.com/scipy/scipy +.. _`scipy mailing list`: http://mail.scipy.org/mailman/listinfo/scipy-dev + +.. nipy +.. _nipy: http://nipy.org/nipy +.. _`nipy github`: http://github.com/nipy/nipy +.. _`nipy mailing list`: http://mail.scipy.org/mailman/listinfo/nipy-devel + +.. ipython +.. _ipython: http://ipython.scipy.org +.. _`ipython github`: http://github.com/ipython/ipython +.. _`ipython mailing list`: http://mail.scipy.org/mailman/listinfo/IPython-dev + +.. dipy +.. _dipy: http://nipy.org/dipy +.. _`dipy github`: http://github.com/Garyfallidis/dipy +.. _`dipy mailing list`: http://mail.scipy.org/mailman/listinfo/nipy-devel + +.. nibabel +.. _nibabel: http://nipy.org/nibabel +.. _`nibabel github`: http://github.com/nipy/nibabel +.. _`nibabel mailing list`: http://mail.scipy.org/mailman/listinfo/nipy-devel + +.. marsbar +.. _marsbar: http://marsbar.sourceforge.net +.. _`marsbar github`: http://github.com/matthew-brett/marsbar +.. _`MarsBaR mailing list`: https://lists.sourceforge.net/lists/listinfo/marsbar-users diff --git a/doc/devel/gitwash/links.inc b/doc/devel/gitwash/links.inc new file mode 100644 index 000000000000..20f4dcfffd4a --- /dev/null +++ b/doc/devel/gitwash/links.inc @@ -0,0 +1,4 @@ +.. compiling links file +.. include:: known_projects.inc +.. include:: this_project.inc +.. include:: git_links.inc diff --git a/doc/devel/gitwash/patching.rst b/doc/devel/gitwash/patching.rst new file mode 100644 index 000000000000..6f7733125c88 --- /dev/null +++ b/doc/devel/gitwash/patching.rst @@ -0,0 +1,134 @@ +================ + Making a patch +================ + +You've discovered a bug or something else you want to change +in matplotlib_ .. |emdash| excellent! + +You've worked out a way to fix it |emdash| even better! + +You want to tell us about it |emdash| best of all! + +The easiest way is to make a *patch* or set of patches. Here +we explain how. Making a patch is the simplest and quickest, +but if you're going to be doing anything more than simple +quick things, please consider following the +:ref:`git-development` model instead. + +.. _making-patches: + +Making patches +============== + +Overview +-------- + +:: + + # tell git who you are + git config --global user.email you@yourdomain.example.com + git config --global user.name "Your Name Comes Here" + # get the repository if you don't have it + git clone git://github.com/matplotlib/matplotlib.git + # make a branch for your patching + cd matplotlib + git branch the-fix-im-thinking-of + git checkout the-fix-im-thinking-of + # hack, hack, hack + # Tell git about any new files you've made + git add somewhere/tests/test_my_bug.py + # commit work in progress as you go + git commit -am 'BF - added tests for Funny bug' + # hack hack, hack + git commit -am 'BF - added fix for Funny bug' + # make the patch files + git format-patch -M -C master + +Then, send the generated patch files to the `matplotlib +mailing list`_ |emdash| where we will thank you warmly. + +In detail +--------- + +#. Tell git_ who you are so it can label the commits you've + made:: + + git config --global user.email you@yourdomain.example.com + git config --global user.name "Your Name Comes Here" + +#. If you don't already have one, clone a copy of the + matplotlib_ repository:: + + git clone git://github.com/matplotlib/matplotlib.git + cd matplotlib + +#. Make a 'feature branch'. This will be where you work on + your bug fix. It's nice and safe and leaves you with + access to an unmodified copy of the code in the main + branch:: + + git branch the-fix-im-thinking-of + git checkout the-fix-im-thinking-of + +#. Do some edits, and commit them as you go:: + + # hack, hack, hack + # Tell git about any new files you've made + git add somewhere/tests/test_my_bug.py + # commit work in progress as you go + git commit -am 'BF - added tests for Funny bug' + # hack hack, hack + git commit -am 'BF - added fix for Funny bug' + + Note the ``-am`` options to ``commit``. The ``m`` flag just + signals that you're going to type a message on the command + line. The ``a`` flag |emdash| you can just take on faith |emdash| + or see `why the -a flag?`_. + +#. When you have finished, check you have committed all your + changes:: + + git status + +#. Finally, make your commits into patches. You want all the + commits since you branched from the ``master`` branch:: + + git format-patch -M -C master + + You will now have several files named for the commits:: + + 0001-BF-added-tests-for-Funny-bug.patch + 0002-BF-added-fix-for-Funny-bug.patch + + Send these files to the `matplotlib mailing list`_. + +When you are done, to switch back to the main copy of the +code, just return to the ``master`` branch:: + + git checkout master + +Moving from patching to development +=================================== + +If you find you have done some patches, and you have one or +more feature branches, you will probably want to switch to +development mode. You can do this with the repository you +have. + +Fork the matplotlib_ repository on github_ |emdash| :ref:`forking`. +Then:: + + # checkout and refresh master branch from main repo + git checkout master + git pull origin master + # rename pointer to main repository to 'upstream' + git remote rename origin upstream + # point your repo to default read / write to your fork on github + git remote add origin git@github.com:your-user-name/matplotlib.git + # push up any branches you've made and want to keep + git push origin the-fix-im-thinking-of + +Then you can, if you want, follow the +:ref:`development-workflow`. + +.. include:: links.inc diff --git a/doc/devel/gitwash/pull_button.png b/doc/devel/gitwash/pull_button.png new file mode 100644 index 0000000000000000000000000000000000000000..e5031681b97bcc3b323a01653153c8d6bcfb5507 GIT binary patch literal 12893 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 I#f$>~7cL{PD*ylh literal 0 HcmV?d00001 diff --git a/doc/devel/gitwash/set_up_fork.rst b/doc/devel/gitwash/set_up_fork.rst new file mode 100644 index 000000000000..cf4d77e258f6 --- /dev/null +++ b/doc/devel/gitwash/set_up_fork.rst @@ -0,0 +1,67 @@ +.. _set-up-fork: + +================== + Set up your fork +================== + +First you follow the instructions for :ref:`forking`. + +Overview +======== + +:: + + git clone git@github.com:your-user-name/matplotlib.git + cd matplotlib + git remote add upstream git://github.com/matplotlib/matplotlib.git + +In detail +========= + +Clone your fork +--------------- + +#. Clone your fork to the local computer with ``git clone + git@github.com:your-user-name/matplotlib.git`` +#. Investigate. Change directory to your new repo: ``cd matplotlib``. Then + ``git branch -a`` to show you all branches. You'll get something + like:: + + * master + remotes/origin/master + + This tells you that you are currently on the ``master`` branch, and + that you also have a ``remote`` connection to ``origin/master``. + What remote repository is ``remote/origin``? Try ``git remote -v`` to + see the URLs for the remote. They will point to your github_ fork. + + Now you want to connect to the upstream `matplotlib github`_ repository, so + you can merge in changes from trunk. + +.. _linking-to-upstream: + +Linking your repository to the upstream repo +-------------------------------------------- + +:: + + cd matplotlib + git remote add upstream git://github.com/matplotlib/matplotlib.git + +``upstream`` here is just the arbitrary name we're using to refer to the +main matplotlib_ repository at `matplotlib github`_. + +Note that we've used ``git://`` for the URL rather than ``git@``. The +``git://`` URL is read only. This means we that we can't accidentally +(or deliberately) write to the upstream repo, and we are only going to +use it to merge into our own code. + +Just for your own satisfaction, show yourself that you now have a new +'remote', with ``git remote -v show``, giving you something like:: + + upstream git://github.com/matplotlib/matplotlib.git (fetch) + upstream git://github.com/matplotlib/matplotlib.git (push) + origin git@github.com:your-user-name/matplotlib.git (fetch) + origin git@github.com:your-user-name/matplotlib.git (push) + +.. include:: links.inc diff --git a/doc/devel/gitwash/this_project.inc b/doc/devel/gitwash/this_project.inc new file mode 100644 index 000000000000..8ce111ce07a6 --- /dev/null +++ b/doc/devel/gitwash/this_project.inc @@ -0,0 +1,5 @@ +.. matplotlib +.. _matplotlib: http://matplotlib.sourceforge.net +.. _`matplotlib github`: http://github.com/matplotlib/matplotlib + +.. _`matplotlib mailing list`: https://lists.sourceforge.net/lists/listinfo/matplotlib-devel From d99b9d1d78ce46a7efd64ae85a1f3021267d2c03 Mon Sep 17 00:00:00 2001 From: Darren Dale Date: Sun, 20 Feb 2011 22:14:05 -0500 Subject: [PATCH 4/4] Make gitwash docs available in the dev guide --- doc/devel/gitwash/configure_git.rst | 7 +++++++ doc/devel/index.rst | 1 + 2 files changed, 8 insertions(+) diff --git a/doc/devel/gitwash/configure_git.rst b/doc/devel/gitwash/configure_git.rst index f0ecd1c48abf..70c6a5a37b63 100644 --- a/doc/devel/gitwash/configure_git.rst +++ b/doc/devel/gitwash/configure_git.rst @@ -31,6 +31,13 @@ Here is an example ``.gitconfig`` file:: [merge] summary = true + [apply] + whitespace = fix + + [core] + autocrlf = input + + You can edit this file directly or you can use the ``git config --global`` command:: diff --git a/doc/devel/index.rst b/doc/devel/index.rst index 4d4c3286b3ca..16f072b2529a 100644 --- a/doc/devel/index.rst +++ b/doc/devel/index.rst @@ -13,6 +13,7 @@ :maxdepth: 2 coding_guide.rst + gitwash/index.rst documenting_mpl.rst release_guide.rst transformations.rst