Various changes to PEP 512 based on feedback from core-workflow

This commit is contained in:
Brett Cannon 2016-01-18 10:52:57 -08:00
parent 982953cea7
commit ee38420e88
1 changed files with 114 additions and 65 deletions

View File

@ -97,24 +97,24 @@ migration to GitHub [#pythocat]_.
The overarching goal of this migration is to improve the development
process to the extent that a core developer can go from external
contribution submission through all the steps leading to committing
said contribution all from within a browser on a tablet with WiFi.
All of this will be done in such a way that if an external
contributor chooses not to use GitHub then they will continue to have
that option.
said contribution all from within a browser on a tablet with WiFi
using *some* development process (this does not inherently mean
GitHub's default workflow). All of this will be done in such a way
that if an external contributor chooses not to use GitHub then they
will continue to have that option.
Repositories to Migrate
=======================
While hg.python.org [#h.p.o]_ hosts many repositories, there are only
six key repositories that must move:
five key repositories that should move:
1. devinabox [#devinabox-repo]_
2. benchmarks [#benchmarks-repo]_
3. tracker [#tracker-repo]_
4. peps [#peps-repo]_
5. devguide [#devguide-repo]_
6. cpython [#cpython-repo]_
The devinabox, benchmarksm and tracker repositories are code-only.
The devinabox and benchmarks repositories are code-only.
The peps and devguide repositories involve the generation of webpages.
And the cpython repository has special requirements for integration
with bugs.python.org [#b.p.o]_.
@ -131,11 +131,10 @@ not necessarily the requirements within a section.
Requirements for Code-Only Repositories
---------------------------------------
Completion of the requirements in this section will allow the
devinabox, benchmarks, and tracker repositories to move to
devinabox and benchmarks repositories to move to
GitHub. While devinabox has a sufficiently descriptive name, the
benchmarks repository does not; therefore, it will be named
"python-benchmark-suite". The tracker repo also has a misleading name
and will be renamed "bugs.python.org".
"python-benchmark-suite".
Create a 'python-dev' team
''''''''''''''''''''''''''
@ -174,6 +173,10 @@ means is that an association will be needed between a person's
bugs.python.org [#b.p.o]_ account and their GitHub account, which
will be done through a new field in a user's profile.
This does implicitly require that contributors will need both a
GitHub [#github]_ and bugs.python.org account in order to sign the
CLA and contribute through GitHub.
A bot to enforce CLA signing
++++++++++++++++++++++++++++
With an association between someone's GitHub account and their
@ -216,11 +219,14 @@ compared to the other repositories mentioned in this PEP.
Document steps to commit a pull request
'''''''''''''''''''''''''''''''''''''''
During the process of choosing a new development workflow, it was
decided that a linear history is desired. This means that the
convenient "Merge" button in GitHub pull requests is undesireable, as
it creates a merge commit along with all of the contributor's
individual commits (this does not affect the other repositories where
the desire for a linear history doesn't exist).
decided that a linear history is desired. People preferred having a
single commit representing a single change instead of having a set of
unrelated commits lead to a merge commit that represented a single
change. This means that the convenient "Merge" button in GitHub pull
requests is undesirable, as it creates a merge commit along with all
of the contributor's individual commits (this does not affect the
other repositories where the desire for a linear history doesn't
exist).
Luckily, Git [#git]_ does not require GitHub's workflow and so one can
be chosen which gives us a linear history by using Git's CLI. The
@ -285,7 +291,7 @@ when a fix has been proposed. The association needs to be many-to-one
as there can take multiple pull requests to solve a single issue
(technically it should be a many-to-many association for when a
single fix solves multiple issues, but this is fairly rare and issues
can be merged into one using the ``Superceder`` field on the issue
can be merged into one using the ``Superseder`` field on the issue
tracker).
Association between a pull request and an issue will be done based on
@ -338,6 +344,16 @@ Once Python is no longer kept in Mercurial, the ``sys._mercurial``
attribute will need to be removed. An equivalent ``sys._git``
attribute will be needed to take its place.
Update the devguide
'''''''''''''''''''
The devguide will need to be updated with details of the new
workflow. Mostly likely work will take place in a separate branch
until the migration actually occurs.
Update PEP 101
''''''''''''''
The release process will need to be updated as necessary.
Optional, Planned Features
--------------------------
Once the cpython repository [#cpython-repo]_ is migrated, all
@ -457,11 +473,24 @@ These parts of the documentation could be broken out into their own
repositories to simplify their maintenance and to expand who has
commit rights to them to ease in their maintenance.
It has also been suggested to split out the
`What's New <https://docs.python.org/3/whatsnew/index.html>`__
documents. That would require deciding whether a workflow could be
developed where it would be difficult to forget to update
What's New (potentially through a label added to PRs, like
"What's New needed").
Backup of Git repositories
''''''''''''''''''''''''''
While not necessary, it would be good to have official backups of the
various Git repositories for disaster protection. It will be up to
the PSF infrastructure committee to decide if this is worthwhile or
unnecessary.
Status
======
Requirements for migrating the devinabox [#devinabox-repo]_,
benchmarks [#benchmarks-repo]_, and tracker [#tracker-repo]_
repositories:
Requirements for migrating the devinabox [#devinabox-repo]_ and
benchmarks [#benchmarks-repo]_ repositories:
* Not started
@ -478,63 +507,66 @@ repositories:
- None
Repositories whose build steps need updating:
Repositories whose build steps need updating:
* Not started
* Not started
- peps [#peps-repo]_
- devguide [#devguide-repo]_
- peps [#peps-repo]_
- devguide [#devguide-repo]_
* In progress
* In progress
- None
- None
* Completed
* Completed
- None
- None
Requirements to move over the cpython repo [#cpython-repo]_:
Requirements to move over the cpython repo [#cpython-repo]_:
* Not started
* Not started
- `Document steps to commit a pull request`_
- `Handling Misc/NEWS`_
- `Handling Misc/ACKS`_
- `Linking a pull request to an issue`_
- `Notify the issue if the pull request is committed`_
- `Update linking service for mapping commit IDs to URLs`_
- `Create https://git.python.org`_
- `Backup of pull request data`_
- `Change sys._mercurial`_
- `Document steps to commit a pull request`_
- `Handling Misc/NEWS`_
- `Handling Misc/ACKS`_
- `Linking a pull request to an issue`_
- `Notify the issue if the pull request is committed`_
- `Update linking service for mapping commit IDs to URLs`_
- `Create https://git.python.org`_
- `Backup of pull request data`_
- `Change sys._mercurial`_
- `Update the devguide`_
- `Update PEP 101`_
* In progress
* In progress
- None
- None
* Completed
* Completed
- None
- None
Optional features:
Optional features:
* Not started
* Not started
- `Bot to handle pull request merging`_
- `Continuous integration per pull request`_
- `Test coverage report`_
- `Notifying issues of pull request comments`_
- `Allow bugs.python.org to use GitHub as a login provider`_
- `Web hooks for re-generating web content`_
- `Link web content back to files that it is generated from`_
- `Splitting out parts of the documentation into their own repositories`_
- `Bot to handle pull request merging`_
- `Continuous integration per pull request`_
- `Test coverage report`_
- `Notifying issues of pull request comments`_
- `Allow bugs.python.org to use GitHub as a login provider`_
- `Web hooks for re-generating web content`_
- `Link web content back to files that it is generated from`_
- `Splitting out parts of the documentation into their own repositories`_
- `Backup of Git repositories`_
* In progress
* In progress
- None
- None
* Completed
* Completed
- None
- None
Open Issues
===========
@ -556,6 +588,10 @@ PSF infrastructure committee to decide if they want to spend the
time and resources to keep it running. They may also choose whether
they want to host a Git mirror on PSF infrastructure.
Depending on the decision reached, other ancillary repositories will
either be forced to migration or they can choose to simply stay on
hg.python.org.
Tools and commands to move from Mercurial to Git
------------------------------------------------
A decision needs to be made on exactly what tooling and what commands
@ -579,7 +615,7 @@ keep/add attribution.
How to handle the Misc/NEWS file
--------------------------------
There are two competing approaches to handling
There are three competing approaches to handling
``Misc/NEWS`` [#news-file]_. One is to add a news entry for issues on
bugs.python.org [#b.p.o]_. This would mean an issue that is marked
as "resolved" could not be closed until a news entry is added in the
@ -593,13 +629,13 @@ bugs.python.org for relevant new entries for a release and to produce
the output needed to be checked into the code repository. This
approach is agnostic to whether a commit was done by CLI or bot.
The competing approach is to use an individual file per news entry,
containg the text for the entry. In this scenario each feature
A competing approach is to use an individual file per news entry,
containing the text for the entry. In this scenario each feature
release would have its own directory for news entries and a separate
file would be created in that directory that was either named after
the issue it closed or a timestamp value (which prevents collisions).
Merges across branches would have no issue as the news entry file
would still be uniqeuely named and in the directory of the latest
would still be uniquely named and in the directory of the latest
version that contained the fix. A script would collect all news entry
files no matter what directory they reside in and create an
appropriate news file (the release directory can be ignored as the
@ -618,8 +654,14 @@ specify a specific news entry and create the file as part of its
flattened commit (while most likely also supporting using the first
line of the commit message if no specific news entry was specified).
Code for this approach has been written previously for the Mercurial
workflow at http://bugs.python.org/issue18967. There is also a tool
from the community at https://pypi.python.org/pypi/towncrier.
workflow at http://bugs.python.org/issue18967. There is also tools
from the community like https://pypi.python.org/pypi/towncrier and
https://github.com/twisted/newsbuilder .
A yet third option is a merge script to handle the conflicts. This
approach allows for keeping the NEWS file as a single file. It does
run the risk, though, of failure and thus blocking a commit until it
can be manually resolved.
Naming the commit bot
---------------------
@ -725,10 +767,19 @@ As the current development process has changes committed in the
oldest branch first and then merged up to the default branch, the
question came up as to whether this workflow should be perpetuated.
In the end it was decided that committing in the newest branch and
then cherrypicking changes into older branches would work best as
then cherry-picking changes into older branches would work best as
most people will instinctively work off the newest branch and it is a
more common workflow when using Git [#git]_.
Cherry-picking is also more bot-friendly for an in-browser workflow.
In the merge-up scenario, if you were to request a bot to do a merge
and it failed, then you would have to make sure to immediately solve
the merge conflicts if you still allowed the main commit, else you
would need to postpone the entire commit until all merges could be
handled. With a cherry-picking workflow, the main commit could
proceed while postponing the merge-failing cherry-picks. This allows
for possibly distributing the work of managing conflicting merges.
Deriving ``Misc/NEWS`` from the commit logs
-------------------------------------------
As part of the discussion surrounding `Handling Misc/NEWS`_, the
@ -774,8 +825,6 @@ References
.. [#peps-repo] Mercurial repository of the Python Enhancement Proposals (https://hg.python.org/peps/)
.. [#tracker-repo] bugs.python.org code repository (https://hg.python.org/tracker/python-dev/)
.. [#devguide-repo] Mercurial repository for the Python Developer's Guide (https://hg.python.org/devguide/)
.. [#cpython-repo] Mercurial repository for CPython (https://hg.python.org/cpython/)