From 067a6260a902b93b1f435629bca27c25d210ef71 Mon Sep 17 00:00:00 2001 From: Andrew Duffy Date: Fri, 13 Feb 2026 11:13:53 -0500 Subject: [PATCH 1/3] publish Signed-off-by: Andrew Duffy --- Cargo.lock | 41 ++++ Cargo.toml | 2 +- lockfiles/Cargo.toml | 22 ++ lockfiles/src/main.rs | 73 +++++++ vortex-cuda/Cargo.toml | 1 + vortex-cuda/cub/Cargo.toml | 1 + vortex-cuda/macros/Cargo.toml | 1 + vortex-cuda/nvcomp/Cargo.toml | 1 + vortex-tui/Cargo.toml | 1 + vortex-tui/public-api.lock | 370 ++++++++++++++++++++++++++++++++++ 10 files changed, 512 insertions(+), 1 deletion(-) create mode 100644 lockfiles/Cargo.toml create mode 100644 lockfiles/src/main.rs create mode 100644 vortex-tui/public-api.lock diff --git a/Cargo.lock b/Cargo.lock index c00df532bb2..a73b16e53c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1420,6 +1420,39 @@ dependencies = [ "libbz2-rs-sys", ] +[[package]] +name = "camino" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87a0c0e6148f11f01f32650a2ea02d532b2ad4e81d8bd41e6e565b5adc5e6082" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "cargo_metadata" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.18", +] + [[package]] name = "cast" version = "0.3.0" @@ -6159,6 +6192,14 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "lockfiles" +version = "0.1.0" +dependencies = [ + "cargo_metadata", + "rayon", +] + [[package]] name = "log" version = "0.4.29" diff --git a/Cargo.toml b/Cargo.toml index 66f9b6e1b87..ca6b3247ec9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,7 +56,7 @@ members = [ "benchmarks/datafusion-bench", "benchmarks/duckdb-bench", "benchmarks/random-access-bench", - "vortex-sqllogictest", + "vortex-sqllogictest", "lockfiles", ] exclude = ["java/testfiles", "wasm-test"] resolver = "2" diff --git a/lockfiles/Cargo.toml b/lockfiles/Cargo.toml new file mode 100644 index 00000000000..80eba15f7b4 --- /dev/null +++ b/lockfiles/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "lockfiles" +description = "Build lockfiles for all workspace projects" +publish = false +authors.workspace = true +categories.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +keywords.workspace = true +license.workspace = true +readme.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +cargo_metadata = "0.23" +rayon = "1" + +[lints] +workspace = true diff --git a/lockfiles/src/main.rs b/lockfiles/src/main.rs new file mode 100644 index 00000000000..b307d3b4b06 --- /dev/null +++ b/lockfiles/src/main.rs @@ -0,0 +1,73 @@ +use cargo_metadata::camino::Utf8PathBuf; +use cargo_metadata::{MetadataCommand, Package, PackageName}; +use std::fs::File; +use std::io::{ErrorKind, Write}; +use std::process::Command; + +pub fn main() { + let metadata = MetadataCommand::new() + .no_deps() + .exec() + .expect("cargo metadata"); + + let published = metadata + .workspace_packages() + .into_iter() + .filter(|v| is_published(v)) + // Only keep crates that publish Rust libs + .filter(|p| p.targets.iter().any(|target| target.is_lib())); + + // Skip binary packages + + for pkg in published { + let job = LockfileJob { + name: pkg.name.clone(), + manifest_path: pkg.manifest_path.clone(), + }; + + job.execute().expect("lockfile"); + } +} + +struct LockfileJob { + name: PackageName, + manifest_path: Utf8PathBuf, +} + +impl LockfileJob { + fn execute(self) -> std::io::Result<()> { + let LockfileJob { + name, + manifest_path, + } = self; + + let lockfile_path = manifest_path.with_file_name("public-api.lock"); + + let mut cmd = Command::new("cargo"); + let output = cmd + .arg("+nightly") + .arg("public-api") + .arg("--manifest-path") + .arg(manifest_path) + .args(["--omit", "blanket-impls,auto-trait-impls"]) + .output()?; + + if !output.status.success() { + eprintln!( + "FAILED: {name}:\n===============\n\n{}\n\n===============\n\n", + String::from_utf8_lossy(&output.stdout) + ); + + return Err(std::io::Error::new(ErrorKind::Other, "failed to execute")); + } + + // Write lockfile contents + File::create(&lockfile_path)?.write_all(&output.stdout)?; + + Ok(()) + } +} + +fn is_published(pkg: &Package) -> bool { + pkg.publish.as_ref().map(|v| !v.is_empty()).unwrap_or(true) +} diff --git a/vortex-cuda/Cargo.toml b/vortex-cuda/Cargo.toml index 4d93236e741..cc47483a3b0 100644 --- a/vortex-cuda/Cargo.toml +++ b/vortex-cuda/Cargo.toml @@ -2,6 +2,7 @@ name = "vortex-cuda" authors.workspace = true description = "CUDA compute for Vortex" +publish = false edition = { workspace = true } homepage = { workspace = true } categories = { workspace = true } diff --git a/vortex-cuda/cub/Cargo.toml b/vortex-cuda/cub/Cargo.toml index 1c92776ddb7..5ee00739310 100644 --- a/vortex-cuda/cub/Cargo.toml +++ b/vortex-cuda/cub/Cargo.toml @@ -5,6 +5,7 @@ name = "vortex-cub" authors.workspace = true description = "Rust bindings to NVIDIA CUB library for Vortex GPU operations" +publish = false edition = { workspace = true } homepage = { workspace = true } categories = { workspace = true } diff --git a/vortex-cuda/macros/Cargo.toml b/vortex-cuda/macros/Cargo.toml index f13d41117fe..e46e57410b0 100644 --- a/vortex-cuda/macros/Cargo.toml +++ b/vortex-cuda/macros/Cargo.toml @@ -2,6 +2,7 @@ name = "vortex-cuda-macros" authors.workspace = true description = "Proc macros for CUDA conditional compilation in Vortex" +publish = false edition = { workspace = true } homepage = { workspace = true } categories = { workspace = true } diff --git a/vortex-cuda/nvcomp/Cargo.toml b/vortex-cuda/nvcomp/Cargo.toml index 9fd64640641..e16f9be80d4 100644 --- a/vortex-cuda/nvcomp/Cargo.toml +++ b/vortex-cuda/nvcomp/Cargo.toml @@ -2,6 +2,7 @@ name = "vortex-nvcomp" authors.workspace = true description = "Rust bindings to NVIDIA nvCOMP compression library" +publish = false edition = { workspace = true } homepage = { workspace = true } categories = { workspace = true } diff --git a/vortex-tui/Cargo.toml b/vortex-tui/Cargo.toml index a6ef5f61bbc..019176f3c9d 100644 --- a/vortex-tui/Cargo.toml +++ b/vortex-tui/Cargo.toml @@ -3,6 +3,7 @@ name = "vortex-tui" authors = { workspace = true } categories = { workspace = true } description = "a small but mighty tool for working with Vortex files" +metadata = { skip_public_api = true } edition = { workspace = true } homepage = { workspace = true } include = { workspace = true } diff --git a/vortex-tui/public-api.lock b/vortex-tui/public-api.lock new file mode 100644 index 00000000000..b54e7834bb7 --- /dev/null +++ b/vortex-tui/public-api.lock @@ -0,0 +1,370 @@ +pub mod vortex_tui +pub mod vortex_tui::browse +pub mod vortex_tui::browse::app +pub enum vortex_tui::browse::app::KeyMode +pub vortex_tui::browse::app::KeyMode::Normal +pub vortex_tui::browse::app::KeyMode::Search +impl core::cmp::Eq for vortex_tui::browse::app::KeyMode +impl core::cmp::PartialEq for vortex_tui::browse::app::KeyMode +pub fn vortex_tui::browse::app::KeyMode::eq(&self, other: &vortex_tui::browse::app::KeyMode) -> bool +impl core::default::Default for vortex_tui::browse::app::KeyMode +pub fn vortex_tui::browse::app::KeyMode::default() -> vortex_tui::browse::app::KeyMode +impl core::marker::StructuralPartialEq for vortex_tui::browse::app::KeyMode +pub enum vortex_tui::browse::app::Tab +pub vortex_tui::browse::app::Tab::Layout +pub vortex_tui::browse::app::Tab::Query +pub vortex_tui::browse::app::Tab::Segments +impl core::clone::Clone for vortex_tui::browse::app::Tab +pub fn vortex_tui::browse::app::Tab::clone(&self) -> vortex_tui::browse::app::Tab +impl core::cmp::Eq for vortex_tui::browse::app::Tab +impl core::cmp::PartialEq for vortex_tui::browse::app::Tab +pub fn vortex_tui::browse::app::Tab::eq(&self, other: &vortex_tui::browse::app::Tab) -> bool +impl core::default::Default for vortex_tui::browse::app::Tab +pub fn vortex_tui::browse::app::Tab::default() -> vortex_tui::browse::app::Tab +impl core::marker::Copy for vortex_tui::browse::app::Tab +impl core::marker::StructuralPartialEq for vortex_tui::browse::app::Tab +pub struct vortex_tui::browse::app::AppState<'a> +pub vortex_tui::browse::app::AppState::current_tab: vortex_tui::browse::app::Tab +pub vortex_tui::browse::app::AppState::cursor: vortex_tui::browse::app::LayoutCursor +pub vortex_tui::browse::app::AppState::file_path: alloc::string::String +pub vortex_tui::browse::app::AppState::filter: core::option::Option> +pub vortex_tui::browse::app::AppState::frame_size: ratatui_core::layout::size::Size +pub vortex_tui::browse::app::AppState::key_mode: vortex_tui::browse::app::KeyMode +pub vortex_tui::browse::app::AppState::layouts_list_state: ratatui_widgets::list::state::ListState +pub vortex_tui::browse::app::AppState::query_state: vortex_tui::browse::ui::QueryState +pub vortex_tui::browse::app::AppState::search_filter: alloc::string::String +pub vortex_tui::browse::app::AppState::segment_grid_state: vortex_tui::browse::ui::SegmentGridState<'a> +pub vortex_tui::browse::app::AppState::session: &'a vortex_session::VortexSession +pub vortex_tui::browse::app::AppState::tree_scroll_offset: u16 +pub vortex_tui::browse::app::AppState::vxf: vortex_file::file::VortexFile +impl<'a> vortex_tui::browse::app::AppState<'a> +pub fn vortex_tui::browse::app::AppState<'a>::clear_search(&mut self) +pub async fn vortex_tui::browse::app::AppState<'a>::new(session: &'a vortex_session::VortexSession, path: impl core::convert::AsRef) -> vortex_error::VortexResult> +pub fn vortex_tui::browse::app::AppState<'a>::reset_layout_view_state(&mut self) +pub struct vortex_tui::browse::app::LayoutCursor +impl vortex_tui::browse::app::LayoutCursor +pub fn vortex_tui::browse::app::LayoutCursor::child(&self, n: usize) -> Self +pub fn vortex_tui::browse::app::LayoutCursor::dtype(&self) -> &vortex_dtype::dtype::DType +pub fn vortex_tui::browse::app::LayoutCursor::flat_layout_metadata_info(&self) -> alloc::string::String +pub fn vortex_tui::browse::app::LayoutCursor::flatbuffer_size(&self) -> usize +pub fn vortex_tui::browse::app::LayoutCursor::is_stats_table(&self) -> bool +pub fn vortex_tui::browse::app::LayoutCursor::layout(&self) -> &vortex_layout::layout::LayoutRef +pub fn vortex_tui::browse::app::LayoutCursor::new(footer: vortex_file::footer::Footer, segment_source: alloc::sync::Arc) -> Self +pub fn vortex_tui::browse::app::LayoutCursor::new_with_path(footer: vortex_file::footer::Footer, segment_source: alloc::sync::Arc, path: alloc::vec::Vec) -> Self +pub fn vortex_tui::browse::app::LayoutCursor::parent(&self) -> Self +pub fn vortex_tui::browse::app::LayoutCursor::segment_spec(&self, id: vortex_layout::segments::SegmentId) -> &vortex_file::footer::segment::SegmentSpec +pub fn vortex_tui::browse::app::LayoutCursor::total_size(&self) -> usize +pub mod vortex_tui::browse::ui +pub enum vortex_tui::browse::ui::QueryFocus +pub vortex_tui::browse::ui::QueryFocus::ResultsTable +pub vortex_tui::browse::ui::QueryFocus::SqlInput +impl core::clone::Clone for vortex_tui::browse::ui::QueryFocus +pub fn vortex_tui::browse::ui::QueryFocus::clone(&self) -> vortex_tui::browse::ui::QueryFocus +impl core::cmp::Eq for vortex_tui::browse::ui::QueryFocus +impl core::cmp::PartialEq for vortex_tui::browse::ui::QueryFocus +pub fn vortex_tui::browse::ui::QueryFocus::eq(&self, other: &vortex_tui::browse::ui::QueryFocus) -> bool +impl core::default::Default for vortex_tui::browse::ui::QueryFocus +pub fn vortex_tui::browse::ui::QueryFocus::default() -> vortex_tui::browse::ui::QueryFocus +impl core::fmt::Debug for vortex_tui::browse::ui::QueryFocus +pub fn vortex_tui::browse::ui::QueryFocus::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl core::marker::Copy for vortex_tui::browse::ui::QueryFocus +impl core::marker::StructuralPartialEq for vortex_tui::browse::ui::QueryFocus +pub enum vortex_tui::browse::ui::SortDirection +pub vortex_tui::browse::ui::SortDirection::Ascending +pub vortex_tui::browse::ui::SortDirection::Descending +pub vortex_tui::browse::ui::SortDirection::None +impl vortex_tui::browse::ui::SortDirection +pub fn vortex_tui::browse::ui::SortDirection::cycle(self) -> Self +pub fn vortex_tui::browse::ui::SortDirection::indicator(self) -> &'static str +impl core::clone::Clone for vortex_tui::browse::ui::SortDirection +pub fn vortex_tui::browse::ui::SortDirection::clone(&self) -> vortex_tui::browse::ui::SortDirection +impl core::cmp::Eq for vortex_tui::browse::ui::SortDirection +impl core::cmp::PartialEq for vortex_tui::browse::ui::SortDirection +pub fn vortex_tui::browse::ui::SortDirection::eq(&self, other: &vortex_tui::browse::ui::SortDirection) -> bool +impl core::default::Default for vortex_tui::browse::ui::SortDirection +pub fn vortex_tui::browse::ui::SortDirection::default() -> vortex_tui::browse::ui::SortDirection +impl core::fmt::Debug for vortex_tui::browse::ui::SortDirection +pub fn vortex_tui::browse::ui::SortDirection::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl core::marker::Copy for vortex_tui::browse::ui::SortDirection +impl core::marker::StructuralPartialEq for vortex_tui::browse::ui::SortDirection +pub struct vortex_tui::browse::ui::QueryState +pub vortex_tui::browse::ui::QueryState::base_query: alloc::string::String +pub vortex_tui::browse::ui::QueryState::current_page: usize +pub vortex_tui::browse::ui::QueryState::cursor_position: usize +pub vortex_tui::browse::ui::QueryState::error: core::option::Option +pub vortex_tui::browse::ui::QueryState::focus: vortex_tui::browse::ui::QueryFocus +pub vortex_tui::browse::ui::QueryState::horizontal_scroll: usize +pub vortex_tui::browse::ui::QueryState::order_clause: core::option::Option +pub vortex_tui::browse::ui::QueryState::page_size: usize +pub vortex_tui::browse::ui::QueryState::results: core::option::Option +pub vortex_tui::browse::ui::QueryState::running: bool +pub vortex_tui::browse::ui::QueryState::sort_column: core::option::Option +pub vortex_tui::browse::ui::QueryState::sort_direction: vortex_tui::browse::ui::SortDirection +pub vortex_tui::browse::ui::QueryState::sql_input: alloc::string::String +pub vortex_tui::browse::ui::QueryState::table_state: ratatui_widgets::table::state::TableState +pub vortex_tui::browse::ui::QueryState::total_row_count: core::option::Option +impl vortex_tui::browse::ui::QueryState +pub fn vortex_tui::browse::ui::QueryState::apply_sort(&mut self, session: &vortex_session::VortexSession, column: usize, file_path: &str) +pub fn vortex_tui::browse::ui::QueryState::clear_input(&mut self) +pub fn vortex_tui::browse::ui::QueryState::column_count(&self) -> usize +pub fn vortex_tui::browse::ui::QueryState::delete_char(&mut self) +pub fn vortex_tui::browse::ui::QueryState::delete_char_forward(&mut self) +pub fn vortex_tui::browse::ui::QueryState::execute_initial_query(&mut self, session: &vortex_session::VortexSession, file_path: &str) +pub fn vortex_tui::browse::ui::QueryState::insert_char(&mut self, c: char) +pub fn vortex_tui::browse::ui::QueryState::move_cursor_end(&mut self) +pub fn vortex_tui::browse::ui::QueryState::move_cursor_left(&mut self) +pub fn vortex_tui::browse::ui::QueryState::move_cursor_right(&mut self) +pub fn vortex_tui::browse::ui::QueryState::move_cursor_start(&mut self) +pub fn vortex_tui::browse::ui::QueryState::next_page(&mut self, session: &vortex_session::VortexSession, file_path: &str) +pub fn vortex_tui::browse::ui::QueryState::prev_page(&mut self, session: &vortex_session::VortexSession, file_path: &str) +pub fn vortex_tui::browse::ui::QueryState::selected_column(&self) -> usize +pub fn vortex_tui::browse::ui::QueryState::toggle_focus(&mut self) +pub fn vortex_tui::browse::ui::QueryState::total_pages(&self) -> usize +impl core::default::Default for vortex_tui::browse::ui::QueryState +pub fn vortex_tui::browse::ui::QueryState::default() -> Self +pub struct vortex_tui::browse::ui::SegmentGridState<'a> +pub vortex_tui::browse::ui::SegmentGridState::horizontal_scroll: usize +pub vortex_tui::browse::ui::SegmentGridState::horizontal_scroll_state: ratatui_widgets::scrollbar::ScrollbarState +pub vortex_tui::browse::ui::SegmentGridState::max_horizontal_scroll: usize +pub vortex_tui::browse::ui::SegmentGridState::max_vertical_scroll: usize +pub vortex_tui::browse::ui::SegmentGridState::segment_tree: core::option::Option<(taffy::tree::taffy_tree::TaffyTree<()>, taffy::tree::node::NodeId, vortex_utils::aliases::hash_map::HashMap>)> +pub vortex_tui::browse::ui::SegmentGridState::vertical_scroll: usize +pub vortex_tui::browse::ui::SegmentGridState::vertical_scroll_state: ratatui_widgets::scrollbar::ScrollbarState +impl vortex_tui::browse::ui::SegmentGridState<'_> +pub fn vortex_tui::browse::ui::SegmentGridState<'_>::scroll_down(&mut self, amount: usize) +pub fn vortex_tui::browse::ui::SegmentGridState<'_>::scroll_left(&mut self, amount: usize) +pub fn vortex_tui::browse::ui::SegmentGridState<'_>::scroll_right(&mut self, amount: usize) +pub fn vortex_tui::browse::ui::SegmentGridState<'_>::scroll_up(&mut self, amount: usize) +impl<'a> core::clone::Clone for vortex_tui::browse::ui::SegmentGridState<'a> +pub fn vortex_tui::browse::ui::SegmentGridState<'a>::clone(&self) -> vortex_tui::browse::ui::SegmentGridState<'a> +impl<'a> core::default::Default for vortex_tui::browse::ui::SegmentGridState<'a> +pub fn vortex_tui::browse::ui::SegmentGridState<'a>::default() -> vortex_tui::browse::ui::SegmentGridState<'a> +impl<'a> core::fmt::Debug for vortex_tui::browse::ui::SegmentGridState<'a> +pub fn vortex_tui::browse::ui::SegmentGridState<'a>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub fn vortex_tui::browse::ui::render_app(app: &mut vortex_tui::browse::app::AppState<'_>, frame: &mut ratatui_core::terminal::frame::Frame<'_>) +pub async fn vortex_tui::browse::exec_tui(session: &vortex_session::VortexSession, file: impl core::convert::AsRef) -> vortex_error::VortexResult<()> +pub mod vortex_tui::convert +pub enum vortex_tui::convert::Strategy +pub vortex_tui::convert::Strategy::Btrblocks +pub vortex_tui::convert::Strategy::Compact +impl clap_builder::derive::ValueEnum for vortex_tui::convert::Strategy +pub fn vortex_tui::convert::Strategy::to_possible_value<'a>(&self) -> core::option::Option +pub fn vortex_tui::convert::Strategy::value_variants<'a>() -> &'a [Self] +impl core::clone::Clone for vortex_tui::convert::Strategy +pub fn vortex_tui::convert::Strategy::clone(&self) -> vortex_tui::convert::Strategy +impl core::default::Default for vortex_tui::convert::Strategy +pub fn vortex_tui::convert::Strategy::default() -> vortex_tui::convert::Strategy +impl core::fmt::Debug for vortex_tui::convert::Strategy +pub fn vortex_tui::convert::Strategy::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl core::marker::Copy for vortex_tui::convert::Strategy +pub struct vortex_tui::convert::ConvertArgs +pub vortex_tui::convert::ConvertArgs::file: std::path::PathBuf +pub vortex_tui::convert::ConvertArgs::quiet: bool +pub vortex_tui::convert::ConvertArgs::strategy: vortex_tui::convert::Strategy +impl clap_builder::derive::Args for vortex_tui::convert::ConvertArgs +pub fn vortex_tui::convert::ConvertArgs::augment_args<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::convert::ConvertArgs::augment_args_for_update<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::convert::ConvertArgs::group_id() -> core::option::Option +impl clap_builder::derive::CommandFactory for vortex_tui::convert::ConvertArgs +pub fn vortex_tui::convert::ConvertArgs::command<'b>() -> clap_builder::builder::command::Command +pub fn vortex_tui::convert::ConvertArgs::command_for_update<'b>() -> clap_builder::builder::command::Command +impl clap_builder::derive::FromArgMatches for vortex_tui::convert::ConvertArgs +pub fn vortex_tui::convert::ConvertArgs::from_arg_matches(__clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::convert::ConvertArgs::from_arg_matches_mut(__clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::convert::ConvertArgs::update_from_arg_matches(&mut self, __clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +pub fn vortex_tui::convert::ConvertArgs::update_from_arg_matches_mut(&mut self, __clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +impl clap_builder::derive::Parser for vortex_tui::convert::ConvertArgs +impl core::clone::Clone for vortex_tui::convert::ConvertArgs +pub fn vortex_tui::convert::ConvertArgs::clone(&self) -> vortex_tui::convert::ConvertArgs +impl core::fmt::Debug for vortex_tui::convert::ConvertArgs +pub fn vortex_tui::convert::ConvertArgs::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub const vortex_tui::convert::BATCH_SIZE: usize +pub async fn vortex_tui::convert::exec_convert(session: &vortex_session::VortexSession, flags: vortex_tui::convert::ConvertArgs) -> anyhow::Result<()> +pub mod vortex_tui::datafusion_helper +pub fn vortex_tui::datafusion_helper::arrow_value_to_json(array: &dyn arrow_array::array::Array, idx: usize) -> serde_json::value::Value +pub async fn vortex_tui::datafusion_helper::create_vortex_context(session: &vortex_session::VortexSession, file_path: &str) -> core::result::Result +pub async fn vortex_tui::datafusion_helper::execute_vortex_query(session: &vortex_session::VortexSession, file_path: &str, sql: &str) -> core::result::Result, alloc::string::String> +pub fn vortex_tui::datafusion_helper::json_value_to_display(value: serde_json::value::Value) -> alloc::string::String +pub mod vortex_tui::inspect +pub enum vortex_tui::inspect::InspectMode +pub vortex_tui::inspect::InspectMode::Eof +pub vortex_tui::inspect::InspectMode::Footer +pub vortex_tui::inspect::InspectMode::Postscript +impl clap_builder::derive::FromArgMatches for vortex_tui::inspect::InspectMode +pub fn vortex_tui::inspect::InspectMode::from_arg_matches(__clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::inspect::InspectMode::from_arg_matches_mut(__clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::inspect::InspectMode::update_from_arg_matches(&mut self, __clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +pub fn vortex_tui::inspect::InspectMode::update_from_arg_matches_mut<'b>(&mut self, __clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +impl clap_builder::derive::Subcommand for vortex_tui::inspect::InspectMode +pub fn vortex_tui::inspect::InspectMode::augment_subcommands<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::inspect::InspectMode::augment_subcommands_for_update<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::inspect::InspectMode::has_subcommand(__clap_name: &str) -> bool +impl core::fmt::Debug for vortex_tui::inspect::InspectMode +pub fn vortex_tui::inspect::InspectMode::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub struct vortex_tui::inspect::EofInfoJson +pub vortex_tui::inspect::EofInfoJson::current_version: u16 +pub vortex_tui::inspect::EofInfoJson::magic_bytes: alloc::string::String +pub vortex_tui::inspect::EofInfoJson::postscript_size: u16 +pub vortex_tui::inspect::EofInfoJson::valid_magic: bool +pub vortex_tui::inspect::EofInfoJson::version: u16 +impl serde_core::ser::Serialize for vortex_tui::inspect::EofInfoJson +pub fn vortex_tui::inspect::EofInfoJson::serialize<__S>(&self, __serializer: __S) -> core::result::Result<<__S as serde_core::ser::Serializer>::Ok, <__S as serde_core::ser::Serializer>::Error> where __S: serde_core::ser::Serializer +pub struct vortex_tui::inspect::FooterInfoJson +pub vortex_tui::inspect::FooterInfoJson::segments: alloc::vec::Vec +pub vortex_tui::inspect::FooterInfoJson::total_data_size: u64 +pub vortex_tui::inspect::FooterInfoJson::total_segments: usize +impl serde_core::ser::Serialize for vortex_tui::inspect::FooterInfoJson +pub fn vortex_tui::inspect::FooterInfoJson::serialize<__S>(&self, __serializer: __S) -> core::result::Result<<__S as serde_core::ser::Serializer>::Ok, <__S as serde_core::ser::Serializer>::Error> where __S: serde_core::ser::Serializer +pub struct vortex_tui::inspect::FooterSegmentJson +pub vortex_tui::inspect::FooterSegmentJson::alignment: usize +pub vortex_tui::inspect::FooterSegmentJson::end_offset: u64 +pub vortex_tui::inspect::FooterSegmentJson::index: usize +pub vortex_tui::inspect::FooterSegmentJson::length: u32 +pub vortex_tui::inspect::FooterSegmentJson::offset: u64 +pub vortex_tui::inspect::FooterSegmentJson::path: core::option::Option +impl serde_core::ser::Serialize for vortex_tui::inspect::FooterSegmentJson +pub fn vortex_tui::inspect::FooterSegmentJson::serialize<__S>(&self, __serializer: __S) -> core::result::Result<<__S as serde_core::ser::Serializer>::Ok, <__S as serde_core::ser::Serializer>::Error> where __S: serde_core::ser::Serializer +pub struct vortex_tui::inspect::InspectArgs +pub vortex_tui::inspect::InspectArgs::file: std::path::PathBuf +pub vortex_tui::inspect::InspectArgs::json: bool +pub vortex_tui::inspect::InspectArgs::mode: core::option::Option +impl clap_builder::derive::Args for vortex_tui::inspect::InspectArgs +pub fn vortex_tui::inspect::InspectArgs::augment_args<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::inspect::InspectArgs::augment_args_for_update<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::inspect::InspectArgs::group_id() -> core::option::Option +impl clap_builder::derive::CommandFactory for vortex_tui::inspect::InspectArgs +pub fn vortex_tui::inspect::InspectArgs::command<'b>() -> clap_builder::builder::command::Command +pub fn vortex_tui::inspect::InspectArgs::command_for_update<'b>() -> clap_builder::builder::command::Command +impl clap_builder::derive::FromArgMatches for vortex_tui::inspect::InspectArgs +pub fn vortex_tui::inspect::InspectArgs::from_arg_matches(__clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::inspect::InspectArgs::from_arg_matches_mut(__clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::inspect::InspectArgs::update_from_arg_matches(&mut self, __clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +pub fn vortex_tui::inspect::InspectArgs::update_from_arg_matches_mut(&mut self, __clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +impl clap_builder::derive::Parser for vortex_tui::inspect::InspectArgs +impl core::fmt::Debug for vortex_tui::inspect::InspectArgs +pub fn vortex_tui::inspect::InspectArgs::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub struct vortex_tui::inspect::InspectOutput +pub vortex_tui::inspect::InspectOutput::eof: vortex_tui::inspect::EofInfoJson +pub vortex_tui::inspect::InspectOutput::file_path: alloc::string::String +pub vortex_tui::inspect::InspectOutput::file_size: u64 +pub vortex_tui::inspect::InspectOutput::footer: core::option::Option +pub vortex_tui::inspect::InspectOutput::postscript: core::option::Option +impl serde_core::ser::Serialize for vortex_tui::inspect::InspectOutput +pub fn vortex_tui::inspect::InspectOutput::serialize<__S>(&self, __serializer: __S) -> core::result::Result<<__S as serde_core::ser::Serializer>::Ok, <__S as serde_core::ser::Serializer>::Error> where __S: serde_core::ser::Serializer +pub struct vortex_tui::inspect::PostscriptInfoJson +pub vortex_tui::inspect::PostscriptInfoJson::dtype: core::option::Option +pub vortex_tui::inspect::PostscriptInfoJson::footer: vortex_tui::inspect::SegmentInfoJson +pub vortex_tui::inspect::PostscriptInfoJson::layout: vortex_tui::inspect::SegmentInfoJson +pub vortex_tui::inspect::PostscriptInfoJson::statistics: core::option::Option +impl serde_core::ser::Serialize for vortex_tui::inspect::PostscriptInfoJson +pub fn vortex_tui::inspect::PostscriptInfoJson::serialize<__S>(&self, __serializer: __S) -> core::result::Result<<__S as serde_core::ser::Serializer>::Ok, <__S as serde_core::ser::Serializer>::Error> where __S: serde_core::ser::Serializer +pub struct vortex_tui::inspect::SegmentInfoJson +pub vortex_tui::inspect::SegmentInfoJson::alignment: usize +pub vortex_tui::inspect::SegmentInfoJson::length: u32 +pub vortex_tui::inspect::SegmentInfoJson::offset: u64 +impl serde_core::ser::Serialize for vortex_tui::inspect::SegmentInfoJson +pub fn vortex_tui::inspect::SegmentInfoJson::serialize<__S>(&self, __serializer: __S) -> core::result::Result<<__S as serde_core::ser::Serializer>::Ok, <__S as serde_core::ser::Serializer>::Error> where __S: serde_core::ser::Serializer +pub async fn vortex_tui::inspect::exec_inspect(session: &vortex_session::VortexSession, args: vortex_tui::inspect::InspectArgs) -> anyhow::Result<()> +pub mod vortex_tui::query +pub struct vortex_tui::query::QueryArgs +pub vortex_tui::query::QueryArgs::file: std::path::PathBuf +pub vortex_tui::query::QueryArgs::sql: alloc::string::String +impl clap_builder::derive::Args for vortex_tui::query::QueryArgs +pub fn vortex_tui::query::QueryArgs::augment_args<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::query::QueryArgs::augment_args_for_update<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::query::QueryArgs::group_id() -> core::option::Option +impl clap_builder::derive::CommandFactory for vortex_tui::query::QueryArgs +pub fn vortex_tui::query::QueryArgs::command<'b>() -> clap_builder::builder::command::Command +pub fn vortex_tui::query::QueryArgs::command_for_update<'b>() -> clap_builder::builder::command::Command +impl clap_builder::derive::FromArgMatches for vortex_tui::query::QueryArgs +pub fn vortex_tui::query::QueryArgs::from_arg_matches(__clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::query::QueryArgs::from_arg_matches_mut(__clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::query::QueryArgs::update_from_arg_matches(&mut self, __clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +pub fn vortex_tui::query::QueryArgs::update_from_arg_matches_mut(&mut self, __clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +impl clap_builder::derive::Parser for vortex_tui::query::QueryArgs +impl core::fmt::Debug for vortex_tui::query::QueryArgs +pub fn vortex_tui::query::QueryArgs::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub async fn vortex_tui::query::exec_query(session: &vortex_session::VortexSession, args: vortex_tui::query::QueryArgs) -> vortex_error::VortexResult<()> +pub mod vortex_tui::segment_tree +pub struct vortex_tui::segment_tree::SegmentDisplay +pub vortex_tui::segment_tree::SegmentDisplay::name: vortex_dtype::field_names::FieldName +pub vortex_tui::segment_tree::SegmentDisplay::row_count: u64 +pub vortex_tui::segment_tree::SegmentDisplay::row_offset: u64 +pub vortex_tui::segment_tree::SegmentDisplay::spec: vortex_file::footer::segment::SegmentSpec +pub struct vortex_tui::segment_tree::SegmentTree +pub vortex_tui::segment_tree::SegmentTree::segment_ordering: alloc::vec::Vec +pub vortex_tui::segment_tree::SegmentTree::segments: vortex_utils::aliases::hash_map::HashMap> +pub fn vortex_tui::segment_tree::collect_segment_tree(root_layout: &dyn vortex_layout::layout::Layout, segments: &alloc::sync::Arc<[vortex_file::footer::segment::SegmentSpec]>) -> vortex_tui::segment_tree::SegmentTree +pub mod vortex_tui::segments +pub struct vortex_tui::segments::SegmentsArgs +pub vortex_tui::segments::SegmentsArgs::file: std::path::PathBuf +impl clap_builder::derive::Args for vortex_tui::segments::SegmentsArgs +pub fn vortex_tui::segments::SegmentsArgs::augment_args<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::segments::SegmentsArgs::augment_args_for_update<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::segments::SegmentsArgs::group_id() -> core::option::Option +impl clap_builder::derive::CommandFactory for vortex_tui::segments::SegmentsArgs +pub fn vortex_tui::segments::SegmentsArgs::command<'b>() -> clap_builder::builder::command::Command +pub fn vortex_tui::segments::SegmentsArgs::command_for_update<'b>() -> clap_builder::builder::command::Command +impl clap_builder::derive::FromArgMatches for vortex_tui::segments::SegmentsArgs +pub fn vortex_tui::segments::SegmentsArgs::from_arg_matches(__clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::segments::SegmentsArgs::from_arg_matches_mut(__clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::segments::SegmentsArgs::update_from_arg_matches(&mut self, __clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +pub fn vortex_tui::segments::SegmentsArgs::update_from_arg_matches_mut(&mut self, __clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +impl clap_builder::derive::Parser for vortex_tui::segments::SegmentsArgs +impl core::fmt::Debug for vortex_tui::segments::SegmentsArgs +pub fn vortex_tui::segments::SegmentsArgs::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub async fn vortex_tui::segments::exec_segments(session: &vortex_session::VortexSession, args: vortex_tui::segments::SegmentsArgs) -> vortex_error::VortexResult<()> +pub mod vortex_tui::tree +pub enum vortex_tui::tree::TreeMode +pub vortex_tui::tree::TreeMode::Array +pub vortex_tui::tree::TreeMode::Array::file: std::path::PathBuf +pub vortex_tui::tree::TreeMode::Array::json: bool +pub vortex_tui::tree::TreeMode::Layout +pub vortex_tui::tree::TreeMode::Layout::file: std::path::PathBuf +pub vortex_tui::tree::TreeMode::Layout::json: bool +pub vortex_tui::tree::TreeMode::Layout::verbose: bool +impl clap_builder::derive::FromArgMatches for vortex_tui::tree::TreeMode +pub fn vortex_tui::tree::TreeMode::from_arg_matches(__clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::tree::TreeMode::from_arg_matches_mut(__clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::tree::TreeMode::update_from_arg_matches(&mut self, __clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +pub fn vortex_tui::tree::TreeMode::update_from_arg_matches_mut<'b>(&mut self, __clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +impl clap_builder::derive::Subcommand for vortex_tui::tree::TreeMode +pub fn vortex_tui::tree::TreeMode::augment_subcommands<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::tree::TreeMode::augment_subcommands_for_update<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::tree::TreeMode::has_subcommand(__clap_name: &str) -> bool +impl core::fmt::Debug for vortex_tui::tree::TreeMode +pub fn vortex_tui::tree::TreeMode::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub struct vortex_tui::tree::LayoutTreeNode +pub vortex_tui::tree::LayoutTreeNode::children: alloc::vec::Vec +pub vortex_tui::tree::LayoutTreeNode::dtype: alloc::string::String +pub vortex_tui::tree::LayoutTreeNode::encoding: alloc::string::String +pub vortex_tui::tree::LayoutTreeNode::metadata_bytes: usize +pub vortex_tui::tree::LayoutTreeNode::row_count: u64 +pub vortex_tui::tree::LayoutTreeNode::segment_ids: alloc::vec::Vec +impl serde_core::ser::Serialize for vortex_tui::tree::LayoutTreeNode +pub fn vortex_tui::tree::LayoutTreeNode::serialize<__S>(&self, __serializer: __S) -> core::result::Result<<__S as serde_core::ser::Serializer>::Ok, <__S as serde_core::ser::Serializer>::Error> where __S: serde_core::ser::Serializer +pub struct vortex_tui::tree::LayoutTreeNodeWithName +pub vortex_tui::tree::LayoutTreeNodeWithName::name: alloc::string::String +pub vortex_tui::tree::LayoutTreeNodeWithName::node: vortex_tui::tree::LayoutTreeNode +impl serde_core::ser::Serialize for vortex_tui::tree::LayoutTreeNodeWithName +pub fn vortex_tui::tree::LayoutTreeNodeWithName::serialize<__S>(&self, __serializer: __S) -> core::result::Result<<__S as serde_core::ser::Serializer>::Ok, <__S as serde_core::ser::Serializer>::Error> where __S: serde_core::ser::Serializer +pub struct vortex_tui::tree::TreeArgs +pub vortex_tui::tree::TreeArgs::mode: vortex_tui::tree::TreeMode +impl clap_builder::derive::Args for vortex_tui::tree::TreeArgs +pub fn vortex_tui::tree::TreeArgs::augment_args<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::tree::TreeArgs::augment_args_for_update<'b>(__clap_app: clap_builder::builder::command::Command) -> clap_builder::builder::command::Command +pub fn vortex_tui::tree::TreeArgs::group_id() -> core::option::Option +impl clap_builder::derive::CommandFactory for vortex_tui::tree::TreeArgs +pub fn vortex_tui::tree::TreeArgs::command<'b>() -> clap_builder::builder::command::Command +pub fn vortex_tui::tree::TreeArgs::command_for_update<'b>() -> clap_builder::builder::command::Command +impl clap_builder::derive::FromArgMatches for vortex_tui::tree::TreeArgs +pub fn vortex_tui::tree::TreeArgs::from_arg_matches(__clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::tree::TreeArgs::from_arg_matches_mut(__clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result +pub fn vortex_tui::tree::TreeArgs::update_from_arg_matches(&mut self, __clap_arg_matches: &clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +pub fn vortex_tui::tree::TreeArgs::update_from_arg_matches_mut(&mut self, __clap_arg_matches: &mut clap_builder::parser::matches::arg_matches::ArgMatches) -> core::result::Result<(), clap_builder::Error> +impl clap_builder::derive::Parser for vortex_tui::tree::TreeArgs +impl core::fmt::Debug for vortex_tui::tree::TreeArgs +pub fn vortex_tui::tree::TreeArgs::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub async fn vortex_tui::tree::exec_tree(session: &vortex_session::VortexSession, args: vortex_tui::tree::TreeArgs) -> vortex_error::VortexResult<()> +pub async fn vortex_tui::launch(session: &vortex_session::VortexSession) -> anyhow::Result<()> +pub async fn vortex_tui::launch_from(session: &vortex_session::VortexSession, args: impl core::iter::traits::collect::IntoIterator + core::clone::Clone>) -> anyhow::Result<()> From 9e983daabc229dc319420d12c3f5ecdfe3de3685 Mon Sep 17 00:00:00 2001 From: Andrew Duffy Date: Fri, 13 Feb 2026 11:22:05 -0500 Subject: [PATCH 2/3] parallel + progress bar Signed-off-by: Andrew Duffy --- Cargo.lock | 34 +++++++++++++++++++++++++------ lockfiles/Cargo.toml | 1 + lockfiles/src/main.rs | 47 +++++++++++++++++++++++++++++++------------ 3 files changed, 63 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a73b16e53c9..a263866015e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1823,7 +1823,7 @@ dependencies = [ "bytes", "clap", "futures", - "indicatif", + "indicatif 0.18.3", "itertools 0.14.0", "lance-bench", "parquet", @@ -1880,6 +1880,7 @@ dependencies = [ "encode_unicode", "libc", "once_cell", + "unicode-width 0.2.2", "windows-sys 0.59.0", ] @@ -3636,7 +3637,7 @@ dependencies = [ "datafusion-substrait", "futures", "half", - "indicatif", + "indicatif 0.18.3", "itertools 0.14.0", "log", "object_store", @@ -5138,6 +5139,20 @@ dependencies = [ "hashbrown 0.16.1", ] +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console 0.15.11", + "number_prefix", + "portable-atomic", + "rayon", + "unicode-width 0.2.2", + "web-time", +] + [[package]] name = "indicatif" version = "0.18.3" @@ -6197,6 +6212,7 @@ name = "lockfiles" version = "0.1.0" dependencies = [ "cargo_metadata", + "indicatif 0.17.11", "rayon", ] @@ -6811,6 +6827,12 @@ dependencies = [ "libc", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "objc2-core-foundation" version = "0.3.2" @@ -8156,7 +8178,7 @@ dependencies = [ "anyhow", "async-trait", "clap", - "indicatif", + "indicatif 0.18.3", "lance-bench", "rand 0.9.2", "rand_distr 0.5.1", @@ -10803,7 +10825,7 @@ dependencies = [ "get_dir", "glob", "humansize", - "indicatif", + "indicatif 0.18.3", "itertools 0.14.0", "mimalloc", "noodles-bgzf", @@ -11616,7 +11638,7 @@ dependencies = [ "datafusion 52.1.0", "datafusion-sqllogictest", "futures", - "indicatif", + "indicatif 0.18.3", "sqllogictest", "tempfile", "thiserror 2.0.18", @@ -11665,7 +11687,7 @@ dependencies = [ "futures", "fuzzy-matcher", "humansize", - "indicatif", + "indicatif 0.18.3", "itertools 0.14.0", "parquet", "ratatui", diff --git a/lockfiles/Cargo.toml b/lockfiles/Cargo.toml index 80eba15f7b4..b14512c6f16 100644 --- a/lockfiles/Cargo.toml +++ b/lockfiles/Cargo.toml @@ -16,6 +16,7 @@ version.workspace = true [dependencies] cargo_metadata = "0.23" +indicatif = { version = "0.17", features = ["rayon"] } rayon = "1" [lints] diff --git a/lockfiles/src/main.rs b/lockfiles/src/main.rs index b307d3b4b06..c4bc7642030 100644 --- a/lockfiles/src/main.rs +++ b/lockfiles/src/main.rs @@ -1,32 +1,53 @@ -use cargo_metadata::camino::Utf8PathBuf; -use cargo_metadata::{MetadataCommand, Package, PackageName}; +#![allow(clippy::expect_used)] + use std::fs::File; -use std::io::{ErrorKind, Write}; +use std::io::Write; use std::process::Command; +use cargo_metadata::MetadataCommand; +use cargo_metadata::Package; +use cargo_metadata::PackageName; +use cargo_metadata::camino::Utf8PathBuf; +use indicatif::ParallelProgressIterator; +use indicatif::ProgressBar; +use indicatif::ProgressStyle; +use rayon::prelude::*; + pub fn main() { let metadata = MetadataCommand::new() .no_deps() .exec() .expect("cargo metadata"); - let published = metadata + let published: Vec<_> = metadata .workspace_packages() .into_iter() .filter(|v| is_published(v)) // Only keep crates that publish Rust libs - .filter(|p| p.targets.iter().any(|target| target.is_lib())); + .filter(|p| p.targets.iter().any(|target| target.is_lib())) + .collect(); // Skip binary packages - for pkg in published { - let job = LockfileJob { - name: pkg.name.clone(), - manifest_path: pkg.manifest_path.clone(), - }; + let progress = ProgressBar::new(published.len() as u64); + progress.set_style( + ProgressStyle::default_bar() + .template("{spinner:.green} [{bar:40.cyan/blue}] {pos}/{len} ({eta}) {msg}") + .expect("valid template") + .progress_chars("=>-"), + ); - job.execute().expect("lockfile"); - } + published + .par_iter() + .progress_with(progress) + .for_each(|pkg| { + let job = LockfileJob { + name: pkg.name.clone(), + manifest_path: pkg.manifest_path.clone(), + }; + + job.execute().expect("lockfile"); + }); } struct LockfileJob { @@ -58,7 +79,7 @@ impl LockfileJob { String::from_utf8_lossy(&output.stdout) ); - return Err(std::io::Error::new(ErrorKind::Other, "failed to execute")); + return Err(std::io::Error::other("failed to execute")); } // Write lockfile contents From 2a79b0b748a605df9a662b56d6227a870bb2e130 Mon Sep 17 00:00:00 2001 From: Andrew Duffy Date: Fri, 13 Feb 2026 11:22:41 -0500 Subject: [PATCH 3/3] replace in CI Signed-off-by: Andrew Duffy --- .github/workflows/ci.yml | 2 +- scripts/public-api.sh | 57 ---------------------------------------- vortex-tui/Cargo.toml | 1 - 3 files changed, 1 insertion(+), 59 deletions(-) delete mode 100755 scripts/public-api.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dac81ee1a00..0473e57de37 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -345,7 +345,7 @@ jobs: - name: Install cargo-public-api run: cargo install cargo-public-api --locked - name: Regenerate public API lock files - run: bash scripts/public-api.sh + run: cargo run -p lockfiles - name: Verify lock files are up to date run: | git diff --name-only diff --git a/scripts/public-api.sh b/scripts/public-api.sh deleted file mode 100755 index d5fdc68e147..00000000000 --- a/scripts/public-api.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -# SPDX-License-Identifier: Apache-2.0 -# SPDX-FileCopyrightText: Copyright the Vortex contributors - -set -Eeu -o pipefail - -# Regenerate public-api.lock files for all published crates. -# Uses cargo-public-api to dump the public API surface of each crate. -# -# Usage: -# bash scripts/public-api.sh # regenerate all lock files -# cargo +nightly public-api -p -ss > /public-api.lock # single crate - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" - -# Extract published crate lines from Cargo.toml between BEGIN/END markers. -# Each line looks like: -# vortex-alp = { version = "0.1.0", path = "./encodings/alp", ... } -# Build parallel arrays of crate names and paths. -crate_names=() -crate_paths=() -pkg_flags=() -while IFS= read -r line; do - name=$(echo "$line" | sed 's/ *=.*//') - path=$(echo "$line" | sed 's/.*path *= *"\([^"]*\)".*/\1/') - path="${path#./}" - crate_names+=("$name") - crate_paths+=("$path") - pkg_flags+=("-p" "$name") -done < <(sed -n '/^# BEGIN crates published/,/^# END crates published/{ /^#/d; /^$/d; p; }' "$REPO_ROOT/Cargo.toml") - -echo "Found ${#crate_names[@]} published crates." - -# Step 1: Pre-build all crates in one cargo invocation so dependencies are compiled -# in parallel using cargo's built-in parallelism. -echo "Pre-building all crates..." -cargo +nightly check "${pkg_flags[@]}" - -# Step 2: Generate public-api.lock files in parallel. -# Each invocation only needs to run rustdoc on a single (already-compiled) crate. -if command -v parallel &>/dev/null; then - echo "Generating public API lock files in parallel..." - export REPO_ROOT - parallel --bar \ - 'cargo +nightly public-api -p {1} -ss > "$REPO_ROOT/{2}/public-api.lock"' \ - ::: "${crate_names[@]}" :::+ "${crate_paths[@]}" -else - echo "GNU parallel not found, falling back to sequential generation..." - echo " hint: brew install parallel (macOS) or apt install parallel (Linux)" - for i in "${!crate_names[@]}"; do - echo " ${crate_names[$i]} -> ${crate_paths[$i]}/public-api.lock" - cargo +nightly public-api -p "${crate_names[$i]}" -ss > "$REPO_ROOT/${crate_paths[$i]}/public-api.lock" - done -fi - -echo "Done. All public-api.lock files regenerated." diff --git a/vortex-tui/Cargo.toml b/vortex-tui/Cargo.toml index 019176f3c9d..a6ef5f61bbc 100644 --- a/vortex-tui/Cargo.toml +++ b/vortex-tui/Cargo.toml @@ -3,7 +3,6 @@ name = "vortex-tui" authors = { workspace = true } categories = { workspace = true } description = "a small but mighty tool for working with Vortex files" -metadata = { skip_public_api = true } edition = { workspace = true } homepage = { workspace = true } include = { workspace = true }