From 011e20b4990a57a91269da2f037e7bad221858e1 Mon Sep 17 00:00:00 2001 From: Peter Schuemann Date: Mon, 21 Oct 2024 01:39:31 +0200 Subject: [PATCH] * feat(extension.ts): add support for retrieving default base branch from Gitea API * fix(extension.ts): handle errors when retrieving default base branch from Gitea API --- gitea-git-clone/src/extension.ts | 39 ++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/gitea-git-clone/src/extension.ts b/gitea-git-clone/src/extension.ts index 7cd57ef..80f4b47 100644 --- a/gitea-git-clone/src/extension.ts +++ b/gitea-git-clone/src/extension.ts @@ -46,22 +46,20 @@ async function createGiteaPullRequest() { const { title, body } = await getLastCommit(currentWorkspaceFolder); const branch = await getCurrentBranch(currentWorkspaceFolder); - // Debugging-Ausgabe zur Überprüfung - console.log('Branch:', branch); - console.log('Title:', title); - console.log('Body:', body); - if (!branch) { vscode.window.showErrorMessage('Branch konnte nicht ermittelt werden.'); return; } + // Base-Branch über die Gitea API ermitteln + const baseBranch = await getDefaultBranch(instanceUrl, owner, repo, token); + // API-Request-Daten vorbereiten const prData = { title: title, // Der letzte Commit als Titel body: body || '', // Commit-Kommentare als Body head: branch, // Der aktuelle Branch als "head" - base: 'main' // Standardmäßig auf 'main' als Basisbranch + base: baseBranch // Der ermittelte base-Branch }; const config = { @@ -83,8 +81,8 @@ async function createGiteaPullRequest() { // Öffne die URL des erstellten PRs im Browser vscode.env.openExternal(vscode.Uri.parse(prUrl)); vscode.window.showInformationMessage('Pull-Request erfolgreich erstellt und im Browser geöffnet.'); - } catch (err: unknown) { - vscode.window.showErrorMessage('Fehler beim Erstellen des Pull Requests.'); + } catch (err: any) { + vscode.window.showErrorMessage(`Fehler beim Erstellen des Pull Requests: ${err.message}`); console.error('Fehler beim Erstellen des PRs:', err); } }); @@ -119,13 +117,34 @@ async function getCurrentBranch(folderPath: string): Promise { }); } +// Hilfsfunktion, um den base-Branch über die Gitea API zu ermitteln +async function getDefaultBranch(instanceUrl: string, owner: string, repo: string, token: string): Promise { + try { + const response = await axios.get(`${instanceUrl}/api/v1/repos/${owner}/${repo}`, { + headers: { + 'Authorization': `token ${token}` + } + }); + + if (response.status === 200 && response.data.default_branch) { + return response.data.default_branch; + } else { + vscode.window.showErrorMessage('Konnte den base-Branch nicht ermitteln. Standardmäßig "main" verwendet.'); + return 'main'; + } + } catch (error) { + vscode.window.showErrorMessage('Fehler beim Abrufen des base-Branches. Standardmäßig "main" verwendet.'); + return 'main'; + } +} + // Funktion zum Hinzufügen des Statusbar-Icons function addStatusBarIcon() { const statusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); statusBar.text = `$(git-pull-request) Create PR`; statusBar.tooltip = 'Create a Pull Request in Gitea'; statusBar.command = 'gitea.createPullRequest'; - statusBar.show(); + statusBar.show(); // Sofortiges Anzeigen return statusBar; } @@ -189,7 +208,7 @@ export function activate(context: vscode.ExtensionContext) { let pullRequestCommand = vscode.commands.registerCommand('gitea.createPullRequest', createGiteaPullRequest); context.subscriptions.push(pullRequestCommand); - // Statusbar-Icon hinzufügen + // Statusbar-Icon sofort anzeigen const statusBar = addStatusBarIcon(); context.subscriptions.push(statusBar); }