Merge branch 'develop' into feature.scilab

This commit is contained in:
Thomas Keller 2011-10-27 23:41:12 +02:00
commit 34fbf6ec5f
35 changed files with 8380 additions and 683 deletions

19
.gitignore vendored
View File

@ -1,14 +1,19 @@
*~ *~
tmp .buildpath
.externalToolBuilders
.project
.settings
.tx/config
attachments
indefero-*.zip
src/IDF/conf/idf.php src/IDF/conf/idf.php
src/IDF/conf/idf.test.php src/IDF/conf/idf.test.php
www/test.php
www/media/upload
src/IDF/gettexttemplates
indefero-*.zip
src/IDF/conf/path.php src/IDF/conf/path.php
.tx/config src/IDF/gettexttemplates
src/IDF/locale/idf.pot.bak src/IDF/locale/idf.pot.bak
test/config.php
test/test.db test/test.db
test/tmp test/tmp
test/config.php tmp
www/media/upload
www/test.php

View File

@ -1,10 +1,7 @@
# InDefero 1.2 - xxx xxx xx xx:xx 2011 UTC # InDefero 1.3 - xxx xxx xx xx:xx 2011 UTC
The development of this version of Indefero has partially been sponsored by the friendly folks The development of this version of Indefero has partially been sponsored
from Scilab <http://www.scilab.org/>! by the friendly folks from Scilab <http://www.scilab.org/>!
ATTENTION: You need Pluf [324ae60b](http://projects.ceondo.com/p/pluf/source/commit/324ae60b)
or newer to properly run this version of Indefero!
## Changes ## Changes
@ -14,58 +11,81 @@ or newer to properly run this version of Indefero!
`$cfg['webhook_processing']` flag to "compat", we urge you to change the `$cfg['webhook_processing']` flag to "compat", we urge you to change the
implementations of this web hook as this setting is likely to be removed implementations of this web hook as this setting is likely to be removed
in future versions of Indefero. in future versions of Indefero.
## New Features ## New Features
- Projects can get an external project URL configured that is displayed as linkable - Projects can get an external project URL configured that is displayed as
icon right beside the project name (if available) linkable icon right beside the project name (if available)
- It is now possible to configure a web hook that informs an external URL about new and - It is now possible to configure a web hook that informs an external URL about
updated downloads for a specific project, similar to the available post-commit web hook new and updated downloads for a specific project, similar to the available
- Indefero's issue tracker can now bi-directionally link issues with variable, configurable post-commit web hook
terms, such as "is related to", "is blocked by" or "is duplicated by" (issue 638)
- When you search for issues, the results can further be refined by issue state (open or closed) # InDefero 1.2 - xxx xxx xx xx:xx 2011 UTC
and label (partially implements issue 548)
- Mercurial source views now show parent revisions (if any) and detailed change information ATTENTION: You need Pluf [46b7f251](http://projects.ceondo.com/p/pluf/source/commit/46b7f251)
or newer to properly run this version of Indefero!
## New Features
- Indefero's issue tracker can now bi-directionally link issues with variable,
configurable terms, such as "is related to", "is blocked by" or
"is duplicated by" (issue 638)
- When you search for issues, the results can further be refined by issue state
(open or closed) and label (partially implements issue 548)
- Source and diff views now make characters like line endings, tabs and other
"invisible" control characters visible on hover and cope with long lines much
better (issue 636)
- Mercurial source views now show parent revisions (if any) and detailed change
information
- Subversion source views now show detailed change information (issue 622) - Subversion source views now show detailed change information (issue 622)
- File download URLs now contain the file name rather than the upload id; old links still work though (issues 559 and 686) - File download URLs now contain the file name rather than the upload id;
- Display monotone file and directory attributes in the tree and file view old links still work though (issues 559 and 686)
- monotone file and directory attributes are displayed in the tree and file view
(needs a monotone with an interface version of 13.1 or newer) (needs a monotone with an interface version of 13.1 or newer)
- The context area is now kept in view when a page scrolls down several pages - The context area is now kept in view when a page scrolls down several pages
- Add a summary section to the issue tracker with statistics about open/close issues, - A summary section has been added to the issue tracker with statistics about
tags of open issue, and count of open tickets for each owner. open / closed issues, unresolved issues grouped by tags and owners
- Improved home page with an customizable icon for each project. - The project list and title has gathered a customizable icon for each project
- The download section provide MD5 for each files. - The download section now provides MD5 checksums for uploaded files
- Wiki page have now a css for printer output (issue 713) - Wiki pages now come with a designated stylesheet for printer output (issue 713)
## Bugfixes ## Bugfixes
- The SVN interface acts more robust if an underlying repository has been restructured (issues 364 and 721) - Git's cron job doesn't erase manually added keys anymore (issue 247)
- The SVN interface acts more robust if an underlying repository has been
restructured (issues 364 and 721)
- monotone zip archive entries now all carry the revision date as mtime (issue 645) - monotone zip archive entries now all carry the revision date as mtime (issue 645)
- Timeline only displays filter options for items a user has actually access to (issue 655) - The timeline only now only displays filter options for items a user has
actually access to (issue 655)
- The log, tags and branches parsers for Mercurial are more robust now (issue 663) - The log, tags and branches parsers for Mercurial are more robust now (issue 663)
- Fix SSH public key parsing issues and improve the check for existing, uploaded keys (issue 679) - Several SSH public key parsing issues have been fixed and the check for existing,
uploaded keys has been improved (issue 679)
- Diff views now show empty context lines for git and hg again (issue 688) - Diff views now show empty context lines for git and hg again (issue 688)
- Let the SVN command line client not store the login credentials we give him as arguments - The SVN command line client no longer accidential tries to store the login
credentials we give him as arguments for the user executing the SVN command
- The usher section in the forge administration no longer displays a bogus - The usher section in the forge administration no longer displays a bogus
server enty in case no monotone server is configured in the connected server enty in case no monotone server is configured in the connected
usher instance usher instance
- Prevent a timeout from popping up when Usher is restarted (issue 695) - A timeout that popped up when Usher is restarted has been fixed (issue 695)
- The SyncMonotone plugin now cleans up partial artifacts it created during the addition of - The SyncMonotone plugin now cleans up partial artifacts it created during the
a new project or monotone key, in case an error popped up in the middle (issue 697) addition of a new project or monotone key, in case an error popped up in the
middle (issue 697)
- Indefero now sends the MD5 checksum as HTTP header when downloading a file from the - Indefero now sends the MD5 checksum as HTTP header when downloading a file from the
download area. Additionally, a unneeded redirect has been removed. (issue 716) download area; additionally, a unneeded redirect has been removed (issue 716)
- Source links without a specific revision did not work due to a wrong regex (issue 730)
- Better error detection and reporting in the SyncMonotone plugin
ATTENTION: This needs Pluf 46b7f251 or newer!
- Fix the branch links users of the Subversion frontend get when they enter a wrong revision
and only display this list if there are any branches available for all SCMs
- If git's author name is not encoded in an UTF-8 compatible encoding, skip the author lookup,
as we have no information what the author string is actually encoded in
- Indefero no longer displays an empty parents paragraph in the commit view for root revisions of
a git repository
- Indefero now only shows the tags of the closed and not the open issues in the closed issues list
- Avatar URL generation use correctly the configuration (issue 732) - Avatar URL generation use correctly the configuration (issue 732)
- Git cron job doesn't erase anymore manually added keys (issue 247) - Source links without a specific revision did not work due to a wrong regex
(issue 730)
- The error detection and reporting in the SyncMonotone plugin has been improved
- The branch links users of the Subversion frontend get when they enter a wrong
revision are fixed; this list is now also only displayed (for any SCM) if
there are actually branches available in the repository
- If git's author name is not encoded in an UTF-8 compatible encoding, skip the
author lookup, as we have no information what the author string is actually
encoded in
- Indefero no longer displays an empty parents paragraph in the commit view for
root revisions of a git repository
- Indefero now only shows the tags of the closed and not the open issues in the
closed issues list
## Documentation ## Documentation

View File

@ -35,9 +35,7 @@ class IDF_Diff
public function __construct($diff, $path_strip_level = 0) public function __construct($diff, $path_strip_level = 0)
{ {
$this->path_strip_level = $path_strip_level; $this->path_strip_level = $path_strip_level;
// this works because in unified diff format even empty lines are $this->lines = IDF_FileUtil::splitIntoLines($diff, true);
// either prefixed with a '+', '-' or ' '
$this->lines = preg_split("/\015\012|\015|\012/", $diff, -1, PREG_SPLIT_NO_EMPTY);
} }
public function parse() public function parse()
@ -66,12 +64,12 @@ class IDF_Diff
} }
// use new file name by default // use new file name by default
preg_match("/^\+\+\+ ([^\t]+)/", $newfileline, $m); preg_match("/^\+\+\+ ([^\t\n\r]+)/", $newfileline, $m);
$current_file = $m[1]; $current_file = $m[1];
if ($current_file === '/dev/null') { if ($current_file === '/dev/null') {
// except if it's /dev/null, use the old one instead // except if it's /dev/null, use the old one instead
// eg. mtn 0.48 and newer // eg. mtn 0.48 and newer
preg_match("/^--- ([^\t]+)/", $oldfileline, $m); preg_match("/^--- ([^\t\r\n]+)/", $oldfileline, $m);
$current_file = $m[1]; $current_file = $m[1];
} }
if ($this->path_strip_level > 0) { if ($this->path_strip_level > 0) {
@ -102,10 +100,11 @@ class IDF_Diff
while ($i < $diffsize && ($addlines >= 0 || $dellines >= 0)) { while ($i < $diffsize && ($addlines >= 0 || $dellines >= 0)) {
$linetype = $this->lines[$i] != '' ? $this->lines[$i][0] : false; $linetype = $this->lines[$i] != '' ? $this->lines[$i][0] : false;
$content = substr($this->lines[$i], 1);
switch ($linetype) { switch ($linetype) {
case ' ': case ' ':
$files[$current_file]['chunks'][$current_chunk][] = $files[$current_file]['chunks'][$current_chunk][] =
array($delstart, $addstart, substr($this->lines[$i++], 1)); array($delstart, $addstart, $content);
$dellines--; $dellines--;
$addlines--; $addlines--;
$delstart++; $delstart++;
@ -113,23 +112,26 @@ class IDF_Diff
break; break;
case '+': case '+':
$files[$current_file]['chunks'][$current_chunk][] = $files[$current_file]['chunks'][$current_chunk][] =
array('', $addstart, substr($this->lines[$i++], 1)); array('', $addstart, $content);
$addlines--; $addlines--;
$addstart++; $addstart++;
break; break;
case '-': case '-':
$files[$current_file]['chunks'][$current_chunk][] = $files[$current_file]['chunks'][$current_chunk][] =
array($delstart, '', substr($this->lines[$i++], 1)); array($delstart, '', $content);
$dellines--; $dellines--;
$delstart++; $delstart++;
break; break;
case '\\': case '\\':
// ignore newline handling for now, see issue 636 // no new line at the end of this file; remove pseudo new line from last line
$i++; $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; continue;
default: default:
break 2; break 2;
} }
$i++;
} }
$current_chunk++; $current_chunk++;
} }
@ -144,46 +146,92 @@ class IDF_Diff
public function as_html() public function as_html()
{ {
$out = ''; $out = '';
foreach ($this->files as $filename=>$file) { foreach ($this->files as $filename => $file) {
$pretty = ''; $pretty = '';
$fileinfo = IDF_FileUtil::getMimeType($filename); $fileinfo = IDF_FileUtil::getMimeType($filename);
if (IDF_FileUtil::isSupportedExtension($fileinfo[2])) { if (IDF_FileUtil::isSupportedExtension($fileinfo[2])) {
$pretty = ' prettyprint'; $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; $cc = 1;
$offsets = array();
$contents = array();
foreach ($file['chunks'] as $chunk) { foreach ($file['chunks'] as $chunk) {
foreach ($chunk as $line) { foreach ($chunk as $line) {
if ($line[0] and $line[1]) { list($left, $right, $content) = $line;
$class = 'diff-c'; if ($left and $right) {
} elseif ($line[0]) { $class = 'context';
$class = 'diff-r'; } elseif ($left) {
$class = 'removed';
} else { } else {
$class = 'diff-a'; $class = 'added';
} }
$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); $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>';
} }
if (count($file['chunks']) > $cc)
$out .= '<tr class="diff-next"><td>...</td><td>...</td><td>&nbsp;</td></tr>'."\n";
$cc++; $cc++;
} }
$out .= '</table>';
}
return Pluf_Template::markSafe($out);
}
public static function padLine($line) list($added, $removed) = end($file['chunks_def']);
{
$line = str_replace("\t", ' ', $line); $added = $added[0] + $added[1];
$n = strlen($line); $leftwidth = 0;
for ($i=0;$i<$n;$i++) { if ($added > 0)
if (substr($line, $i, 1) != ' ') { $leftwidth = ((ceil(log10($added)) + 1) * 8) + 12;
break;
$removed = $removed[0] + $removed[1];
$rightwidth = 0;
if ($removed > 0)
$rightwidth = ((ceil(log10($removed)) + 1) * 8) + 12;
// we need to correct the width of a single column a little
// to take less space and to hide the empty one
$class = '';
if ($leftwidth == 0) {
$class = 'left-hidden';
$rightwidth -= floor(log10($removed));
} }
else if ($rightwidth == 0) {
$class = 'right-hidden';
$leftwidth -= floor(log10($added));
}
$inner_linecounts =
'<table class="diff-linecounts '.$class.'">' ."\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 str_repeat('&nbsp;', $i).substr($line, $i);
return Pluf_Template::markSafe($out);
} }
/** /**
@ -208,12 +256,12 @@ class IDF_Diff
*/ */
public function fileCompare($orig, $chunks, $filename, $context=10) 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); $new_chunks = $this->mergeChunks($orig_lines, $chunks, $context);
return $this->renderCompared($new_chunks, $filename); return $this->renderCompared($new_chunks, $filename);
} }
public function mergeChunks($orig_lines, $chunks, $context=10) private function mergeChunks($orig_lines, $chunks, $context=10)
{ {
$spans = array(); $spans = array();
$new_chunks = array(); $new_chunks = array();
@ -310,38 +358,115 @@ class IDF_Diff
return $nnew_chunks; return $nnew_chunks;
} }
public function renderCompared($chunks, $filename) private function renderCompared($chunks, $filename)
{ {
$fileinfo = IDF_FileUtil::getMimeType($filename); $fileinfo = IDF_FileUtil::getMimeType($filename);
$pretty = ''; $pretty = '';
if (IDF_FileUtil::isSupportedExtension($fileinfo[2])) { if (IDF_FileUtil::isSupportedExtension($fileinfo[2])) {
$pretty = ' prettyprint'; $pretty = ' prettyprint';
} }
$out = '';
$cc = 1; $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 ($chunks as $chunk) {
foreach ($chunk as $line) { foreach ($chunk as $line) {
$line1 = '&nbsp;'; $left = '';
$line2 = '&nbsp;'; $right = '';
$line[2] = (strlen($line[2])) ? self::padLine(Pluf_esc($line[2])) : '&nbsp;'; $content = IDF_FileUtil::emphasizeControlCharacters(Pluf_esc($line[2]));
if ($line[0] and $line[1]) { if ($line[0] and $line[1]) {
$class = 'diff-c'; $class = 'context';
$line1 = $line2 = $line[2]; $left = $right = $content;
} elseif ($line[0]) { } elseif ($line[0]) {
$class = 'diff-r'; $class = 'removed';
$line1 = $line[2]; $left = $content;
} else { } else {
$class = 'diff-a'; $class = 'added';
$line2 = $line[2]; $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>&nbsp;</td><td>...</td><td>&nbsp;</td></tr>'."\n";
$cc++; $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); return Pluf_Template::markSafe($out);
} }
} }

View File

@ -65,9 +65,9 @@ class IDF_FileUtil
} }
$table = array(); $table = array();
$i = 1; $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>' $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++; $i++;
} }
return Pluf_Template::markSafe(implode("\n", $table)); return Pluf_Template::markSafe(implode("\n", $table));
@ -143,6 +143,56 @@ class IDF_FileUtil
return $res; 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")."\">&#x24".bin2hex("\\1")."</span>"',
$content);
}
/** /**
* Find if a given mime type is a text file. * Find if a given mime type is a text file.
* This uses the output of the self::getMimeType function. * This uses the output of the self::getMimeType function.

View File

@ -87,7 +87,7 @@ class IDF_Scm_Git extends IDF_Scm
$filename = trim(substr($line, 1)); $filename = trim(substr($line, 1));
$return->patches[] = $filename; $return->patches[] = $filename;
} else if ($action == 'R') { } else if ($action == 'R') {
$matches = split ("\t", $line); $matches = preg_split("/\t/", $line);
$return->renames[$matches[1]] = $matches[2]; $return->renames[$matches[1]] = $matches[2];
} }
} }
@ -507,33 +507,27 @@ class IDF_Scm_Git extends IDF_Scm
"'".$this->mediumtree_fmt."'", "'".$this->mediumtree_fmt."'",
escapeshellarg($commit)); escapeshellarg($commit));
} }
$out = array();
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd; $cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
self::exec('IDF_Scm_Git::getCommit', $cmd, $out, $ret); $out = self::shell_exec('IDF_Scm_Git::getCommit', $cmd);
if ($ret != 0 or count($out) == 0) { if (strlen($out) == 0) {
return false; return false;
} }
if ($getdiff) {
$log = array(); $diffStart = false;
$change = array(); if (preg_match('/^diff (?:--git a|--cc)/m', $out, $m, PREG_OFFSET_CAPTURE)) {
$inchange = false; $diffStart = $m[0][1];
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 = '';
} }
$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)); $out[0]->branch = implode(', ', $this->inBranches($out[0]->commit, null));
return $out[0]; return $out[0];
} }

View File

@ -408,24 +408,23 @@ class IDF_Scm_Mercurial extends IDF_Scm
escapeshellarg($commit), escapeshellarg($commit),
escapeshellarg($this->repo), escapeshellarg($this->repo),
escapeshellarg($logStyle->get())); escapeshellarg($logStyle->get()));
$out = array();
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd; $cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
self::exec('IDF_Scm_Mercurial::getCommit', $cmd, $out); $out = self::shell_exec('IDF_Scm_Mercurial::getCommit', $cmd);
$log = array(); if (strlen($out) == 0) {
$change = array(); return false;
$inchange = false;
foreach ($out as $line) {
if (!$inchange and 0 === strpos($line, 'diff -r')) {
$inchange = true;
}
if ($inchange) {
$change[] = $line;
} else {
$log[] = $line;
}
} }
$out = self::parseLog($log);
$out[0]->diff = implode("\n", $change); $diffStart = strpos($out, 'diff -r');
$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;
return $out[0]; return $out[0];
} }

View File

@ -32,21 +32,24 @@ class IDF_Tests_TestDiff extends UnitTestCase
parent::__construct('Test the diff parser.'); parent::__construct('Test the diff parser.');
} }
public function testBinaryDiff() //
{ // IDF_Diff::mergeChunks() is now private, so this test needs to be rewritten
$diff_content = file_get_contents(dirname(__FILE__).'/test-diff.diff'); //
$orig = file_get_contents(dirname(__FILE__).'/test-diff-view.html'); //public function testBinaryDiff()
$diff = new IDF_Diff($diff_content); //{
$diff->parse(); // $diff_content = file_get_contents(dirname(__FILE__).'/test-diff.diff');
$def = $diff->files['src/IDF/templates/idf/issues/view.html']; // $orig = file_get_contents(dirname(__FILE__).'/test-diff-view.html');
// $diff = new IDF_Diff($diff_content);
$orig_lines = preg_split("/\015\012|\015|\012/", $orig); // $diff->parse();
$merged = $diff->mergeChunks($orig_lines, $def, 10); // $def = $diff->files['src/IDF/templates/idf/issues/view.html'];
$lchunk = end($merged); //
$lline = end($lchunk); // $orig_lines = preg_split("/\015\012|\015|\012/", $orig);
$this->assertEqual(array('', '166', '{/if}{/block}'), // $merged = $diff->mergeChunks($orig_lines, $def, 10);
$lline); // $lchunk = end($merged);
} // $lline = end($lchunk);
// $this->assertEqual(array('', '166', '{/if}{/block}'),
// $lline);
//}
public function testDiffWithHeaders() public function testDiffWithHeaders()
{ {

View File

@ -2,11 +2,14 @@
{block tabissues} class="active"{/block} {block tabissues} class="active"{/block}
{block subtabs} {block subtabs}
<div id="sub-tabs"> <div id="sub-tabs">
<a {if $inSummaryIssues}class="active" {/if}href="{url 'IDF_Views_Issue::summary', array($project.shortname)}">{trans 'Summary'}</a> <a {if $inSummaryIssues}class="active" {/if}href="{url 'IDF_Views_Issue::summary', array($project.shortname)}">{trans 'Summary'}</a>
| <a {if $inOpenIssues}class="active" {/if}href="{url 'IDF_Views_Issue::index', array($project.shortname)}">{trans 'Open Issues'}</a> | <a {if $inAllIssues}class="active" {/if}href="{url 'IDF_Views_Issue::index', array($project.shortname)}">{trans 'All Issues'}</a>
{if !$user.isAnonymous()} | <a {if $inCreate}class="active" {/if}href="{url 'IDF_Views_Issue::create', array($project.shortname)}">{trans 'New Issue'}</a> | <a {if $inMyIssues}class="active" {/if}href="{url 'IDF_Views_Issue::userIssues', array($project.shortname, $user.login, 'submit')}">{trans 'My Issues'}</a> {if !$user.isAnonymous()}
| <a {if $inWatchList}class="active" {/if}href="{url 'IDF_Views_Issue::watchList', array($project.shortname, 'open')}">{trans 'My watch list'}</a>{/if} | | <a {if $inMyIssues}class="active" {/if}href="{url 'IDF_Views_Issue::userIssues', array($project.shortname, $user.login, 'submit')}">{trans 'My Issues'}</a>
<form class="star" action="{url 'IDF_Views_Issue::search', array($project.shortname)}" method="get"> | <a {if $inWatchList}class="active" {/if}href="{url 'IDF_Views_Issue::watchList', array($project.shortname, 'open')}">{trans 'My watch list'}</a>
| <a {if $inCreate}class="active" {/if}href="{url 'IDF_Views_Issue::create', array($project.shortname)}">{trans 'New Issue'}</a>
{/if}
| <form class="star" action="{url 'IDF_Views_Issue::search', array($project.shortname)}" method="get">
<input accesskey="4" type="text" value="{$query}" name="q" size="20" /> <input accesskey="4" type="text" value="{$query}" name="q" size="20" />
<input type="submit" name="s" value="{trans 'Search'}" /> <input type="submit" name="s" value="{trans 'Search'}" />
</form> </form>

View File

@ -1,5 +1,5 @@
{extends "idf/issues/base.html"} {extends "idf/issues/base.html"}
{block docclass}yui-t1{/block} {block docclass}yui-t1{assign $inAllIssues=true}{/block}
{block body} {block body}
{$issues.render} {$issues.render}
{if !$user.isAnonymous()} {if !$user.isAnonymous()}

View File

@ -1,5 +1,5 @@
{extends "idf/issues/base.html"} {extends "idf/issues/base.html"}
{block docclass}yui-t2{assign $inOpenIssues=true}{/block} {block docclass}yui-t2{assign $inAllIssues=true}{/block}
{block body} {block body}
{$issues.render} {$issues.render}
{if !$user.isAnonymous()} {if !$user.isAnonymous()}

View File

@ -68,6 +68,9 @@
return row.to; return row.to;
} }
}); });
{/literal}
{if $issue}
{literal}
$("#id_relation_issue" + idx).autocomplete("{/literal}{url 'IDF_Views_Issue::autoCompleteIssueList', array($project.shortname, $issue.id)}{literal}", { $("#id_relation_issue" + idx).autocomplete("{/literal}{url 'IDF_Views_Issue::autoCompleteIssueList', array($project.shortname, $issue.id)}{literal}", {
minChars: 0, minChars: 0,
width: 310, width: 310,
@ -83,6 +86,9 @@
return row[1]; return row[1];
} }
}); });
{/literal}
{/if}
{literal}
} }
}); });
{/literal} //--> {/literal} //-->

View File

@ -10,8 +10,26 @@
{/if} {/if}
</div> </div>
{/if} {/if}
<table class="disp" summary=""> {if !$user.isAnonymous()}
<tr><td> <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=""> <table class="commit" summary="">
<tr> <tr>
<th><strong>{trans 'Created:'}</strong></th><td>{$patch.creation_dtime|date:"%Y-%m-%d %H:%M:%S"} ({$patch.creation_dtime|dateago})</td> <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>&nbsp;</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> <th>&nbsp;</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> </tr>
</table> </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="."> <form method="post" action=".">
{foreach $files as $file=>$def} {foreach $files as $file=>$def}
<table class="diff" summary=" ">
<tbody> {$def[0]}
<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 $fcomments = $def[2]}
{assign $nc = $fcomments.count()} {assign $nc = $fcomments.count()}
{assign $i = 1} {assign $i = 1}

View File

@ -38,11 +38,9 @@ class IDF_DiffTest extends PHPUnit_Framework_TestCase
} }
$expectedfile = str_replace('.diff', '.expected', $difffile); $expectedfile = str_replace('.diff', '.expected', $difffile);
$expectedcontent = @file_get_contents($expectedfile);
$diffcontent = file_get_contents($difffile); $diffcontent = file_get_contents($difffile);
$diff = new IDF_Diff($diffcontent, $diffprefix); $diff = new IDF_Diff($diffcontent, $diffprefix);
$this->assertEquals(unserialize($expectedcontent), $this->assertEquals(require_once($expectedfile),
$diff->parse(), $diff->parse(),
'parsed diff '.$difffile.' does not match'); 'parsed diff '.$difffile.' does not match');
} }

View File

@ -21,7 +21,7 @@ if (file_exists($testconfig['db_database'])) {
} }
echo ">>> creating empty test database...\n"; 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"; echo ">>> setting up web application...\n";
require 'Pluf.php'; require 'Pluf.php';

File diff suppressed because one or more lines are too long

View File

@ -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 + Author Date Id Revision
Hinzugefügt: svn:eol-style Hinzugef<EFBFBD>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
+ native + native

File diff suppressed because one or more lines are too long

View File

@ -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,
),
),
),
),
);

View File

@ -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',
),
),
),
),
);

View File

@ -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,
),
),
),
),
);

View File

@ -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,
),
),
),
),
);

View File

@ -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',
),
),
),
),
);

View File

@ -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',
),
),
),
),
);

View File

@ -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',
),
),
),
),
);

View File

@ -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',
),
),
),
),
);

View File

@ -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,
),
),
),
),
);

View File

@ -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',
),
),
),
),
);

View File

@ -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',
),
),
),
),
);

View File

@ -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,
),
),
),
),
);

View File

@ -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,
),
),
),
),
);

View File

@ -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,
),
),
),
),
);

View File

@ -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,
),
),
),
),
);

View 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

View 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',
),
),
),
),
);

View File

@ -212,17 +212,17 @@ span.px-header-title a, span.px-header-title a:link, span.px-header-title a:visi
* Issue * Issue
*/ */
#tagscloud dl { #tagscloud dl {
margin: 0; margin: 0;
} }
#tagscloud dt { #tagscloud dt {
margin-top: .5em; margin-top: .5em;
font-weight: bold; font-weight: bold;
} }
#tagscloud dd { #tagscloud dd {
margin: 0; margin: 0;
display: inline; display: inline;
} }
a.issue-c { a.issue-c {
@ -506,16 +506,16 @@ table td.fileicon {
cursor: default; cursor: default;
display: block; display: block;
/* /*
if width will be 100% horizontal scrollbar will apear if width will be 100% horizontal scrollbar will apear
when scroll mode will be used when scroll mode will be used
*/ */
/*width: 100%;*/ /*width: 100%;*/
font: menu; font: menu;
font-size: 12px; font-size: 12px;
/* /*
it is very important, if line-height not setted or setted it is very important, if line-height not setted or setted
in relative units scroll will be broken in firefox in relative units scroll will be broken in firefox
*/ */
line-height: 16px; line-height: 16px;
overflow: hidden; overflow: hidden;
} }
@ -571,9 +571,43 @@ table.commit table.changes table.properties td.removed {
/** /**
* syntax highlighting of diffs * 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;
}
/* override any prettify css rule */
span.ctrl-char > * {
color: white;
}
table.diff { table.diff {
border-bottom: 1px solid #d3d7cf;
width: 100%; 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 { table.diff th {
@ -582,61 +616,92 @@ table.diff th {
border-color: #d3d7cf; border-color: #d3d7cf;
} }
table.diff div.scroll {
table.diff tr { overflow: auto;
border-left: 1px solid #d3d7cf;
border-right: 1px solid #d3d7cf;
border-bottom: none;
border-top: none;
} }
table.diff td { table.diff-contents td,
font-size: 90%; table.diff-linecounts td {
vertical-align: top; vertical-align: top;
padding: 1px;
border-color: inherit; border-color: inherit;
padding: 0;
} }
table.diff td.diff-lc { table.diff-contents td.next,
text-align: right; table.diff-linecounts td.next {
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 {
background-color: #e4e8E0; background-color: #e4e8E0;
vertical-align: top; vertical-align: top;
text-align: right; text-align: right;
border-color: #d3d7cf; border-color: #d3d7cf;
padding: 1px 10px;
} }
table.diff tr.diff-next td { table.diff-linecounts {
padding: 1px 5px; 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-linecounts.left-hidden tr > td:first-child,
table.diff-linecounts.right-hidden tr > td + td {
display: none;
}
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;
}
/** /**
* view file content * view file content
@ -680,6 +745,14 @@ table.code td.code {
padding-left: 5px; 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 { table.code td.code-lc {
text-align: right; text-align: right;
padding: 1px 5px; padding: 1px 5px;
@ -801,37 +874,37 @@ ol > li {
} }
#wiki-toc { #wiki-toc {
float: right; float: right;
margin-left: 10px; margin-left: 10px;
margin-bottom: 10px; margin-bottom: 10px;
max-width: 33%; max-width: 33%;
} }
#wiki-toc-content { #wiki-toc-content {
border: 1px solid #999999; border: 1px solid #999999;
border-width: 1px 0; border-width: 1px 0;
padding: 10px 0; padding: 10px 0;
padding-bottom: 15px; padding-bottom: 15px;
background-color: #ffffff; background-color: #ffffff;
display: block; display: block;
} }
#wiki-toc-content a { #wiki-toc-content a {
display: block; display: block;
margin-top: 0.5em; margin-top: 0.5em;
font-size: 90%; font-size: 90%;
} }
#wiki-toc-content a:first-child { #wiki-toc-content a:first-child {
margin-top: 0; margin-top: 0;
} }
#wiki-toc-content a.wiki-h2 { #wiki-toc-content a.wiki-h2 {
margin-left: 1em; margin-left: 1em;
} }
#wiki-toc-content a.wiki-h3 { #wiki-toc-content a.wiki-h3 {
margin-left: 2em; margin-left: 2em;
} }
/** /**
@ -1070,39 +1143,39 @@ span.scm-action.property-changed {
* Stats on index * Stats on index
*/ */
#stats > h3 { #stats > h3 {
text-decoration : underline; text-decoration : underline;
} }
#stats table tr td { #stats table tr td {
border-style: none; border-style: none;
} }
#stats td { #stats td {
padding: .2em; padding: .2em;
} }
/* /*
* Project list on index * Project list on index
*/ */
div.p-list-img { div.p-list-img {
float: left; float: left;
height: 32px; height: 32px;
margin-top: .5em; margin-top: .5em;
} }
div.p-list-prj { div.p-list-prj {
float: left; float: left;
margin: .5em 0 .5em .8em; margin: .5em 0 .5em .8em;
} }
div.p-list-prj p { div.p-list-prj p {
margin: 0px; margin: 0px;
} }
div.p-list-private { div.p-list-private {
bottom: 16px; bottom: 16px;
right: -3px; right: -3px;
position: relative; position: relative;
} }
a.external-link { a.external-link {
@ -1115,48 +1188,47 @@ a.external-link {
* Issue summary * Issue summary
*/ */
div.issue-summary { div.issue-summary {
float: left; float: left;
width: 50%; width: 50%;
} }
div.issue-summary > div { div.issue-summary > div {
margin-right: 3em; margin-right: 3em;
padding-top: 1em; padding-top: 1em;
} }
div.issue-summary h2 { div.issue-summary h2 {
border-bottom: 1px solid #A5E26A; border-bottom: 1px solid #A5E26A;
} }
table.issue-summary { table.issue-summary {
width: 100%; width: 100%;
} }
table.issue-summary tr td { table.issue-summary tr td {
border: 0; border: 0;
padding: .1em .005em; padding: .1em .005em;
} }
table.issue-summary td.graph { table.issue-summary td.graph {
width: 60%; width: 60%;
} }
table.issue-summary td.count { table.issue-summary td.count {
text-align: right; text-align: right;
padding-right: .5em; padding-right: .5em;
} }
table.graph { table.graph {
width: 100%; width: 100%;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
table.issue-summary td.graph-color { table.issue-summary td.graph-color {
background: #3C78B5; background: #3C78B5;
} }
table.issue-summary td.graph-percent { table.issue-summary td.graph-percent {
padding-left: 1em; padding-left: 1em;
} }