Commit Graph

4631 Commits

Author SHA1 Message Date
Charlie Marsh a439b7944d
Vendor r-shquote's unquote implementation (#11812)
## Summary

This project is archived, so while it's tiny and arguably complete, I'd
rather just vendor the one function we need.
2025-02-26 21:45:35 +00:00
konsti 101b56dad4
Remove the winreg crate (#11805)
Currently, we're using both the official `windows-*` with
`windows-registry` crates as well as `winreg`, an older,
community-maintained crate.

To unify the codebase, we follow the lead of rustup that already
performed this migration
(bce3ed67d2).
This is also a prerequisite to unblock the unification of the
windows-sys crate versions.

I've manually tested that `uv tool update-shell` works for adding to
PATH and correctly detects when PATH was already added.
2025-02-26 18:56:15 +01:00
konsti d136c23d46
Update windows registry to 0.5 (#11799)
This update contains the feature we need to fix #11217
2025-02-26 16:33:31 +01:00
Eric Mark Martin 6e7ec3274a
Don't panic on Ctrl-C in confirm prompt (#11706)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

<!-- What's the purpose of the change? What does it do, and why? -->
Resolves #11704 

Propagate errors from `uv_console::confirm` up instead of `unwrap`ping
them, causing panics.

## Test Plan

<!-- How was it tested? -->
Regression testing the bug is very difficult, as the behavior of
`confirm` changes based on whether `uv` is talking to a `tty`. We can
trick it using ptys, but the best rust pty crate I could find only
provides blocking reads of the spawned child, which is insufficient to
write the regression test.

---------

Co-authored-by: konstin <konstin@mailbox.org>
2025-02-26 11:10:04 +01:00
Zanie Blue b180fe99b4
Move `GIT_TERMINAL_PROMPT` to env vars (#11789) 2025-02-26 03:56:24 +00:00
Zanie Blue bace1a58c9
Update snapshot for `install_git_private_https_pat_not_authorized` (#11788) 2025-02-26 03:36:13 +00:00
piegames 15ac3a9b79
Disable interactive git terminal prompts during fetches (#11744)
## Summary

The animation shadows any interactive authentication prompt which may
occur when resolving dependencies of private repos.

Fixes https://github.com/astral-sh/uv/issues/5107.

## Test Plan

I started creating `install_git_private_https_interactive` as a
regression test but am unsure how to test this because it is interactive
and I don't really know the test framework
2025-02-25 13:30:55 -06:00
Charlie Marsh b9daca0e3c
Avoid redundant clones in version containment check (#11767)
## Summary

These seem like needless clones?
2025-02-25 14:36:22 +00:00
Charlie Marsh c37af945b3
Avoid using owned `String` in deserializers (#11764)
## Summary

This is the pattern I see in a variety of crates, and I believe this is
preferred if you don't _need_ an owned `String`, since you can avoid the
allocation. This could be pretty impactful for us?
2025-02-25 14:28:16 +00:00
Charlie Marsh 275db0668d
Use `SmallString` for filenames and URLs (#11765)
## Summary

These are never mutated, so there's no need to store them as `String`.
2025-02-24 23:06:57 -08:00
Charlie Marsh 76c3caf24f
Avoid using owned `String` for package name constructors (#11768)
## Summary

Since we use `SmallString` internally, there's no benefit to passing an
owned string to the `PackageName` constructor (same goes for
`ExtraName`, etc.). I've kept them for now (maybe that will change in
the future, so it's useful to have clients passed own values if they
_can_), but removed a bunch of usages where we were casting from `&str`
to `String` needlessly to use the constructor.
2025-02-24 23:06:15 -08:00
Charlie Marsh 6080dcbf7b
Remove stale comment on `MarkerEnvironment` (#11769) 2025-02-24 23:05:59 -08:00
Charlie Marsh 27de145610
Use matches over contains for extra value parsing (#11770) 2025-02-24 23:05:43 -08:00
Charlie Marsh 13cf4555c4
Remove unnecessary clones when adding package names (#11771)
## Summary

Really not important but looks like this was copied around at some
point.
2025-02-24 23:05:30 -08:00
Charlie Marsh 3a18f31751
Avoid cloning to string when creating cache path (#11772)
## Summary

Not important but there's no need to allocate to `String` here.
2025-02-24 23:05:16 -08:00
Charlie Marsh ce3654da77
Use a Boxed slice for version specifiers (#11766)
## Summary

These are never modified, and we create _tons_ of them.
2025-02-24 22:30:54 -08:00
Aria Desires a0b9f22a21
Bump version to 0.6.3 (#11759) 2025-02-24 17:25:01 -05:00
Zanie Blue 1dd0f6aaf3
Add anchor links to arguments and options in the CLI reference (#11754)
<img width="1427" alt="Screenshot 2025-02-24 at 1 26 01 PM"
src="https://github.com/user-attachments/assets/9df589b6-79e4-478a-a404-043448a3bb3b"
/>
2025-02-24 15:48:14 -06:00
Damy Metzke 2ea1df1a1f
Fix message when there are no buildable packages (#11722)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

I noticed that when running "uv build --all-packages" in an empty
workspace with no buildable packages, it reports that there are
buildable packages. Which I believe to be an error in the message. This
patch fixes the typo. I did not find any relevant issues.

## Test Plan

I've verified, to the best of my ability, that this did not introduce
any additional errors in related existing tests. Considering the nature
of the change I believe it's sufficient.
2025-02-24 10:41:14 -10:00
Charlie Marsh 4611690745
Use `SmallString` on `Hashes` (#11756)
## Summary

We should use this consistently over `Box<str>`.
2025-02-24 10:32:00 -10:00
Charlie Marsh d9adba1cf5
Use a `Box` for `Yanked` on `File` (#11755)
## Summary

See: https://github.com/astral-sh/uv/pull/11715.
2025-02-24 09:46:14 -10:00
Charlie Marsh 4fc181dbf2
Use a `SmallString` for the Yanked enum (#11715)
## Summary

This is stored on `File`, which we create extensively. Easy way to
reduce size.
2025-02-24 09:03:56 -10:00
Charlie Marsh f3ebd04a9a
Initialize PEP 723 script in `uv lock --script` (#11717)
## Summary

Like `uv add --script`, `uv lock --script` will now initialize a PEP 723
script tag if it doesn't already exist.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-02-24 17:40:45 +00:00
Charlie Marsh 21f4b0863d
Use boxed slices for hash vector (#11714)
## Summary

We never resize these, and they're stored everywhere (on `File`, etc.).
Seems useful to use a more efficient structure for them.
2025-02-24 11:11:44 -06:00
samypr100 878497a014
Upgrade Rust toolchain to 1.85 (#11720)
## Summary

* Upgrade the rust toolchain to 1.85.0. This does not increase the MSRV.
* Update windows trampoline to 1.86 nightly beta (previously in 1.85
nightly beta).

## Test Plan

Existing tests
2025-02-23 16:52:34 +01:00
Charlie Marsh 3c541e2368
Check subdirectory existence after cache heal (#11719)
## Summary

Closes https://github.com/astral-sh/uv/issues/11703.
2025-02-23 00:13:29 +00:00
Charlie Marsh c124bd250b
Respect existing PEP 723 script settings in `uv add` (#11716)
## Summary

As in other commands, we need to pick up the inline settings in a PEP
723 script in `uv add`. Right now, we ignore them entirely.
2025-02-22 14:02:31 -10:00
Charlie Marsh 49d790a1f4
Remove TODO around reducing incompatible wheel size (#11712)
## Summary

This actually doesn't reduce the variant size :)
2025-02-22 12:12:47 -10:00
Charlie Marsh 359a3cbe44
Remove unused `thiserror` variants (#11713)
## Summary

We get to remove an entire dependency too.
2025-02-22 12:12:22 -10:00
Charlie Marsh 0b3d91c73a
Respect in-flight requests in source tree and lookahead resolver (#11711)
## Summary

Likely not critical since these tend to run prior to resolution rather
than in parallel with it, but we _should_ respect in-flight requests
here.
2025-02-22 12:12:17 -10:00
Charlie Marsh 3fe2882fd5
Remove TODO around atomic writes (#11710)
## Summary

We chatted about this a bit on Discord, and I think it's not required.
2025-02-22 12:12:12 -10:00
Charlie Marsh efc8d94e65
Treat lockfile as outdated if (empty) extras are added (#11702)
## Summary

Now that we track extras in the lockfile, we should validate them in
`--locked`.
2025-02-21 18:51:04 -10:00
Charlie Marsh 64171b3a25
Update credential message in snapshot (#11705) 2025-02-22 04:27:32 +00:00
Seven4ME 88aa6e26d1
Accept multiple `.env` files in `UV_ENV_FILE` (#11665)
According to the [UV
documentation](https://docs.astral.sh/uv/configuration/files/#env), the
UV_ENV_FILE environment variable should support multiple .env files,
separated by spaces. However, when I tried using this feature in my
repository, it didn’t work as expected.

To investigate, I checked the UV repository for relevant tests and found
`run_with_multiple_env_files`.
This test asserts the following `error: No environment file found at:
.env1 .env2.`

This discrepancy could indicate either a mismatch between the
documentation and the implementation or a bug in the code.

I decided to fix the issue in the code since the ability to pass
multiple `.env` files is a valuable feature.
If my fix isn’t appropriate, I’d be happy to make any necessary
adjustments.

---------

Co-authored-by: Yaroslav Limanskiy <yaroslav.limanskiy@pandadoc.com>
Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2025-02-21 05:37:22 +00:00
Charlie Marsh 4bab1cd002
Re-allow HTTP schemes for Git dependencies (#11687)
## Summary

Closes https://github.com/astral-sh/uv/issues/11683.
2025-02-21 05:14:31 +00:00
Charlie Marsh 6bef1a32b1
Remove in-memory locks from distribution database (#11412)
## Summary

I believe these are not necessary... They're currently used in two
places:

1. When building wheels. But that's already wrapped in an in-flight map,
which does the same thing.
2. When fetching source distribution metadata. But every route there
uses it's own `flock` to coordinate across processes, so this seems
redundant?
2025-02-20 20:57:31 -08:00
konsti b4ba78e53b
Run `uv-dev` tests (#11618)
In #6827, we switched the uv-dev binary to not being built by default.
As an unintended side effect, we were also stopping to run the tests
that ensured the schema was up-to-date.

To fix this, we split uv-dev into an unconditional library, with only
the binary being a conditional build. This way, `cargo test` and `cargo
nextest` pick those tests up again.

An alternative would be running tests with the `dev` feature, with the
side effect of always building the uv-dev binary, too.
2025-02-20 14:28:08 -08:00
Charlie Marsh f4339b5d7e
Include uppercase platforms for Windows wheels (#11681)
## Summary

It turns out these are uppercased for Windows.

Closes https://github.com/astral-sh/uv/issues/11664.
2025-02-20 22:27:19 +00:00
Charlie Marsh 36268fbe12
Reuse refined interpreter to create tool environment (#11680)
## Summary

As-is, we used the refined interpreter to _resolve_, but we then created
the tool environment with the "old" interpreter. So we risked running
(e.g.) code that requires Python 3.12 in a Python 3.10 environment. We
need to propagate the updated interpreter.

This is fairly hard to test, because it requires an environment in which
we're able to download new interpreters.

Closes
https://github.com/astral-sh/uv/issues/11678#issuecomment-2672659074.
2025-02-20 22:05:03 +00:00
John Mumm 88f0dfd03d
Display path separators as backslashes on Windows (#11667)
Currently, `uv tool list --show-paths` will show backslashes as path
separators for packages but not entrypoints. This PR changes this to be
consistent.

Closes #10426.
2025-02-20 22:28:38 +01:00
Charlie Marsh 5f6529a69a
Support conflict markers in `uv export` (#11643)
## Summary

Today, if you have a lockfile that includes conflict markers, we write
those markers out to `requirements.txt` in `uv export`. This is
problematic, since no tool will ever evaluate those markers correctly
downstream.

This PR adds handling for the conflict markers, though it's quite
involved. Specifically, we have a new reachability algorithm that
tracks, for each node, the reachable marker for that node _and_ the
marker conditions under which each conflict item is `true` (at that
node).

I'm slightly worried that this algorithm could be wrong for graphs with
cycles, but we only use this logic for lockfiles with conflicts anyway,
so I think it's a strict improvement over the status quo.

Closes https://github.com/astral-sh/uv/issues/11559.

Closes https://github.com/astral-sh/uv/issues/11548.
2025-02-20 12:19:46 -08:00
Zanie Blue 18a75df8bc
Skip removed directories during bytecode compilation (#11633)
See https://github.com/astral-sh/uv/issues/11611

The user in the linked issue tested this.
2025-02-20 12:17:38 -08:00
Charlie Marsh b588a8ea2f
Avoid installing duplicate dependencies across conflicting groups (#11653)
## Summary

We need to compute the set of activated groups prior to evaluating the
conflict markers on the groups' dependencies.

Closes https://github.com/astral-sh/uv/issues/11648.
2025-02-20 12:17:13 -08:00
ChiLin Chiu 3365eb4a1c
Fix missing a closing bracket in the cache-keys setting (#11669)
Fix missing a closing bracket in the cache-keys setting in the document.
(#11668)

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2025-02-20 20:16:19 +00:00
Charlie Marsh 3e04fdb8ae
Allow quotes around command-line options in `requirement.txt files` (#11644)
## Summary

Closes #11592.
2025-02-20 12:13:09 -08:00
konsti ae916cff5a
Reduce overhead in converting resolutions (#11660)
Solving spent a chunk of its time just converting resolutions, the left
two blocks:


![image](https://github.com/user-attachments/assets/6f266440-c6e2-447c-ad7f-f92244f9d09b)

These blocks are `ResolverOutput::from_state` with 1.3% and
`ForkState::into_resolution` with 4.1% of resolver thread runtime for
apache airflow universal.

We reduce the overhead spent in those functions, to now 1.1% and 2.1% of
resolver time spend in those functions by:

Commit 1: Replace the hash set for the edges with a vec in
`ForkState::into_resolution`. We deduplicate edges anyway when
collecting them, and the hash-and-insert was slow.

Commit 2: Reduce the distribution clonign in
`ResolverOutput::from_state` by using an `Arc`.

The same profile excerpt for the resolver with the branch (note that
there is now an unrelated block between the two we optimized):


![image](https://github.com/user-attachments/assets/e36c205d-2cf8-4fe6-a2dd-3020c0515922)

Wall times are noisy, but the profiles show those changes as
improvements.

```
$ hyperfine --warmup 2 "./uv-main pip compile --no-progress scripts/requirements/airflow.in --universal" "./uv-branch pip compile --no-progress scripts/requirements/airflow.in --universal"
Benchmark 1: ./uv-main pip compile --no-progress scripts/requirements/airflow.in --universal
  Time (mean ± σ):      99.1 ms ±   3.8 ms    [User: 111.8 ms, System: 115.5 ms]
  Range (min … max):    93.6 ms … 110.4 ms    29 runs
 
Benchmark 2: ./uv-branch pip compile --no-progress scripts/requirements/airflow.in --universal
  Time (mean ± σ):      97.1 ms ±   4.3 ms    [User: 114.8 ms, System: 112.0 ms]
  Range (min … max):    90.9 ms … 112.4 ms    29 runs
 
Summary
  ./uv-branch pip compile --no-progress scripts/requirements/airflow.in --universal ran
    1.02 ± 0.06 times faster than ./uv-main pip compile --no-progress scripts/requirements/airflow.in --universal
```
2025-02-20 12:13:01 -08:00
konsti f9b638a296
Use install concurrency for bytecode compilation too (#11615)
Instead of always using all available threads for bytecode compilation,
respect `UV_CONCURRENT_INSTALLS`, so the parallelism is configurable
instead of hardcoded. We reuse the install limit since bytecode
compilation only runs after install.
2025-02-20 12:23:40 +01:00
John Mumm ab551eaf34
Display the built file name instead of the canonicalized name in `uv build` (#11593)
We keep the raw filename (prior to parsing/normalization) on the
`BuildMessage` so we can display it.

Closes #11103.
Closes #11635.
2025-02-20 09:11:15 +01:00
Zanie Blue 6d3614eece
Bump version to 0.6.2 (#11630) 2025-02-19 13:11:11 -06:00
Zanie Blue fdebc0c7fd
Allow use of x86-64 Python on ARM Windows (#11625)
Closes https://github.com/astral-sh/uv/issues/11493
2025-02-19 12:01:46 -06:00