aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Manning <tamanning@zoho.com>2016-05-03 21:49:52 -0400
committerAndrew Manning <tamanning@zoho.com>2016-05-03 21:49:52 -0400
commit5686ee13b4540bfc0ce6c40f07b6e43c3c55e9a8 (patch)
treee1dd289cf5ddcf514e5951872f5148b65422e32a
parent2db86b950e78cb01cde659f424c9c01f79edc7a4 (diff)
downloadvolse-hubzilla-5686ee13b4540bfc0ce6c40f07b6e43c3c55e9a8.tar.gz
volse-hubzilla-5686ee13b4540bfc0ce6c40f07b6e43c3c55e9a8.tar.bz2
volse-hubzilla-5686ee13b4540bfc0ce6c40f07b6e43c3c55e9a8.zip
Increased PHPGit timeout to 120 seconds for large repos. Retrieve Readme.md and render on plugins page.
-rw-r--r--Zotlabs/Module/Admin.php30
-rw-r--r--library/symfony/process/PhpProcess.php2
-rw-r--r--library/symfony/process/Process.php2
-rwxr-xr-xview/tpl/admin_plugins.tpl11
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('<h3>Repo Info</h3><p>The repo was cloned to<br>' + response.message + '</p>');
+ $('#new-repo-info').html('<h3>Repo Info</h3><p>' + response.message + '</p>');
+
+ $('#new-repo-info').append('<h4>Branches</h4><p>'+JSON.stringify(response.repo.branches)+'</p>');
+ $('#new-repo-info').append('<h4>URL</h4><p>'+response.repo.url+'</p>');
+ $('#new-repo-info').append('<h4>Objects</h4><ul>');
+ for(var i = 0; i<response.repo.objects.length; i++) {
+ $('#new-repo-info').append('<li>'+response.repo.objects[i]+'</li>');
+ }
+ $('#new-repo-info').append('</ul>');
+ $('#new-repo-info').append('<h4>Readme</h4><p>'+response.repo.readme+'</p>');
} else {
window.console.log('Error adding repo :' + response['message']);
}