GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — gh-81793: Always call linkat() from os.link(), if available by serhiy-storchaka · Pull Request #132517 · python/cpython

Conversation

@serhiy-storchaka

@serhiy-storchaka serhiy-storchaka commented Apr 14, 2025 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

This fixes os.link() on platforms (like Linux and OpenIndiana) where the system link() function does not follow symlinks.

  • On Linux and OpenIndiana, it now follows symlinks by default or if follow_symlinks=True is specified.
  • On Windows, it now raises error if follow_symlinks=True is passed.
  • On macOS, it now raises error if follow_symlinks=False is passed and the system linkat() function is not available at runtime.
  • On other platforms, it now raises error if follow_symlinks is passed with a value that does not match the system link() function behavior if if the behavior is not known.
  • Issue: os.link(..., follow_symlinks=True) broken on Linux #81793

📚 Documentation preview 📚: https://cpython-previews--132517.org.readthedocs.build/

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

takluyver reacted with thumbs up emoji
All reactions
  • 👍 1 reaction
@serhiy-storchaka @jo-he @takluyver
pythongh-81793: Always call linkat() from os.link(), if available
a8f488a
This fixes os.link() on platforms (like Linux and OpenIndiana) where the
system link() function does not follow symlinks.

* On Linux and OpenIndiana, it now follows symlinks by default and if
  follow_symlinks=True is specified.
* On Windows, it now raises error if follow_symlinks=True is passed.
* On macOS, it now raises error if follow_symlinks=False is passed and
  the system linkat() function is not available at runtime.
* On other platforms, it now raises error if follow_symlinks is passed
  with a value that does not match the system link() function behavior
  if if the behavior is not known.

Co-authored-by: Joachim Henke <[email protected]>
Co-authored-by: Thomas Kluyver <[email protected]>
@bedevere-app bedevere-app Bot added the awaiting core review label Apr 14, 2025
@bedevere-app bedevere-app Bot mentioned this pull request Apr 14, 2025
os.link(..., follow_symlinks=True) broken on Linux #81793
Closed
serhiy-storchaka added 4 commits April 14, 2025 18:05
@serhiy-storchaka
Fix typo and regenerate clinic files.
4ba224e
@serhiy-storchaka
Fix OpenIndiana.
5881b2a
@serhiy-storchaka
Fix test_inspect.
d2f233b
@serhiy-storchaka
Enable linkat().
95f55e3
StanFromIreland
StanFromIreland reviewed Apr 14, 2025
View reviewed changes
Comment thread Misc/NEWS.d/next/Library/2025-04-14-17-24-50.gh-issue-81793.OhRTTT.rst Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Misc/NEWS.d/next/Library/2025-04-14-17-24-50.gh-issue-81793.OhRTTT.rst Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Misc/NEWS.d/next/Library/2025-04-14-17-24-50.gh-issue-81793.OhRTTT.rst Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Modules/posixmodule.c Resolved

Uh oh!

There was an error while loading. Please reload this page.

@serhiy-storchaka @StanFromIreland
Apply suggestions from code review
2eeb438
Co-authored-by: Stan Ulbrych <[email protected]>
serhiy-storchaka
serhiy-storchaka commented Apr 14, 2025
View reviewed changes

@serhiy-storchaka serhiy-storchaka left a comment

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for grammar fixes @StanFromIreland.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

StanFromIreland reacted with heart emoji
All reactions
  • ❤️ 1 reaction
Comment thread Misc/NEWS.d/next/Library/2025-04-14-17-24-50.gh-issue-81793.OhRTTT.rst Resolved

Uh oh!

There was an error while loading. Please reload this page.

@StanFromIreland

StanFromIreland commented Apr 14, 2025

Copy link
Copy Markdown
Member

No problem:-)

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

serhiy-storchaka added 7 commits April 15, 2025 10:03
@serhiy-storchaka
Use subTest().
b4be526
@serhiy-storchaka
Disable linkat() on WASI.
80128e3
@serhiy-storchaka
Test how link() actually works on WASI.
a45dfd9
@serhiy-storchaka
Revert "Test how link() actually works on WASI."
557f1ee
This reverts commit a45dfd9.
@serhiy-storchaka
Merge branch 'main' into os-link-follow_symlinks
b156f94
@serhiy-storchaka
Remove redundant checks for same type.
2c436fb
@serhiy-storchaka
Merge branch 'main' into os-link-follow_symlinks
0c7b16d
@serhiy-storchaka
serhiy-storchaka merged commit 5a57248 into python:main May 4, 2025
@bedevere-app bedevere-app Bot removed the awaiting core review label May 4, 2025
@serhiy-storchaka
serhiy-storchaka deleted the os-link-follow_symlinks branch May 4, 2025 14:24
This was referenced May 4, 2025
bpo-37612: always call linkat() from os.link(), if available #14843
Closed
gh-81793: always call linkat() from os.link(), if available #24997
Closed
@bedevere-bot

bedevere-bot commented May 4, 2025

Copy link
Copy Markdown

⚠️⚠️⚠️ Buildbot failure ⚠️⚠️⚠️

Hi! The buildbot aarch64 Android 3.x (tier-3) has failed when building commit 5a57248.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/#/builders/1594/builds/2228) and take a look at the build logs.
  4. Check if the failure is related to this commit (5a57248) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/#/builders/1594/builds/2228

Failed tests:

  • test_posix

Failed subtests:

  • test_link_follow_symlinks - test.test_posix.PosixTester.test_link_follow_symlinks

Summary of the results of the build (if available):

==

