Skip to content

Comments

Allow symlinks in the build backend#14212

Merged
konstin merged 3 commits intomainfrom
konsti/allow-symlinks-in-the-build-backend
Jun 25, 2025
Merged

Allow symlinks in the build backend#14212
konstin merged 3 commits intomainfrom
konsti/allow-symlinks-in-the-build-backend

Conversation

@konstin
Copy link
Member

@konstin konstin commented Jun 23, 2025

In workspaces with multiple packages, you usually don't want to include shared files such as the license repeatedly. Instead, we reading from symlinked files. This would be supported if we had used std's is_file and read methods, but walkdir's is_file does not consider symlinked files as files.

See #3957 (comment)

@konstin konstin added enhancement New feature or improvement to existing functionality preview Experimental behavior labels Jun 23, 2025
@konstin konstin temporarily deployed to uv-test-registries June 23, 2025 09:44 — with GitHub Actions Inactive
@konstin konstin mentioned this pull request Jun 23, 2025
@konstin konstin requested a review from BurntSushi June 23, 2025 09:58
@konstin konstin temporarily deployed to uv-test-registries June 23, 2025 10:22 — with GitHub Actions Inactive
@konstin konstin temporarily deployed to uv-test-publish June 23, 2025 10:23 — with GitHub Actions Inactive
@thejcannon
Copy link

Ohh this is great, thanks!

Copy link
Member

@BurntSushi BurntSushi left a comment

Choose a reason for hiding this comment

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

This LGTM. With two notes. The first is that I would somewhat expect an ideal implementation here to leap before it looks. That is, instead of trying to query a file's type, it should ideally just try to read the entry as if it were a file. And if that fails, then react to the error you get back to determine what you should do next.

The other note is that std generally has the same behavior as walkdir here. In particular, see std::fs::DirEntry::file_type. What's different is std::path::Path::is_file, which does explicitly follow symlinks. The DirEntry behavior (in std and walkdir) is important because it means you don't need an extra stat call for every directory entry. If you do need that, then indeed, what you're doing is correct: you opt into that extra cost (in some cases) by doing additional syscalls to follow and look up the type of the symlink's target.

