| 'use strict' | 
|   | 
| const normalize = require('normalize-path') | 
| const debugLog = require('debug')('lint-staged:resolveGitRepo') | 
| const fs = require('fs') | 
| const path = require('path') | 
| const { promisify } = require('util') | 
|   | 
| const execGit = require('./execGit') | 
| const { readFile } = require('./file') | 
|   | 
| const fsLstat = promisify(fs.lstat) | 
|   | 
| /** | 
|  * Resolve path to the .git directory, with special handling for | 
|  * submodules and worktrees | 
|  */ | 
| const resolveGitConfigDir = async (gitDir) => { | 
|   const defaultDir = normalize(path.join(gitDir, '.git')) | 
|   const stats = await fsLstat(defaultDir) | 
|   // If .git is a directory, use it | 
|   if (stats.isDirectory()) return defaultDir | 
|   // Otherwise .git is a file containing path to real location | 
|   const file = (await readFile(defaultDir)).toString() | 
|   return path.resolve(gitDir, file.replace(/^gitdir: /, '')).trim() | 
| } | 
|   | 
| /** | 
|  * Resolve git directory and possible submodule paths | 
|  */ | 
| const resolveGitRepo = async (cwd) => { | 
|   try { | 
|     debugLog('Resolving git repo from `%s`', cwd) | 
|   | 
|     // Unset GIT_DIR before running any git operations in case it's pointing to an incorrect location | 
|     debugLog('Unset GIT_DIR (was `%s`)', process.env.GIT_DIR) | 
|     delete process.env.GIT_DIR | 
|     debugLog('Unset GIT_WORK_TREE (was `%s`)', process.env.GIT_WORK_TREE) | 
|     delete process.env.GIT_WORK_TREE | 
|   | 
|     const gitDir = normalize(await execGit(['rev-parse', '--show-toplevel'], { cwd })) | 
|     const gitConfigDir = normalize(await resolveGitConfigDir(gitDir)) | 
|   | 
|     debugLog('Resolved git directory to be `%s`', gitDir) | 
|     debugLog('Resolved git config directory to be `%s`', gitConfigDir) | 
|   | 
|     return { gitDir, gitConfigDir } | 
|   } catch (error) { | 
|     debugLog('Failed to resolve git repo with error:', error) | 
|     return { error, gitDir: null, gitConfigDir: null } | 
|   } | 
| } | 
|   | 
| module.exports = resolveGitRepo |