From 5686ee13b4540bfc0ce6c40f07b6e43c3c55e9a8 Mon Sep 17 00:00:00 2001 From: Andrew Manning Date: Tue, 3 May 2016 21:49:52 -0400 Subject: Increased PHPGit timeout to 120 seconds for large repos. Retrieve Readme.md and render on plugins page. --- Zotlabs/Module/Admin.php | 30 +++++++++++++++++++++--------- library/symfony/process/PhpProcess.php | 2 +- library/symfony/process/Process.php | 2 +- view/tpl/admin_plugins.tpl | 11 ++++++++++- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/Zotlabs/Module/Admin.php b/Zotlabs/Module/Admin.php index d23b508f0..ddec02916 100644 --- a/Zotlabs/Module/Admin.php +++ b/Zotlabs/Module/Admin.php @@ -1671,6 +1671,7 @@ class Admin extends \Zotlabs\Web\Controller { switch($action) { case 'addrepo': + require_once('library/markdown.php'); if(array_key_exists('repoURL',$_REQUEST)) { require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies logger('Repo URL submitted: ' . $_REQUEST['repoURL']); @@ -1688,28 +1689,39 @@ class Admin extends \Zotlabs\Web\Controller { $storepath = realpath(__DIR__ . '/../../store/'); //logger('storepath: ' . $storepath); $repopath = $storepath . '/pluginrepos/' . $reponame; - + $git = new Git(); if (!file_exists($repopath)) { //logger('repopath does not exist'); if (mkdir($repopath, 0770, true)) { - //logger('repopath created'); - $git = new Git(); - //logger('new git object created'); $cloned = $git->clone($repoURL, $repopath); if (!$cloned) { logger('git clone failed'); notice('Repo coule not be cloned. Filesystem path error.'); - json_return_and_die(array('message' => 'Repo coule not be cloned. Filesystem path error.', 'success' => false)); + json_return_and_die(array('message' => 'Repo could not be cloned. Filesystem path error.', 'success' => false)); } - json_return_and_die(array('message' => 'Successfully cloned to: ' . $repopath , 'success' => true)); + //json_return_and_die(array('repo'=> $repo, 'message' => 'Successfully cloned to: ' . $repopath , 'success' => true)); } else { logger('repopath could not be created'); notice('Repo coule not be cloned. Filesystem path error.'); - json_return_and_die(array('message' => 'Repo coule not be cloned. Filesystem path error', 'success' => false)); + json_return_and_die(array('message' => 'Repo could not be cloned. Filesystem path error', 'success' => false)); + } + } + $git->setRepository($repopath); + $repo = array(); + $repo['url'] = $repoURL; + $repo['branches'] = $git->branch(['all' => true]); + $repo['objects'] = array(); + $repo['readme'] = $repo['manifest'] = null; + foreach ($git->tree('master') as $object) { + if ($object['type'] == 'blob' && (strtolower($object['file']) === 'readme.md' || strtolower($object['file']) === 'readme')) { + $repo['readme'] = Markdown($git->cat->blob($object['hash'])); + } else if ($object['type'] == 'blob' && strtolower($object['file']) === 'manifest.json') { + $repo['manifest'] = $git->cat->blob($object['hash']); } - } else { - json_return_and_die(array('message' => 'Repo already exists at: ' . $repopath, 'success' => true)); } + //logger('repo: ' . json_encode($repo)); + json_return_and_die(array('repo'=> $repo, 'message' => '', 'success' => true)); + } else { json_return_and_die(array('message' => 'No repo URL provided', 'success' => false)); } diff --git a/library/symfony/process/PhpProcess.php b/library/symfony/process/PhpProcess.php index 4a2a2625f..8333412f4 100644 --- a/library/symfony/process/PhpProcess.php +++ b/library/symfony/process/PhpProcess.php @@ -33,7 +33,7 @@ class PhpProcess extends Process * @param int $timeout The timeout in seconds * @param array $options An array of options for proc_open */ - public function __construct($script, $cwd = null, array $env = null, $timeout = 60, array $options = array()) + public function __construct($script, $cwd = null, array $env = null, $timeout = 120, array $options = array()) { $executableFinder = new PhpExecutableFinder(); if (false === $php = $executableFinder->find()) { diff --git a/library/symfony/process/Process.php b/library/symfony/process/Process.php index c1e732170..003b6b7e5 100644 --- a/library/symfony/process/Process.php +++ b/library/symfony/process/Process.php @@ -138,7 +138,7 @@ class Process * * @throws RuntimeException When proc_open is not installed */ - public function __construct($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array()) + public function __construct($commandline, $cwd = null, array $env = null, $input = null, $timeout = 120, array $options = array()) { if (!function_exists('proc_open')) { throw new RuntimeException('The Process class relies on proc_open, which is not available on your PHP installation.'); diff --git a/view/tpl/admin_plugins.tpl b/view/tpl/admin_plugins.tpl index e10cde81d..97759f817 100755 --- a/view/tpl/admin_plugins.tpl +++ b/view/tpl/admin_plugins.tpl @@ -44,7 +44,16 @@ function(response) { $('#chat-rotator').spin(false); if (response.success) { - $('#new-repo-info').html('

Repo Info

The repo was cloned to
' + response.message + '

'); + $('#new-repo-info').html('

Repo Info

' + response.message + '

'); + + $('#new-repo-info').append('

Branches

'+JSON.stringify(response.repo.branches)+'

'); + $('#new-repo-info').append('

URL

'+response.repo.url+'

'); + $('#new-repo-info').append('

Objects

'); + $('#new-repo-info').append('

Readme

'+response.repo.readme+'

'); } else { window.console.log('Error adding repo :' + response['message']); } -- cgit v1.2.3