public static function open($repositoryPath, $git = null, $createIfNotExists = false, $initArguments = null, $findRepositoryRoot = true)
{
$git = Binary::ensure($git);
$repositoryRoot = null;
if (!is_string($repositoryPath)) {
throw new \InvalidArgumentException(sprintf('"%s" is not a valid path', $repositoryPath));
}
if ($findRepositoryRoot) {
$repositoryRoot = self::findRepositoryRoot($repositoryPath);
}
if ($repositoryRoot === null) {
if (!$createIfNotExists) {
throw new \InvalidArgumentException(sprintf('"%s" is not a valid path', $repositoryPath));
} else {
if (!file_exists($repositoryPath) && !mkdir($repositoryPath, $createIfNotExists, true)) {
throw new \RuntimeException(sprintf('"%s" cannot be created', $repositoryPath));
} else {
if (!is_dir($repositoryPath)) {
throw new \InvalidArgumentException(sprintf('"%s" is not a valid path', $repositoryPath));
}
}
self::initRepository($git, $repositoryPath, $initArguments);
$repositoryRoot = $repositoryPath;
}
}
if ($repositoryRoot === null) {
throw new \InvalidArgumentException(sprintf('"%s" is not a valid Git repository', $repositoryPath));
}
return new static($repositoryRoot, $git);
}