diff --git a/cli/src/commands/git/clone.rs b/cli/src/commands/git/clone.rs index 4c3e1cc135..804b5a85d9 100644 --- a/cli/src/commands/git/clone.rs +++ b/cli/src/commands/git/clone.rs @@ -219,6 +219,7 @@ fn do_git_clone( git::fetch( fetch_tx.repo_mut(), &git_repo, + None, remote_name, &[StringPattern::everything()], cb, diff --git a/cli/src/commands/git/fetch.rs b/cli/src/commands/git/fetch.rs index a127332f35..4322d2d966 100644 --- a/cli/src/commands/git/fetch.rs +++ b/cli/src/commands/git/fetch.rs @@ -73,6 +73,7 @@ pub fn cmd_git_fetch( git::fetch( tx.repo_mut(), &git_repo, + None, remote, &args.branch, cb, diff --git a/lib/src/git.rs b/lib/src/git.rs index 5de8c695f9..d08c3b340d 100644 --- a/lib/src/git.rs +++ b/lib/src/git.rs @@ -21,6 +21,7 @@ use std::collections::HashSet; use std::default::Default; use std::fmt; use std::io::Read; +use std::num::NonZeroU32; use std::path::PathBuf; use std::str; @@ -1240,6 +1241,7 @@ pub struct GitFetchStats { pub fn fetch( mut_repo: &mut MutableRepo, git_repo: &git2::Repository, + depth: Option, remote_name: &str, branch_names: &[StringPattern], callbacks: RemoteCallbacks<'_>, @@ -1260,6 +1262,9 @@ pub fn fetch( fetch_options.proxy_options(proxy_options); let callbacks = callbacks.into_git(); fetch_options.remote_callbacks(callbacks); + if let Some(depth) = depth.and_then(|depth| depth.get().try_into().ok()) { + fetch_options.depth(depth); + } // At this point, we are only updating Git's remote tracking branches, not the // local branches. let refspecs: Vec<_> = branch_names diff --git a/lib/tests/test_git.rs b/lib/tests/test_git.rs index 74b8e15e34..55610b1a2d 100644 --- a/lib/tests/test_git.rs +++ b/lib/tests/test_git.rs @@ -2266,6 +2266,7 @@ fn test_fetch_empty_repo() { let stats = git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "origin", &[StringPattern::everything()], git::RemoteCallbacks::default(), @@ -2292,6 +2293,7 @@ fn test_fetch_initial_commit() { let stats = git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "origin", &[StringPattern::everything()], git::RemoteCallbacks::default(), @@ -2342,6 +2344,7 @@ fn test_fetch_success() { git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "origin", &[StringPattern::everything()], git::RemoteCallbacks::default(), @@ -2365,6 +2368,7 @@ fn test_fetch_success() { let stats = git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "origin", &[StringPattern::everything()], git::RemoteCallbacks::default(), @@ -2422,6 +2426,7 @@ fn test_fetch_prune_deleted_ref() { git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "origin", &[StringPattern::everything()], git::RemoteCallbacks::default(), @@ -2445,6 +2450,7 @@ fn test_fetch_prune_deleted_ref() { let stats = git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "origin", &[StringPattern::everything()], git::RemoteCallbacks::default(), @@ -2472,6 +2478,7 @@ fn test_fetch_no_default_branch() { git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "origin", &[StringPattern::everything()], git::RemoteCallbacks::default(), @@ -2495,6 +2502,7 @@ fn test_fetch_no_default_branch() { let stats = git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "origin", &[StringPattern::everything()], git::RemoteCallbacks::default(), @@ -2516,6 +2524,7 @@ fn test_fetch_empty_refspecs() { git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "origin", &[], git::RemoteCallbacks::default(), @@ -2542,6 +2551,7 @@ fn test_fetch_no_such_remote() { let result = git::fetch( tx.repo_mut(), &test_data.git_repo, + None, "invalid-remote", &[StringPattern::everything()], git::RemoteCallbacks::default(),