bugsnag/bugsnag-js

View on GitHub
packages/react-native-cli/src/lib/Repo.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { spawnSync } from 'child_process'
import { Logger } from '../Logger'

export enum RepoState { UNKNOWN, GIT_CLEAN, GIT_DIRTY, NONE }

export function detectState (projectRoot: string, logger: Logger) {
  const res = gitStatus(projectRoot)

  if (res.error) {
    if ((res.error as NodeJS.ErrnoException).code !== 'ENOENT') {
      logger.warn(res.error)
    }

    return RepoState.UNKNOWN
  }

  if (res.stderr.match(/not a git repository/)) return RepoState.NONE
  if (res.stdout.length > 0) return RepoState.GIT_DIRTY
  return RepoState.GIT_CLEAN
}

function gitStatus (cwd: string) {
  return spawnSync('git', ['status', '--porcelain'], { cwd, encoding: 'utf8' })
}