Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
d331347
cargo: Add new dependencies
fischeti Dec 30, 2025
2fb4d9e
progress: Implementation and initial integration of progress bars
fischeti Dec 31, 2025
5148a8d
progress: Optimization and refactoring
fischeti Dec 31, 2025
ab64697
error: Suspend progress bars while printing errors and warnings
fischeti Jan 1, 2026
03910cc
sess: Format sources
fischeti Jan 1, 2026
cace83b
sess: Remove progress bars for disk operations
fischeti Jan 2, 2026
ed01ef0
progress: Stylistic changes
fischeti Jan 2, 2026
c113ba0
error: Align styling with progress bar
fischeti Jan 2, 2026
79d1c49
util: Move formatting duration to `util`
fischeti Jan 2, 2026
7e24018
checkout: Print out total elapsed time for checkout
fischeti Jan 2, 2026
20d0e2e
progress: Print out git error messages
fischeti Jan 2, 2026
f64a447
progress: Show all submodules as tree structure
fischeti Jan 2, 2026
b151eb6
progress: Add more unit tests
fischeti Jan 2, 2026
5defa36
progress: Clean up and document
fischeti Jan 2, 2026
6336a57
cmd(checkout): Use public function to determine number of packages
fischeti Jan 6, 2026
0c78514
util: Fix merge conflict mistake
fischeti Jan 6, 2026
bdc6bc6
progress: Small style changes
fischeti Jan 8, 2026
fe6ab35
Fix merge conflicts
fischeti Jan 14, 2026
4f3e6fd
diagnostic: Register multiprogressbar in `Diagnostic`
fischeti Jan 15, 2026
d316a41
progress: Replace `console` with `owo_colors`
fischeti Jan 15, 2026
05c72ff
progress: Fix clippy warnings and clean up
fischeti Jan 15, 2026
82bfde1
sess: Remove redundant url clones
fischeti Jan 19, 2026
2d9507d
Align `stageln` calls with progress bar style
fischeti Jan 19, 2026
2e0947d
progress: Handle non-TTY mode
fischeti Jan 19, 2026
b061e1a
deps: Remove `is-terminal` dependency
fischeti Jan 19, 2026
e39510b
Cargo.toml: Bump dependencies
fischeti Jan 21, 2026
713ddb9
progress: Right-align stage messages
fischeti Jan 21, 2026
3fcf232
sess: Add progress bar for more fetch operations
fischeti Jan 21, 2026
1796d80
resolver: Align to new style when manually resolving versions
fischeti Jan 21, 2026
8be1a07
util: Change style of version to cyan
fischeti Jan 21, 2026
e635556
error: Suspend progressbars when printing stage messages
fischeti Jan 21, 2026
1dc7fcc
treewide: Respect `NO_COLOR` environments for all stderr output
fischeti Jan 22, 2026
1160e98
vendor: Clean up `apply_patches` function
fischeti Jan 22, 2026
e7d37be
git: Combine fetch operations into one
fischeti Jan 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 96 additions & 12 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ typed-arena = "2"
dirs = "6"
pathdiff = "0.2"
itertools = "0.14"
is-terminal = "0.4"
tabwriter = "1.2.1"
indexmap = { version = "2", features = ["serde"] }
tempfile = "3.5"
Expand All @@ -39,8 +38,10 @@ walkdir = "2"
subst = "0.3"
tera = "1.19"
miette = "7.6.0"
thiserror = "2.0.17"
owo-colors = "4.2.3"
thiserror = "2.0.18"
owo-colors = { version = "4.2.3", features = ["supports-colors"] }
indicatif = "0.18.3"
regex = "1.12.2"

[target.'cfg(windows)'.dependencies]
dunce = "1.0.4"
Expand Down
8 changes: 7 additions & 1 deletion src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ use crate::diagnostic::{Diagnostics, Warnings};
use crate::error::*;
use crate::lockfile::*;
use crate::sess::{Session, SessionArenas, SessionIo};
use crate::{fmt_path, fmt_pkg};

