Skip to content

Commit 4469728

Browse files
committed
Sort in place
1 parent d6b6d79 commit 4469728

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

crates/next-core/src/next_app/app_client_references_chunks.rs

+14-12
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::cmp::Ordering;
2+
13
use anyhow::Result;
24
use futures::join;
35
use tracing::Instrument;
@@ -429,6 +431,7 @@ fn reorder_isolated_merged_entries(
429431
else {
430432
unreachable!("expected ChunkGroup::IsolatedMerged for client reference")
431433
};
434+
432435
// Reorder the entries, because the order of IsolatedMerged entries obtained by chunk_group_info
433436
// is unspecified (and thus not strictly execution order, which is a problem for CSS).
434437
//
@@ -437,18 +440,17 @@ fn reorder_isolated_merged_entries(
437440
// matter in this case (since they will not be chunked in this step anyway).
438441

439442
if entries.iter().any(|m| client_to_ref_ty.contains_key(m)) {
440-
let entries = client_to_ref_ty
441-
.keys()
442-
.copied()
443-
.filter(|m| entries.contains(m))
444-
.chain(
445-
entries
446-
.iter()
447-
.copied()
448-
.filter(|m| !client_to_ref_ty.contains_key(m)),
449-
)
450-
.collect();
451-
443+
let mut entries = entries.clone();
444+
entries.sort_by(|a, b| {
445+
match (
446+
client_to_ref_ty.get_index_of(a),
447+
client_to_ref_ty.get_index_of(b),
448+
) {
449+
(Some(a), Some(b)) => a.cmp(&b),
450+
// We don't know, so just keep the same order.
451+
_ => Ordering::Equal,
452+
}
453+
});
452454
Some(ChunkGroup::IsolatedMerged {
453455
parent: *parent,
454456
entries,

turbopack/crates/turbo-tasks/src/primitives.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::{
22
hash::{BuildHasher, Hash},
3-
ops::Deref,
3+
ops::{Deref, DerefMut},
44
time::Duration,
55
};
66

@@ -91,6 +91,11 @@ impl<T: Hash + Eq> Deref for HashableIndexSet<T> {
9191
&self.0
9292
}
9393
}
94+
impl<T: Hash + Eq> DerefMut for HashableIndexSet<T> {
95+
fn deref_mut(&mut self) -> &mut Self::Target {
96+
&mut self.0
97+
}
98+
}
9499
impl<T: Hash + Eq> Hash for HashableIndexSet<T> {
95100
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
96101
let mut result = 0u64;

0 commit comments

Comments
 (0)