From 1ee5f44ac9a3125f16318ca1d24a7f7e8010a169 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Thu, 21 Nov 2013 07:22:54 +0100 Subject: [PATCH] Use title of remote paste for forked one; use page title as fallback --- src/phorkie/ForkRemote.php | 25 +++++++++++++++++++++++-- src/phorkie/Forker.php | 10 +++++----- www/fork-remote.php | 4 +++- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/phorkie/ForkRemote.php b/src/phorkie/ForkRemote.php index 8784e8e..31b4839 100644 --- a/src/phorkie/ForkRemote.php +++ b/src/phorkie/ForkRemote.php @@ -72,6 +72,8 @@ class ForkRemote libxml_use_internal_errors(true); $sx = simplexml_import_dom(\DomDocument::loadHtmlFile($url)); $elems = $sx->xpath('//*[@rel="vcs-git"]'); + $titles = $sx->xpath('/html/head/title'); + $pageTitle = $this->cleanPageTitle((string) reset($titles)); $count = $anonymous = 0; foreach ($elems as $elem) { @@ -85,6 +87,8 @@ class ForkRemote } else if ($str != '') { //title $title = $str; + } else if ($pageTitle != '') { + $title = $pageTitle; } else { $title = 'Unnamed repository #' . ++$anonymous; } @@ -107,7 +111,7 @@ class ForkRemote * Iterate through all git urls and return one if there is only * one supported one. * - * @return mixed Boolean false or string + * @return mixed Boolean false or array with keys "url" and "title" */ public function getUniqueGitUrl() { @@ -115,7 +119,7 @@ class ForkRemote foreach ($this->arGitUrls as $title => $arUrls) { foreach ($arUrls as $url) { $nFound++; - $uniqueUrl = $url; + $uniqueUrl = array('url' => $url, 'title' => $title); } } @@ -152,6 +156,23 @@ class ForkRemote return $scheme == 'git' || $scheme == 'http' || $scheme == 'https'; } + + /** + * Remove application names from HTML page titles + * + * @param string $title HTML page title + * + * @return string Cleaned HTML page title + */ + protected function cleanPageTitle($title) + { + $title = trim($title); + if (substr($title, -9) == '- phorkie') { + $title = trim(substr($title, 0, -9)); + } + + return $title; + } } ?> diff --git a/src/phorkie/Forker.php b/src/phorkie/Forker.php index f4e1295..419db1e 100644 --- a/src/phorkie/Forker.php +++ b/src/phorkie/Forker.php @@ -15,13 +15,13 @@ class Forker return $new; } - public function forkRemote($cloneUrl, $originalUrl) + public function forkRemote($cloneUrl, $originalUrl, $title = null) { + if ($title === null) { + $title = 'Fork of ' . $originalUrl; + } $new = $this->fork($cloneUrl); - file_put_contents( - $new->gitDir . '/description', - 'Fork of ' . $originalUrl - ); + file_put_contents($new->gitDir . '/description', $title); $this->index($new); $not = new Notificator(); diff --git a/www/fork-remote.php b/www/fork-remote.php index 4d9ca34..4f1b682 100644 --- a/www/fork-remote.php +++ b/www/fork-remote.php @@ -19,7 +19,9 @@ if (isset($_POST['remote_url'])) { } $forker = new Forker(); try { - $new = $forker->forkRemote($gitUrl, $fr->getUrl()); + $new = $forker->forkRemote( + $gitUrl['url'], $fr->getUrl(), $gitUrl['title'] + ); redirect($new->getLink('display', null, true)); } catch (\Exception $e) { $error = $e->getMessage(); -- 2.30.2