summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-11-11 00:24:47 +0800
committerruki <[email protected]>2025-11-11 00:24:47 +0800
commit2d4595d2d0ac368f4606e30ad31489f6be8454d6 (patch)
treec287d3bd12005ab1f5c69e17608554c8d30a5dd5
parent72f441c0a6f0ac864e7b4b0c06e8523434e4b599 (diff)
fix sparse checkout #7007
-rw-r--r--xmake/modules/private/action/require/impl/actions/download.lua11
1 files changed, 6 insertions, 5 deletions
diff --git a/xmake/modules/private/action/require/impl/actions/download.lua b/xmake/modules/private/action/require/impl/actions/download.lua
index df47673a3..280090fde 100644
--- a/xmake/modules/private/action/require/impl/actions/download.lua
+++ b/xmake/modules/private/action/require/impl/actions/download.lua
@@ -108,7 +108,7 @@ function _checkout(package, url, sourcedir, opt)
branch = nil
end
- -- only shallow clone this branch
+ -- only shallow clone this branch
local clone_submodules = opt.url_submodules ~= false
git.clone(url, {depth = 1, recursive = clone_submodules, shallow_submodules = clone_submodules, longpaths = longpaths, branch = branch, outputdir = packagedir})
@@ -130,8 +130,9 @@ function _checkout(package, url, sourcedir, opt)
-- only shallow clone this tag
-- @see https://github.com/xmake-io/xmake/issues/4151
- if tag and git.clone.can_clone_tag() then
- local clone_submodules = opt.url_submodules ~= false
+ local sparse_includes = opt.url_includes
+ local clone_submodules = opt.url_submodules ~= false
+ if tag and git.clone.can_clone_tag() and not sparse_includes then
git.clone(url, {depth = 1, recursive = clone_submodules, shallow_submodules = clone_submodules, longpaths = longpaths, branch = tag, outputdir = packagedir})
else
@@ -140,10 +141,10 @@ function _checkout(package, url, sourcedir, opt)
git.clone(url, {treeless = true, checkout = false, longpaths = longpaths, outputdir = packagedir})
-- attempt to checkout the given version
- git.checkout(revision, {repodir = packagedir, includes = opt.url_includes})
+ git.checkout(revision, {repodir = packagedir, includes = sparse_includes})
-- update all submodules
- if os.isfile(path.join(packagedir, ".gitmodules")) and opt.url_submodules ~= false then
+ if os.isfile(path.join(packagedir, ".gitmodules")) and clone_submodules then
git.submodule.update({init = true, recursive = true, longpaths = longpaths, repodir = packagedir})
end
end