Code Ownership

Ownership is measured by how many commits each author made to each file in the current tree. It highlights bus-factor risk (files only one person has ever touched) and where knowledge is concentrated. The bus factor is the smallest number of people who are, between them, primary owner of more than half of the files.

Files Tracked
1,085
in the current tree
Bus Factor
3
3 authors are primary owner of 607 of 1,085 files
Single-Owner Files
360
33.2% of tracked files
Contributors
596
authors who changed files

Bus factor risk — single-owner files

Files only one author has ever changed. The more a file has changed, the more knowledge is at risk if that person leaves.

FileSole ownerCommits
src/pip/_internal/exceptions/__init__.pyRichard Si8
tests/functional/test_install_release_control.pyDamian Shaw6
news/8671.bugfix.rstSepehr Rasouli5
tests/functional/test_install_format_control.pyDamian Shaw4
tools/codespell-ignore.txtRichard Si4
docs/html/topics/workflow.mdPaul Moore4
docs/html/topics/python-option.mdPaul Moore4
src/pip/_vendor/rich/pager.pyPradyun Gedam3
src/pip/_vendor/rich/protocol.pyPradyun Gedam3
tests/data/src/pep518_invalid_requires/setup.pyPradyun Gedam3
Table: the 100 most-changed of 360 single-owner files
FileSole ownerCommits
src/pip/_internal/exceptions/__init__.pyRichard Si8
tests/functional/test_install_release_control.pyDamian Shaw6
news/8671.bugfix.rstSepehr Rasouli5
tests/functional/test_install_format_control.pyDamian Shaw4
tools/codespell-ignore.txtRichard Si4
docs/html/topics/workflow.mdPaul Moore4
docs/html/topics/python-option.mdPaul Moore4
src/pip/_vendor/rich/pager.pyPradyun Gedam3
src/pip/_vendor/rich/protocol.pyPradyun Gedam3
tests/data/src/pep518_invalid_requires/setup.pyPradyun Gedam3
tests/data/src/pep518_missing_requires/setup.pyPradyun Gedam3
tests/unit/test_command_debug.pyDamian Shaw2
src/pip/_internal/build_env/__init__.pyRichard Si2
src/pip/_internal/build_env/base.pyRichard Si2
src/pip/_internal/build_env/noop.pyRichard Si2
.github/workflows/update-build-project-lock.ymlStéphane Bidoul2
tests/data/indexes/require-invalid-version/require-invalid-version/index.htmlStéphane Bidoul2
docs/html/cli/pip_inspect.rstStéphane Bidoul2
src/pip/_vendor/rich/_cell_widths.pyPradyun Gedam2
src/pip/_vendor/rich/scope.pyPradyun Gedam2
src/pip/_vendor/rich/_spinners.pyPradyun Gedam2
.github/ISSUE_TEMPLATE/feature-request.ymlPradyun Gedam2
tests/data/src/pep518_invalid_build_system/pep518.pyPradyun Gedam2
tests/data/src/pep518_invalid_build_system/setup.pyPradyun Gedam2
tests/data/src/pep518_invalid_requires/pep518.pyPradyun Gedam2
tests/data/src/pep518_missing_requires/pep518.pyPradyun Gedam2
.github/FUNDING.ymlPradyun Gedam2
docs/man/commands/cache.rstEllen Marie Dash2
docs/man/commands/debug.rstXavier Fernandez2
tests/data/packages/brokenwheel-1.0-py2.py3-none-any.whlMatthew Iversen2
tests/data/packages/colander-0.9.9-py2.py3-none-any.whlMarcus Smith2
tests/data/packages/translationstring-1.1.tar.gzMarcus Smith2
news/ubuntu-oldest-python.trivial.rstDamian Shaw1
news/14372.feature.rstDamian Shaw1
news/14354.trivial.rstDamian Shaw1
news/14349.trivial.rstDamian Shaw1
tests/unit/test_autocompletion.pyDamian Shaw1
news/14348.trivial.rstDamian Shaw1
news/14347.bugfix.rstDamian Shaw1
tests/unit/test_command_config.pyDamian Shaw1
tests/unit/test_test_server.pyDamian Shaw1
news/4842f4c6-2f77-4cc9-b5ee-5f764fd286bb.trivial.rstDamian Shaw1
news/60a24bb6-1a57-4eb6-b302-b62b7a05f40e.trivial.rstDamian Shaw1
news/14254.process.rstDamian Shaw1
news/14235.feature.rstDamian Shaw1
news/14237.bugfix.rstDamian Shaw1
tests/unit/test_command_show.pyDamian Shaw1
src/pip/_vendor/urllib3/contrib/emscripten/__init__.pyDamian Shaw1
src/pip/_vendor/urllib3/contrib/emscripten/connection.pyDamian Shaw1
src/pip/_vendor/urllib3/contrib/emscripten/emscripten_fetch_worker.jsDamian Shaw1
src/pip/_vendor/urllib3/contrib/emscripten/fetch.pyDamian Shaw1
src/pip/_vendor/urllib3/contrib/emscripten/request.pyDamian Shaw1
tools/vendoring/patches/urllib3-fix-emscripten-import.patchDamian Shaw1
src/pip/_vendor/urllib3/_request_methods.pyDamian Shaw1
src/pip/_vendor/urllib3/http2/__init__.pyDamian Shaw1
src/pip/_vendor/urllib3/http2/connection.pyDamian Shaw1
src/pip/_vendor/urllib3/http2/probe.pyDamian Shaw1
src/pip/_vendor/urllib3/py.typedDamian Shaw1
src/pip/_vendor/urllib3/util/util.pyDamian Shaw1
src/pip/_vendor/packaging/errors.pyDamian Shaw1
.devcontainer/postCreate.shDamian Shaw1
tests/unit/test_release_control.pyDamian Shaw1
tests/unit/test_utils_datetime.pyDamian Shaw1
src/pip/_vendor/resolvelib/resolvers/criterion.pyDamian Shaw1
src/pip/_vendor/resolvelib/resolvers/exceptions.pyDamian Shaw1
tools/vendoring/patches/truststore.patchSeth Michael Larson1
news/14303.bugfix.rstEdgar Ramírez Mondragón1
news/14324.trivial.rstKevin Turcios1
tests/unit/test_operations_check.pyKevin Turcios1
tests/data/src/extension/extension.cMiro Hrončok1
src/pip/_vendor/distlib/LICENSE.txtMiro Hrončok1
src/pip/_vendor/msgpack/COPYINGMiro Hrončok1
src/pip/_vendor/packaging/LICENSEMiro Hrončok1
src/pip/_vendor/packaging/LICENSE.BSDMiro Hrončok1
src/pip/_internal/exceptions/build.pyRichard Si1
src/pip/_internal/exceptions/hashes.pyRichard Si1
src/pip/_internal/exceptions/network.pyRichard Si1
src/pip/_internal/exceptions/uninstall.pyRichard Si1
src/pip/_internal/exceptions/wheel.pyRichard Si1
news/12248.bugfix.rstRichard Si1
src/pip/_internal/exceptions/pyproject.pyRichard Si1
src/pip/_internal/exceptions/_base.pyRichard Si1
tests/lib/output.pyRichard Si1
tests/unit/test_command_index.pyRichard Si1
tests/data/src/python-cmake-issue-13222/setup.pyRichard Si1
src/pip/_vendor/idna/__main__.pyRichard Si1
src/pip/_vendor/idna/cli.pyRichard Si1
tools/vendoring/patches/cachecontrol.patchRichard Si1
tests/data/pypi_packages/calver-2025.10.20.tar.gzRichard Si1
tests/data/pypi_packages/trove_classifiers-2025.12.1.14.tar.gzRichard Si1
tests/data/pypi_packages/INITools-0.1.tar.gzRichard Si1
tests/data/pypi_packages/INITools-0.2.tar.gzRichard Si1
tests/data/pypi_packages/django_devserver-0.8.0-py3-none-any.whlRichard Si1
tests/data/pypi_packages/six-1.17.0-py2.py3-none-any.whlRichard Si1
src/pip/_vendor/pyproject_hooks/py.typedRichard Si1
news/13634.bugfix.rstT.Yamada1
news/9456.bugfix.rstIslam Asabaev1
news/14177.trivial.rstYoungkwang Yang1
news/8573.bugfix.rstYoungkwang Yang1
news/13084.bugfix.rstYoungkwang Yang1

