-
Notifications
You must be signed in to change notification settings - Fork 234
new command pub cache gc
#4684
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
new command pub cache gc
#4684
Conversation
szakarias
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
| parts[parts.length - 1] == 'package_config.json') { | ||
| projectDir = p.joinAll(parts.sublist(0, parts.length - 2)); | ||
| } | ||
| log.message('* $projectDir'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe restrict the number of outputs here?
Co-authored-by: Sarah Zakarias <[email protected]>
Co-authored-by: Sarah Zakarias <[email protected]>
| hideNegatedUsage: true, | ||
| ); | ||
| argParser.addFlag( | ||
| 'ignore-timestamp', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| 'ignore-timestamp', | |
| 'ignore-age', |
or maybe:
| 'ignore-timestamp', | |
| 'no-ignore-recent', |
or
| 'ignore-timestamp', | |
| 'no-skip-recent', |
or
| 'ignore-timestamp', | |
| 'no-keep-recent', |
or (not that I like it)
| 'ignore-timestamp', | |
| 'collect-recent', |
| final activeRoots = cache.activeRoots(); | ||
| final validActiveRoots = <String>[]; | ||
| final paths = <String>{}; | ||
| for (final packageConfigPath in activeRoots) { | ||
| late final PackageConfig packageConfig; | ||
| try { | ||
| packageConfig = PackageConfig.fromJson( | ||
| json.decode(readTextFile(packageConfigPath)), | ||
| ); | ||
| } on IOException catch (e) { | ||
| // Failed to read file - probably got deleted. | ||
| log.fine('Failed to read packageConfig $packageConfigPath: $e'); | ||
| continue; | ||
| } on FormatException catch (e) { | ||
| log.warning( | ||
| 'Failed to decode packageConfig $packageConfigPath: $e.\n' | ||
| 'It could be corrupted', | ||
| ); | ||
| // Failed to decode - probably corrupted. | ||
| continue; | ||
| } | ||
| for (final package in packageConfig.packages) { | ||
| final rootUri = p.canonicalize( | ||
| package.resolvedRootDir(packageConfigPath), | ||
| ); | ||
| if (p.isWithin(cache.rootDir, rootUri)) { | ||
| paths.add(rootUri); | ||
| } | ||
| } | ||
| validActiveRoots.add(packageConfigPath); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe, give the reader a two line comment, explaining what you are collecting into validActiveRoots and path.
Or maybe split it into a function.
|
|
||
| final dontRemoveFilesOlderThan = const Duration(hours: 2); | ||
|
|
||
| CacheGcCommand() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe also a dry-run flag?
To recover space occupied by unused old dependencies in the pub cache, without affecting "active" projects.
Will enumerate all package configs from all active projects to find all the packages located within the pub cache.
Then enumerates all packages/git repos in the pub cache, and removes those that are not referred to by the active projects.
Active projects have been marked since dart 3.9.0.