Skip to content

Commit 2d9fe7c

Browse files
authored
Pin lock futures (#16643)
These futures are quite large (~16,000 bytes) and adding new fields to the `ResolverOptions` in another pull request caused a lint error from Clippy.
1 parent caf49f8 commit 2d9fe7c

8 files changed

Lines changed: 176 additions & 154 deletions

File tree

crates/uv/src/commands/project/add.rs

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -990,24 +990,26 @@ async fn lock_and_sync(
990990
printer: Printer,
991991
preview: Preview,
992992
) -> Result<(), ProjectError> {
993-
let mut lock = project::lock::LockOperation::new(
994-
if let LockCheck::Enabled(lock_check) = lock_check {
995-
LockMode::Locked(target.interpreter(), lock_check)
996-
} else {
997-
LockMode::Write(target.interpreter())
998-
},
999-
&settings.resolver,
1000-
client_builder,
1001-
&lock_state,
1002-
Box::new(DefaultResolveLogger),
1003-
concurrency,
1004-
cache,
1005-
&WorkspaceCache::default(),
1006-
printer,
1007-
preview,
993+
let mut lock = Box::pin(
994+
project::lock::LockOperation::new(
995+
if let LockCheck::Enabled(lock_check) = lock_check {
996+
LockMode::Locked(target.interpreter(), lock_check)
997+
} else {
998+
LockMode::Write(target.interpreter())
999+
},
1000+
&settings.resolver,
1001+
client_builder,
1002+
&lock_state,
1003+
Box::new(DefaultResolveLogger),
1004+
concurrency,
1005+
cache,
1006+
&WorkspaceCache::default(),
1007+
printer,
1008+
preview,
1009+
)
1010+
.with_constraints(constraints)
1011+
.execute((&target).into()),
10081012
)
1009-
.with_constraints(constraints)
1010-
.execute((&target).into())
10111013
.await?
10121014
.into_lock();
10131015

@@ -1112,23 +1114,25 @@ async fn lock_and_sync(
11121114

11131115
// If the file was modified, we have to lock again, though the only expected change is
11141116
// the addition of the minimum version specifiers.
1115-
lock = project::lock::LockOperation::new(
1116-
if let LockCheck::Enabled(lock_check) = lock_check {
1117-
LockMode::Locked(target.interpreter(), lock_check)
1118-
} else {
1119-
LockMode::Write(target.interpreter())
1120-
},
1121-
&settings.resolver,
1122-
client_builder,
1123-
&lock_state,
1124-
Box::new(SummaryResolveLogger),
1125-
concurrency,
1126-
cache,
1127-
&WorkspaceCache::default(),
1128-
printer,
1129-
preview,
1117+
lock = Box::pin(
1118+
project::lock::LockOperation::new(
1119+
if let LockCheck::Enabled(lock_check) = lock_check {
1120+
LockMode::Locked(target.interpreter(), lock_check)
1121+
} else {
1122+
LockMode::Write(target.interpreter())
1123+
},
1124+
&settings.resolver,
1125+
client_builder,
1126+
&lock_state,
1127+
Box::new(SummaryResolveLogger),
1128+
concurrency,
1129+
cache,
1130+
&WorkspaceCache::default(),
1131+
printer,
1132+
preview,
1133+
)
1134+
.execute((&target).into()),
11301135
)
1131-
.execute((&target).into())
11321136
.await?
11331137
.into_lock();
11341138
}

crates/uv/src/commands/project/export.rs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -199,19 +199,21 @@ pub(crate) async fn export(
199199
let state = UniversalState::default();
200200

201201
// Lock the project.
202-
let lock = match LockOperation::new(
203-
mode,
204-
&settings,
205-
&client_builder,
206-
&state,
207-
Box::new(DefaultResolveLogger),
208-
concurrency,
209-
cache,
210-
&workspace_cache,
211-
printer,
212-
preview,
202+
let lock = match Box::pin(
203+
LockOperation::new(
204+
mode,
205+
&settings,
206+
&client_builder,
207+
&state,
208+
Box::new(DefaultResolveLogger),
209+
concurrency,
210+
cache,
211+
&workspace_cache,
212+
printer,
213+
preview,
214+
)
215+
.execute((&target).into()),
213216
)
214-
.execute((&target).into())
215217
.await
216218
{
217219
Ok(result) => result.into_lock(),

crates/uv/src/commands/project/lock.rs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -190,20 +190,22 @@ pub(crate) async fn lock(
190190
let state = UniversalState::default();
191191

192192
// Perform the lock operation.
193-
match LockOperation::new(
194-
mode,
195-
&settings,
196-
&client_builder,
197-
&state,
198-
Box::new(DefaultResolveLogger),
199-
concurrency,
200-
cache,
201-
&workspace_cache,
202-
printer,
203-
preview,
193+
match Box::pin(
194+
LockOperation::new(
195+
mode,
196+
&settings,
197+
&client_builder,
198+
&state,
199+
Box::new(DefaultResolveLogger),
200+
concurrency,
201+
cache,
202+
&workspace_cache,
203+
printer,
204+
preview,
205+
)
206+
.with_refresh(&refresh)
207+
.execute(target),
204208
)
205-
.with_refresh(&refresh)
206-
.execute(target)
207209
.await
208210
{
209211
Ok(lock) => {
@@ -355,7 +357,7 @@ impl<'env> LockOperation<'env> {
355357
.ok_or_else(|| ProjectError::MissingLockfile)?;
356358

357359
// Perform the lock operation, but don't write the lockfile to disk.
358-
let result = do_lock(
360+
let result = Box::pin(do_lock(
359361
target,
360362
interpreter,
361363
Some(existing),
@@ -370,7 +372,7 @@ impl<'env> LockOperation<'env> {
370372
self.workspace_cache,
371373
self.printer,
372374
self.preview,
373-
)
375+
))
374376
.await?;
375377

376378
// If the lockfile changed, return an error.
@@ -399,7 +401,7 @@ impl<'env> LockOperation<'env> {
399401
};
400402

401403
// Perform the lock operation.
402-
let result = do_lock(
404+
let result = Box::pin(do_lock(
403405
target,
404406
interpreter,
405407
existing,
@@ -414,7 +416,7 @@ impl<'env> LockOperation<'env> {
414416
self.workspace_cache,
415417
self.printer,
416418
self.preview,
417-
)
419+
))
418420
.await?;
419421

420422
// If the lockfile changed, write it to disk.

crates/uv/src/commands/project/remove.rs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -301,19 +301,21 @@ pub(crate) async fn remove(
301301
let state = UniversalState::default();
302302

303303
// Lock and sync the environment, if necessary.
304-
let lock = match project::lock::LockOperation::new(
305-
mode,
306-
&settings.resolver,
307-
&client_builder,
308-
&state,
309-
Box::new(DefaultResolveLogger),
310-
concurrency,
311-
cache,
312-
&WorkspaceCache::default(),
313-
printer,
314-
preview,
304+
let lock = match Box::pin(
305+
project::lock::LockOperation::new(
306+
mode,
307+
&settings.resolver,
308+
&client_builder,
309+
&state,
310+
Box::new(DefaultResolveLogger),
311+
concurrency,
312+
cache,
313+
&WorkspaceCache::default(),
314+
printer,
315+
preview,
316+
)
317+
.execute((&target).into()),
315318
)
316-
.execute((&target).into())
317319
.await
318320
{
319321
Ok(result) => result.into_lock(),

crates/uv/src/commands/project/run.rs

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -271,23 +271,25 @@ hint: If you are running a script with `{}` in the shebang, you may need to incl
271271
};
272272

273273
// Generate a lockfile.
274-
let lock = match project::lock::LockOperation::new(
275-
mode,
276-
&settings.resolver,
277-
&client_builder,
278-
&lock_state,
279-
if show_resolution {
280-
Box::new(DefaultResolveLogger)
281-
} else {
282-
Box::new(SummaryResolveLogger)
283-
},
284-
concurrency,
285-
&cache,
286-
&workspace_cache,
287-
printer,
288-
preview,
274+
let lock = match Box::pin(
275+
project::lock::LockOperation::new(
276+
mode,
277+
&settings.resolver,
278+
&client_builder,
279+
&lock_state,
280+
if show_resolution {
281+
Box::new(DefaultResolveLogger)
282+
} else {
283+
Box::new(SummaryResolveLogger)
284+
},
285+
concurrency,
286+
&cache,
287+
&workspace_cache,
288+
printer,
289+
preview,
290+
)
291+
.execute(target),
289292
)
290-
.execute(target)
291293
.await
292294
{
293295
Ok(result) => result.into_lock(),
@@ -748,23 +750,25 @@ hint: If you are running a script with `{}` in the shebang, you may need to incl
748750
LockMode::Write(venv.interpreter())
749751
};
750752

751-
let result = match project::lock::LockOperation::new(
752-
mode,
753-
&settings.resolver,
754-
&client_builder,
755-
&lock_state,
756-
if show_resolution {
757-
Box::new(DefaultResolveLogger)
758-
} else {
759-
Box::new(SummaryResolveLogger)
760-
},
761-
concurrency,
762-
&cache,
763-
&workspace_cache,
764-
printer,
765-
preview,
753+
let result = match Box::pin(
754+
project::lock::LockOperation::new(
755+
mode,
756+
&settings.resolver,
757+
&client_builder,
758+
&lock_state,
759+
if show_resolution {
760+
Box::new(DefaultResolveLogger)
761+
} else {
762+
Box::new(SummaryResolveLogger)
763+
},
764+
concurrency,
765+
&cache,
766+
&workspace_cache,
767+
printer,
768+
preview,
769+
)
770+
.execute(project.workspace().into()),
766771
)
767-
.execute(project.workspace().into())
768772
.await
769773
{
770774
Ok(result) => result,

crates/uv/src/commands/project/sync.rs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -331,19 +331,21 @@ pub(crate) async fn sync(
331331
SyncTarget::Script(script) => LockTarget::from(script),
332332
};
333333

334-
let outcome = match LockOperation::new(
335-
mode,
336-
&settings.resolver,
337-
&client_builder,
338-
&state,
339-
Box::new(DefaultResolveLogger),
340-
concurrency,
341-
cache,
342-
&workspace_cache,
343-
printer,
344-
preview,
334+
let outcome = match Box::pin(
335+
LockOperation::new(
336+
mode,
337+
&settings.resolver,
338+
&client_builder,
339+
&state,
340+
Box::new(DefaultResolveLogger),
341+
concurrency,
342+
cache,
343+
&workspace_cache,
344+
printer,
345+
preview,
346+
)
347+
.execute(lock_target),
345348
)
346-
.execute(lock_target)
347349
.await
348350
{
349351
Ok(result) => Outcome::Success(result),

crates/uv/src/commands/project/tree.rs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -139,19 +139,21 @@ pub(crate) async fn tree(
139139
let state = UniversalState::default();
140140

141141
// Update the lockfile, if necessary.
142-
let lock = match LockOperation::new(
143-
mode,
144-
&settings,
145-
client_builder,
146-
&state,
147-
Box::new(DefaultResolveLogger),
148-
concurrency,
149-
cache,
150-
&WorkspaceCache::default(),
151-
printer,
152-
preview,
142+
let lock = match Box::pin(
143+
LockOperation::new(
144+
mode,
145+
&settings,
146+
client_builder,
147+
&state,
148+
Box::new(DefaultResolveLogger),
149+
concurrency,
150+
cache,
151+
&WorkspaceCache::default(),
152+
printer,
153+
preview,
154+
)
155+
.execute(target),
153156
)
154-
.execute(target)
155157
.await
156158
{
157159
Ok(result) => result.into_lock(),

0 commit comments

Comments
 (0)