bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
#####
|
|
|
|
# First, rules intended to apply in all subdirectories.
|
|
|
|
# These contain no slash, or only a trailing slash.
|
2019-08-27 18:16:31 +00:00
|
|
|
|
2010-12-17 22:24:30 +00:00
|
|
|
*.cover
|
2017-05-24 15:57:37 +00:00
|
|
|
*.iml
|
2010-12-17 22:24:30 +00:00
|
|
|
*.o
|
2022-08-27 00:49:41 +00:00
|
|
|
*.lto
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
*.a
|
2019-11-27 04:54:46 +00:00
|
|
|
*.so
|
|
|
|
*.so.*
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
*.dylib
|
2022-08-27 00:49:41 +00:00
|
|
|
*.dSYM
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
*.dll
|
2021-11-26 13:29:46 +00:00
|
|
|
*.wasm
|
2010-12-17 22:24:30 +00:00
|
|
|
*.orig
|
|
|
|
*.pyc
|
|
|
|
*.pyd
|
|
|
|
*.pyo
|
|
|
|
*.rej
|
2012-05-22 17:48:16 +00:00
|
|
|
*.swp
|
2010-12-17 22:24:30 +00:00
|
|
|
*~
|
2015-09-18 22:13:44 +00:00
|
|
|
*.gc??
|
|
|
|
*.profclang?
|
|
|
|
*.profraw
|
2023-05-22 11:45:20 +00:00
|
|
|
# Copies of binaries before BOLT optimizations.
|
|
|
|
*.prebolt
|
|
|
|
# BOLT profile data.
|
|
|
|
*.fdata
|
2015-12-21 18:09:17 +00:00
|
|
|
*.dyn
|
2012-05-22 17:48:16 +00:00
|
|
|
.gdb_history
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
.purify
|
|
|
|
__pycache__
|
|
|
|
.hg/
|
|
|
|
.svn/
|
|
|
|
.idea/
|
|
|
|
tags
|
|
|
|
TAGS
|
|
|
|
.vs/
|
|
|
|
.vscode/
|
|
|
|
gmon.out
|
|
|
|
.coverage
|
|
|
|
.mypy_cache/
|
2019-11-15 08:22:41 +00:00
|
|
|
.pytest_cache/
|
2023-10-17 20:12:58 +00:00
|
|
|
.ruff_cache/
|
2021-08-11 09:32:25 +00:00
|
|
|
.DS_Store
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
|
|
|
|
*.exe
|
|
|
|
|
|
|
|
# Ignore core dumps... but not Tools/msi/core/ or the like.
|
|
|
|
core
|
|
|
|
!core/
|
|
|
|
|
|
|
|
|
|
|
|
#####
|
|
|
|
# Then, rules meant for a specific location relative to the repo root.
|
|
|
|
# These must contain a non-trailing slash (and may also have a trailing slash.)
|
|
|
|
|
2010-10-25 17:37:18 +00:00
|
|
|
Doc/build/
|
2014-12-05 20:17:31 +00:00
|
|
|
Doc/venv/
|
2017-09-08 00:17:53 +00:00
|
|
|
Doc/.venv/
|
|
|
|
Doc/env/
|
|
|
|
Doc/.env/
|
2017-03-10 13:29:43 +00:00
|
|
|
Include/pydtrace_probes.h
|
2022-03-14 18:53:41 +00:00
|
|
|
Lib/site-packages/*
|
|
|
|
!Lib/site-packages/README.txt
|
2013-06-21 11:44:50 +00:00
|
|
|
Lib/test/data/*
|
2019-09-09 09:34:50 +00:00
|
|
|
!Lib/test/data/README
|
2021-12-03 15:01:11 +00:00
|
|
|
/_bootstrap_python
|
2019-09-09 09:34:50 +00:00
|
|
|
/Makefile
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
/Makefile.pre
|
2024-03-19 12:36:19 +00:00
|
|
|
/iOSTestbed.*
|
2024-03-07 04:24:52 +00:00
|
|
|
iOS/Frameworks/
|
2024-02-26 01:21:10 +00:00
|
|
|
iOS/Resources/Info.plist
|
2024-03-07 04:24:52 +00:00
|
|
|
iOS/testbed/build
|
|
|
|
iOS/testbed/Python.xcframework/ios-*/bin
|
|
|
|
iOS/testbed/Python.xcframework/ios-*/include
|
|
|
|
iOS/testbed/Python.xcframework/ios-*/lib
|
|
|
|
iOS/testbed/Python.xcframework/ios-*/Python.framework
|
|
|
|
iOS/testbed/iOSTestbed.xcodeproj/project.xcworkspace
|
|
|
|
iOS/testbed/iOSTestbed.xcodeproj/xcuserdata
|
|
|
|
iOS/testbed/iOSTestbed.xcodeproj/xcshareddata
|
2021-11-04 19:09:46 +00:00
|
|
|
Mac/Makefile
|
|
|
|
Mac/PythonLauncher/Info.plist
|
|
|
|
Mac/PythonLauncher/Makefile
|
|
|
|
Mac/PythonLauncher/Python Launcher
|
|
|
|
Mac/PythonLauncher/Python Launcher.app/*
|
|
|
|
Mac/Resources/app/Info.plist
|
|
|
|
Mac/Resources/framework/Info.plist
|
|
|
|
Mac/pythonw
|
|
|
|
/*.framework/
|
2010-10-25 17:37:18 +00:00
|
|
|
Misc/python.pc
|
2019-05-23 01:30:23 +00:00
|
|
|
Misc/python-embed.pc
|
2013-02-23 14:35:42 +00:00
|
|
|
Misc/python-config.sh
|
2022-03-07 12:36:47 +00:00
|
|
|
Modules/Setup.bootstrap
|
2010-10-25 17:37:18 +00:00
|
|
|
Modules/Setup.config
|
|
|
|
Modules/Setup.local
|
2021-11-18 13:40:01 +00:00
|
|
|
Modules/Setup.stdlib
|
2010-10-25 17:37:18 +00:00
|
|
|
Modules/config.c
|
2010-12-17 22:24:30 +00:00
|
|
|
Modules/ld_so_aix
|
2021-08-30 23:25:11 +00:00
|
|
|
Programs/_freeze_module
|
2014-07-25 11:52:14 +00:00
|
|
|
Programs/_testembed
|
2014-10-11 04:42:59 +00:00
|
|
|
PC/python_nt*.h
|
|
|
|
PC/pythonnt_rc*.h
|
2020-04-19 18:02:17 +00:00
|
|
|
Modules/python.exp
|
2014-11-22 20:54:57 +00:00
|
|
|
PC/*/*.exp
|
|
|
|
PC/*/*.lib
|
|
|
|
PC/*/*.bsc
|
|
|
|
PC/*/*.dll
|
|
|
|
PC/*/*.pdb
|
|
|
|
PC/*/*.user
|
|
|
|
PC/*/*.ncb
|
|
|
|
PC/*/*.suo
|
|
|
|
PC/*/Win32-temp-*
|
|
|
|
PC/*/x64-temp-*
|
|
|
|
PC/*/amd64
|
2014-10-11 04:42:59 +00:00
|
|
|
PCbuild/*.user
|
|
|
|
PCbuild/*.suo
|
|
|
|
PCbuild/*.*sdf
|
|
|
|
PCbuild/*-pgi
|
|
|
|
PCbuild/*-pgo
|
2017-04-20 23:32:26 +00:00
|
|
|
PCbuild/*.VC.db
|
|
|
|
PCbuild/*.VC.opendb
|
2012-05-22 17:48:16 +00:00
|
|
|
PCbuild/amd64/
|
2019-02-14 16:31:30 +00:00
|
|
|
PCbuild/arm32/
|
2019-05-17 17:07:24 +00:00
|
|
|
PCbuild/arm64/
|
2015-05-17 03:45:27 +00:00
|
|
|
PCbuild/obj/
|
2017-07-06 20:43:37 +00:00
|
|
|
PCbuild/win32/
|
2019-08-15 01:18:53 +00:00
|
|
|
Tools/unicode/data/
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
/autom4te.cache
|
|
|
|
/build/
|
2022-11-01 22:51:05 +00:00
|
|
|
/builddir/
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
/config.cache
|
|
|
|
/config.log
|
|
|
|
/config.status
|
|
|
|
/config.status.lineno
|
2021-12-06 12:18:56 +00:00
|
|
|
# hendrikmuhs/ccache-action@v1
|
|
|
|
/.ccache
|
2023-11-30 00:18:25 +00:00
|
|
|
/cross-build/
|
2024-01-29 02:48:48 +00:00
|
|
|
/jit_stencils.h
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
/platform
|
2020-10-26 05:30:51 +00:00
|
|
|
/profile-clean-stamp
|
|
|
|
/profile-run-stamp
|
2023-05-22 11:45:20 +00:00
|
|
|
/profile-bolt-stamp
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
/pybuilddir.txt
|
2019-09-09 09:34:50 +00:00
|
|
|
/pyconfig.h
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
/python-config
|
|
|
|
/python-config.py
|
|
|
|
/python.bat
|
|
|
|
/python-gdb.py
|
|
|
|
/python.exe-gdb.py
|
|
|
|
/reflog.txt
|
|
|
|
/coverage/
|
|
|
|
/externals/
|
|
|
|
/htmlcov/
|
2015-02-06 06:08:48 +00:00
|
|
|
Tools/msi/obj
|
2014-11-22 20:54:57 +00:00
|
|
|
Tools/ssl/amd64
|
|
|
|
Tools/ssl/win32
|
2021-10-28 16:14:37 +00:00
|
|
|
Tools/freeze/test/outdir
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
|
2021-09-16 20:20:52 +00:00
|
|
|
# The frozen modules are always generated by the build so we don't
|
2022-10-17 10:01:00 +00:00
|
|
|
# keep them in the repo. Also see Tools/build/freeze_modules.py.
|
2021-09-16 20:20:52 +00:00
|
|
|
Python/frozen_modules/*.h
|
2021-09-16 01:15:26 +00:00
|
|
|
# The manifest can be generated at any time with "make regen-frozen".
|
|
|
|
Python/frozen_modules/MANIFEST
|
2021-09-13 22:18:37 +00:00
|
|
|
|
bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823)
A root cause of bpo-37936 is that it's easy to write a .gitignore
rule that's intended to apply to a specific file (e.g., the
`pyconfig.h` generated by `./configure`) but actually applies to all
similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
Specifically, any rule with no non-trailing slashes is applied in an
"unrooted" way, to files anywhere in the tree. This means that if we
write the rules in the most obvious-looking way, then
* for specific files we want to ignore that happen to be in
subdirectories (like `Modules/config.c`), the rule will work
as intended, staying "rooted" to the top of the tree; but
* when a specific file we want to ignore happens to be at the root of
the repo (like `platform`), then the obvious rule (`platform`) will
apply much more broadly than intended: if someone tries to add a
file or directory named `platform` somewhere else in the tree, it
will unexpectedly get ignored.
That's surprising behavior that can make the .gitignore file's
behavior feel finicky and unpredictable.
To avoid it, we can simply always give a rule "rooted" behavior when
that's what's intended, by systematically using leading slashes.
Further, to help make the pattern obvious when looking at the file and
minimize any need for thinking about the syntax when adding new rules:
separate the rules into one group for each type, with brief comments
identifying them.
For most of these rules it's clear whether they're meant to be rooted
or unrooted, but in a handful of cases I've only guessed. In that
case the safer default (the choice that won't hide information) is the
narrower, rooted meaning, with a leading slash. If for some of these
the unrooted meaning is desired after all, it'll be easy to move them
to the unrooted section at the top.
2019-09-11 09:25:26 +00:00
|
|
|
# Two-trick pony for OSX and other case insensitive file systems:
|
|
|
|
# Ignore ./python binary on Unix but still look into ./Python/ directory.
|
|
|
|
/python
|
|
|
|
!/Python/
|
2022-06-23 21:52:43 +00:00
|
|
|
|