diff --git a/PHPCI/Controller/BuildController.php b/PHPCI/Controller/BuildController.php index bf898d2d..e4660ba7 100644 --- a/PHPCI/Controller/BuildController.php +++ b/PHPCI/Controller/BuildController.php @@ -13,6 +13,7 @@ use b8; use b8\Exception\HttpException\NotFoundException; use b8\Http\Response\JsonResponse; use PHPCI\BuildFactory; +use PHPCI\Helper\AnsiConverter; use PHPCI\Helper\Lang; use PHPCI\Model\Build; use PHPCI\Model\Project; @@ -198,11 +199,7 @@ class BuildController extends \PHPCI\Controller */ protected function cleanLog($log) { - $log = str_replace('[0;32m', '', $log); - $log = str_replace('[0;31m', '', $log); - $log = str_replace('[0m', '', $log); - - return $log; + return AnsiConverter::convert($log); } /** diff --git a/PHPCI/Helper/AnsiConverter.php b/PHPCI/Helper/AnsiConverter.php new file mode 100644 index 00000000..a5e42269 --- /dev/null +++ b/PHPCI/Helper/AnsiConverter.php @@ -0,0 +1,55 @@ +convert($text); + } + + /** + * Do not instanciate this class. + */ + private function __construct() + { + } +} diff --git a/PHPCI/View/Email/success.phtml b/PHPCI/View/Email/success.phtml index a3a604c5..342e3483 100644 --- a/PHPCI/View/Email/success.phtml +++ b/PHPCI/View/Email/success.phtml @@ -1,3 +1,5 @@ + +
@@ -8,7 +10,7 @@

Your commit getCommitId(); ?> genrate a successfull build in project getTitle(); ?>.

getCommitMessage(); ?>

-
getLog(); ?>
+
getLog()); ?>

You can review your commit and the build log.

diff --git a/PHPCI/View/layout.phtml b/PHPCI/View/layout.phtml index 33290fb3..72ef27ff 100644 --- a/PHPCI/View/layout.phtml +++ b/PHPCI/View/layout.phtml @@ -13,6 +13,7 @@ + diff --git a/Tests/PHPCI/Helper/AnsiConverterTest.php b/Tests/PHPCI/Helper/AnsiConverterTest.php new file mode 100644 index 00000000..4d1e8522 --- /dev/null +++ b/Tests/PHPCI/Helper/AnsiConverterTest.php @@ -0,0 +1,20 @@ +This is red !'; + + $actualOutput = AnsiConverter::convert($input); + + $this->assertEquals($expectedOutput, $actualOutput); + } +} diff --git a/composer.json b/composer.json index 2eec5e30..6658bffd 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,8 @@ "psr/log": "~1.0", "monolog/monolog": "~1.6", "pimple/pimple": "~1.1", - "robmorgan/phinx": "~0.4" + "robmorgan/phinx": "~0.4", + "sensiolabs/ansi-to-html": "~1.1" }, "require-dev": { diff --git a/composer.lock b/composer.lock index c5abc102..56c28655 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "4ae188c6be1c1388de6271a3b0e0475d", + "hash": "5fc23800ea77b50b496d34f7aa5cf6b3", "packages": [ { "name": "block8/b8framework", @@ -315,6 +315,50 @@ ], "time": "2015-02-23 16:38:12" }, + { + "name": "sensiolabs/ansi-to-html", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/ansi-to-html.git", + "reference": "92d2ef7ffba5418be060d8ba8adaf7223d741f93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/ansi-to-html/zipball/92d2ef7ffba5418be060d8ba8adaf7223d741f93", + "reference": "92d2ef7ffba5418be060d8ba8adaf7223d741f93", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "suggest": { + "twig/twig": "Provides nice templating features" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-0": { + "SensioLabs\\AnsiConverter": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "A library to convert a text with ANSI codes to HTML", + "time": "2014-08-01 14:02:39" + }, { "name": "swiftmailer/swiftmailer", "version": "v5.3.1", @@ -2030,6 +2074,7 @@ "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, + "prefer-lowest": false, "platform": { "php": ">=5.3.8", "ext-pdo": "*", diff --git a/public/assets/css/ansi-colors.css b/public/assets/css/ansi-colors.css new file mode 100644 index 00000000..c3011299 --- /dev/null +++ b/public/assets/css/ansi-colors.css @@ -0,0 +1,32 @@ +.ansi_color_fg_black { color: black } +.ansi_color_bg_black { background-color: black } +.ansi_color_fg_red { color: darkred } +.ansi_color_bg_red { background-color: darkred } +.ansi_color_fg_green { color: green } +.ansi_color_bg_green { background-color: green } +.ansi_color_fg_yellow { color: yellow } +.ansi_color_bg_yellow { background-color: yellow } +.ansi_color_fg_blue { color: blue } +.ansi_color_bg_blue { background-color: blue } +.ansi_color_fg_magenta { color: darkmagenta } +.ansi_color_bg_magenta { background-color: darkmagenta } +.ansi_color_fg_cyan { color: cyan } +.ansi_color_bg_cyan { background-color: cyan } +.ansi_color_fg_white { color: white } +.ansi_color_bg_white { background-color: white } +.ansi_color_fg_brblack { color: black } +.ansi_color_bg_brblack { background-color: black } +.ansi_color_fg_brred { color: red } +.ansi_color_bg_brred { background-color: red } +.ansi_color_fg_brgreen { color: lightgreen } +.ansi_color_bg_brgreen { background-color: lightgreen } +.ansi_color_fg_bryellow { color: lightyellow } +.ansi_color_bg_bryellow { background-color: lightyellow } +.ansi_color_fg_brblue { color: lightblue } +.ansi_color_bg_brblue { background-color: lightblue } +.ansi_color_fg_brmagenta { color: magenta } +.ansi_color_bg_brmagenta { background-color: magenta } +.ansi_color_fg_brcyan { color: lightcyan } +.ansi_color_bg_brcyan { background-color: lightcyan } +.ansi_color_fg_brwhite { color: white } +.ansi_color_bg_brwhite { background-color: white } diff --git a/public/assets/js/build-plugins/log.js b/public/assets/js/build-plugins/log.js index 8798e23c..44ebab2b 100644 --- a/public/assets/js/build-plugins/log.js +++ b/public/assets/js/build-plugins/log.js @@ -8,7 +8,7 @@ var logPlugin = ActiveBuild.UiPlugin.extend({ }, render: function() { - var container = $('
');
+        var container = $('
');
         container.css({height: '300px', 'overflow-y': 'auto'});
         container.html(ActiveBuild.buildData.log);