Tweak regex usage

main
Jordi Boggiano 9 years ago
parent ddd85afd32
commit 6d9e04c0e9

@ -62,8 +62,7 @@ class GitLabDriver extends VcsDriver
*/ */
protected $gitDriver; protected $gitDriver;
const URL_REGEX = '#^((https?)://(.*)/|git@([^:]+):)([^/]+)/(.+?)(?:\.git|/)?$#'; const URL_REGEX = '#^(?:(?P<scheme>https?)://(?P<domain>.+?)/|git@(?P<domain2>[^:]+):)(?P<owner>[^/]+)/(?P<repo>[^/]+?)(?:\.git|/)?$#';
/** /**
* Extracts information from the repository url. * Extracts information from the repository url.
@ -73,14 +72,14 @@ class GitLabDriver extends VcsDriver
*/ */
public function initialize() public function initialize()
{ {
if (!preg_match(static::URL_REGEX, $this->url, $match)) { if (!preg_match(self::URL_REGEX, $this->url, $match)) {
throw new \InvalidArgumentException('The URL provided is invalid. It must be the HTTP URL of a GitLab project.'); throw new \InvalidArgumentException('The URL provided is invalid. It must be the HTTP URL of a GitLab project.');
} }
$this->scheme = !empty($match[2]) ? $match[2] : 'https'; $this->scheme = !empty($match['scheme']) ? $match['scheme'] : 'https';
$this->originUrl = !empty($match[3]) ? $match[3] : $match[4]; $this->originUrl = !empty($match['domain']) ? $match['domain'] : $match['domain2'];
$this->owner = $match[5]; $this->owner = $match['owner'];
$this->repository = preg_replace('#(\.git)$#', '', $match[6]); $this->repository = preg_replace('#(\.git)$#', '', $match['repo']);
$this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->owner.'/'.$this->repository); $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->owner.'/'.$this->repository);
@ -346,12 +345,12 @@ class GitLabDriver extends VcsDriver
*/ */
public static function supports(IOInterface $io, Config $config, $url, $deep = false) public static function supports(IOInterface $io, Config $config, $url, $deep = false)
{ {
if (!preg_match(static::URL_REGEX, $url, $match)) { if (!preg_match(self::URL_REGEX, $url, $match)) {
return false; return false;
} }
$scheme = !empty($match[2]) ? $match[2] : 'https'; $scheme = !empty($match['scheme']) ? $match['scheme'] : 'https';
$originUrl = !empty($match[3]) ? $match[3] : $match[4]; $originUrl = !empty($match['domain']) ? $match['domain'] : $match['domain2'];
if (!in_array($originUrl, (array) $config->get('gitlab-domains'))) { if (!in_array($originUrl, (array) $config->get('gitlab-domains'))) {
return false; return false;

Loading…
Cancel
Save