Skip to content

feat: Clean cache command#1394

Open
d3xter666 wants to merge 20 commits into
mainfrom
feat-clean-cache
Open

feat: Clean cache command#1394
d3xter666 wants to merge 20 commits into
mainfrom
feat-clean-cache

Conversation

@d3xter666
Copy link
Copy Markdown
Member

The command completely cleans the cache by removing the cache files as well as cleaning up the SQLite records.
It does not wipe out the SQLite DB file(s)

JIRA: CPOUI5FOUNDATION-891

@d3xter666 d3xter666 requested a review from a team May 22, 2026 12:22
@d3xter666 d3xter666 force-pushed the feat-clean-cache branch 2 times, most recently from 83f2262 to d52c4ad Compare May 26, 2026 06:29
@RandomByte RandomByte force-pushed the feat/incremental-build-4 branch from 7c59782 to 444977d Compare May 27, 2026 15:40
Comment thread packages/project/lib/cache/CacheCleanup.js Outdated
Comment thread packages/project/lib/cache/CacheCleanup.js Outdated
Comment thread packages/project/lib/cache/CacheCleanup.js Outdated
Comment thread packages/cli/lib/cli/commands/cache.js
@RandomByte RandomByte force-pushed the feat/incremental-build-4 branch from c2dc7b8 to 1041695 Compare May 29, 2026 08:11
@d3xter666 d3xter666 force-pushed the feat-clean-cache branch 2 times, most recently from dc31834 to f5def12 Compare May 29, 2026 08:29
@RandomByte RandomByte force-pushed the feat/incremental-build-4 branch from 1041695 to 66296d5 Compare May 29, 2026 08:49
@d3xter666 d3xter666 force-pushed the feat-clean-cache branch 2 times, most recently from 77f7320 to aa280da Compare May 29, 2026 10:27
Comment thread packages/project/lib/build/cache/CacheCleanup.js Outdated
@d3xter666 d3xter666 requested a review from matz3 May 29, 2026 13:21
@d3xter666 d3xter666 force-pushed the feat-clean-cache branch 2 times, most recently from 7b17cc0 to 569ff71 Compare May 29, 2026 15:44
@d3xter666 d3xter666 requested a review from a team June 1, 2026 07:46
@d3xter666 d3xter666 changed the base branch from feat/incremental-build-4 to main June 1, 2026 10:10
Comment thread packages/cli/lib/cli/commands/cache.js Outdated
Comment thread packages/cli/lib/cli/commands/cache.js Outdated
Comment thread packages/project/lib/build/cache/CacheManager.js Outdated
@@ -0,0 +1,80 @@
import path from "node:path";
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems odd that this file is placed next to the other files responsible for managing the framework packages but doesn't use any of them. I would expect better integration here, e.g. no hardcoded assumptions like the framework/ directory name as well as checks for existing lockfiles to prevent deleting files while a download is running

Copy link
Copy Markdown
Member Author

@d3xter666 d3xter666 Jun 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand your point, but what botters me is that this might need a bit more of a refactoring.

Here's my rationale.

The AbstractInstaller is an abstract class that implements the lock logic. As the name suggests- it's an installer that is extended by the npm and maven installers.
Cache clanup, except from having in common the locks and paths, is a completelly different topic- it needs to clean the framework files. I have also seen that the framework folder is not configured in the AbstractInstaller, but is hardcoded in every installer.

The only clean option I forsee is to consolidate and reuse the locking logic and abstract the "framework" dir within the AbstractInstaller. Then somehow reuse this information in the cache cleaner.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have refactored the code, so that framework folder is reused accross classes and the locking is respecte.
Hopefully, this change addresses you comment: 8a53eb8

Let me know if you have other concerns on that matter

Comment thread packages/project/lib/ui5Framework/cache.js Outdated
Comment thread packages/project/lib/ui5Framework/cache.js Outdated
Comment thread packages/project/lib/ui5Framework/cache.js Outdated
Comment thread packages/project/lib/ui5Framework/cache.js Outdated
Comment thread packages/project/lib/build/cache/CacheManager.js
@matz3
Copy link
Copy Markdown
Member

matz3 commented Jun 2, 2026

I think the usability of the command could be improved.

  • No information about the actual filesystem paths of the cache and relevant dirs (not in CLI description, not in --help, not in command output
  • No information about the relation to ui5DataDir config / UI5_DATA_DIR env var
  • No output when command is executed, and it might take a while to calculate the size, so users might assume the command is stuck if it does not print anything for a minute or longer.
  • Output lists two different sizes 197.0 MB vs 196.8 MB:
The following items from cache will be removed:
  • buildCache/v0_7 (197.0 MB)

Total: 197.0 MB


✓ Removed buildCache/v0_7 (196.8 MB)

Success: Cleaned 1 entry, freed 196.8 MB
  • (minor) Inconsistency in logged paths (framework/ vs framework):
The following items from cache will be removed:
  • framework/ (711.4 MB)

Total: 711.4 MB

Do you want to continue? (y/N) y

✓ Removed framework (711.4 MB)

@d3xter666
Copy link
Copy Markdown
Member Author

I have tried to improve the situation with the infmration for the execution of the cache clean command and have addressed all your concenrns.

Let me know if there's something more you'd expect.

Regarding the size report, there are some considerations we need to be aware of:

  • Getting framework cache dir size might require time. Even if you do that on your machine, it will take time. Even the du command on Mac uses cache in order to be quick, but the first run is not that fast. The optimal solution: Give information about the number of files that will be deleted
  • The purge of the DB cache is just the opposite! Selecting COUNT(*) of all rows might take significant amount of time to get the results. On the other hand, the size of the DB can be quite fast.

I have tried to somehow get advantage of these findings and provide the optimal solution- show metrics for what is fast and provide generic messages. Any other solutions will require certain compromises.

@d3xter666 d3xter666 requested a review from RandomByte June 2, 2026 19:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants