fix(extensions): update managed mcporter
This commit is contained in:
1 parent
e2c38093e9
commit
027eaa158a
2 files changed
+18
-3
No files matched your search
@@ -344,10 +344,11 @@ class Manager:
|
|||||||
if not re.fullmatch(r'[a-z0-9@/_.-]+', package):
|
if not re.fullmatch(r'[a-z0-9@/_.-]+', package):
|
||||||
raise ValueError('Invalid CLI package.')
|
raise ValueError('Invalid CLI package.')
|
||||||
record = next((r for r in self.state['resources'] if r['client'] == client and r['name'] == entry['name']), None)
|
record = next((r for r in self.state['resources'] if r['client'] == client and r['name'] == entry['name']), None)
|
||||||
if record is not None:
|
installed = shutil.which(package) is not None
|
||||||
|
if record is not None and installed and not self.update:
|
||||||
return
|
return
|
||||||
self.command(['npm', 'install', '--global', package])
|
self.command(['npm', 'update' if record is not None and installed else 'install', '--global', package])
|
||||||
if not self.dry_run:
|
if not self.dry_run and record is None:
|
||||||
self.state['resources'].append(dict(client=client, name=entry['name'], kind='cli', package=package))
|
self.state['resources'].append(dict(client=client, name=entry['name'], kind='cli', package=package))
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
|||||||
@@ -272,6 +272,20 @@ class ManagedExtensionTests(unittest.TestCase):
|
|||||||
self.assertIn(['claude', 'plugin', 'install', 'qmd@qmd', '--scope', 'user'], self.commands)
|
self.assertIn(['claude', 'plugin', 'install', 'qmd@qmd', '--scope', 'user'], self.commands)
|
||||||
self.assertNotIn(['codex', 'mcp', 'add', 'qmd', '--', 'qmd', 'mcp'], self.commands)
|
self.assertNotIn(['codex', 'mcp', 'add', 'qmd', '--', 'qmd', 'mcp'], self.commands)
|
||||||
|
|
||||||
|
def test_managed_mcporter_updates_when_requested(self):
|
||||||
|
self.manager().sync([mcporter()], ['codex'], {'MCPorter'})
|
||||||
|
self.commands.clear()
|
||||||
|
with patch.object(extensions.shutil, 'which', return_value='mcporter'):
|
||||||
|
self.manager(update=True).sync([mcporter()], ['codex'], {'MCPorter'})
|
||||||
|
self.assertEqual([['npm', 'update', '--global', 'mcporter']], self.commands)
|
||||||
|
|
||||||
|
def test_managed_mcporter_reinstalls_when_command_is_missing(self):
|
||||||
|
self.manager().sync([mcporter()], ['codex'], {'MCPorter'})
|
||||||
|
self.commands.clear()
|
||||||
|
with patch.object(extensions.shutil, 'which', return_value=None):
|
||||||
|
self.manager().sync([mcporter()], ['codex'], {'MCPorter'})
|
||||||
|
self.assertEqual([['npm', 'install', '--global', 'mcporter']], self.commands)
|
||||||
|
|
||||||
def test_mcporter_replaces_direct_context7_plugin(self):
|
def test_mcporter_replaces_direct_context7_plugin(self):
|
||||||
self.manager().sync([mcp(), mcporter()], ['codex'], {'Context7', 'MCPorter'})
|
self.manager().sync([mcp(), mcporter()], ['codex'], {'Context7', 'MCPorter'})
|
||||||
config = str(self.home / '.mcporter/mcporter.json')
|
config = str(self.home / '.mcporter/mcporter.json')
|
||||||
|
|||||||
Reference in new issue
Block a user