Skip to content

Commit 5b40add

Browse files
committed
Add watcher for pip installs
1 parent 4e46444 commit 5b40add

File tree

1 file changed

+35
-4
lines changed

1 file changed

+35
-4
lines changed

src/managers/builtin/main.ts

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,48 @@ export async function registerSystemPythonFeatures(
2727
const venvDebouncedRefresh = createSimpleDebounce(500, () => {
2828
venvManager.watcherRefresh();
2929
});
30-
const watcher = createFileSystemWatcher('{**/activate}', false, true, false);
30+
const activationWatcher = createFileSystemWatcher('{**/activate}', false, true, false);
3131
disposables.push(
32-
watcher,
33-
watcher.onDidCreate(() => {
32+
activationWatcher,
33+
activationWatcher.onDidCreate(() => {
3434
venvDebouncedRefresh.trigger();
3535
}),
36-
watcher.onDidDelete(() => {
36+
activationWatcher.onDidDelete(() => {
3737
venvDebouncedRefresh.trigger();
3838
}),
3939
onDidDeleteFiles(() => {
4040
venvDebouncedRefresh.trigger();
4141
}),
4242
);
43+
44+
const packageDebouncedRefresh = createSimpleDebounce(500, async () => {
45+
// Get all projects and refresh their packages
46+
const projects = await api.getPythonProjects();
47+
for (const project of projects) {
48+
const env = await api.getEnvironment(project.uri);
49+
if (env) {
50+
try {
51+
await api.refreshPackages(env);
52+
} catch (ex) {
53+
log.error(`Failed to refresh packages for environment ${env.id}: ${ex instanceof Error ? ex.message : String(ex)}`);
54+
}
55+
}
56+
}
57+
});
58+
const packageWatcher = createFileSystemWatcher(
59+
'**/site-packages/*.dist-info/METADATA',
60+
false, // don't ignore create events (pip install)
61+
true, // ignore change events (content changes in METADATA don't affect package list)
62+
false // don't ignore delete events (pip uninstall)
63+
);
64+
disposables.push(
65+
packageDebouncedRefresh,
66+
packageWatcher,
67+
packageWatcher.onDidCreate(() => {
68+
packageDebouncedRefresh.trigger();
69+
}),
70+
packageWatcher.onDidDelete(() => {
71+
packageDebouncedRefresh.trigger();
72+
}),
73+
);
4374
}

0 commit comments

Comments
 (0)