Merge branch 'feature.diff-whitespace' into develop
This commit is contained in:
commit
381dc5b8f7
19
.gitignore
vendored
19
.gitignore
vendored
@ -1,14 +1,19 @@
|
||||
*~
|
||||
tmp
|
||||
.buildpath
|
||||
.externalToolBuilders
|
||||
.project
|
||||
.settings
|
||||
.tx/config
|
||||
attachments
|
||||
indefero-*.zip
|
||||
src/IDF/conf/idf.php
|
||||
src/IDF/conf/idf.test.php
|
||||
www/test.php
|
||||
www/media/upload
|
||||
src/IDF/gettexttemplates
|
||||
indefero-*.zip
|
||||
src/IDF/conf/path.php
|
||||
.tx/config
|
||||
src/IDF/gettexttemplates
|
||||
src/IDF/locale/idf.pot.bak
|
||||
test/config.php
|
||||
test/test.db
|
||||
test/tmp
|
||||
test/config.php
|
||||
tmp
|
||||
www/media/upload
|
||||
www/test.php
|
||||
|
221
src/IDF/Diff.php
221
src/IDF/Diff.php
@ -35,9 +35,7 @@ class IDF_Diff
|
||||
public function __construct($diff, $path_strip_level = 0)
|
||||
{
|
||||
$this->path_strip_level = $path_strip_level;
|
||||
// this works because in unified diff format even empty lines are
|
||||
// either prefixed with a '+', '-' or ' '
|
||||
$this->lines = preg_split("/\015\012|\015|\012/", $diff, -1, PREG_SPLIT_NO_EMPTY);
|
||||
$this->lines = IDF_FileUtil::splitIntoLines($diff, true);
|
||||
}
|
||||
|
||||
public function parse()
|
||||
@ -66,12 +64,12 @@ class IDF_Diff
|
||||
}
|
||||
|
||||
// use new file name by default
|
||||
preg_match("/^\+\+\+ ([^\t]+)/", $newfileline, $m);
|
||||
preg_match("/^\+\+\+ ([^\t\n\r]+)/", $newfileline, $m);
|
||||
$current_file = $m[1];
|
||||
if ($current_file === '/dev/null') {
|
||||
// except if it's /dev/null, use the old one instead
|
||||
// eg. mtn 0.48 and newer
|
||||
preg_match("/^--- ([^\t]+)/", $oldfileline, $m);
|
||||
preg_match("/^--- ([^\t\r\n]+)/", $oldfileline, $m);
|
||||
$current_file = $m[1];
|
||||
}
|
||||
if ($this->path_strip_level > 0) {
|
||||
@ -102,10 +100,11 @@ class IDF_Diff
|
||||
|
||||
while ($i < $diffsize && ($addlines >= 0 || $dellines >= 0)) {
|
||||
$linetype = $this->lines[$i] != '' ? $this->lines[$i][0] : false;
|
||||
$content = substr($this->lines[$i], 1);
|
||||
switch ($linetype) {
|
||||
case ' ':
|
||||
$files[$current_file]['chunks'][$current_chunk][] =
|
||||
array($delstart, $addstart, substr($this->lines[$i++], 1));
|
||||
array($delstart, $addstart, $content);
|
||||
$dellines--;
|
||||
$addlines--;
|
||||
$delstart++;
|
||||
@ -113,23 +112,26 @@ class IDF_Diff
|
||||
break;
|
||||
case '+':
|
||||
$files[$current_file]['chunks'][$current_chunk][] =
|
||||
array('', $addstart, substr($this->lines[$i++], 1));
|
||||
array('', $addstart, $content);
|
||||
$addlines--;
|
||||
$addstart++;
|
||||
break;
|
||||
case '-':
|
||||
$files[$current_file]['chunks'][$current_chunk][] =
|
||||
array($delstart, '', substr($this->lines[$i++], 1));
|
||||
array($delstart, '', $content);
|
||||
$dellines--;
|
||||
$delstart++;
|
||||
break;
|
||||
case '\\':
|
||||
// ignore newline handling for now, see issue 636
|
||||
$i++;
|
||||
// no new line at the end of this file; remove pseudo new line from last line
|
||||
$cur = count($files[$current_file]['chunks'][$current_chunk]) - 1;
|
||||
$files[$current_file]['chunks'][$current_chunk][$cur][2] =
|
||||
rtrim($files[$current_file]['chunks'][$current_chunk][$cur][2], "\r\n");
|
||||
continue;
|
||||
default:
|
||||
break 2;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
$current_chunk++;
|
||||
}
|
||||
@ -150,40 +152,74 @@ class IDF_Diff
|
||||
if (IDF_FileUtil::isSupportedExtension($fileinfo[2])) {
|
||||
$pretty = ' prettyprint';
|
||||
}
|
||||
$out .= "\n".'<table class="diff" summary="">'."\n";
|
||||
$out .= '<tr id="diff-'.md5($filename).'"><th colspan="3">'.Pluf_esc($filename).'</th></tr>'."\n";
|
||||
|
||||
$cc = 1;
|
||||
$offsets = array();
|
||||
$contents = array();
|
||||
|
||||
foreach ($file['chunks'] as $chunk) {
|
||||
foreach ($chunk as $line) {
|
||||
if ($line[0] and $line[1]) {
|
||||
$class = 'diff-c';
|
||||
} elseif ($line[0]) {
|
||||
$class = 'diff-r';
|
||||
list($left, $right, $content) = $line;
|
||||
if ($left and $right) {
|
||||
$class = 'context';
|
||||
} elseif ($left) {
|
||||
$class = 'removed';
|
||||
} else {
|
||||
$class = 'diff-a';
|
||||
}
|
||||
$line_content = self::padLine(Pluf_esc($line[2]));
|
||||
$out .= sprintf('<tr class="diff-line"><td class="diff-lc">%s</td><td class="diff-lc">%s</td><td class="%s%s mono">%s</td></tr>'."\n", $line[0], $line[1], $class, $pretty, $line_content);
|
||||
}
|
||||
if (count($file['chunks']) > $cc)
|
||||
$out .= '<tr class="diff-next"><td>...</td><td>...</td><td> </td></tr>'."\n";
|
||||
$cc++;
|
||||
}
|
||||
$out .= '</table>';
|
||||
}
|
||||
return Pluf_Template::markSafe($out);
|
||||
$class = 'added';
|
||||
}
|
||||
|
||||
public static function padLine($line)
|
||||
{
|
||||
$line = str_replace("\t", ' ', $line);
|
||||
$n = strlen($line);
|
||||
for ($i=0;$i<$n;$i++) {
|
||||
if (substr($line, $i, 1) != ' ') {
|
||||
break;
|
||||
$offsets[] = sprintf('<td>%s</td><td>%s</td>', $left, $right);
|
||||
$content = IDF_FileUtil::emphasizeControlCharacters(Pluf_esc($content));
|
||||
$contents[] = sprintf('<td class="%s%s mono">%s</td>', $class, $pretty, $content);
|
||||
}
|
||||
if (count($file['chunks']) > $cc) {
|
||||
$offsets[] = '<td class="next">...</td><td class="next">...</td>';
|
||||
$contents[] = '<td class="next"></td>';
|
||||
}
|
||||
return str_repeat(' ', $i).substr($line, $i);
|
||||
$cc++;
|
||||
}
|
||||
|
||||
list($added, $removed) = end($file['chunks_def']);
|
||||
|
||||
$added = $added[0] + $added[1];
|
||||
$leftwidth = 1;
|
||||
if ($added > 0)
|
||||
$leftwidth = ((ceil(log10($added)) + 1) * 8) + 12;
|
||||
|
||||
$removed = $removed[0] + $removed[1];
|
||||
$rightwidth = 1;
|
||||
if ($removed > 0)
|
||||
$rightwidth = ((ceil(log10($removed)) + 1) * 8) + 12;
|
||||
|
||||
$inner_linecounts =
|
||||
'<table class="diff-linecounts">' ."\n".
|
||||
'<colgroup><col width="'.$leftwidth.'" /><col width="'. $rightwidth.'" /></colgroup>' ."\n".
|
||||
'<tr class="line">' .
|
||||
implode('</tr>'."\n".'<tr class="line">', $offsets).
|
||||
'</tr>' ."\n".
|
||||
'</table>' ."\n";
|
||||
|
||||
|
||||
$inner_contents =
|
||||
'<table class="diff-contents">' ."\n".
|
||||
'<tr class="line">' .
|
||||
implode('</tr>'."\n".'<tr class="line">', $contents) .
|
||||
'</tr>' ."\n".
|
||||
'</table>' ."\n";
|
||||
|
||||
$out .= '<table class="diff unified">' ."\n".
|
||||
'<colgroup><col width="'.($leftwidth + $rightwidth + 1).'" /><col width="*" /></colgroup>' ."\n".
|
||||
'<tr id="diff-'.md5($filename).'">'.
|
||||
'<th colspan="2">'.Pluf_esc($filename).'</th>'.
|
||||
'</tr>' ."\n".
|
||||
'<tr>' .
|
||||
'<td>'. $inner_linecounts .'</td>'. "\n".
|
||||
'<td><div class="scroll">'. $inner_contents .'</div></td>'.
|
||||
'</tr>' ."\n".
|
||||
'</table>' ."\n";
|
||||
}
|
||||
|
||||
return Pluf_Template::markSafe($out);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -208,12 +244,12 @@ class IDF_Diff
|
||||
*/
|
||||
public function fileCompare($orig, $chunks, $filename, $context=10)
|
||||
{
|
||||
$orig_lines = preg_split("/\015\012|\015|\012/", $orig);
|
||||
$orig_lines = IDF_FileUtil::splitIntoLines($orig);
|
||||
$new_chunks = $this->mergeChunks($orig_lines, $chunks, $context);
|
||||
return $this->renderCompared($new_chunks, $filename);
|
||||
}
|
||||
|
||||
public function mergeChunks($orig_lines, $chunks, $context=10)
|
||||
private function mergeChunks($orig_lines, $chunks, $context=10)
|
||||
{
|
||||
$spans = array();
|
||||
$new_chunks = array();
|
||||
@ -310,38 +346,115 @@ class IDF_Diff
|
||||
return $nnew_chunks;
|
||||
}
|
||||
|
||||
public function renderCompared($chunks, $filename)
|
||||
private function renderCompared($chunks, $filename)
|
||||
{
|
||||
$fileinfo = IDF_FileUtil::getMimeType($filename);
|
||||
$pretty = '';
|
||||
if (IDF_FileUtil::isSupportedExtension($fileinfo[2])) {
|
||||
$pretty = ' prettyprint';
|
||||
}
|
||||
$out = '';
|
||||
|
||||
$cc = 1;
|
||||
$i = 0;
|
||||
$left_offsets = array();
|
||||
$left_contents = array();
|
||||
$right_offsets = array();
|
||||
$right_contents = array();
|
||||
|
||||
$max_lineno_left = $max_lineno_right = 0;
|
||||
|
||||
foreach ($chunks as $chunk) {
|
||||
foreach ($chunk as $line) {
|
||||
$line1 = ' ';
|
||||
$line2 = ' ';
|
||||
$line[2] = (strlen($line[2])) ? self::padLine(Pluf_esc($line[2])) : ' ';
|
||||
$left = '';
|
||||
$right = '';
|
||||
$content = IDF_FileUtil::emphasizeControlCharacters(Pluf_esc($line[2]));
|
||||
|
||||
if ($line[0] and $line[1]) {
|
||||
$class = 'diff-c';
|
||||
$line1 = $line2 = $line[2];
|
||||
$class = 'context';
|
||||
$left = $right = $content;
|
||||
} elseif ($line[0]) {
|
||||
$class = 'diff-r';
|
||||
$line1 = $line[2];
|
||||
$class = 'removed';
|
||||
$left = $content;
|
||||
} else {
|
||||
$class = 'diff-a';
|
||||
$line2 = $line[2];
|
||||
$class = 'added';
|
||||
$right = $content;
|
||||
}
|
||||
$out .= sprintf('<tr class="diff-line"><td class="diff-lc">%s</td><td class="%s mono%s"><code>%s</code></td><td class="diff-lc">%s</td><td class="%s mono%s"><code>%s</code></td></tr>'."\n", $line[0], $class, $pretty, $line1, $line[1], $class, $pretty, $line2);
|
||||
|
||||
$left_offsets[] = sprintf('<td>%s</td>', $line[0]);
|
||||
$right_offsets[] = sprintf('<td>%s</td>', $line[1]);
|
||||
$left_contents[] = sprintf('<td class="%s%s mono">%s</td>', $class, $pretty, $left);
|
||||
$right_contents[] = sprintf('<td class="%s%s mono">%s</td>', $class, $pretty, $right);
|
||||
|
||||
$max_lineno_left = max($max_lineno_left, $line[0]);
|
||||
$max_lineno_right = max($max_lineno_right, $line[1]);
|
||||
}
|
||||
|
||||
if (count($chunks) > $cc) {
|
||||
$left_offsets[] = '<td class="next">...</td>';
|
||||
$right_offsets[] = '<td class="next">...</td>';
|
||||
$left_contents[] = '<td></td>';
|
||||
$right_contents[] = '<td></td>';
|
||||
}
|
||||
if (count($chunks) > $cc)
|
||||
$out .= '<tr class="diff-next"><td>...</td><td> </td><td>...</td><td> </td></tr>'."\n";
|
||||
$cc++;
|
||||
$i++;
|
||||
}
|
||||
|
||||
$leftwidth = 1;
|
||||
if ($max_lineno_left > 0)
|
||||
$leftwidth = ((ceil(log10($max_lineno_left)) + 1) * 8) + 12;
|
||||
|
||||
$rightwidth = 1;
|
||||
if ($max_lineno_right > 0)
|
||||
$rightwidth = ((ceil(log10($max_lineno_right)) + 1) * 8) + 12;
|
||||
|
||||
$inner_linecounts_left =
|
||||
'<table class="diff-linecounts">' ."\n".
|
||||
'<colgroup><col width="'.$leftwidth.'" /></colgroup>' ."\n".
|
||||
'<tr class="line">' .
|
||||
implode('</tr>'."\n".'<tr class="line">', $left_offsets).
|
||||
'</tr>' ."\n".
|
||||
'</table>' ."\n";
|
||||
|
||||
$inner_linecounts_right =
|
||||
'<table class="diff-linecounts">' ."\n".
|
||||
'<colgroup><col width="'.$rightwidth.'" /></colgroup>' ."\n".
|
||||
'<tr class="line">' .
|
||||
implode('</tr>'."\n".'<tr class="line">', $right_offsets).
|
||||
'</tr>' ."\n".
|
||||
'</table>' ."\n";
|
||||
|
||||
$inner_contents_left =
|
||||
'<table class="diff-contents">' ."\n".
|
||||
'<tr class="line">' .
|
||||
implode('</tr>'."\n".'<tr class="line">', $left_contents) .
|
||||
'</tr>' ."\n".
|
||||
'</table>' ."\n";
|
||||
|
||||
$inner_contents_right =
|
||||
'<table class="diff-contents">' ."\n".
|
||||
'<tr class="line">' .
|
||||
implode('</tr>'."\n".'<tr class="line">', $right_contents) .
|
||||
'</tr>' ."\n".
|
||||
'</table>' ."\n";
|
||||
|
||||
$out =
|
||||
'<table class="diff context">' ."\n".
|
||||
'<colgroup>' .
|
||||
'<col width="'.($leftwidth + 1).'" /><col width="*" />' .
|
||||
'<col width="'.($rightwidth + 1).'" /><col width="*" />' .
|
||||
'</colgroup>' ."\n".
|
||||
'<tr id="diff-'.md5($filename).'">'.
|
||||
'<th colspan="4">'.Pluf_esc($filename).'</th>'.
|
||||
'</tr>' ."\n".
|
||||
'<tr>' .
|
||||
'<th colspan="2">'.__('Old').'</th><th colspan="2">'.__('New').'</th>' .
|
||||
'</tr>'.
|
||||
'<tr>' .
|
||||
'<td>'. $inner_linecounts_left .'</td>'. "\n".
|
||||
'<td><div class="scroll">'. $inner_contents_left .'</div></td>'. "\n".
|
||||
'<td>'. $inner_linecounts_right .'</td>'. "\n".
|
||||
'<td><div class="scroll">'. $inner_contents_right .'</div></td>'. "\n".
|
||||
'</tr>' ."\n".
|
||||
'</table>' ."\n";
|
||||
|
||||
return Pluf_Template::markSafe($out);
|
||||
}
|
||||
}
|
||||
|
@ -65,9 +65,9 @@ class IDF_FileUtil
|
||||
}
|
||||
$table = array();
|
||||
$i = 1;
|
||||
foreach (preg_split("/\015\012|\015|\012/", $content) as $line) {
|
||||
foreach (self::splitIntoLines($content) as $line) {
|
||||
$table[] = '<tr class="c-line"><td class="code-lc" id="L'.$i.'"><a href="#L'.$i.'">'.$i.'</a></td>'
|
||||
.'<td class="code mono'.$pretty.'">'.IDF_Diff::padLine(Pluf_esc($line)).'</td></tr>';
|
||||
.'<td class="code mono'.$pretty.'">'.self::emphasizeControlCharacters(Pluf_esc($line)).'</td></tr>';
|
||||
$i++;
|
||||
}
|
||||
return Pluf_Template::markSafe(implode("\n", $table));
|
||||
@ -143,6 +143,56 @@ class IDF_FileUtil
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits a string into separate lines while retaining the individual
|
||||
* line ending character for every line.
|
||||
*
|
||||
* OS9 line endings are not supported.
|
||||
*
|
||||
* @param string content
|
||||
* @param boolean if true, skip completely empty lines
|
||||
* @return string
|
||||
*/
|
||||
public static function splitIntoLines($content, $skipEmpty = false)
|
||||
{
|
||||
$flags = PREG_SPLIT_OFFSET_CAPTURE;
|
||||
if ($skipEmpty) $flags |= PREG_SPLIT_NO_EMPTY;
|
||||
$splitted = preg_split("/\r\n|\n/", $content, -1, $flags);
|
||||
|
||||
$last_off = -1;
|
||||
$lines = array();
|
||||
while (($split = array_shift($splitted)) !== null) {
|
||||
if ($last_off != -1) {
|
||||
$lines[] .= substr($content, $last_off, $split[1] - $last_off);
|
||||
}
|
||||
$last_off = $split[1];
|
||||
}
|
||||
$lines[] = substr($content, $last_off);
|
||||
return $lines;
|
||||
}
|
||||
|
||||
/**
|
||||
* This translates most of the C0 ASCII control characters into
|
||||
* their visual counterparts in the 0x24## unicode plane
|
||||
* (http://en.wikipedia.org/wiki/C0_and_C1_control_codes).
|
||||
*
|
||||
* We could add DEL (0x7F) to this set, but unfortunately this
|
||||
* is not nicely mapped to 0x247F in the control plane, but 0x2421
|
||||
* and adding an if expression below just for this is a little bit
|
||||
* of a hassle. And of course, the more esoteric ones from C1 are
|
||||
* missing as well...
|
||||
*
|
||||
* @param string $content
|
||||
* @return string
|
||||
*/
|
||||
public static function emphasizeControlCharacters($content)
|
||||
{
|
||||
return preg_replace(
|
||||
'/([\x00-\x1F])/ue',
|
||||
'"<span class=\"ctrl-char\" title=\"0x".bin2hex("\\1")."\">$".bin2hex("\\1")."</span>"',
|
||||
$content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find if a given mime type is a text file.
|
||||
* This uses the output of the self::getMimeType function.
|
||||
|
@ -507,33 +507,27 @@ class IDF_Scm_Git extends IDF_Scm
|
||||
"'".$this->mediumtree_fmt."'",
|
||||
escapeshellarg($commit));
|
||||
}
|
||||
$out = array();
|
||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||
self::exec('IDF_Scm_Git::getCommit', $cmd, $out, $ret);
|
||||
if ($ret != 0 or count($out) == 0) {
|
||||
$out = self::shell_exec('IDF_Scm_Git::getCommit', $cmd);
|
||||
if (strlen($out) == 0) {
|
||||
return false;
|
||||
}
|
||||
if ($getdiff) {
|
||||
$log = array();
|
||||
$change = array();
|
||||
$inchange = false;
|
||||
foreach ($out as $line) {
|
||||
if (!$inchange and 0 === strpos($line, 'diff --git a')) {
|
||||
$inchange = true;
|
||||
}
|
||||
if ($inchange) {
|
||||
$change[] = $line;
|
||||
} else {
|
||||
$log[] = $line;
|
||||
}
|
||||
}
|
||||
$out = self::parseLog($log);
|
||||
$out[0]->diff = implode("\n", $change);
|
||||
} else {
|
||||
$out = self::parseLog($out);
|
||||
$out[0]->diff = '';
|
||||
|
||||
$diffStart = false;
|
||||
if (preg_match('/^diff (?:--git a|--cc)/m', $out, $m, PREG_OFFSET_CAPTURE)) {
|
||||
$diffStart = $m[0][1];
|
||||
}
|
||||
|
||||
$diff = '';
|
||||
if ($diffStart !== false) {
|
||||
$log = substr($out, 0, $diffStart);
|
||||
$diff = substr($out, $diffStart);
|
||||
} else {
|
||||
$log = $out;
|
||||
}
|
||||
|
||||
$out = self::parseLog(preg_split('/\r\n|\n/', $log));
|
||||
$out[0]->diff = $diff;
|
||||
$out[0]->branch = implode(', ', $this->inBranches($out[0]->commit, null));
|
||||
return $out[0];
|
||||
}
|
||||
|
@ -408,24 +408,23 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
||||
escapeshellarg($commit),
|
||||
escapeshellarg($this->repo),
|
||||
escapeshellarg($logStyle->get()));
|
||||
$out = array();
|
||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||
self::exec('IDF_Scm_Mercurial::getCommit', $cmd, $out);
|
||||
$log = array();
|
||||
$change = array();
|
||||
$inchange = false;
|
||||
foreach ($out as $line) {
|
||||
if (!$inchange and 0 === strpos($line, 'diff -r')) {
|
||||
$inchange = true;
|
||||
$out = self::shell_exec('IDF_Scm_Mercurial::getCommit', $cmd);
|
||||
if (strlen($out) == 0) {
|
||||
return false;
|
||||
}
|
||||
if ($inchange) {
|
||||
$change[] = $line;
|
||||
|
||||
$diffStart = strpos($out, 'diff -r');
|
||||
$diff = '';
|
||||
if ($diffStart !== false) {
|
||||
$log = substr($out, 0, $diffStart);
|
||||
$diff = substr($out, $diffStart);
|
||||
} else {
|
||||
$log[] = $line;
|
||||
$log = $out;
|
||||
}
|
||||
}
|
||||
$out = self::parseLog($log);
|
||||
$out[0]->diff = implode("\n", $change);
|
||||
|
||||
$out = self::parseLog(preg_split('/\r\n|\n/', $log));
|
||||
$out[0]->diff = $diff;
|
||||
return $out[0];
|
||||
}
|
||||
|
||||
|
@ -32,21 +32,24 @@ class IDF_Tests_TestDiff extends UnitTestCase
|
||||
parent::__construct('Test the diff parser.');
|
||||
}
|
||||
|
||||
public function testBinaryDiff()
|
||||
{
|
||||
$diff_content = file_get_contents(dirname(__FILE__).'/test-diff.diff');
|
||||
$orig = file_get_contents(dirname(__FILE__).'/test-diff-view.html');
|
||||
$diff = new IDF_Diff($diff_content);
|
||||
$diff->parse();
|
||||
$def = $diff->files['src/IDF/templates/idf/issues/view.html'];
|
||||
|
||||
$orig_lines = preg_split("/\015\012|\015|\012/", $orig);
|
||||
$merged = $diff->mergeChunks($orig_lines, $def, 10);
|
||||
$lchunk = end($merged);
|
||||
$lline = end($lchunk);
|
||||
$this->assertEqual(array('', '166', '{/if}{/block}'),
|
||||
$lline);
|
||||
}
|
||||
//
|
||||
// IDF_Diff::mergeChunks() is now private, so this test needs to be rewritten
|
||||
//
|
||||
//public function testBinaryDiff()
|
||||
//{
|
||||
// $diff_content = file_get_contents(dirname(__FILE__).'/test-diff.diff');
|
||||
// $orig = file_get_contents(dirname(__FILE__).'/test-diff-view.html');
|
||||
// $diff = new IDF_Diff($diff_content);
|
||||
// $diff->parse();
|
||||
// $def = $diff->files['src/IDF/templates/idf/issues/view.html'];
|
||||
//
|
||||
// $orig_lines = preg_split("/\015\012|\015|\012/", $orig);
|
||||
// $merged = $diff->mergeChunks($orig_lines, $def, 10);
|
||||
// $lchunk = end($merged);
|
||||
// $lline = end($lchunk);
|
||||
// $this->assertEqual(array('', '166', '{/if}{/block}'),
|
||||
// $lline);
|
||||
//}
|
||||
|
||||
public function testDiffWithHeaders()
|
||||
{
|
||||
|
@ -68,6 +68,9 @@
|
||||
return row.to;
|
||||
}
|
||||
});
|
||||
{/literal}
|
||||
{if $issue}
|
||||
{literal}
|
||||
$("#id_relation_issue" + idx).autocomplete("{/literal}{url 'IDF_Views_Issue::autoCompleteIssueList', array($project.shortname, $issue.id)}{literal}", {
|
||||
minChars: 0,
|
||||
width: 310,
|
||||
@ -83,6 +86,9 @@
|
||||
return row[1];
|
||||
}
|
||||
});
|
||||
{/literal}
|
||||
{/if}
|
||||
{literal}
|
||||
}
|
||||
});
|
||||
{/literal} //-->
|
||||
|
@ -10,8 +10,26 @@
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
<table class="disp" summary="">
|
||||
<tr><td>
|
||||
{if !$user.isAnonymous()}
|
||||
<div class="issue-submit-info" style="width: 50%; float: right; position: relative;">
|
||||
<p><strong>{trans 'How to Participate in a Code Review'}</strong></p>
|
||||
|
||||
<p>{blocktrans}Code review is a process in which
|
||||
after or before changes are commited into the code repository,
|
||||
different people discuss the code changes. The goal is
|
||||
to <strong>improve the quality of the code and the
|
||||
contributions</strong>, as such, you must be pragmatic when writing
|
||||
your review. Correctly mention the line numbers (in the old or in the
|
||||
new file) and try to keep a good balance between seriousness and fun.
|
||||
{/blocktrans}</p>
|
||||
<p>{blocktrans}
|
||||
<strong>Proposing code for review is intimidating</strong>, you know
|
||||
you will receive critics, so please, as a reviewer, <strong>keep this
|
||||
process fun</strong>, use it to help your contributor learn your
|
||||
coding standards and the structure of the code and <strong>make them want
|
||||
to propose more contributions</strong>.
|
||||
{/blocktrans}</p></div>
|
||||
{/if}
|
||||
<table class="commit" summary="">
|
||||
<tr>
|
||||
<th><strong>{trans 'Created:'}</strong></th><td>{$patch.creation_dtime|date:"%Y-%m-%d %H:%M:%S"} ({$patch.creation_dtime|dateago})</td>
|
||||
@ -45,39 +63,12 @@
|
||||
<th> </th><td><a href="{$url}"><img style="vertical-align: text-bottom;" src="{media '/idf/img/package-grey.png'}" alt="{trans 'Archive'}" align="bottom" /></a> <a href="{$url}" class="soft">{trans 'Download the corresponding diff file'}</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td><td>
|
||||
{if !$user.isAnonymous()}
|
||||
<div class="issue-submit-info" style="width: 90%; float: right; position: relative;">
|
||||
<p><strong>{trans 'How to Participate in a Code Review'}</strong></p>
|
||||
|
||||
<p>{blocktrans}Code review is a process in which
|
||||
after or before changes are commited into the code repository,
|
||||
different people discuss the code changes. The goal is
|
||||
to <strong>improve the quality of the code and the
|
||||
contributions</strong>, as such, you must be pragmatic when writing
|
||||
your review. Correctly mention the line numbers (in the old or in the
|
||||
new file) and try to keep a good balance between seriousness and fun.
|
||||
{/blocktrans}</p>
|
||||
<p>{blocktrans}
|
||||
<strong>Proposing code for review is intimidating</strong>, you know
|
||||
you will receive critics, so please, as a reviewer, <strong>keep this
|
||||
process fun</strong>, use it to help your contributor learn your
|
||||
coding standards and the structure of the code and <strong>make them want
|
||||
to propose more contributions</strong>.
|
||||
{/blocktrans}</p></div>
|
||||
{/if}
|
||||
</td></tr>
|
||||
</table>
|
||||
|
||||
<form method="post" action=".">
|
||||
{foreach $files as $file=>$def}
|
||||
<table class="diff" summary=" ">
|
||||
<tbody>
|
||||
<tr id="diff-{$file|md5}"><th colspan="4">{$file}</th></tr>
|
||||
<tr><th colspan="2">{trans 'Old'}</th><th colspan="2">{trans 'New'}</th></tr>
|
||||
|
||||
{$def[0]}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{assign $fcomments = $def[2]}
|
||||
{assign $nc = $fcomments.count()}
|
||||
{assign $i = 1}
|
||||
|
@ -38,11 +38,9 @@ class IDF_DiffTest extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
$expectedfile = str_replace('.diff', '.expected', $difffile);
|
||||
$expectedcontent = @file_get_contents($expectedfile);
|
||||
|
||||
$diffcontent = file_get_contents($difffile);
|
||||
$diff = new IDF_Diff($diffcontent, $diffprefix);
|
||||
$this->assertEquals(unserialize($expectedcontent),
|
||||
$this->assertEquals(require_once($expectedfile),
|
||||
$diff->parse(),
|
||||
'parsed diff '.$difffile.' does not match');
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ if (file_exists($testconfig['db_database'])) {
|
||||
}
|
||||
|
||||
echo ">>> creating empty test database...\n";
|
||||
passthru('php ' . PLUF_PATH . '/migrate.php --conf=' . TESTDIR . '/config.php -a -i');
|
||||
passthru('php ' . escapeshellarg(PLUF_PATH.'/migrate.php') . ' --conf=' . escapeshellarg(TESTDIR.'/config.php').' -a -i');
|
||||
|
||||
echo ">>> setting up web application...\n";
|
||||
require 'Pluf.php';
|
||||
|
File diff suppressed because one or more lines are too long
@ -15,375 +15,10 @@ Index: LinuxBIOSv1/src/include/cpu/i786/cpufixup.h
|
||||
+
|
||||
+
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\include\cpu\i786\cpufixup.h
|
||||
Eigenschafts<EFBFBD>nderungen: LinuxBIOSv1\src\include\cpu\i786\cpufixup.h
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
Hinzugef<EFBFBD>gt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
+ native
|
||||
|
||||
Index: LinuxBIOSv1/src/mainboard/tyan/guiness/cmos.layout
|
||||
===================================================================
|
||||
--- LinuxBIOSv1/src/mainboard/tyan/guiness/cmos.layout (Revision 0)
|
||||
+++ LinuxBIOSv1/src/mainboard/tyan/guiness/cmos.layout (Revision 665)
|
||||
@@ -0,0 +1,63 @@
|
||||
+entries
|
||||
+
|
||||
+#start-bit length config config-ID name
|
||||
+#0 8 r 0 seconds
|
||||
+#8 8 r 0 alarm_seconds
|
||||
+#16 8 r 0 minutes
|
||||
+#24 8 r 0 alarm_minutes
|
||||
+#32 8 r 0 hours
|
||||
+#40 8 r 0 alarm_hours
|
||||
+#48 8 r 0 day_of_week
|
||||
+#56 8 r 0 day_of_month
|
||||
+#64 8 r 0 month
|
||||
+#72 8 r 0 year
|
||||
+#80 4 r 0 rate_select
|
||||
+#84 3 r 0 REF_Clock
|
||||
+#87 1 r 0 UIP
|
||||
+#88 1 r 0 auto_switch_DST
|
||||
+#89 1 r 0 24_hour_mode
|
||||
+#90 1 r 0 binary_values_enable
|
||||
+#91 1 r 0 square-wave_out_enable
|
||||
+#92 1 r 0 update_finished_enable
|
||||
+#93 1 r 0 alarm_interrupt_enable
|
||||
+#94 1 r 0 periodic_interrupt_enable
|
||||
+#95 1 r 0 disable_clock_updates
|
||||
+#96 288 r 0 temporary_filler
|
||||
+0 384 r 0 reserved_memory
|
||||
+384 1 e 4 boot_option
|
||||
+385 1 e 4 last_boot
|
||||
+386 3 e 5 baud_rate
|
||||
+392 4 e 6 debug_level
|
||||
+396 1 e 1 power_on_after_fail
|
||||
+#401 1 e 1 ECC_memory
|
||||
+#402 1 e 2 hda_disk
|
||||
+#403 1 e 2 hdb_disk
|
||||
+#404 1 e 2 hdc_disk
|
||||
+#405 1 e 2 hdd_disk
|
||||
+#406 2 e 7 boot_device
|
||||
+
|
||||
+enumerations
|
||||
+
|
||||
+#ID value text
|
||||
+1 0 Disable
|
||||
+1 1 Enable
|
||||
+#2 0 No
|
||||
+#2 1 Yes
|
||||
+4 0 Fallback
|
||||
+4 1 Normal
|
||||
+5 0 115200
|
||||
+5 1 57600
|
||||
+5 2 38400
|
||||
+5 3 19200
|
||||
+5 4 9600
|
||||
+5 5 4800
|
||||
+5 6 2400
|
||||
+5 7 1200
|
||||
+6 6 Notice
|
||||
+6 7 Info
|
||||
+6 8 Debug
|
||||
+6 9 Spew
|
||||
+#7 0 Network
|
||||
+#7 1 HDD
|
||||
+#7 2 Floppy
|
||||
+#7 3 ROM
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\mainboard\tyan\guiness\cmos.layout
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
+ native
|
||||
|
||||
Index: LinuxBIOSv1/src/config/linuxbios_c.ld
|
||||
===================================================================
|
||||
--- LinuxBIOSv1/src/config/linuxbios_c.ld (Revision 0)
|
||||
+++ LinuxBIOSv1/src/config/linuxbios_c.ld (Revision 665)
|
||||
@@ -0,0 +1,105 @@
|
||||
+/*
|
||||
+ * Memory map:
|
||||
+ *
|
||||
+ * _RAMBASE
|
||||
+ * : data segment
|
||||
+ * : bss segment
|
||||
+ * : heap
|
||||
+ * : stack
|
||||
+ */
|
||||
+/*
|
||||
+ * Bootstrap code for the STPC Consumer
|
||||
+ * Copyright (c) 1999 by Net Insight AB. All Rights Reserved.
|
||||
+ *
|
||||
+ * $Id$
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * Written by Johan Rydberg, based on work by Daniel Kahlin.
|
||||
+ * Rewritten by Eric Biederman
|
||||
+ */
|
||||
+/*
|
||||
+ * We use ELF as output format. So that we can
|
||||
+ * debug the code in some form.
|
||||
+ */
|
||||
+INCLUDE ldoptions
|
||||
+
|
||||
+ENTRY(_start)
|
||||
+
|
||||
+SECTIONS
|
||||
+{
|
||||
+ . = _RAMBASE;
|
||||
+ /*
|
||||
+ * First we place the code and read only data (typically const declared).
|
||||
+ * This get placed in rom.
|
||||
+ */
|
||||
+ .text : {
|
||||
+ _text = .;
|
||||
+ *(.text);
|
||||
+ *(.text.*);
|
||||
+ . = ALIGN(16);
|
||||
+ _etext = .;
|
||||
+ }
|
||||
+ .rodata : {
|
||||
+ _rodata = .;
|
||||
+ . = ALIGN(4);
|
||||
+ streams = . ;
|
||||
+ *(.rodata.streams)
|
||||
+ estreams = .;
|
||||
+ . = ALIGN(4);
|
||||
+ pci_drivers = . ;
|
||||
+ *(.rodata.pci_drivers)
|
||||
+ epci_drivers = . ;
|
||||
+ *(.rodata)
|
||||
+ *(.rodata.*)
|
||||
+ _erodata = .;
|
||||
+ }
|
||||
+ /*
|
||||
+ * After the code we place initialized data (typically initialized
|
||||
+ * global variables). This gets copied into ram by startup code.
|
||||
+ * __data_start and __data_end shows where in ram this should be placed,
|
||||
+ * whereas __data_loadstart and __data_loadend shows where in rom to
|
||||
+ * copy from.
|
||||
+ */
|
||||
+ .data : {
|
||||
+ _data = .;
|
||||
+ *(.data)
|
||||
+ _edata = .;
|
||||
+ }
|
||||
+ /*
|
||||
+ * bss does not contain data, it is just a space that should be zero
|
||||
+ * initialized on startup. (typically uninitialized global variables)
|
||||
+ * crt0.S fills between _bss and _ebss with zeroes.
|
||||
+ */
|
||||
+ _bss = .;
|
||||
+ .bss . : {
|
||||
+ *(.bss)
|
||||
+ *(.sbss)
|
||||
+ *(COMMON)
|
||||
+ }
|
||||
+ _ebss = .;
|
||||
+ _end = .;
|
||||
+ _stack = .;
|
||||
+ .stack . : {
|
||||
+ /* Reserve a stack for each possible cpu, +1 extra */
|
||||
+ . = ((MAX_CPUS * STACK_SIZE) + STACK_SIZE) ;
|
||||
+ }
|
||||
+ _estack = .;
|
||||
+ _heap = .;
|
||||
+ .heap . : {
|
||||
+ /* Reserve 256K for the heap */
|
||||
+ . = HEAP_SIZE ;
|
||||
+ . = ALIGN(4);
|
||||
+ }
|
||||
+ _eheap = .;
|
||||
+ /* The ram segment
|
||||
+ * This is all address of the memory resident copy of linuxBIOS.
|
||||
+ */
|
||||
+ _ram_seg = _text;
|
||||
+ _eram_seg = _eheap;
|
||||
+ /DISCARD/ : {
|
||||
+ *(.comment)
|
||||
+ *(.note)
|
||||
+ }
|
||||
+}
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\config\linuxbios_c.ld
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
+ native
|
||||
|
||||
Index: LinuxBIOSv1/src/arch/i386/include/arch/rom_segs.h
|
||||
===================================================================
|
||||
--- LinuxBIOSv1/src/arch/i386/include/arch/rom_segs.h (Revision 0)
|
||||
+++ LinuxBIOSv1/src/arch/i386/include/arch/rom_segs.h (Revision 665)
|
||||
@@ -0,0 +1,10 @@
|
||||
+#ifndef ROM_SEGS_H
|
||||
+#define ROM_SEGS_H
|
||||
+
|
||||
+#define ROM_CODE_SEG 0x08
|
||||
+#define ROM_DATA_SEG 0x10
|
||||
+
|
||||
+#define CACHE_RAM_CODE_SEG 0x18
|
||||
+#define CACHE_RAM_DATA_SEG 0x20
|
||||
+
|
||||
+#endif /* ROM_SEGS_H */
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\arch\i386\include\arch\rom_segs.h
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
+ native
|
||||
|
||||
Index: LinuxBIOSv1/src/arch/i386/lib/c_start.S
|
||||
===================================================================
|
||||
--- LinuxBIOSv1/src/arch/i386/lib/c_start.S (Revision 0)
|
||||
+++ LinuxBIOSv1/src/arch/i386/lib/c_start.S (Revision 665)
|
||||
@@ -0,0 +1,135 @@
|
||||
+#include <arch/asm.h>
|
||||
+#include <arch/intel.h>
|
||||
+#ifdef SMP
|
||||
+#include <cpu/p6/apic.h>
|
||||
+#endif
|
||||
+ .section ".text"
|
||||
+ .code32
|
||||
+ .globl _start
|
||||
+_start:
|
||||
+ cli
|
||||
+ lgdt %cs:gdtaddr
|
||||
+ ljmp $0x10, $1f
|
||||
+1: movl $0x18, %ax
|
||||
+ movl %eax, %ds
|
||||
+ movl %eax, %es
|
||||
+ movl %eax, %ss
|
||||
+ movl %eax, %fs
|
||||
+ movl %eax, %gs
|
||||
+
|
||||
+ intel_chip_post_macro(0x13) /* post 12 */
|
||||
+
|
||||
+ /** clear stack */
|
||||
+ leal EXT(_stack), %edi
|
||||
+ movl $EXT(_estack), %ecx
|
||||
+ subl %edi, %ecx
|
||||
+ xorl %eax, %eax
|
||||
+ rep
|
||||
+ stosb
|
||||
+
|
||||
+ /** clear bss */
|
||||
+ leal EXT(_bss), %edi
|
||||
+ movl $EXT(_ebss), %ecx
|
||||
+ subl %edi, %ecx
|
||||
+ jz .Lnobss
|
||||
+ xorl %eax, %eax
|
||||
+ rep
|
||||
+ stosb
|
||||
+.Lnobss:
|
||||
+
|
||||
+ /* set new stack */
|
||||
+ movl $_estack, %esp
|
||||
+#ifdef SMP
|
||||
+ /* Get the cpu id */
|
||||
+ movl $APIC_DEFAULT_BASE, %edi
|
||||
+ movl APIC_ID(%edi), %eax
|
||||
+ shrl $24, %eax
|
||||
+
|
||||
+ /* Get the cpu index (MAX_CPUS on error) */
|
||||
+ movl $-4, %ebx
|
||||
+1: addl $4, %ebx
|
||||
+ cmpl $(MAX_CPUS << 2), %ebx
|
||||
+ je 2
|
||||
+ cmpl %eax, EXT(initial_apicid)(%ebx)
|
||||
+ jne 1b
|
||||
+2: shrl $2, %ebx
|
||||
+
|
||||
+ /* Now compute the appropriate stack */
|
||||
+ movl %ebx, %eax
|
||||
+ movl $STACK_SIZE, %ebx
|
||||
+ mull %ebx
|
||||
+ subl %eax, %esp
|
||||
+
|
||||
+ /* push the boot_complete flag */
|
||||
+ pushl %ebp
|
||||
+
|
||||
+ /* Save the stack location */
|
||||
+ movl %esp, %ebp
|
||||
+
|
||||
+ /*
|
||||
+ * Now we are finished. Memory is up, data is copied and
|
||||
+ * bss is cleared. Now we call the main routine and
|
||||
+ * let it do the rest.
|
||||
+ */
|
||||
+ intel_chip_post_macro(0xfe) /* post fe */
|
||||
+
|
||||
+ /* Resort the stack location */
|
||||
+ movl %ebp, %esp
|
||||
+
|
||||
+ /* The boot_complete flag has already been pushed */
|
||||
+ call EXT(hardwaremain)
|
||||
+ /*NOTREACHED*/
|
||||
+.Lhlt:
|
||||
+ intel_chip_post_macro(0xee) /* post fe */
|
||||
+ hlt
|
||||
+ jmp .Lhlt
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+ .globl gdt, gdt_end, gdt_limit
|
||||
+
|
||||
+gdt_limit = gdt_end - gdt - 1 /* compute the table limit */
|
||||
+gdtaddr:
|
||||
+ .word gdt_limit
|
||||
+ .long gdt /* we know the offset */
|
||||
+
|
||||
+gdt:
|
||||
+// selgdt 0
|
||||
+ .word 0x0000, 0x0000 /* dummy */
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00
|
||||
+
|
||||
+// selgdt 8
|
||||
+ .word 0x0000, 0x0000 /* dummy */
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00
|
||||
+
|
||||
+// selgdt 0x10
|
||||
+/* flat code segment */
|
||||
+ .word 0xffff, 0x0000
|
||||
+ .byte 0x00, 0x9b, 0xcf, 0x00
|
||||
+
|
||||
+//selgdt 0x18
|
||||
+/* flat data segment */
|
||||
+ .word 0xffff, 0x0000
|
||||
+ .byte 0x00, 0x93, 0xcf, 0x00
|
||||
+
|
||||
+//selgdt 0x20
|
||||
+ .word 0x0000, 0x0000 /* dummy */
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00
|
||||
+
|
||||
+#if defined(CONFIG_VGABIOS) && (CONFIG_VGABIOS == 1)
|
||||
+ // from monty:
|
||||
+ /* 0x00009a00,0000ffffULL, 20h: 16-bit 64k code at 0x00000000 */
|
||||
+ /* 0x00009200,0000ffffULL 28h: 16-bit 64k data at 0x00000000 */
|
||||
+// selgdt 0x28
|
||||
+/*16-bit 64k code at 0x00000000 */
|
||||
+ .word 0xffff, 0x0000
|
||||
+ .byte 0, 0x9a, 0, 0
|
||||
+
|
||||
+// selgdt 0x30
|
||||
+/*16-bit 64k data at 0x00000000 */
|
||||
+ .word 0xffff, 0x0000
|
||||
+ .byte 0, 0x92, 0, 0
|
||||
+#endif // defined(CONFIG_VGABIOS) && (CONFIG_VGABIOS == 1)
|
||||
+gdt_end:
|
||||
+
|
||||
+.code32
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\arch\i386\lib\c_start.S
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
Hinzugef<EFBFBD>gt: svn:eol-style
|
||||
+ native
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@ -1 +1,33 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:1:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:3:"abc";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
||||
<?php return array (
|
||||
'a' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => "abc\r\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '0',
|
||||
1 => '0',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,39 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:3:"abc";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:3:"abc";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"2";}}}}}
|
||||
<?php return array (
|
||||
'a' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => "abc\r\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => 2,
|
||||
2 => "abc\r\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '0',
|
||||
1 => '0',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '2',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,39 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:3:"abc";}i:1;a:3:{i:0;i:2;i:1;s:0:"";i:2;s:3:"abc";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"2";}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
||||
<?php return array (
|
||||
'a' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '1',
|
||||
2 => "abc\r\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => 2,
|
||||
1 => '',
|
||||
2 => "abc\r\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '2',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,39 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:0:"";i:2;s:3:"abc";}i:1;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:2:"ls";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
||||
<?php return array (
|
||||
'a' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '',
|
||||
2 => "abc\r\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => "ls\r\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,39 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:2:"ls";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:2:"ls";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"2";}}}}}
|
||||
<?php return array (
|
||||
'a' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '1',
|
||||
2 => "ls\r\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => 2,
|
||||
2 => "ls\r\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '2',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,45 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:3:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:2:"ls";}i:1;a:3:{i:0;i:2;i:1;i:2;i:2;s:2:"ls";}i:2;a:3:{i:0;s:0:"";i:1;i:3;i:2;s:1:"l";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"2";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"3";}}}}}
|
||||
<?php return array (
|
||||
'a' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '1',
|
||||
2 => "ls\r\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => 2,
|
||||
1 => 2,
|
||||
2 => "ls\r\n",
|
||||
),
|
||||
2 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => 3,
|
||||
2 => "l\r\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '2',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '3',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,33 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:1:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:3:"foo";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"1";}}}}}
|
||||
<?php return array (
|
||||
'a' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => "foo\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '0',
|
||||
1 => '0',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '1',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,39 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:3:"foo";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:2:"bf";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"1";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"2";}}}}}
|
||||
<?php return array (
|
||||
'a' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '1',
|
||||
2 => "foo\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => 2,
|
||||
2 => "bf\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '1',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '2',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,33 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:1:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:3:"abc";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
||||
<?php return array (
|
||||
'a' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => "abc\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '0',
|
||||
1 => '0',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,45 @@
|
||||
a:1:{s:1:"b";a:2:{s:6:"chunks";a:1:{i:0;a:3:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:1:"a";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:1:"b";}i:2;a:3:{i:0;s:0:"";i:1;i:3;i:2;b:0;}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"3";}}}}}
|
||||
<?php return array (
|
||||
'b' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => "a\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => 2,
|
||||
2 => "b\n",
|
||||
),
|
||||
2 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => 3,
|
||||
2 => "\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '0',
|
||||
1 => '0',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '3',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,51 @@
|
||||
a:1:{s:1:"b";a:2:{s:6:"chunks";a:1:{i:0;a:4:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:1:"a";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:1:"l";}i:2;a:3:{i:0;i:2;i:1;i:3;i:2;s:1:"b";}i:3;a:3:{i:0;i:3;i:1;i:4;i:2;b:0;}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"3";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"4";}}}}}
|
||||
<?php return array (
|
||||
'b' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '1',
|
||||
2 => "a\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => 2,
|
||||
2 => "l\n",
|
||||
),
|
||||
2 =>
|
||||
array (
|
||||
0 => 2,
|
||||
1 => 3,
|
||||
2 => "b\n",
|
||||
),
|
||||
3 =>
|
||||
array (
|
||||
0 => 3,
|
||||
1 => 4,
|
||||
2 => "\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '3',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '4',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,45 @@
|
||||
a:1:{s:1:"b";a:2:{s:6:"chunks";a:1:{i:0;a:3:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:1:"a";}i:1;a:3:{i:0;i:2;i:1;s:0:"";i:2;s:1:"b";}i:2;a:3:{i:0;i:3;i:1;s:0:"";i:2;b:0;}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"3";}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
||||
<?php return array (
|
||||
'b' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '1',
|
||||
2 => "a\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => 2,
|
||||
1 => '',
|
||||
2 => "b\n",
|
||||
),
|
||||
2 =>
|
||||
array (
|
||||
0 => 3,
|
||||
1 => '',
|
||||
2 => "\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '3',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,39 @@
|
||||
a:1:{s:9:"test_file";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:0:"";i:2;s:17:"Steddy is awesome";}i:1;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:22:"Steddy is very awesome";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
||||
<?php return array (
|
||||
'test_file' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '',
|
||||
2 => "Steddy is awesome\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => 'Steddy is very awesome',
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,39 @@
|
||||
a:1:{s:3:"foo";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:0:"";i:2;s:11:"This is foo";}i:1;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:11:"This is foo";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
||||
<?php return array (
|
||||
'foo' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '',
|
||||
2 => "This is foo\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => 'This is foo',
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -1 +1,39 @@
|
||||
a:1:{s:3:"foo";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:0:"";i:2;s:11:"This is foo";}i:1;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:11:"This is foo";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
||||
<?php return array (
|
||||
'foo' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '',
|
||||
2 => "This is foo",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => "This is foo\n",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
10
test/data/IDF_DiffTest/test-18-git-lineendings.diff
Normal file
10
test/data/IDF_DiffTest/test-18-git-lineendings.diff
Normal file
@ -0,0 +1,10 @@
|
||||
diff --git a/lineendings b/lineendings
|
||||
index 7c2b7ec..9c59944 100644
|
||||
--- a/lineendings
|
||||
+++ b/lineendings
|
||||
@@ -1,3 +1,4 @@
|
||||
+Unix, again
|
||||
Windows
|
||||
Unix
|
||||
Old Macintosh
Nothing
|
||||
\ No newline at end of file
|
51
test/data/IDF_DiffTest/test-18-git-lineendings.expected
Normal file
51
test/data/IDF_DiffTest/test-18-git-lineendings.expected
Normal file
@ -0,0 +1,51 @@
|
||||
<?php return array (
|
||||
'lineendings' =>
|
||||
array (
|
||||
'chunks' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '',
|
||||
1 => '1',
|
||||
2 => "Unix, again\n",
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => 2,
|
||||
2 => "Windows\r\n",
|
||||
),
|
||||
2 =>
|
||||
array (
|
||||
0 => 2,
|
||||
1 => 3,
|
||||
2 => "Unix\n",
|
||||
),
|
||||
3 =>
|
||||
array (
|
||||
0 => 3,
|
||||
1 => 4,
|
||||
2 => "Old Macintosh\rNothing",
|
||||
),
|
||||
),
|
||||
),
|
||||
'chunks_def' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '3',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
0 => '1',
|
||||
1 => '4',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
@ -571,9 +571,38 @@ table.commit table.changes table.properties td.removed {
|
||||
/**
|
||||
* syntax highlighting of diffs
|
||||
*/
|
||||
span.ctrl-char {
|
||||
color: white;
|
||||
background: black;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
padding: 1px 1px 0px 1px;
|
||||
margin-left: 1px;
|
||||
margin-right: 1px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* special formatting for the TAB character: make it wider, so it is rendered more properly */
|
||||
span.ctrl-char[title="0x09"] {
|
||||
width: 24px;
|
||||
}
|
||||
|
||||
table.diff {
|
||||
border-bottom: 1px solid #d3d7cf;
|
||||
width: 100%;
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
table.diff td {
|
||||
border: none;
|
||||
vertical-align: top;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table.diff.unified > tbody > tr > td + td,
|
||||
table.diff.context > tbody > tr > td + td + td + td {
|
||||
border-right: 1px solid #d3d7cf;
|
||||
}
|
||||
|
||||
table.diff th {
|
||||
@ -582,61 +611,92 @@ table.diff th {
|
||||
border-color: #d3d7cf;
|
||||
}
|
||||
|
||||
|
||||
table.diff tr {
|
||||
border-left: 1px solid #d3d7cf;
|
||||
border-right: 1px solid #d3d7cf;
|
||||
border-bottom: none;
|
||||
border-top: none;
|
||||
table.diff div.scroll {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
table.diff td {
|
||||
font-size: 90%;
|
||||
table.diff-contents td,
|
||||
table.diff-linecounts td {
|
||||
vertical-align: top;
|
||||
padding: 1px;
|
||||
border-color: inherit;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table.diff td.diff-lc {
|
||||
text-align: right;
|
||||
padding: 1px 5px;
|
||||
border-color: inherit;
|
||||
border-top: 1px solid #d3d7cf;
|
||||
border-bottom: 1px solid #d3d7cf;
|
||||
width: 3em;
|
||||
}
|
||||
|
||||
td.diff-a {
|
||||
background-color: #dfd;
|
||||
}
|
||||
|
||||
td.diff-r {
|
||||
background-color: #fdd;
|
||||
}
|
||||
|
||||
td.diff-a, td.diff-r, td.diff-c {
|
||||
border-bottom: none;
|
||||
border-top: none;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
td.diff-a > span,
|
||||
td.diff-r > span,
|
||||
td.diff-c > span {
|
||||
float: left;
|
||||
}
|
||||
|
||||
table.diff tr.diff-next {
|
||||
table.diff-contents td.next,
|
||||
table.diff-linecounts td.next {
|
||||
background-color: #e4e8E0;
|
||||
vertical-align: top;
|
||||
text-align: right;
|
||||
border-color: #d3d7cf;
|
||||
padding: 1px 10px;
|
||||
}
|
||||
|
||||
table.diff tr.diff-next td {
|
||||
padding: 1px 5px;
|
||||
table.diff-linecounts {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
table.diff-contents {
|
||||
border-bottom: 1px solid #d3d7cf;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
table.diff-linecounts tr,
|
||||
table.diff-contents tr {
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
table.diff-linecounts tr {
|
||||
border: 1px solid #d3d7cf;
|
||||
}
|
||||
|
||||
table.diff-linecounts tr:first-child {
|
||||
border-top: 0px;
|
||||
}
|
||||
|
||||
table.diff-linecounts td {
|
||||
font-size: 90%;
|
||||
padding: 1px 10px;
|
||||
text-align: right;
|
||||
border-left: 1px solid #d3d7cf;
|
||||
}
|
||||
|
||||
table.diff-contents td {
|
||||
line-height: 12px;
|
||||
padding: 2px;
|
||||
font-size: 90%;
|
||||
border: none;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
table.diff-contents td.added {
|
||||
background-color: #dfd;
|
||||
}
|
||||
|
||||
table.diff-contents td.removed {
|
||||
background-color: #fdd;
|
||||
}
|
||||
|
||||
table.diff-contents td > span.ctrl-char {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
table.diff-contents td:hover > span.ctrl-char {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
table.diff-contents td.added > span.ctrl-char {
|
||||
background: #0A0;
|
||||
}
|
||||
|
||||
table.diff-contents td.removed > span.ctrl-char {
|
||||
background: #A00;
|
||||
}
|
||||
|
||||
/* override prettify css rule */
|
||||
table.diff-contents td > span.ctrl-char > * {
|
||||
color: white;
|
||||
}
|
||||
|
||||
/**
|
||||
* view file content
|
||||
@ -680,6 +740,14 @@ table.code td.code {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
table.code td.code span.ctrl-char {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
table.code td.code:hover span.ctrl-char {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
table.code td.code-lc {
|
||||
text-align: right;
|
||||
padding: 1px 5px;
|
||||
@ -1153,4 +1221,3 @@ table.issue-summary td.graph-color {
|
||||
table.issue-summary td.graph-percent {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user