[Python-checkins] r69028 - peps/trunk/pep-0374.txt

brett.cannon python-checkins at python.org
Tue Jan 27 21:14:27 CET 2009


Author: brett.cannon
Date: Tue Jan 27 21:14:27 2009
New Revision: 69028

Log:
Clean up whitespace.


Modified:
   peps/trunk/pep-0374.txt

Modified: peps/trunk/pep-0374.txt
==============================================================================
--- peps/trunk/pep-0374.txt	(original)
+++ peps/trunk/pep-0374.txt	Tue Jan 27 21:14:27 2009
@@ -18,7 +18,7 @@
    development.
 
 
-Rationale 
+Rationale
 =========
 
 Python has been using a centralized version control system (VCS;
@@ -28,7 +28,7 @@
 allowed for the storage of the history of the language, mostly for
 help with development, but also for posterity. And of course the V in
 VCS is very helpful when developing.
- 
+
 But a centralized version control system has its drawbacks. First and
 foremost, in order to have the benefits of version control with
 Python in a seamless fashion, one must be a "core developer" (i.e.
@@ -39,13 +39,13 @@
 can be quite a limitation, since these non-core developers cannot do
 easily do basic tasks such as reverting changes to a previously
 saved state, creating branches, publishing one's changes with full
-revision history, etc.  For non-core developers, the last safe tree
+revision history, etc. For non-core developers, the last safe tree
 state is one the Python developers happen to set, and this prevents
 safe development. This second-class citizenship is a hindrance to
 people who wish to contribute to Python with a patch of any
 complexity and want a way to incrementally save their progress to
 make their development lives easier.
- 
+
 There is also the issue of having to be online to be able to commit
 one's work. Because centralized VCSs keep a central copy that stores
 all revisions, one must have Internet access in order for their
@@ -54,18 +54,18 @@
 situation of someone wishing to contribute to Python but having a
 bad Internet connection where committing is time-consuming and
 expensive and it might work out better to do it in a single step.
- 
+
 Another drawback to a centralized VCS is that a common use case is
-for a developer to revise patches in response to review comments. 
+for a developer to revise patches in response to review comments.
 This is more difficult with a centralized model because there's no
-place to contain intermediate work.  It's either all checked in or
-none of it is checked in.  In the centralized VCS, it's also very
+place to contain intermediate work. It's either all checked in or
+none of it is checked in. In the centralized VCS, it's also very
 difficult to track changes to the trunk as they are committed, while
-you're working on your feature or bug fix branch.  This increases
+you're working on your feature or bug fix branch. This increases
 the risk that such branches will grow stale, out-dated, or that
 merging them into the trunk will generate too may conflicts to be
 easily resolved.
- 
+
 Lastly, there is the issue of maintenance of Python. At any one time
 there is at least one major version of Python under development (at
 the time of this writing there are two). For each major version of
@@ -76,11 +76,11 @@
 code bases where changes in one version do not (but could) belong in
 the other version. As of right now there is no natural support for
 this branch in time in central VCSs; you must use tools that
-simulate the branching.  Tracking merges is similarly painful for
+simulate the branching. Tracking merges is similarly painful for
 developers, as revisions often need to be merged between four active
 branches (e.g. 2.6 maintenance, 3.0 maintenance, 2.7 development,
-3.1 development).  In this case, VCSs such as Subversion only handle
-this through arcane third party tools. 
+3.1 development). In this case, VCSs such as Subversion only handle
+this through arcane third party tools.
 
 Distributed VCSs (DVCSs) solve all of these problems. While one can
 keep a master copy of a revision tree, anyone is free to copy that
@@ -88,9 +88,9 @@
 changes to their copy, online or offline. It also more naturally
 ties into the idea of branching in the history of a revision tree
 for maintenance and the development of new features bound for
-Python.  DVCSs also provide a great many additional features that
+Python. DVCSs also provide a great many additional features that
 centralized VCSs don't or can't provide.
- 
+
 This PEP explores the possibility of changing Python's use of Subversion
 to any of the currently popular  DVCSs, in order to gain
 the benefits outlined above. This PEP does not guarantee that a switch
@@ -98,16 +98,16 @@
 possible that no clear winner will be found and that svn will continue
 to be used. If this happens, this PEP will be revisited and revised in
 the future as the state of DVCSs evolves.
- 
 
-Terminology 
+
+Terminology
 ===========
 
 Agreeing on a common terminology is surprisingly difficult,
 primarily because each VCS uses these terms when describing subtly
-different tasks, objects, and concepts.  Where possible, we try to
+different tasks, objects, and concepts. Where possible, we try to
 provide a generic definition of the concepts, but you should consult
-the individual system's glossaries for details.  Here are some basic
+the individual system's glossaries for details. Here are some basic
 references for terminology, from some of the standard web-based
 references on each VCS. You can also refer to glossaries for each
 DVCS:
@@ -120,56 +120,56 @@
 
 
 
-branch 
+branch
     A line of development; a collection of revisions, ordered by
     time.
 
-checkout/working copy/working tree 
+checkout/working copy/working tree
     A tree of code the developer can edit, linked to a branch.
 
-index 
+index
     A "staging area" where a revision is built (unique to git).
 
-repository 
+repository
     A collection of revisions, organized into branches.
 
-clone 
+clone
     A complete copy of a branch or repository.
 
 commit
     To record a revision in a repository.
 
-merge 
+merge
     Applying all the changes and history from one branch/repository
     to another.
 
-pull 
+pull
     To update a checkout/clone from the original branch/repository,
-    which can be remote or local 
+    which can be remote or local
 
-push/publish 
+push/publish
     To copy a revision, and all revisions it depends on, from a one
     repository to another.
 
-cherry-pick 
+cherry-pick
     To merge one or more specific revisions from one branch to
     another, possibly in a different repository, possibly without its
     dependent revisions.
 
-rebase 
+rebase
     To "detach" a branch, and move it to a new branch point; move
     commits to the beginning of a branch instead of where they
     happened in time.
 
 
-Typical Workflow 
+Typical Workflow
 ================
 
 At the moment, the typical workflow for a Python core developer is:
- 
 
-* Edit code in a checkout until it is stable enough to commit/push. 
-* Commit to the master repository. 
+
+* Edit code in a checkout until it is stable enough to commit/push.
+* Commit to the master repository.
 
 It is a rather simple workflow, but it has drawbacks. For one,
 because any work that involves the repository takes time thanks to
@@ -177,11 +177,11 @@
 possible. There is also the drawback of there not being a
 necessarily cheap way to create new checkouts beyond a recursive
 copy of the checkout directory.
- 
+
 A DVCS would lead to a workflow more like this:
- 
-* Branch off of a local clone of the master repository. 
-* Edit code, committing in atomic pieces. 
+
+* Branch off of a local clone of the master repository.
+* Edit code, committing in atomic pieces.
 * Merge the branch into the mainline, and
 * Push all commits to the master repository.
 
@@ -191,9 +191,9 @@
 developer is able to do atomic commits much more frequently,
 minimizing having commits that do multiple things to the code. Also
 by using a branch, the changes are isolated (if desired) from other
-changes being made by other developers.  Because branches are cheap,
+changes being made by other developers. Because branches are cheap,
 it is easy to create and maintain many smaller branches that address
-one specific issue, e.g. one bug or one new feature.  More
+one specific issue, e.g. one bug or one new feature. More
 sophisticated features of DVCSs allow the developer to more easily
 track long running development branches as the official mainline
 progresses.
@@ -206,7 +206,7 @@
 Name       Short Name Version 2.x Trunk Mirror                    3.x Trunk Mirror
 ---------- ---------- ------- ----------------------------------- ------------------------------------------
 Bazaar_    bzr        1.11    http://code.python.org/python/trunk http://code.python.org/python/3.0
-Mercurial_ hg         1.1.2     http://code.python.org/hg/trunk/ 	  http://code.python.org/hg/branches/py3k/ 	
+Mercurial_ hg         1.1.2     http://code.python.org/hg/trunk/  http://code.python.org/hg/branches/py3k/
 git_       N/A        1.6.1   git://code.python.org/python/trunk  git://code.python.org/python/branches/py3k
 ========== ========== ======= =================================== ==========================================
 
@@ -217,7 +217,7 @@
 This PEP does not consider darcs, arch, or monotone. The main
 problem with these DVCSs is that they are simply not popular enough
 to bother supporting when they do not provide some very compelling
-features that the other DVCSs provide.  Arch and darcs also have
+features that the other DVCSs provide. Arch and darcs also have
 significant performance problems which seem unlikely to be addressed
 in the near future.
 
@@ -255,18 +255,18 @@
 
 All of the DVCSs support configuring your project identification.
 Unlike the centralized systems, they use your email address to
-identify your commits.  (Access control is generally done by
+identify your commits. (Access control is generally done by
 mechanisms external to the DVCS, such as ssh or console login).
-This identity may be associated with a full name. 
+This identity may be associated with a full name.
 
 All of the DVCSs will query the system to get some approximation to
-this information, but that may not be what you want.  They also
+this information, but that may not be what you want. They also
 support setting this information on a per-user basis, and on a per-
-project basis.  Convenience commands to set these attributes vary,
+project basis. Convenience commands to set these attributes vary,
 but all allow direct editing of configuration files.
 
-Some VCSs support end-of-line (EOL) conversions on checkout/checkin.  
- 
+Some VCSs support end-of-line (EOL) conversions on checkout/checkin.
+
 
 svn
 '''
@@ -281,15 +281,15 @@
 
 No setup is required, but for much quicker and space-efficient local
 branching, you should create a shared repository to hold all your
-Python branches.  A shared repository is really just a parent
-directory containing a .bzr directory.  When bzr commits a revision,
+Python branches. A shared repository is really just a parent
+directory containing a .bzr directory. When bzr commits a revision,
 it searches from the local directory on up the file system for a .bzr
-directory to hold the revision.  By sharing revisions across multiple
-branches, you cut down on the amount of disk space used.  Do this::
+directory to hold the revision. By sharing revisions across multiple
+branches, you cut down on the amount of disk space used. Do this::
 
-   cd ~/projects
-   bzr init-repo python
-   cd python
+  cd ~/projects
+  bzr init-repo python
+  cd python
 
 Now, all your Python branches should be created inside of
 ``~/projects/python``.
@@ -297,18 +297,18 @@
 There are also some settings you can put in your
 ``~/.bzr/bazaar.conf``
 and ``~/.bzr/locations.conf`` file to set up defaults for interacting
-with Python code.  None of them are required, although some are
-recommended.  E.g. I would suggest gpg signing all commits, but that
-might be too high a barrier for developers.  Also, you can set up
+with Python code. None of them are required, although some are
+recommended. E.g. I would suggest gpg signing all commits, but that
+might be too high a barrier for developers. Also, you can set up
 default push locations depending on where you want to push branches
-by default.  If you have write access to the master branches, that
-push location could be code.python.org.  Otherwise, it might be a
-free Bazaar code hosting service such as Launchpad.  If Bazaar is
+by default. If you have write access to the master branches, that
+push location could be code.python.org. Otherwise, it might be a
+free Bazaar code hosting service such as Launchpad. If Bazaar is
 chosen, we should decide what the policies and recommendations are.
 
 At a minimum, I would set up your email address::
 
-   bzr whoami "Firstname Lastname <email.address at example.com>"
+  bzr whoami "Firstname Lastname <email.address at example.com>"
 
 
 hg
@@ -317,14 +317,14 @@
 Minimally, you should set your user name. To do so, create the file
 ``.hgrc`` in your home directory and add the following::
 
-  [ui]
-  username = Firstname Lastname <email.address at example.com>
+  [ui]
+  username = Firstname Lastname <email.address at example.com>
 
 If you are using Windows, enable the win32text extension to use
 Unix-style newlines by adding to your configuration::
- 
-  [extensions]
-  win32text =
+
+  [extensions]
+  win32text =
 
 These options can also be set locally to a given repository by
 customizing ``<repo>/.hg/hgrc``, instead of ``~/.hgrc``.
@@ -333,10 +333,10 @@
 git
 '''
 
-None needed.  However, git supports a number of features that can
-smooth your work, with a little preparation.  git supports setting
-defaults at the workspace, user, and system levels.  The system
-level is out of scope of this PEP.  The user configuration file is
+None needed. However, git supports a number of features that can
+smooth your work, with a little preparation. git supports setting
+defaults at the workspace, user, and system levels. The system
+level is out of scope of this PEP. The user configuration file is
 ``$HOME/.gitconfig`` on Unix-like systems, and the workspace
 configuration file is ``$REPOSITORY/.git/config``.
 
@@ -353,9 +353,9 @@
   # but use my Pythonic email address
   cd /path/to/python/repository
   git config user.email email.address at python.example.com
- 
+
 If you are using Windows, you probably want to set the core.autocrlf
-and core.safecrlf preferences to true using ``git-config``.::
+and core.safecrlf preferences to true using ``git-config``.::
 
   # check out files with CRLF line endings rather than Unix-style LF only
   git config --global core.autocrlf true
@@ -379,16 +379,16 @@
   echo '.msg' >> ~/.gitignore
 
 If you use multiple branches, you can save a lot of space by putting
-all objects in a common object store.  This can be done physically,
+all objects in a common object store. This can be done physically,
 by making them branches in a single repository. It can alternatively
 be done logically, with the environment variables
 ``GIT_OBJECT_DIRECTORY`` (a single directory where new repository
 objects will be written) and ``GIT_ALTERNATE_OBJECT_DIRECTORIES``
 (a colon-separated path -- on Windows, semicolon-separated -- of
-directories containing read-only object stores to search).  Note that
+directories containing read-only object stores to search). Note that
 when making a local clone, git will hard-link objects rather than
 creating copies if the OS supports that, which also saves space in
-the child repository.  Here's a complicated example::
+the child repository. Here's a complicated example::
 
   # clone the trunk and py3k repositories
   cd /path/to/myrepos
@@ -402,13 +402,13 @@
   # set up environment for my personal copy of py3k
   # read/write: if a file introduced in py3k is imported to trunk
   # verbatim, the trunk sandbox will
-  # use the object created in the py3k sandbox
+  # use the object created in the py3k sandbox
   export GIT_OBJECT_DIRECTORY=/path/to/myrepos/trunk-sandbox
   git clone py3k py3k-sandbox
 
 If you want more complexity, git clone has a plethora of options to
 optimize space.
- 
+
 
 One-Off Checkout
 ----------------
@@ -416,7 +416,7 @@
 As a non-core developer, I want to create and publish a one-off patch
 that fixes a bug, so that a core developer can review it for
 inclusion in the mainline.
- 
+
 * Checkout/branch/clone trunk.
 * Edit some code.
 * Generate a patch (based on what is best supported by the VCS, e.g.
@@ -445,10 +445,10 @@
   svn diff >> patch-2.diff
   # Upload patch-2 to bugs.python.org
 
- 
+
 bzr
 '''
-:: 
+::
 
   bzr branch http://code.python.org/python/trunk
   cd trunk
@@ -462,10 +462,10 @@
   bzr send -o bundle
   # Upload updated bundle to bugs.python.org
 
- 
+
 hg
 ''
-:: 
+::
 
   hg clone http://code.python.org/hg/trunk
   cd trunk
@@ -486,12 +486,12 @@
 '''
 
 The patches could be created with
-``git diff master > stuff-i-did.patch``, too, but
+``git diff master > stuff-i-did.patch``, too, but
 ``git format-patch | git am`` knows some tricks
-(empty files, renames, etc) that ordinary patch can't handle.  git
+(empty files, renames, etc) that ordinary patch can't handle. git
 grabs "Stuff I did" out of the the commit message to create the file
-name 0001-Stuff-I-did.patch.  See Patch Review below for a
-description of the git-format-patch format.::
+name 0001-Stuff-I-did.patch. See Patch Review below for a
+description of the git-format-patch format.::
 
   # Get the mainline code.
   git clone git://code.python.org/python/trunk
@@ -517,10 +517,10 @@
 
 As a core developer, I want to undo a change that was not ready for
 inclusion in the mainline.
- 
+
 * Back out the unwanted change.
 * Push patch to server.
- 
+
 
 svn
 '''
@@ -530,7 +530,7 @@
   svn merge -c -40 .
   # Resolve conflicts, if any.
   svn commit -m "Reverted revision 40"
- 
+
 
 bzr
 '''
@@ -540,10 +540,10 @@
   bzr merge -r 40..39
   # Resolve conflicts, if any.
   bzr commit -m "Reverted revision 40"
- 
+
 Note that if the change you want revert is the last one that was
 made, you can just use ``bzr uncommit``.
- 
+
 
 hg
 ''
@@ -554,7 +554,7 @@
   # Resolve conflicts, if any.
   hg commit -m "Reverted changeset 9150dd9c6d30"
   hg push
- 
+
 Note, you can use "hg rollback" and "hg strip" to revert changes you committed
 in your local repository, but did not yet push to other repositories.
 
@@ -565,13 +565,13 @@
   # Assume the change to revert is the grandfather of a revision tagged "newhotness".
   git revert newhotness~2
   #if CONFLICTS
-  #    Resolve conflicts if any.
-  git commit -m "Reverted changeset 9150dd9c6d30."
+  # Resolve conflicts if any.
+  git commit -m "Reverted changeset 9150dd9c6d30."
   #else
-  #    Edit log message, commit will be done automatically.
+  # Edit log message, commit will be done automatically.
   #endif
   git push
- 
+
 
 Patch Review
 ------------
@@ -602,7 +602,7 @@
 dealing with individual patches. For this scenario the assumption
 will be the developer creates a local checkout of the trunk to work
 with.::
- 
+
     cp -r trunk issue0000
     cd issue0000
     patch -p0 < __patch__
@@ -614,11 +614,11 @@
 Another option is to only have a single checkout running at any one
 time and use ``svn diff`` along with ``svn revert -R`` to store away
 independent changes you may have made.
- 
+
 
 bzr
 '''
-:: 
+::
 
     bzr branch trunk issueNNNN
     # Download `patch` bundle from Roundup
@@ -629,10 +629,10 @@
     rm -rf ../issueNNNN
 
 Alternatively, since you're probably going to commit these changes to
-the trunk, you could just do a checkout.  That would give you a local
+the trunk, you could just do a checkout. That would give you a local
 working tree while the branch (i.e. all revisions) would continue to
-live on the server.  This is similar to the svn model and might allow
-you to more quickly review the patch.  There's no need for the push
+live on the server. This is similar to the svn model and might allow
+you to more quickly review the patch. There's no need for the push
 in this case.::
 
     bzr checkout trunk issueNNNN
@@ -641,30 +641,30 @@
     # Review patch
     bzr commit -m'Patch NNNN by So N. So' --fixes python:NNNN
     rm -rf ../issueNNNN
- 
+
 
 hg
 ''
-:: 
+::
 
     hg clone trunk issue0000
     cd issue0000
     # If the patch was generated using hg export, the user name of the
-    # submitter is automatically recorded. Otherwise, 
+    # submitter is automatically recorded. Otherwise,
     # use hg import --no-commit submitted.diff and commit with
     # hg commit -u "Firstname Lastname <email.address at example.com>"
     hg import submitted.diff
     # Review patch.
     hg push ssh://alexandre@code.python.org/hg/trunk/
 
- 
+
 git
 '''
-We assume a patch created by git-format-patch.  This is a Unix mbox
+We assume a patch created by git-format-patch. This is a Unix mbox
 file containing one or more patches, each formatted as an RFC 2822
-message.  git-am interprets each message as a commit as follows.  The
+message. git-am interprets each message as a commit as follows. The
 author of the patch is taken from the From: header, the date from the
-Date header.  The commit log is created by concatenating the content
+Date header. The commit log is created by concatenating the content
 of the subject line, a blank line, and the message body up to the
 start of the patch.::
 
@@ -672,7 +672,7 @@
     # Create a branch in case we don't like the patch.
     git checkout -b patch-review
     # Download patch from bugs.python.org to submitted.patch.
-    git am « submitted.patch
+    git am < submitted.patch
     # Review and approve patch.
     # Merge into master and push.
     git checkout master
@@ -724,9 +724,9 @@
 '''
 
 Bazaar is pretty straightforward here, since it supports cherry
-picking revisions manually.  In the example below, we could have
+picking revisions manually. In the example below, we could have
 given a revision id instead of a revision number, but that's usually
-not necessary.  Martin Pool suggests "We'd generally recommend doing
+not necessary. Martin Pool suggests "We'd generally recommend doing
 the fix first in the oldest supported branch, and then merging it
 forward to the later releases."::
 
@@ -808,7 +808,7 @@
 '''
 
 In git I would have an "integration" workspace which contains all of
-the relevant master repository branches.  git cherry-pick doesn't
+the relevant master repository branches. git cherry-pick doesn't
 work across repositories; you need to have the branches in the same
 repository.
 ::
@@ -821,26 +821,26 @@
     git cherry-pick -x release27~3
     # If there are conflicts, resolve them, and commit those changes.
     # git commit -a -m "Resolve conflicts."
-    # Run test suite.  If fixes are necessary, record as a separate commit.
+    # Run test suite. If fixes are necessary, record as a separate commit.
     # git commit -a -m "Fix code causing test failures."
     git checkout master
     git cherry-pick -x release27~3
     # Do any conflict resolution and test failure fixups.
     # Revert Misc/NEWS changes.
     git checkout HEAD^ -- Misc/NEWS
-    # This creates a new commit on top of the cherry-pick.  An alternative workflow
-    # would use the -n (aka --no-commit) flag to git-cherry-pick, and then commit
+    # This creates a new commit on top of the cherry-pick. An alternative workflow
+    # would use the -n (aka --no-commit)flag to git-cherry-pick, and then commit
     # here with an appropriate log message.
     git commit -m 'Revert cherry-picked Misc/NEWS changes.' Misc/NEWS
     # Push both ports.
     git push release26 master
 
-If you are regularly merging (rather than cherry-picking) from a
+If you are regularly merging (rather than cherry-picking) from a
 given branch, then you can block a given commit from being
 accidentally merged in the future by merging, then reverting it.
 This does not prevent a cherry-pick from pulling in the unwanted
 patch, and this technique requires blocking everything that you don't
-want merged.  I'm not sure if this differs from svn on this point.
+want merged. I'm not sure if this differs from svn on this point.
 ::
 
     cd trunk
@@ -848,25 +848,25 @@
     git merge experimental-branch
     # We don't want the 3rd-to-last commit from the experimental-branch,
     # and we don't want it to ever be merged.
-    # The notation "^N" means Nth parent of the current commit.  Thus HEAD^2^1^1
+    # The notation "^N" means Nth parent of the current commit. Thus HEAD^2^1^1
     # means the first parent of the first parent of the second parent of HEAD.
     git revert HEAD^2^1^1
     # Propagate the merge and the prohibition to the public repository.
     git push
- 
+
 
 Coordinated Development of a New Feature
 ----------------------------------------
 
 Sometimes core developers end up working on a major feature with
-several developers.  As a core developer, I want to be able to
+several developers. As a core developer, I want to be able to
 publish feature branches to a common public location so that I can
 collaborate with other developers.
 
 This requires creating a branch on a server that other developers
-can access.  All of the DVCSs support creating new repositories on
+can access. All of the DVCSs support creating new repositories on
 hosts where the developer is already able to commit, with
-appropriate configuration of the repository host. This is
+appropriate configuration of the repository host. This is
 similar in concept to the existing sandbox in svn, although details
 of repository initialization may differ.
 
@@ -885,7 +885,7 @@
 .. _Launchpad: http://www.launchpad.net/
 .. _bitbucket.org: http://www.bitbucket.org/
 .. _GitHub: http://www.github.com/
- 
+
 * Branch trunk.
 * Pull from branch on the server.
 * Pull from trunk.
@@ -907,11 +907,11 @@
     # Pull in trunk and merge to the branch.
     svnmerge merge
     svn commit -F svnmerge-commit-message.txt
- 
+
 
 bzr
 '''
-:: 
+::
 
     XXX To be done by Brett as a test of knowledge and online documentation/community.
 
@@ -939,7 +939,7 @@
 working on a separate issue is very helpful to separate out issues
 into individual units of work instead of compounding them into a
 single, large unit.
- 
+
 * Create a branch A (e.g. urllib has a bug).
 * Edit some code.
 * Create a new branch B that branch A depends on (e.g. the urllib
@@ -974,7 +974,7 @@
     cd ..
     rm -rf issue0000
 
- 
+
 bzr
 '''
 Here's an approach that uses bzr shelf (now a standard part of bzr)
@@ -984,7 +984,7 @@
 
     bzr branch bzr+svn://trunk bug-0000
     cd bug-0000
-    # Edit some code.  Dang, we need to fix the socket module.
+    # Edit some code. Dang, we need to fix the socket module.
     bzr shelve --all
     # Edit some code.
     bzr commit -m "Socket module fixes"
@@ -992,15 +992,15 @@
     bzr unshelve
     # Edit some code
 
-Another approach one might take uses the loom plugin.  Looms can
+Another approach one might take uses the loom plugin. Looms can
 greatly simply working on dependent branches because they
-automatically take care of the stacking dependencies for you. 
+automatically take care of the stacking dependencies for you.
 Imagine looms as a stack of dependent branches (called "threads" in
 loom parlance), with easy ways to move up and down the stack of
 thread, merge changes up the stack to descendant threads, create
-diffs between threads, etc.  Occasionally, you may need or want to
+diffs between threads, etc. Occasionally, you may need or want to
 export your loom threads into separate branches, either for review
-or commit.  Higher threads incorporate all the changes in the lower
+or commit. Higher threads incorporate all the changes in the lower
 threads, automatically.
 ::
 
@@ -1008,7 +1008,7 @@
     cd bug-0000
     bzr loomify trunk
     bzr create-thread fix-urllib
-    # Edit some code.  Dang, we need to fix the socket module.
+    # Edit some code. Dang, we need to fix the socket module.
     bzr commit -m "Checkpointing my work so far"
     bzr down-thread
     bzr create-thread fix-socket
@@ -1022,27 +1022,27 @@
     bzr record done
 
 For bonus points, let's say someone else fixes the socket module in
-exactly the same way you did.  Perhaps this person even grabbed your
-fix-socket thread and applied just that to the trunk.  You'd like to
+exactly the same way you did. Perhaps this person even grabbed your
+fix-socket thread and applied just that to the trunk. You'd like to
 be able to merge their changes into your loom and delete your
 now-redundant fix-socket thread.
-:: 
+::
 
     bzr down-thread trunk
-    # Get all new revisions to the trunk.  If you've done things
+    # Get all new revisions to the trunk. If you've done things
     # correctly, this must succeed without conflict.
     bzr pull
     bzr up-thread
-    # See?  The fix-socket thread is now identical to the trunk
+    # See? The fix-socket thread is now identical to the trunk
     bzr commit -m 'Merge in trunk changes'
-    bzr diff -r thread: | wc -l  # returns 0
+    bzr diff -r thread: | wc -l # returns 0
     bzr combine-thread
     bzr up-thread
     # Resolve any conflicts
     bzr commit -m 'Merge trunk'
     # Now our top-thread has an up-to-date trunk and just the urllib fix.
 
- 
+
 hg
 ''
 ::
@@ -1065,9 +1065,9 @@
     hg merge
     hg push
     cd ..
-    rm -rf issue0000 fix-socket-bug
+    rm -rf issue0000 fix-socket-bug
+
 
- 
 git
 '''
 ::
@@ -1110,39 +1110,39 @@
     git reset --hard checkpoint
     git pull git://code.python.org/public/trunk master
     git rebase --onto master fix-socket bug-0000
-    # If there were any conflicts, we fixed them during rebase.  But
+    # If there were any conflicts, we fixed them during rebase. But
     # there shouldn't be any,
     # since we assumed the socket bug is independent of the urllib bug.
     git checkout master
     git merge bug-0000
     git push
-    # Clean up.  We don't delete bug-0000 because the merge obsoleted it already.
+    # Clean up. We don't delete bug-0000 because the merge obsoleted it already.
     git tag -d checkpoint
     git branch -d fix-socket
-    # Now our HEAD has an up-to-date trunk and just the urllib fix.
+    # Now our HEAD has an up-to-date trunk and just the urllib fix.
 
 
 Doing a Python Release
 ----------------------
 
 How does PEP 101 change when using a DVCS?
- 
+
 
 bzr
 '''
 
-It will change, but not substantially so.  When doing the
+It will change, but not substantially so. When doing the
 maintenance branch, we'll just push to the new location instead of
-doing an svn cp.  Tags are totally different, since in svn they are
+doing an svn cp. Tags are totally different, since in svn they are
 directory copies, but in bzr (and I'm guessing hg), they are just
-symbolic names for revisions on a particular branch.  The release.py
-script will have to change to use bzr commands instead.  It's
+symbolic names for revisions on a particular branch. The release.py
+script will have to change to use bzr commands instead. It's
 possible that because DVCS (in particular, bzr) does cherry picking
 and merging well enough that we'll be able to create the maint
-branches sooner.  It would be a useful exercise to try to do a
+branches sooner. It would be a useful exercise to try to do a
 release off the bzr/hg mirrors.
- 
- 
+
+
 hg
 ''
 
@@ -1159,22 +1159,22 @@
 git
 '''
 
-It will change, but not substantially so.  When doing the
+It will change, but not substantially so. When doing the
 maintenance branch, we'll just git push to the new location instead
-of doing an svn cp.  Tags are totally different, since in svn they
+of doing an svn cp. Tags are totally different, since in svn they
 are directory copies, but in git they are just symbolic names for
-revisions, as are branches.  (The difference between a tag and a
+revisions, as are branches. (The difference between a tag and a
 branch is that tags refer to a particular commit, and will never
-change unless you use git tag -f to force them to move.  The
+change unless you use git tag -f to force them to move. The
 checked-out branch, on the other hand, is automatically updated by
-git commit.)  The release.py script will have to change to use git
-commands instead.  With git I would create a (local) maintenance
-branch as soon as the release engineer is chosen.  Then I'd "git
+git commit.) The release.py script will have to change to use git
+commands instead. With git I would create a (local) maintenance
+branch as soon as the release engineer is chosen. Then I'd "git
 pull" until I didn't like a patch, when it would be "git pull; git
 revert ugly-patch", until it started to look like the sensible thing
 is to fork off, and start doing "git cherry-pick" on the good
 patches.
- 
+
 
 Platform/Tool Support
 =====================
@@ -1182,8 +1182,8 @@
 Operating Systems
 -----------------
 ==== ======================================= ============================================= =============================
-DVCS Windows                                 OS X                                          UNIX 
----- --------------------------------------- --------------------------------------------- ----------------------------- 
+DVCS Windows                                 OS X                                          UNIX
+---- --------------------------------------- --------------------------------------------- -----------------------------
 bzr  yes (installer) w/ tortoise             yes (installer, fink or MacPorts)             yes (various package formats)
 hg   yes (third-party installer) w/ tortoise yes (third-party installer, fink or MacPorts) yes (various package formats)
 git  yes (third-party installer)             yes (third-party installer, fink or MacPorts) yes (.deb or .rpm)
@@ -1207,7 +1207,7 @@
 
 bzr
     My understanding is that support for this is being worked on as
-    I type, landing in a version RSN.  I will try to dig up details.
+    I type, landing in a version RSN. I will try to dig up details.
 
 hg
     Supported via the win32text extension.
@@ -1221,9 +1221,9 @@
 Case-insensitive filesystem support
 -----------------------------------
 
-bzr 
-    Should be OK.  I share branches between Linux and OS all the
-    time.  I've done case changes (e.g. bzr mv Mailman mailman) and
+bzr
+    Should be OK. I share branches between Linux and OS all the
+    time. I've done case changes (e.g. bzr mv Mailman mailman) and
     as long as I did it on Linux (obviously), when I pulled in the
     changes on OS X everything was hunky dory.
 
@@ -1236,7 +1236,7 @@
     git does not have a problem with renames in either direction.
     However, case-insensitive filesystem support is usually taken
     to mean complaining about collisions on case-sensitive files
-    systems.  git does not do that.
+    systems. git does not do that.
 
 
 Tools
@@ -1244,9 +1244,9 @@
 
 In terms of code review tools such as `Review Board`_ and Rietveld_,
 the former supports all three while the latter supports hg and git but
-not bzr.  Bazaar does not yet have an online review board, but it
-has several ways to manage email based reviews and trunk merging. 
-There's `Bundle Buggy`_, `Patch Queue Manager`_ (PQM), and
+not bzr. Bazaar does not yet have an online review board, but it
+has several ways to manage email based reviews and trunk merging.
+There's `Bundle Buggy`_, `Patch Queue Manager`_ (PQM), and
 `Launchpad's code reviews <https://launchpad.net/+tour/code-review>`_.
 
 .. _Review Board: http://www.review-board.org/
@@ -1284,14 +1284,14 @@
 
 All three DVCSs have svn support, although git is the only one to
 come with that support out-of-the-box.
- 
+
 
 Server Support
 ==============
 
 ==== ==================
 DVCS Web page interface
----- ------------------ 
+---- ------------------
 bzr  loggerhead_
 hg   hgweb_
 git  gitweb_
@@ -1327,7 +1327,7 @@
 
 Martin Pool adds: "bzr has a stable Python scripting interface, with
 a distinction between public and private interfaces and a
-deprecation window for APIs that are changing.  Some plugins are
+deprecation window for APIs that are changing. Some plugins are
 listed in https://edge.launchpad.net/bazaar and
 http://bazaar-vcs.org/Documentation".
 
@@ -1347,7 +1347,7 @@
 ---
 
 git has a cvsserver mode, ie, you can check out a tree from git
-using CVS.  You can even commit to the tree, but features like
+using CVS. You can even commit to the tree, but features like
 merging are absent, and branches are handled as CVS modules, which
 is likely to shock a veteran CVS user.
 
@@ -1367,19 +1367,19 @@
 The amount of time and effort it takes to get a checkout of Python's
 repository is critical. If the difficulty or time is too great then a
 person wishing to contribute to Python may very well give up. That
-cannot be allowed to happen. 
+cannot be allowed to happen.
 
 I measured the checking out of code as if I was a non-core
 developer. Timings were done using the ``time`` command in zsh and
 space was calculated with ``du -c -h``.
 
 ======= ================ ==============
-DVCS	Time	         Space	
+DVCS    Time             Space
 ------- ---------------- --------------
-svn	   1:04          139 M
+svn        1:04          139 M
 bzr       10:45          276 M
-hg	   2:30	         171 M	
-git	   2:54	         134 M	
+hg          2:30         171 M
+git         2:54         134 M
 ======= ================ ==============
 
 .. note::
@@ -1476,7 +1476,7 @@
 
     import random
     print(random.choice(['svn', 'bzr', 'hg', 'git']))
- 
+
 
 Transition Plan
 ===============


More information about the Python-checkins mailing list