#[derive(Parser, Debug)]
#[command(name = "bender")]
Expand Down Expand Up @@ -265,7 +266,6 @@ pub fn main() -> Result<()> {

// Create the symlink if there is nothing at the destination.
if !path.exists() {
stageln!("Linking", "{} ({:?})", pkg_name, path);
if let Some(parent) = path.parent() {
std::fs::create_dir_all(parent).map_err(|cause| {
Error::chain(format!("Failed to create directory {:?}.", parent), cause)
Expand All @@ -291,6 +291,12 @@ pub fn main() -> Result<()> {
if let Some(d) = previous_dir {
std::env::set_current_dir(d).unwrap();
}
stageln!(
"Linked",
"{} to {}",
fmt_pkg!(pkg_name),
fmt_path!(path.display())
);
}
}
}
Expand Down
10 changes: 10 additions & 0 deletions src/cmd/checkout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ use clap::Args;
use tokio::runtime::Runtime;

use crate::error::*;
use crate::fmt_dim;
use crate::sess::{Session, SessionIo};
use crate::util::fmt_duration;

/// Checkout all dependencies referenced in the Lock file
#[derive(Args, Debug)]
Expand All @@ -26,7 +28,15 @@ pub fn run(sess: &Session, args: &CheckoutArgs) -> Result<()> {
pub fn run_plain(sess: &Session, force: bool, update_list: &[String]) -> Result<()> {
let rt = Runtime::new()?;
let io = SessionIo::new(sess);
let start_time = std::time::Instant::now();
let _srcs = rt.block_on(io.sources(force, update_list))?;
let num_dependencies = io.sess.packages().iter().flatten().count();
infoln!(
"{} {} dependencies {}",
fmt_dim!("Checked out"),
num_dependencies,
fmt_dim!(fmt_duration(start_time.elapsed()))
);

Ok(())
}
8 changes: 7 additions & 1 deletion src/cmd/clone.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use crate::config::{Locked, LockedSource};
use crate::diagnostic::Warnings;
use crate::error::*;
use crate::sess::{DependencyRef, DependencySource, Session, SessionIo};
use crate::{fmt_path, fmt_pkg};

/// Clone dependency to a working directory
#[derive(Args, Debug)]
Expand Down Expand Up @@ -281,7 +282,6 @@ pub fn run(sess: &Session, path: &Path, args: &CloneArgs) -> Result<()> {

// Create the symlink if there is nothing at the destination.
if !link_path.exists() {
stageln!("Linking", "{} ({:?})", pkg_name, link_path);
if let Some(parent) = link_path.parent() {
std::fs::create_dir_all(parent).map_err(|cause| {
Error::chain(format!("Failed to create directory {:?}.", parent), cause)
Expand All @@ -307,6 +307,12 @@ pub fn run(sess: &Session, path: &Path, args: &CloneArgs) -> Result<()> {
if let Some(d) = previous_dir {
std::env::set_current_dir(d).unwrap();
}
stageln!(
"Linked",
"{} to {}",
fmt_pkg!(pkg_name),
fmt_path!(path.display())
);
}
eprintln!("{} symlink updated", dep);
}
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/fusesoc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ use std::ffi::OsStr;
use std::fmt::Write as _;
use std::fs;
use std::fs::read_to_string;
use std::io::IsTerminal;
use std::io::{self, Write};
use std::path::PathBuf;

use clap::{ArgAction, Args};
use indexmap::{IndexMap, IndexSet};
use is_terminal::IsTerminal;
use itertools::Itertools;
use tokio::runtime::Runtime;
use walkdir::{DirEntry, WalkDir};
Expand Down
9 changes: 7 additions & 2 deletions src/cmd/snapshot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use crate::config::{Dependency, Locked, LockedSource};
use crate::diagnostic::Warnings;
use crate::error::*;
use crate::sess::{DependencySource, Session, SessionIo};
use crate::{fmt_path, fmt_pkg};

/// Snapshot the cloned IPs from the working directory into the Bender.lock file
#[derive(Args, Debug)]
Expand Down Expand Up @@ -273,7 +274,6 @@ pub fn run(sess: &Session, args: &SnapshotArgs) -> Result<()> {

// Create the symlink if there is nothing at the destination.
if !link_path.exists() {
stageln!("Linking", "{} ({:?})", pkg_name, link_path);
if let Some(parent) = link_path.parent() {
std::fs::create_dir_all(parent).map_err(|cause| {
Error::chain(format!("Failed to create directory {:?}.", parent), cause)
Expand All @@ -299,8 +299,13 @@ pub fn run(sess: &Session, args: &SnapshotArgs) -> Result<()> {
if let Some(d) = previous_dir {
std::env::set_current_dir(d).unwrap();
}
stageln!(
"Linked",
"{} to {}",
fmt_pkg!(pkg_name),
fmt_path!(link_path.display())
);
}
eprintln!("{} symlink updated", pkg_name);
}
}

Expand Down
Loading
Loading