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 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'Zotlabs/Module') 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)); } -- cgit v1.2.3