Ownership by author

Primary owner = the author with the most commits to a file. Solely owned = files only that author has touched.

AuthorFiles ownedSolely ownedFiles touched
Pradyun Gedam38772677
Stéphane Bidoul11138393
Richard Si10926377
Damian Shaw6636357
Marcus Smith6255122
Tzu-ping Chung413216
Jon Dufresne301260
Donald Stufft275205
Paul Moore2016261
Benoit Pierre202086
Chris Jerdonek190105
Chris Hunt163154
Seth Michael Larson12127
Thomas Kluyver7428
Sepehr Rasouli7424
Nicole Harris7518
Xavier Fernandez65108
Miro Hrončok6544
Robert Collins6621
Sumana Harihareswara6017
Youngkwang Yang5329
Marc Abramowitz5518
Hugo van Kemenade40282
Nate Prewitt4236
Min RK4421

Showing top 25 of 596 contributors.

Most shared files

Files touched by the most people — shared code where changes are most likely to need coordination.

FileContributorsPrimary ownerOwner share
tests/functional/test_install.py80Pradyun Gedam13.0%
src/pip/_internal/cli/cmdoptions.py68Stéphane Bidoul10.0%
src/pip/_internal/utils/misc.py54Chris Jerdonek13.9%
docs/html/user_guide.rst53Sumana Harihareswara18.7%
tests/unit/test_req.py52Pradyun Gedam15.2%
src/pip/_internal/commands/install.py51Pradyun Gedam18.5%
tests/functional/test_install_reqs.py51Pradyun Gedam11.8%
tests/lib/__init__.py49Donald Stufft10.4%
src/pip/_internal/req/req_install.py45Pradyun Gedam27.5%
tests/conftest.py43Pradyun Gedam12.4%
tests/unit/test_wheel.py41Chris Hunt24.2%
tests/unit/test_utils.py41Chris Jerdonek17.9%
tests/unit/test_req_file.py40Marcus Smith18.9%
tests/functional/test_freeze.py40Chris Jerdonek10.2%
tests/functional/test_download.py37Chris Hunt11.2%
src/pip/_vendor/vendor.txt35Pradyun Gedam37.5%
tests/unit/test_vcs.py35Chris Jerdonek34.5%
src/pip/_internal/req/req_file.py35Pradyun Gedam15.8%
src/pip/_internal/operations/prepare.py33Chris Hunt32.5%
AUTHORS.txt33Pradyun Gedam17.2%