Update status of GH migration
This commit is contained in:
parent
b08220c867
commit
b529907818
98
pep-0512.txt
98
pep-0512.txt
|
@ -12,6 +12,7 @@ Post-History: 17-Jan-2016, 19-Jan-2016, 23-Jan-2016
|
|||
|
||||
Abstract
|
||||
========
|
||||
|
||||
This PEP outlines the steps required to migrate Python's development
|
||||
process from Mercurial [#hg]_ as hosted at
|
||||
hg.python.org [#h.p.o]_ to Git [#git]_ on GitHub [#GitHub]_. Meeting
|
||||
|
@ -19,8 +20,10 @@ the minimum goals of this PEP should allow for the development
|
|||
process of Python to be as productive as it currently is, and meeting
|
||||
its extended goals should improve it.
|
||||
|
||||
|
||||
Rationale
|
||||
=========
|
||||
|
||||
In 2014, it became obvious that Python's custom development
|
||||
process was becoming a hindrance. As an example, for an external
|
||||
contributor to submit a fix for a bug that eventually was committed,
|
||||
|
@ -104,8 +107,10 @@ 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
|
||||
five key repositories that should move:
|
||||
|
||||
|
@ -122,6 +127,7 @@ with bugs.python.org [#b.p.o]_.
|
|||
|
||||
Migration Plan
|
||||
==============
|
||||
|
||||
The migration plan is separated into sections based on what is
|
||||
required to migrate the repositories listed in the
|
||||
`Repositories to Migrate`_ section. Completion of requirements
|
||||
|
@ -129,16 +135,20 @@ outlined in each section should unblock the migration of the related
|
|||
repositories. The sections are expected to be completed in order, but
|
||||
not necessarily the requirements within a section.
|
||||
|
||||
|
||||
Requirements for Code-Only Repositories
|
||||
---------------------------------------
|
||||
|
||||
Completion of the requirements in this section will allow the
|
||||
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-benchmarks".
|
||||
|
||||
|
||||
Create a 'Python core' team
|
||||
'''''''''''''''''''''''''''
|
||||
|
||||
To manage permissions, a 'Python core' team will be created as part of
|
||||
the python organization [#github-python-org]_. Any repository that is
|
||||
moved will have the 'Python core' team added to it with write
|
||||
|
@ -146,15 +156,19 @@ permissions [#github-org-perms]_. Anyone who previously had rights to
|
|||
manage SSH keys on hg.python.org will become a team maintainer for the
|
||||
'Python core' team.
|
||||
|
||||
|
||||
Define commands to move a Mercurial repository to Git
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
Since moving to GitHub also entails moving to Git [#git]_, we must
|
||||
decide what tools and commands we will run to translate a Mercurial
|
||||
repository to Git. The exact tools and steps to use are an
|
||||
open issue; see `Tools and commands to move from Mercurial to Git`_.
|
||||
|
||||
|
||||
CLA enforcement
|
||||
'''''''''''''''
|
||||
|
||||
A key part of any open source project is making sure that its source
|
||||
code can be properly licensed. This requires making sure all people
|
||||
making contributions have signed a contributor license agreement
|
||||
|
@ -165,8 +179,10 @@ bugs.python.org [#b.p.o]_. With this migration, the plan is to start
|
|||
off with automated checking and enforcement of contributors signing
|
||||
the CLA.
|
||||
|
||||
|
||||
Adding GitHub username support to bugs.python.org
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
To keep tracking of CLA signing under the direct control of the PSF,
|
||||
tracking who has signed the PSF CLA will be continued by marking that
|
||||
fact as part of someone's bugs.python.org user profile. What this
|
||||
|
@ -185,8 +201,10 @@ returns a JSON dictionary with the keys of the usernames requested
|
|||
and a ``true`` value if they have sigend the CLA, ``false`` if they
|
||||
have not, and ``null`` if no corresponding GitHub username was found.
|
||||
|
||||
|
||||
A bot to enforce CLA signing
|
||||
++++++++++++++++++++++++++++
|
||||
|
||||
With an association between someone's GitHub account and their
|
||||
bugs.python.org [#b.p.o]_ account, which has the data as to whether
|
||||
someone has signed the CLA, a bot can monitor pull requests on
|
||||
|
@ -211,8 +229,10 @@ Heroku [#heroku]_ and written to target Python 3.5 to act as a
|
|||
showcase for asynchronous programming. The code for the bot is hosted
|
||||
in the Knights Who Say Ni project [#ni]_.
|
||||
|
||||
|
||||
Requirements for Web-Related Repositories
|
||||
-----------------------------------------
|
||||
|
||||
Due to their use for generating webpages, the
|
||||
devguide [#devguide-repo]_ and peps [#peps-repo]_ repositories need
|
||||
their respective processes updated to pull from their new Git
|
||||
|
@ -223,16 +243,20 @@ The devguide repository might also need to be named
|
|||
when viewed in isolation from the
|
||||
python organization [#github-python-org]_.
|
||||
|
||||
|
||||
Requirements for the cpython Repository
|
||||
---------------------------------------
|
||||
|
||||
Obviously the most active and important repository currently hosted
|
||||
at hg.python.org [#h.p.o]_ is the cpython
|
||||
repository [#cpython-repo]_. Because of its importance and high-
|
||||
frequency use, it requires more tooling before being moved to GitHub
|
||||
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. People preferred having a
|
||||
single commit representing a single change instead of having a set of
|
||||
|
@ -262,8 +286,10 @@ The exact sequence of commands that will be given as guidelines to
|
|||
core developers is an open issue:
|
||||
`Git CLI commands for committing a pull request to cpython`_.
|
||||
|
||||
|
||||
Handling Misc/NEWS
|
||||
''''''''''''''''''
|
||||
|
||||
Traditionally the ``Misc/NEWS`` file [#news-file]_ has been problematic
|
||||
for changes which spanned Python releases. Often times there will be
|
||||
merge conflicts when committing a change between e.g., 3.5 and 3.6
|
||||
|
@ -278,8 +304,10 @@ There are currently two competing approaches to solving the
|
|||
``Misc/NEWS`` problem which are discussed in an open issue:
|
||||
`How to handle the Misc/NEWS file`_.
|
||||
|
||||
|
||||
Handling Misc/ACKS
|
||||
''''''''''''''''''
|
||||
|
||||
Traditionally the ``Misc/ACKS`` file [#acks-file]_ has been managed
|
||||
by hand. But thanks to Git supporting an ``author`` value as well as
|
||||
a ``committer`` value per commit, authorship of a commit can be part
|
||||
|
@ -305,8 +333,10 @@ issue number in the commit message of the format ``Issue #`` at the
|
|||
start of the message led to a comment being posted to the issue
|
||||
linking to the commit.
|
||||
|
||||
|
||||
Linking a pull request to an issue
|
||||
++++++++++++++++++++++++++++++++++
|
||||
|
||||
An association between a pull request and an issue is needed to track
|
||||
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
|
||||
|
@ -324,13 +354,17 @@ request to signify that the connection was made successfully. This
|
|||
could lead to incorrect associations if the wrong issue or
|
||||
referencing another issue was done, but these are rare occasions.
|
||||
|
||||
|
||||
Notify the issue if the pull request is committed
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Once a pull request is closed (merged or not), the issue should be
|
||||
updated to reflect this fact.
|
||||
|
||||
|
||||
Update linking service for mapping commit IDs to URLs
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
Currently you can use https://hg.python.org/lookup/ with a revision
|
||||
ID from either the Subversion or Mercurial copies of the
|
||||
cpython repo [#cpython-repo]_ to get redirected to the URL for that
|
||||
|
@ -338,14 +372,18 @@ revision in the Mercurial repository. The URL rewriter will need to
|
|||
be updated to redirect to the Git repository and to support the new
|
||||
revision IDs created for the Git repository.
|
||||
|
||||
|
||||
Create https://git.python.org
|
||||
'''''''''''''''''''''''''''''
|
||||
|
||||
Just as hg.python.org [#h.p.o]_ currently points to the Mercurial
|
||||
repository for Python, git.python.org should do the equivalent for
|
||||
the Git repository.
|
||||
|
||||
|
||||
Backup of pull request data
|
||||
'''''''''''''''''''''''''''
|
||||
|
||||
Since GitHub [#github]_ is going to be used for code hosting and code
|
||||
review, those two things need to be backed up. In the case of code
|
||||
hosting, the backup is implicit as all non-shallow Git [#git]_ clones
|
||||
|
@ -359,25 +397,33 @@ issues with GitHub. It also helps guarantee that a migration from
|
|||
GitHub to some other code review system is feasible were GitHub to
|
||||
disappear overnight.
|
||||
|
||||
|
||||
Deprecate sys._mercurial
|
||||
''''''''''''''''''''''''
|
||||
|
||||
Once Python is no longer kept in Mercurial, the ``sys._mercurial``
|
||||
attribute will need to be changed to return ``('CPython', '', '')``.
|
||||
An equivalent ``sys._git`` attribute will be added which fulfills the
|
||||
same use-cases.
|
||||
|
||||
|
||||
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
|
||||
repositories will have been moved to GitHub [#github]_ and the
|
||||
development process should be on equal footing as before. But a key
|
||||
|
@ -389,8 +435,10 @@ It should be mentioned that overall feature planning for
|
|||
bugs.python.org [#b.p.o]_ -- which includes plans independent of this
|
||||
migration -- are tracked on their own wiki page [#tracker-plans]_.
|
||||
|
||||
|
||||
Bot to handle pull request merging
|
||||
''''''''''''''''''''''''''''''''''
|
||||
|
||||
As stated in the section entitled
|
||||
"`Document steps to commit a pull request`_", the desire is to
|
||||
maintain a linear history for cpython. Unfortunately,
|
||||
|
@ -419,8 +467,10 @@ such as Homu [#homu]_ or Zuul [#zuul]_.
|
|||
The name given to this bot in order to give it commands is an open
|
||||
issue: `Naming the bots`_.
|
||||
|
||||
|
||||
Continuous integration per pull request
|
||||
'''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
To help speed up pull request approvals, continuous integration
|
||||
testing should be used. This helps mitigate the need for a core
|
||||
developer to download a patch simply to run the test suite against
|
||||
|
@ -429,8 +479,10 @@ the patch.
|
|||
Which free CI service to use is an open issue:
|
||||
`Choosing a CI service`_.
|
||||
|
||||
|
||||
Test coverage report
|
||||
''''''''''''''''''''
|
||||
|
||||
Getting an up-to-date test coverage report for Python's standard
|
||||
library would be extremely beneficial as generating such a report can
|
||||
take quite a while to produce.
|
||||
|
@ -439,8 +491,10 @@ There are a couple pre-existing services that provide free test
|
|||
coverage for open source projects. Which option is best is an open
|
||||
issue: `Choosing a test coverage service`_.
|
||||
|
||||
|
||||
Notifying issues of pull request comments
|
||||
'''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The current development process does not include notifying an issue
|
||||
on bugs.python.org [#b.p.o]_ when a review comment is left on
|
||||
Rietveld [#rietveld]_. It would be nice to fix this so that people
|
||||
|
@ -454,14 +508,18 @@ down for those that receive both GitHub and bugs.python.org email
|
|||
notifications while still making sure that those only following
|
||||
bugs.python.org know when there might be a review comment to address.
|
||||
|
||||
|
||||
Allow bugs.python.org to use GitHub as a login provider
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
As of right now, bugs.python.org [#b.p.o]_ allows people to log in
|
||||
using Google, Launchpad, or OpenID credentials. It would be good to
|
||||
expand this to GitHub credentials.
|
||||
|
||||
|
||||
Web hooks for re-generating web content
|
||||
'''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The content at https://docs.python.org/,
|
||||
https://docs.python.org/devguide, and
|
||||
https://www.python.org/dev/peps/ are all derived from files kept in
|
||||
|
@ -470,16 +528,20 @@ such, it would be nice to set up appropriate webhooks to trigger
|
|||
rebuilding the appropriate web content when the files they are based
|
||||
on change instead of having to wait for, e.g., a cronjob to trigger.
|
||||
|
||||
|
||||
Link web content back to files that it is generated from
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
It would be helpful for people who find issues with any of the
|
||||
documentation that is generated from a file to have a link on each
|
||||
page which points back to the file on GitHub [#github]_ that stores
|
||||
the content of the page. That would allow for quick pull requests to
|
||||
fix simple things such as spelling mistakes.
|
||||
|
||||
|
||||
Splitting out parts of the documentation into their own repositories
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
While certain parts of the documentation at https://docs.python.org
|
||||
change with the code, other parts are fairly static and are not
|
||||
tightly bound to the CPython code itself. The following sections of
|
||||
|
@ -505,15 +567,19 @@ 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.
|
||||
|
||||
|
||||
Identify potential new core developers
|
||||
''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The Python development team has long-standing guidelines for
|
||||
selecting new core developers. The key part of the guidelines is that
|
||||
a person needs to have contributed multiple patches which have been
|
||||
|
@ -528,14 +594,10 @@ filled in properly.
|
|||
|
||||
Status
|
||||
======
|
||||
|
||||
Requirements for migrating the devinabox [#devinabox-repo]_ and
|
||||
benchmarks [#benchmarks-repo]_ repositories:
|
||||
|
||||
* In progress
|
||||
|
||||
- `Define commands to move a Mercurial repository to Git`_:
|
||||
https://github.com/orsenthil/cpython-hg-to-git (Senthil Kumaran)
|
||||
|
||||
* Completed
|
||||
|
||||
- `Adding GitHub username support to bugs.python.org`_
|
||||
|
@ -543,6 +605,8 @@ benchmarks [#benchmarks-repo]_ repositories:
|
|||
- `A bot to enforce CLA signing`_:
|
||||
https://github.com/python/the-knights-who-say-ni (Brett Cannon)
|
||||
- `Create a 'Python core' team`_
|
||||
- `Define commands to move a Mercurial repository to Git`_:
|
||||
https://github.com/orsenthil/cpython-hg-to-git (Senthil Kumaran)
|
||||
|
||||
|
||||
Repositories whose build steps need updating:
|
||||
|
@ -606,15 +670,19 @@ Optional features:
|
|||
|
||||
- None
|
||||
|
||||
|
||||
Open Issues
|
||||
===========
|
||||
|
||||
For this PEP, open issues are ones where a decision needs to be made
|
||||
to how to approach or solve a problem. Open issues do not entail
|
||||
coordination issues such as who is going to write a certain bit of
|
||||
code.
|
||||
|
||||
|
||||
The fate of hg.python.org
|
||||
-------------------------
|
||||
|
||||
With the code repositories moving over to Git [#git]_, there is no
|
||||
technical need to keep hg.python.org [#h.p.o]_ running. Having said
|
||||
that, some in the community would like to have it stay functioning as
|
||||
|
@ -630,8 +698,10 @@ 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
|
||||
involving those tools will be used to convert a Mercurial repository
|
||||
to Git. Currently a suggestion has been made to use
|
||||
|
@ -639,8 +709,10 @@ https://github.com/frej/fast-export. Another suggestion is to use
|
|||
https://github.com/felipec/git-remote-hg. Finally,
|
||||
http://hg-git.github.io/ has been suggested.
|
||||
|
||||
|
||||
Git CLI commands for committing a pull request to cpython
|
||||
---------------------------------------------------------
|
||||
|
||||
Because Git [#git]_ may be a new version control system for core
|
||||
developers, the commands people are expected to run will need to be
|
||||
written down. These commands also need to keep a linear history while
|
||||
|
@ -651,8 +723,10 @@ a patch file uploaded to bugs.python.org [#b.p.o]_. Here the linear
|
|||
history will be kept implicitly, but it will need to make sure to
|
||||
keep/add attribution.
|
||||
|
||||
|
||||
How to handle the Misc/NEWS file
|
||||
--------------------------------
|
||||
|
||||
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
|
||||
|
@ -701,8 +775,10 @@ 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 bots
|
||||
---------------
|
||||
|
||||
As naming things can lead to bikeshedding of epic proportions, Brett
|
||||
Cannon will choose the final name of the various bots (the name of
|
||||
the project for the bots themselves can be anything, this is purely
|
||||
|
@ -713,6 +789,7 @@ Python is named after the comedy troupe.
|
|||
|
||||
Choosing a CI service
|
||||
---------------------
|
||||
|
||||
There are various CI services that provide free support for open
|
||||
source projects hosted on GitHub [#github]_. Two such examples are
|
||||
Travis [#travis]_ and Codeship [#codeship]_. Whatever solution is
|
||||
|
@ -726,8 +803,10 @@ request can be made in IRC to try a patch from
|
|||
bugs.python.org [#b.p.o]_. The results can be viewed at
|
||||
https://ci.centos.org/job/cPython-build-patch/ .
|
||||
|
||||
|
||||
Choosing a test coverage service
|
||||
--------------------------------
|
||||
|
||||
Getting basic test coverage of Python's standard library can be
|
||||
created simply by using coverage.py [#coverage]_. Getting
|
||||
thorough test coverage is actually quite tricky, with the details
|
||||
|
@ -738,10 +817,13 @@ coverage, but it might not be feasible.
|
|||
Free test coverage services include Coveralls [#coveralls]_ and
|
||||
Codecov [#codecov]_.
|
||||
|
||||
|
||||
Rejected Ideas
|
||||
==============
|
||||
|
||||
Separate Python 2 and Python 3 repositories
|
||||
-------------------------------------------
|
||||
|
||||
It was discussed whether separate repositories for Python 2 and
|
||||
Python 3 were desired. The thinking was that this would shrink the
|
||||
overall repository size which benefits people with slow Internet
|
||||
|
@ -750,8 +832,10 @@ connections or small bandwidth caps.
|
|||
In the end it was decided that it was easier logistically to simply
|
||||
keep all of CPython's history in a single repository.
|
||||
|
||||
|
||||
Commit multi-release changes in bugfix branch first
|
||||
---------------------------------------------------
|
||||
|
||||
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.
|
||||
|
@ -776,8 +860,10 @@ older branch, possibly push to another clone representing the
|
|||
Cherry-picking should decouple this so that you don't have to rush
|
||||
your multi-branch changes as the cherry-pick can be done separately.
|
||||
|
||||
|
||||
Deriving ``Misc/NEWS`` from the commit logs
|
||||
-------------------------------------------
|
||||
|
||||
As part of the discussion surrounding `Handling Misc/NEWS`_, the
|
||||
suggestion has come up of deriving the file from the commit logs
|
||||
itself. In this scenario, the first line of a commit message would be
|
||||
|
@ -793,6 +879,7 @@ etc.
|
|||
|
||||
References
|
||||
==========
|
||||
|
||||
.. [#h.p.o] https://hg.python.org
|
||||
|
||||
.. [#GitHub] GitHub (https://github.com)
|
||||
|
@ -889,6 +976,7 @@ References
|
|||
.. [#ni] The Knights Who Say Ni project
|
||||
(https://github.com/python/the-knights-who-say-ni)
|
||||
|
||||
|
||||
Copyright
|
||||
=========
|
||||
|
||||
|
|
Loading…
Reference in New Issue