diff --git a/codex-vscode/environments/.env.example b/codex-vscode/environments/.env.example index 57cff92f..038262b9 100644 --- a/codex-vscode/environments/.env.example +++ b/codex-vscode/environments/.env.example @@ -17,4 +17,5 @@ LOG_MAX_FILES=10 LOG_LEVEL=error SENTRY_DNS="" -SENTRY_AUTH_TOKEN="" \ No newline at end of file +SENTRY_AUTH_TOKEN="" +SENTRY_LOG_LEVEL="error" \ No newline at end of file diff --git a/codex-vscode/src/helpers/logging.helper.ts b/codex-vscode/src/helpers/logging.helper.ts index 434e464e..65ea5839 100644 --- a/codex-vscode/src/helpers/logging.helper.ts +++ b/codex-vscode/src/helpers/logging.helper.ts @@ -11,6 +11,12 @@ const consoleFormat = winston.format.printf(({ level, message, timestamp, ...met if (meta) { if (meta.error as Error) { message += `\n${level}: ${meta.error?.message}\n${meta.error?.stack}`; + } else { + try { + message += `\n${JSON.stringify(meta, undefined, 2)}`; + } catch (error) { + // Couldn't parse object ¯\_(ツ)_/¯ + } } } return message; @@ -40,7 +46,7 @@ const options = { environment: process.env.ENVIRONMENT || "development", normalizeDepth: 10, }, - level: "error", + level: process.env.SENTRY_LOG_LEVEL || "error", format: sentryFormat(), }; diff --git a/codex-vscode/src/services/git.service.ts b/codex-vscode/src/services/git.service.ts index 8b75b0a8..ec94a5e8 100644 --- a/codex-vscode/src/services/git.service.ts +++ b/codex-vscode/src/services/git.service.ts @@ -49,8 +49,9 @@ export class GitService implements Singleton { const repositories: Array = ( await Promise.all( this.gitAPI.repositories.map(async (repository) => { - if (repository?.state?.remotes?.[0]?.fetchUrl) { - const vscodeRepository: VSCodeRepository = GitService.toVSCodeRepository(repository); + const remote = GitService.getRemote(repository); + if (remote?.fetchUrl) { + const vscodeRepository: VSCodeRepository = GitService.toVSCodeRepository(repository, remote); await this.localRepositoryMapManager.set(vscodeRepository.origin, vscodeRepository.directory); return vscodeRepository; } @@ -68,9 +69,9 @@ export class GitService implements Singleton { async getRepositoryAt(uri: vscode.Uri): Promise { const repository = this.gitAPI.getRepository(uri); - const fetchOrigin = GitService.getFetchOrigin(repository); - if (fetchOrigin) { - const vscodeRepository: VSCodeRepository = GitService.toVSCodeRepository(repository); + const remote = GitService.getRemote(repository); + if (remote) { + const vscodeRepository: VSCodeRepository = GitService.toVSCodeRepository(repository, remote); return vscodeRepository; } else { try { @@ -110,11 +111,8 @@ export class GitService implements Singleton { } } - static toVSCodeRepository(repository: Repository): VSCodeRepository | undefined { - const fetchOrigin = GitService.getFetchOrigin(repository); - if (!fetchOrigin) return; - - const parsedRemoteGitUrl = gitUrlParse(fetchOrigin.fetchUrl); + static toVSCodeRepository(repository: Repository, remote: Remote): VSCodeRepository | undefined { + const parsedRemoteGitUrl = gitUrlParse(remote.fetchUrl); if (parsedRemoteGitUrl) { return { name: parsedRemoteGitUrl.name, @@ -124,7 +122,24 @@ export class GitService implements Singleton { } } - private static getFetchOrigin(repository: Repository): Remote | undefined { - return repository?.state?.remotes?.find((remote) => remote.name === "origin" && remote.fetchUrl); + /** + * Retrieves a remote repository; ideally returns the Origin, but if not, returns a fallback + * @param repository + * @returns Remote | undefined + */ + private static getRemote(repository: Repository): Remote | undefined { + let originRepo = repository?.state?.remotes?.find((remote) => remote.name === "origin" && remote.fetchUrl); + if (originRepo) { + return originRepo; + } + + logger.info(`Could not find repo origin - gitService.getFetchOrigin`, { + repositoryRemotes: repository?.state?.remotes, + }); + // We couldn't find a repo w/ Origin as it's name, so we'll naively take the first one + originRepo = repository?.state?.remotes && repository?.state?.remotes[0]; + if (originRepo?.fetchUrl) { + return originRepo; + } } }