extensions/git/src/model.ts/Model/scanWorkspaceFolders
class Model:	private async scanWorkspaceFolders(): Promise<void> {
		const config = workspace.getConfiguration('git');
		const autoRepositoryDetection = config.get<boolean | 'subFolders' | 'openEditors'>('autoRepositoryDetection');

		// Log repository scan settings
		if (Log.logLevel <= LogLevel.Trace) {
			this.outputChannel.appendLine(`${logTimestamp()} Trace: autoRepositoryDetection="${autoRepositoryDetection}"`);
		}

		if (autoRepositoryDetection !== true && autoRepositoryDetection !== 'subFolders') {
			return;
		}

		await Promise.all((workspace.workspaceFolders || []).map(async folder => {
			const root = folder.uri.fsPath;

			// Workspace folder children
			const repositoryScanMaxDepth = (workspace.isTrusted ? workspace.getConfiguration('git', folder.uri) : config).get<number>('repositoryScanMaxDepth', 1);
			const repositoryScanIgnoredFolders = (workspace.isTrusted ? workspace.getConfiguration('git', folder.uri) : config).get<string[]>('repositoryScanIgnoredFolders', []);

			const subfolders = new Set(await this.traverseWorkspaceFolder(root, repositoryScanMaxDepth, repositoryScanIgnoredFolders));

			// Repository scan folders
			const scanPaths = (workspace.isTrusted ? workspace.getConfiguration('git', folder.uri) : config).get<string[]>('scanRepositories') || [];
			for (const scanPath of scanPaths) {
				if (scanPath === '.git') {
					continue;
				}

				if (path.isAbsolute(scanPath)) {
					console.warn(localize('not supported', "Absolute paths not supported in 'git.scanRepositories' setting."));
					continue;
				}

				subfolders.add(path.join(root, scanPath));
			}

			await Promise.all([...subfolders].map(f => this.openRepository(f)));
		}));
	}