diff options
| author | ruki <[email protected]> | 2023-04-27 22:39:39 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-04-27 22:39:39 +0800 |
| commit | e28f55cccea484270d628e9c8c5d972c0cded42b (patch) | |
| tree | bf00707f6c9c346bda48b6858a0eb901c49c4024 /xmake/modules/private/action/require/impl/remove_packages.lua | |
| parent | 5519c957c6fb9e4eb9098dcafba17aa483993267 (diff) | |
improve xrepo clean #3679
Diffstat (limited to 'xmake/modules/private/action/require/impl/remove_packages.lua')
| -rw-r--r-- | xmake/modules/private/action/require/impl/remove_packages.lua | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/xmake/modules/private/action/require/impl/remove_packages.lua b/xmake/modules/private/action/require/impl/remove_packages.lua index f8f93c663..1a5e99f83 100644 --- a/xmake/modules/private/action/require/impl/remove_packages.lua +++ b/xmake/modules/private/action/require/impl/remove_packages.lua @@ -20,6 +20,7 @@ -- imports import("core.base.option") +import("core.base.hashset") import("core.package.package") import("core.cache.localcache") @@ -44,6 +45,21 @@ function _get_package_configs_str(manifest_file) end end +-- has reference from project? +-- @see https://github.com/xmake-io/xmake/issues/3679 +function _has_reference_from_project(projectdir, packagedir) + local project_references_file = path.join(projectdir, ".xmake", os.host(), os.arch(), "cache", "references") + if os.isfile(project_references_file) then + local references = io.load(project_references_file) + if references and references.packages then + local packages = hashset.from(references.packages) + if packages:has(packagedir) then + return true + end + end + end +end + -- remove package directories function _remove_packagedirs(packagedir, opt) @@ -58,7 +74,7 @@ function _remove_packagedirs(packagedir, opt) local references = os.isfile(references_file) and io.load(references_file) or nil if references then for projectdir, refdate in pairs(references) do - if os.isdir(projectdir) then + if os.isdir(projectdir) and _has_reference_from_project(projectdir, hashdir) then referenced = true break end |
