<?php
declare(strict_types=1);
namespace GitList\Repository;
use GitList\Repository;
class Commitish
{
protected string $hash;
protected ?string $path = null;
public function __construct(Repository $repository, string $commitish)
{
$this->hash = strtok($commitish, '/');
$revs = [...$repository->getBranches(), ...$repository->getTags()];
foreach ($revs as $rev) {
if (false === ($pos = strpos($commitish, (string) $rev->getName()))) {
continue;
}
$this->hash = $rev->getName();
$revSuffix = substr($commitish, strlen($this->hash));
if ($revSuffix && ($revSuffix[0] === '@' || $revSuffix[0] === '^' || $revSuffix[0] === '~')) {
$this->hash .= strtok($revSuffix, '/');
}
}
if ($this->hash != $commitish) {
$this->path = substr($commitish, strlen($this->hash) + 1);
}
}
public function getHash(): string
{
return $this->hash;
}
public function hasPath(): bool
{
return (bool) $this->path;
}
public function getPath(): ?string
{
return $this->path;
}
}