Click to see traceback logs
Traceback (most recent call last):
  File "/data/user/0/org.python.testbed/files/python/lib/python3.14/test/test_posix.py", line 1548, in test_link_follow_symlinks
    posix.link(symlink, link, follow_symlinks=False)
    ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: '@test_1785_tmpæsymlink' -> '@test_1785_tmpælink_nofollow'


Traceback (most recent call last):
  File "/data/user/0/org.python.testbed/files/python/lib/python3.14/test/test_posix.py", line 1560, in test_link_follow_symlinks
    posix.link(symlink, link, follow_symlinks=True)
    ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: '@test_1785_tmpæsymlink' -> '@test_1785_tmpælink_following'


Traceback (most recent call last):
  File "/data/user/0/org.python.testbed/files/python/lib/python3.14/test/test_posix.py", line 1537, in test_link_follow_symlinks
    posix.link(symlink, link)
    ~~~~~~~~~~^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: '@test_1785_tmpæsymlink' -> '@test_1785_tmpælink'
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

diegorusso added a commit to diegorusso/cpython that referenced this pull request May 4, 2025
@diegorusso
Merge remote-tracking branch 'origin/main' into call-len
c03babc
* origin/main: (111 commits)
  pythongh-91048: Add filename and line number to external inspection routines (pythonGH-133385)
  pythongh-131178: Add tests for `ast` command-line interface (python#133329)
  Regenerate pcbuild.sln in Visual Studio 2022 (python#133394)
  pythongh-133042: disable HACL* HMAC on Emscripten (python#133064)
  pythongh-133351: Fix remote PDB's multi-line block tab completion (python#133387)
  pythongh-109700: Improve stress tests for interpreter creation (pythonGH-109946)
  pythongh-81793: Skip tests for os.link() to symlink on Android (pythonGH-133388)
  pythongh-126835: Rename `ast_opt.c` to `ast_preprocess.c` and related stuff after moving const folding to the peephole optimizier (python#131830)
  pythongh-91048: Relax test_async_global_awaited_by to fix flakyness (python#133368)
  pythongh-132457: make staticmethod and classmethod generic (python#132460)
  pythongh-132805: annotationlib: Fix handling of non-constant values in FORWARDREF (python#132812)
  pythongh-132426: Add get_annotate_from_class_namespace replacing get_annotate_function (python#132490)
  pythongh-81793: Always call linkat() from os.link(), if available (pythonGH-132517)
  pythongh-122559: Synchronize C and Python implementation of the io module about pickling (pythonGH-122628)
  pythongh-69605: Add PyREPL import autocomplete feature to 'What's New' (python#133358)
  bpo-44172: Keep reference to original window in curses subwindow objects (pythonGH-26226)
  pythonGH-133231: Changes to executor management to support proposed `sys._jit` module (pythonGH-133287)
  pythongh-133363: Fix Cmd completion for lines beginning with `! ` (python#133364)
  pythongh-132983: Introduce `_zstd` bindings module (pythonGH-133027)
  pythonGH-91048: Add utils for printing the call stack for asyncio tasks (python#133284)
  ...
@freakboy3742

freakboy3742 commented May 6, 2025

Copy link
Copy Markdown
Contributor

Not sure of the source of the Android failure here, but it looks related to the subject ticket. Investigation ongoing.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@serhiy-storchaka

serhiy-storchaka commented May 6, 2025

Copy link
Copy Markdown
Member Author

It was fixed on #133388.

freakboy3742 reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@freakboy3742

freakboy3742 commented May 6, 2025

Copy link
Copy Markdown
Contributor

It was fixed on #133388.

Thanks for the fast response!

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Pranjal095 pushed a commit to Pranjal095/cpython that referenced this pull request Jul 12, 2025
@serhiy-storchaka @jo-he
@takluyver @Pranjal095
pythongh-81793: Always call linkat() from os.link(), if available (py…
cee2c1a
…thonGH-132517)

This fixes os.link() on platforms (like Linux and OpenIndiana) where the
system link() function does not follow symlinks.

* On Linux, it now follows symlinks by default and if
  follow_symlinks=True is specified.
* On Windows, it now raises error if follow_symlinks=True is passed.
* On macOS, it now raises error if follow_symlinks=False is passed and
  the system linkat() function is not available at runtime.
* On other platforms, it now raises error if follow_symlinks is passed
  with a value that does not match the system link() function behavior
  if if the behavior is not known.

Co-authored-by: Joachim Henke <[email protected]>
Co-authored-by: Thomas Kluyver <[email protected]>
@coderabbitai coderabbitai Bot mentioned this pull request Aug 11, 2026
feat: choose project knowledge storage during setup zhsks311/didimlog#2
Merged
This was referenced Aug 12, 2026
Release Didimlog v0.0.1 zhsks311/didimlog#1
Merged
feat(omp): add agent-driven development orchestration adamgell/cmtraceopen#570
Merged
This was referenced Aug 20, 2026
Harden staged-plan continuation lifecycle for 0.1.2 CoveMB/implementation-plugin#4
Merged
feat: attest portable OaF separator runtimes cwchanap/Crux#26
Merged
RC1 readiness R10: close review findings and preserve rollback compatibility zycaskevin/Agentic-SDD-Governance#32
Closed
Add Kimi-K3 NVFP4 experts and FP8-PB attention recipe NVIDIA/Model-Optimizer#2206
Merged
feat: prepare RC1 governance release (R20) zycaskevin/Agentic-SDD-Governance#42
Closed
@katharosada katharosada mentioned this pull request Aug 31, 2026
Cleanup: Possible removal of some __wasi__ special case handling #156692
Open
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@StanFromIreland StanFromIreland StanFromIreland left review comments

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

4 participants

@serhiy-storchaka @StanFromIreland @bedevere-bot @freakboy3742
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.