@konstin konstin temporarily deployed to uv-test-registries June 24, 2025 20:51 — with GitHub Actions Inactive
@konstin konstin temporarily deployed to uv-test-publish June 24, 2025 20:51 — with GitHub Actions Inactive
@konstin konstin enabled auto-merge (squash) June 24, 2025 20:57
@konstin konstin merged commit 283323a into main Jun 25, 2025
87 checks passed
@konstin konstin deleted the konsti/allow-symlinks-in-the-build-backend branch June 25, 2025 07:44
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Jun 29, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [astral-sh/uv](https://github.com/astral-sh/uv) | patch | `0.7.14` -> `0.7.16` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>astral-sh/uv (astral-sh/uv)</summary>

### [`v0.7.16`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0716)

[Compare Source](astral-sh/uv@0.7.15...0.7.16)

##### Python

- Add Python 3.14.0b3

See the
[`python-build-standalone` release notes](https://github.com/astral-sh/python-build-standalone/releases/tag/20250626)
for more details.

##### Enhancements

- Include path or URL when failing to convert in lockfile ([#&#8203;14292](astral-sh/uv#14292))
- Warn when `~=` is used as a Python version specifier without a patch version ([#&#8203;14008](astral-sh/uv#14008))

##### Preview features

- Ensure preview default Python installs are upgradeable ([#&#8203;14261](astral-sh/uv#14261))

##### Performance

- Share workspace cache between lock and sync operations ([#&#8203;14321](astral-sh/uv#14321))

##### Bug fixes

- Allow local indexes to reference remote files ([#&#8203;14294](astral-sh/uv#14294))
- Avoid rendering desugared prefix matches in error messages ([#&#8203;14195](astral-sh/uv#14195))
- Avoid using path URL for workspace Git dependencies in `requirements.txt` ([#&#8203;14288](astral-sh/uv#14288))
- Normalize index URLs to remove trailing slash ([#&#8203;14245](astral-sh/uv#14245))
- Respect URL-encoded credentials in redirect location ([#&#8203;14315](astral-sh/uv#14315))
- Lock the source tree when running setuptools, to protect concurrent builds ([#&#8203;14174](astral-sh/uv#14174))

##### Documentation

- Note that GCP Artifact Registry download URLs must have `/simple` component ([#&#8203;14251](astral-sh/uv#14251))

### [`v0.7.15`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0715)

[Compare Source](astral-sh/uv@0.7.14...0.7.15)

##### Enhancements

- Consistently use `Ordering::Relaxed` for standalone atomic use cases ([#&#8203;14190](astral-sh/uv#14190))
- Warn on ambiguous relative paths for `--index` ([#&#8203;14152](astral-sh/uv#14152))
- Skip GitHub fast path when rate-limited ([#&#8203;13033](astral-sh/uv#13033))
- Preserve newlines in `schema.json` descriptions ([#&#8203;13693](astral-sh/uv#13693))

##### Bug fixes

- Add check for using minor version link when creating a venv on Windows ([#&#8203;14252](astral-sh/uv#14252))
- Strip query parameters when parsing source URL ([#&#8203;14224](astral-sh/uv#14224))

##### Documentation

- Add a link to PyPI FAQ to clarify what per-project token is ([#&#8203;14242](astral-sh/uv#14242))

##### Preview features

- Allow symlinks in the build backend ([#&#8203;14212](astral-sh/uv#14212))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC42Mi4xIiwidXBkYXRlZEluVmVyIjoiNDAuNjIuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
sai-rekhawar pushed a commit to sai-rekhawar/cloe-nessy-py that referenced this pull request Jul 1, 2025
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [ghcr.io/astral-sh/uv](https://github.com/astral-sh/uv) | final | patch | `0.7.13` -> `0.7.15` |

---

### Release Notes

<details>
<summary>astral-sh/uv (ghcr.io/astral-sh/uv)</summary>

### [`v0.7.15`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0715)

[Compare Source](astral-sh/uv@0.7.14...0.7.15)

##### Enhancements

-   Consistently use `Ordering::Relaxed` for standalone atomic use cases ([#&#8203;14190](astral-sh/uv#14190))
-   Warn on ambiguous relative paths for `--index` ([#&#8203;14152](astral-sh/uv#14152))
-   Skip GitHub fast path when rate-limited ([#&#8203;13033](astral-sh/uv#13033))
-   Preserve newlines in `schema.json` descriptions ([#&#8203;13693](astral-sh/uv#13693))

##### Bug fixes

-   Add check for using minor version link when creating a venv on Windows ([#&#8203;14252](astral-sh/uv#14252))
-   Strip query parameters when parsing source URL ([#&#8203;14224](astral-sh/uv#14224))

##### Documentation

-   Add a link to PyPI FAQ to clarify what per-project token is ([#&#8203;14242](astral-sh/uv#14242))

##### Preview features

-   Allow symlinks in the build backend ([#&#8203;14212](astral-sh/uv#14212))

### [`v0.7.14`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0714)

[Compare Source](astral-sh/uv@0.7.13...0.7.14)

##### Enhancements

-   Add XPU to `--torch-backend` ([#&#8203;14172](astral-sh/uv#14172))
-   Add ROCm backends to `--torch-backend` ([#&#8203;14120](astral-sh/uv#14120))
-   Remove preview label from `--torch-backend` ([#&#8203;14119](astral-sh/uv#14119))
-   Add `[tool.uv.dependency-groups].mygroup.requires-python` ([#&#8203;13735](astral-sh/uv#13735))
-   Add auto-detection for AMD GPUs ([#&#8203;14176](astral-sh/uv#14176))
-   Show retries for HTTP status code errors ([#&#8203;13897](astral-sh/uv#13897))
-   Support transparent Python patch version upgrades ([#&#8203;13954](astral-sh/uv#13954))
-   Warn on empty index directory ([#&#8203;13940](astral-sh/uv#13940))
-   Publish to DockerHub ([#&#8203;14088](astral-sh/uv#14088))

##### Performance

-   Make cold resolves about 10% faster ([#&#8203;14035](astral-sh/uv#14035))

##### Bug fixes

-   Don't use walrus operator in interpreter query script ([#&#8203;14108](astral-sh/uv#14108))
-   Fix handling of changes to `requires-python` ([#&#8203;14076](astral-sh/uv#14076))
-   Fix implied `platform_machine` marker for `...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or improvement to existing functionality preview Experimental behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants