Commit e7fb5d2c authored by Ivan Mazhukin's avatar Ivan Mazhukin

extension: use PGKNAME from play.d/ to autofill name

parent 10eb4664
...@@ -66,7 +66,7 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix --force ...@@ -66,7 +66,7 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix --force
- `Run exec command`: спрашивает shell-команду и целевые системы или пресет. - `Run exec command`: спрашивает shell-команду и целевые системы или пресет.
- `./bin/epm play <app>`: запускает локальный `epm play` вне Docker. - `./bin/epm play <app>`: запускает локальный `epm play` вне Docker.
- `./bin/epm play --latest <app>`: запускает локальный `epm play --latest` вне Docker. - `./bin/epm play --latest <app>`: запускает локальный `epm play --latest` вне Docker.
- `./bin/epm remove <app>`: удаляет локально проверенные пакеты через `epm remove` вне Docker. - `./bin/epm remove <pkg>`: удаляет локально проверенные пакеты через `epm remove` вне Docker.
- `Rerun last command`: повторяет последнюю сгенерированную команду. - `Rerun last command`: повторяет последнюю сгенерированную команду.
- `Open log folder`: открывает каталог логов. - `Open log folder`: открывает каталог логов.
- `Configure`: открывает настройки расширения. - `Configure`: открывает настройки расширения.
...@@ -81,6 +81,8 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix --force ...@@ -81,6 +81,8 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix --force
- для `pack.d` и `repack.d` расширение ищет соответствующий play-скрипт; - для `pack.d` и `repack.d` расширение ищет соответствующий play-скрипт;
- `PKGNAME` внутри `play.d` не используется как имя для `epm play`, потому что запуск всегда идёт по имени play-скрипта. - `PKGNAME` внутри `play.d` не используется как имя для `epm play`, потому что запуск всегда идёт по имени play-скрипта.
Для `./bin/epm remove` логика другая: расширение находит соответствующий `play.d`-скрипт и берет из него `PKGNAME`. Если `PKGNAME` не удалось прочитать, используется имя play-скрипта.
Примеры: Примеры:
- `play.d/ayugram.sh` -> `ayugram`, даже если внутри `PKGNAME=ayugram-desktop`; - `play.d/ayugram.sh` -> `ayugram`, даже если внутри `PKGNAME=ayugram-desktop`;
......
...@@ -27,6 +27,7 @@ const RUNTIME_MESSAGES_RU = { ...@@ -27,6 +27,7 @@ const RUNTIME_MESSAGES_RU = {
'Local ./bin/epm play': 'Локально ./bin/epm play', 'Local ./bin/epm play': 'Локально ./bin/epm play',
'Local ./bin/epm play --latest': 'Локально ./bin/epm play --latest', 'Local ./bin/epm play --latest': 'Локально ./bin/epm play --latest',
'Local ./bin/epm remove': 'Локально ./bin/epm remove', 'Local ./bin/epm remove': 'Локально ./bin/epm remove',
'Local ./bin/epm remove <pkg>': 'Локально ./bin/epm remove <pkg>',
'Pass --latest to app test commands': 'Передавать --latest в команды app-тестов', 'Pass --latest to app test commands': 'Передавать --latest в команды app-тестов',
'Choose an epm-docker-test action': 'Выберите действие epm-docker-test', 'Choose an epm-docker-test action': 'Выберите действие epm-docker-test',
'EPM Docker Test Parallel': 'EPM Docker Test: параллельно', 'EPM Docker Test Parallel': 'EPM Docker Test: параллельно',
...@@ -47,7 +48,7 @@ const RUNTIME_MESSAGES_RU = { ...@@ -47,7 +48,7 @@ const RUNTIME_MESSAGES_RU = {
'Local epm play': 'Локально epm play', 'Local epm play': 'Локально epm play',
'Local epm play --latest': 'Локально epm play --latest', 'Local epm play --latest': 'Локально epm play --latest',
'Local epm remove': 'Локально epm remove', 'Local epm remove': 'Локально epm remove',
'Application name for local ./bin/epm remove': 'Имя приложения для локального ./bin/epm remove', 'Package name for local ./bin/epm remove': 'Имя пакета для локального ./bin/epm remove',
'Could not find local epm: {epm}': 'Не удалось найти локальный epm: {epm}', 'Could not find local epm: {epm}': 'Не удалось найти локальный epm: {epm}',
'{prompt} (inferred from {source})': '{prompt} (определено из {source})', '{prompt} (inferred from {source})': '{prompt} (определено из {source})',
'Cancel': 'Отмена', 'Cancel': 'Отмена',
...@@ -182,7 +183,7 @@ class ActionsProvider { ...@@ -182,7 +183,7 @@ class ActionsProvider {
separatorItem(t('Local EPM')), separatorItem(t('Local EPM')),
commandItem('./bin/epm play <app>', 'epmDockerTest.runLocalPlay', undefined, new vscode.ThemeIcon('play')), commandItem('./bin/epm play <app>', 'epmDockerTest.runLocalPlay', undefined, new vscode.ThemeIcon('play')),
commandItem('./bin/epm play --latest <app>', 'epmDockerTest.runLocalPlayLatest', undefined, new vscode.ThemeIcon('cloud-download')), commandItem('./bin/epm play --latest <app>', 'epmDockerTest.runLocalPlayLatest', undefined, new vscode.ThemeIcon('cloud-download')),
commandItem('./bin/epm remove <app>', 'epmDockerTest.runLocalRemove', undefined, new vscode.ThemeIcon('trash')), commandItem(t('Local ./bin/epm remove <pkg>'), 'epmDockerTest.runLocalRemove', undefined, new vscode.ThemeIcon('trash')),
separatorItem(t('Tools')), separatorItem(t('Tools')),
commandItem(t('Rerun last command'), 'epmDockerTest.rerunLast', undefined, new vscode.ThemeIcon('debug-restart')), commandItem(t('Rerun last command'), 'epmDockerTest.rerunLast', undefined, new vscode.ThemeIcon('debug-restart')),
commandItem(t('Open log folder'), 'epmDockerTest.openLogs', undefined, new vscode.ThemeIcon('folder-opened')), commandItem(t('Open log folder'), 'epmDockerTest.openLogs', undefined, new vscode.ThemeIcon('folder-opened')),
...@@ -438,15 +439,15 @@ async function runLocalRemove() { ...@@ -438,15 +439,15 @@ async function runLocalRemove() {
return; return;
} }
const inferred = inferAppFromActiveEditor(eepmRoot); const inferred = inferRemoveTargetFromActiveEditor(eepmRoot);
const app = await promptForApp({ const pkg = await promptForApp({
title: t('Local epm remove'), title: t('Local epm remove'),
prompt: t('Application name for local ./bin/epm remove'), prompt: t('Package name for local ./bin/epm remove'),
fallbackKey: 'lastLocalApp', fallbackKey: 'lastLocalRemove',
inferred inferred
}); });
if (!app) { if (!pkg) {
return; return;
} }
...@@ -456,17 +457,19 @@ async function runLocalRemove() { ...@@ -456,17 +457,19 @@ async function runLocalRemove() {
'&&', '&&',
'./bin/epm', './bin/epm',
'remove', 'remove',
shellQuote(app) shellQuote(pkg)
].join(' '); ].join(' ');
await setWorkspaceState('lastLocalApp', app); await setWorkspaceState('lastLocalRemove', pkg);
lastRun = command; lastRun = command;
await setWorkspaceState('lastCommand', command); await setWorkspaceState('lastCommand', command);
sendToTerminal(command); sendToTerminal(command);
} }
async function promptForApp(options) { async function promptForApp(options) {
const inferred = options.inferred || inferAppFromActiveEditor(resolveWorkspacePath(getConfig().get('localEpmRoot', '/home/vano/eter/static2/eepm'))); const inferred = Object.prototype.hasOwnProperty.call(options, 'inferred')
? options.inferred
: inferAppFromActiveEditor(resolveWorkspacePath(getConfig().get('localEpmRoot', '/home/vano/eter/static2/eepm')));
const fallback = getWorkspaceState(options.fallbackKey, getWorkspaceState('lastApp', '')); const fallback = getWorkspaceState(options.fallbackKey, getWorkspaceState('lastApp', ''));
const initialValue = inferred?.app || fallback; const initialValue = inferred?.app || fallback;
...@@ -818,6 +821,32 @@ function findEepmRootFromActiveEditor() { ...@@ -818,6 +821,32 @@ function findEepmRootFromActiveEditor() {
} }
function inferAppFromActiveEditor(eepmRoot) { function inferAppFromActiveEditor(eepmRoot) {
const context = getActiveScriptContext(eepmRoot);
if (!context) {
return undefined;
}
return {
app: context.playScriptName,
source: context.activeSource
};
}
function inferRemoveTargetFromActiveEditor(eepmRoot) {
const context = getActiveScriptContext(eepmRoot);
if (!context) {
return undefined;
}
const variables = readShellVariables(context.playScriptPath, ['PKGNAME']);
const pkgName = splitShellWords(variables.PKGNAME)[0] || context.playScriptName;
return {
app: pkgName,
source: context.playSource
};
}
function getActiveScriptContext(eepmRoot) {
const editor = vscode.window.activeTextEditor; const editor = vscode.window.activeTextEditor;
const filePath = editor?.document?.uri?.scheme === 'file' ? editor.document.uri.fsPath : undefined; const filePath = editor?.document?.uri?.scheme === 'file' ? editor.document.uri.fsPath : undefined;
if (!filePath) { if (!filePath) {
...@@ -834,12 +863,20 @@ function inferAppFromActiveEditor(eepmRoot) { ...@@ -834,12 +863,20 @@ function inferAppFromActiveEditor(eepmRoot) {
const baseName = path.basename(filePath, path.extname(filePath)); const baseName = path.basename(filePath, path.extname(filePath));
const detectedEepmRoot = findEepmRootForScript(filePath) || eepmRoot; const detectedEepmRoot = findEepmRootForScript(filePath) || eepmRoot;
const app = dirName === 'play.d' const playScriptName = dirName === 'play.d'
? baseName ? baseName
: inferPlayAppFromPackageScript(detectedEepmRoot, filePath, baseName) || baseName; : inferPlayAppFromPackageScript(detectedEepmRoot, filePath, baseName) || baseName;
const relative = detectedEepmRoot ? path.relative(detectedEepmRoot, filePath) : ''; const playScriptPath = detectedEepmRoot
const source = relative && !relative.startsWith('..') ? relative : filePath; ? path.join(detectedEepmRoot, 'play.d', `${playScriptName}.sh`)
return { app, source }; : filePath;
const activeRelative = detectedEepmRoot ? path.relative(detectedEepmRoot, filePath) : '';
const playRelative = detectedEepmRoot ? path.relative(detectedEepmRoot, playScriptPath) : '';
return {
playScriptName,
playScriptPath,
activeSource: activeRelative && !activeRelative.startsWith('..') ? activeRelative : filePath,
playSource: playRelative && !playRelative.startsWith('..') ? playRelative : playScriptPath
};
} }
function findEepmRootForScript(filePath) { function findEepmRootForScript(filePath) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment