repo = $repo; } public function storeLinkback( $target, $source, $sourceBody, \HTTP_Request2_Response $res ) { //FIXME: deleted //FIXME: updated //FIXME: cleanuptask $hp = new HtmlParser(); $ok = $hp->extractGitUrls($source, $sourceBody); if ($ok === false) { //failed to extract git URL from linkback source //FIXME: send exception //$hp->error return; } $ci = $this->repo->getConnectionInfo(); $forks = $ci->getForks(); $remoteCloneUrl = $remoteTitle = null; $arRemoteCloneUrls = array(); $arGitUrls = $hp->getGitUrls(); foreach ($arGitUrls as $remoteTitle => $arUrls) { foreach ($arUrls as $remoteCloneUrl) { $arRemoteCloneUrls[$remoteCloneUrl] = $remoteTitle; } } $remoteid = 'fork-' . uniqid(); //check if we already know this remote foreach ($forks as $remote) { if (isset($arRemoteCloneUrls[$remote->getCloneUrl()]) || $source == $remote->getWebURL(true) ) { $remoteid = $remote->getName(); break; } } if ($this->isLocalWebUrl($source)) { //convert both web and clone url to local urls } $vc = $this->repo->getVc(); $vc->getCommand('config') ->addArgument('remote.' . $remoteid . '.homepage') ->addArgument($source) ->execute(); if ($remoteTitle !== null) { $vc->getCommand('config') ->addArgument('remote.' . $remoteid . '.title') ->addArgument($remoteTitle) ->execute(); } if ($remoteCloneUrl !== null) { $vc->getCommand('config') ->addArgument('remote.' . $remoteid . '.url') ->addArgument($remoteCloneUrl) ->execute(); } } protected function isLocalWebUrl($url) { $base = Tools::fullUrl(); if (substr($url, 0, strlen($base)) != $base) { //base does not match return false; } $remainder = substr($url, strlen($base)); //FIXME: check if it exists } } ?>