enhanced the file and blame view to display a log message

This commit is contained in:
hyung-hwan 2010-02-19 02:46:23 +00:00
parent 41c025c009
commit 889803afea
6 changed files with 166 additions and 87 deletions

View File

@ -25,9 +25,16 @@ class SubversionModel extends Model
$str = @svn_cat ($url, $rev); $str = @svn_cat ($url, $rev);
if ($str === FALSE) return FALSE; if ($str === FALSE) return FALSE;
$log = @svn_log ($url,
$fileinfo['created_rev'],
$fileinfo['created_rev'],
1, SVN_DISCOVER_CHANGED_PATHS);
if ($log === FALSE) return FALSE;
$fileinfo['fullpath'] = substr ( $fileinfo['fullpath'] = substr (
$info[0]['url'], strlen($info[0]['repos'])); $info[0]['url'], strlen($info[0]['repos']));
$fileinfo['content'] = $str; $fileinfo['content'] = $str;
$fileinfo['logmsg'] = (count($log) > 0)? $log[0]['msg']: '';
return $fileinfo; return $fileinfo;
} }
else if ($info[0]['kind'] == SVN_NODE_DIR) else if ($info[0]['kind'] == SVN_NODE_DIR)
@ -35,6 +42,12 @@ class SubversionModel extends Model
$list = @svn_ls ($url, $rev, FALSE, TRUE); $list = @svn_ls ($url, $rev, FALSE, TRUE);
if ($list === FALSE) return FALSE; if ($list === FALSE) return FALSE;
$log = @svn_log ($url,
$fileinfo['created_rev'],
$fileinfo['created_rev'],
1, SVN_DISCOVER_CHANGED_PATHS);
if ($log === FALSE) return FALSE;
$fileinfo['fullpath'] = substr ( $fileinfo['fullpath'] = substr (
$info[0]['url'], strlen($info[0]['repos'])); $info[0]['url'], strlen($info[0]['repos']));
$fileinfo['name'] = $info[0]['path']; $fileinfo['name'] = $info[0]['path'];
@ -43,7 +56,7 @@ class SubversionModel extends Model
$fileinfo['created_rev'] = $info[0]['revision']; $fileinfo['created_rev'] = $info[0]['revision'];
$fileinfo['last_author'] = $info[0]['last_changed_rev']; $fileinfo['last_author'] = $info[0]['last_changed_rev'];
$fileinfo['content'] = $list; $fileinfo['content'] = $list;
$fileinfo['logmsg'] = (count($log) > 0)? $log[0]['msg']: '';
return $fileinfo; return $fileinfo;
} }
@ -68,9 +81,16 @@ class SubversionModel extends Model
$str = @svn_blame ($url, $rev); $str = @svn_blame ($url, $rev);
if ($str === FALSE) return FALSE; if ($str === FALSE) return FALSE;
$log = @svn_log ($url,
$fileinfo['created_rev'],
$fileinfo['created_rev'],
1, SVN_DISCOVER_CHANGED_PATHS);
if ($log === FALSE) return FALSE;
$fileinfo['fullpath'] = substr ( $fileinfo['fullpath'] = substr (
$info[0]['url'], strlen($info[0]['repos'])); $info[0]['url'], strlen($info[0]['repos']));
$fileinfo['content'] = $str; $fileinfo['content'] = $str;
$fileinfo['logmsg'] = (count($log) > 0)? $log[0]['msg']: '';
return $fileinfo; return $fileinfo;
} }

View File

@ -104,68 +104,89 @@ print anchor ("source/history/{$project->id}/{$xpar}", $this->lang->line('Histor
?> ?>
</div> <!-- project_source_blame_mainarea_menu --> </div> <!-- project_source_blame_mainarea_menu -->
<div class="infostrip"> <div class="infostrip" id="project_source_blame_mainarea_infostrip">
<?=anchor ("source/file/{$project->id}/${xpar}/{$file['prev_rev']}", '<<')?> <?=anchor ("source/file/{$project->id}/${xpar}/{$file['prev_rev']}", '<<')?>
<?=$this->lang->line('Revision')?>: <?=$file['created_rev']?> <?=$this->lang->line('Revision')?>: <?=$file['created_rev']?>
<?=anchor ("source/file/{$project->id}/${xpar}/{$file['next_rev']}", '>>')?> | <?=anchor ("source/file/{$project->id}/${xpar}/{$file['next_rev']}", '>>')?> |
<?=$this->lang->line('Author')?>: <?=htmlspecialchars($file['last_author'])?> | <?=$this->lang->line('Author')?>: <?=htmlspecialchars($file['last_author'])?> |
<?=$this->lang->line('Size')?>: <?=$file['size']?> | <?=$this->lang->line('Size')?>: <?=$file['size']?> |
<?=$this->lang->line('Last updated on')?>: <?=$file['time']?> <?=$this->lang->line('Last updated on')?>: <?=$file['time']?>
</div> </div>
<div id="project_source_blame_mainarea_result">
<?php <?php
$fileext = substr(strrchr($file['name'], '.'), 1); $fileext = substr(strrchr($file['name'], '.'), 1);
if ($fileext == "") $fileext = "html" if ($fileext == "") $fileext = "html"
?> ?>
<pre class="prettyprint lang-<?=$fileext?>"> <pre class="prettyprint lang-<?=$fileext?>">
<?php <?php
$content = $file['content']; $content = $file['content'];
$len = count($content); $len = count($content);
$rev = ''; $rev = '';
$author = ''; $author = '';
for ($i = 0; $i < $len; $i++) for ($i = 0; $i < $len; $i++)
{
$line = $content[$i];
$lineno_padded = str_pad ($line['line_no'], 6, ' ', STR_PAD_LEFT);
if ($line['rev'] != $rev)
{ {
$rev = $line['rev']; $line = $content[$i];
$rev_padded = str_pad ($rev, 6, ' ', STR_PAD_LEFT); $lineno_padded = str_pad ($line['line_no'], 6, ' ', STR_PAD_LEFT);
$xpar = $this->converter->AsciiTohex ($headpath); if ($line['rev'] != $rev)
$rev_padded = anchor ("/source/blame/{$project->id}/{$xpar}/{$rev}", $rev_padded); {
} $rev = $line['rev'];
else $rev_padded = str_pad ($rev, 6, ' ', STR_PAD_LEFT);
{
$rev_padded = str_pad (' ', 6, ' ', STR_PAD_LEFT);
}
if ($line['author'] != $author) $xpar = $this->converter->AsciiTohex ($headpath);
{ $rev_padded = anchor ("/source/blame/{$project->id}/{$xpar}/{$rev}", $rev_padded);
$author = $line['author']; }
$author_padded = str_pad ($author, 8, ' ', STR_PAD_RIGHT); else
$author_padded = substr($author_padded, 0, 8); {
} $rev_padded = str_pad (' ', 6, ' ', STR_PAD_LEFT);
else }
{
$author_padded = str_pad (' ', 8, ' ', STR_PAD_RIGHT);
}
print "<span class='nocode'>{$rev_padded}</span>"; if ($line['author'] != $author)
print "<span class='nocode' title='{$author}'>{$author_padded}</span>"; {
print "<span class='nocode'>{$lineno_padded}</span>"; $author = $line['author'];
print htmlspecialchars ($line['line']); $author_padded = str_pad ($author, 8, ' ', STR_PAD_RIGHT);
print "\n"; $author_padded = substr($author_padded, 0, 8);
} }
else
{
$author_padded = str_pad (' ', 8, ' ', STR_PAD_RIGHT);
}
print "<span class='nocode'>{$rev_padded}</span>";
print "<span class='nocode' title='{$author}'>{$author_padded}</span>";
print "<span class='nocode'>{$lineno_padded}</span>";
print htmlspecialchars ($line['line']);
print "\n";
}
?> ?>
</pre> </pre>
</div> <!-- project_source_blame_mainarea --> <div id="project_source_blame_mainarea_result_info">
<script language='javascript'>
function toggle_logmsg()
{
var x = document.getElementById ('project_source_blame_mainarea_result_info_logmsg');
if (x) x.style.visibility = (x.style.visibility == 'visible')? 'hidden': 'visible';
return false;
}
</script>
<div class="title">
<a href='#' onClick='toggle_logmsg()'><?= $this->lang->line('Message') ?></a>
</div>
<pre id="project_source_blame_mainarea_result_info_logmsg" style="visibility: visible">
<?= $file['logmsg'] ?>
</pre>
</div> <!-- project_source_blame_mainarea_result_info -->
</div> <!-- project_source_blame_mainarea_result -->
</div> <!-- project_source_blame_mainarea -->
<!----------------------------------------------------------------------------> <!---------------------------------------------------------------------------->

View File

@ -82,7 +82,7 @@ $this->load->view (
$this->lang->line('Blame')); $this->lang->line('Blame'));
print ' | '; print ' | ';
print anchor ( print anchor (
"source/history/file/{$project->id}/{$xpar}", "source/history/{$project->id}/{$xpar}",
$this->lang->line('History')); $this->lang->line('History'));
?> ?>
</div> <!-- project_source_diff_mainarea_menu --> </div> <!-- project_source_diff_mainarea_menu -->

View File

@ -144,16 +144,24 @@ if ($fileext == '') $fileext = "html"
?> ?>
</pre> </pre>
<div id="project_source_file_mainarea_result_info"> <div id="project_source_file_mainarea_result_info">
<pre> <script language='javascript'>
akdjflosjfkdsajflkdsj function toggle_logmsg()
aslkfdjdsalkjfs {
alkjfdlkajf var x = document.getElementById ('project_source_file_mainarea_result_info_logmsg');
if (x) x.style.visibility = (x.style.visibility == 'visible')? 'hidden': 'visible';
return false;
}
</script>
<div class="title">
sadkfjsalfjskjdslkfsaj <a href='#' onClick='toggle_logmsg()'><?= $this->lang->line('Message') ?></a>
</pre>
</div> </div>
<pre id="project_source_file_mainarea_result_info_logmsg" style="visibility: visible">
<?= $file['logmsg'] ?>
</pre>
</div> <!-- project_source_file_mainarea_result_info -->
</div> <!-- project_source_file_mainarea_result --> </div> <!-- project_source_file_mainarea_result -->

View File

@ -67,26 +67,6 @@ $this->load->view (
</div> </div>
<div class="menu" id="project_source_history_mainarea_menu"> <div class="menu" id="project_source_history_mainarea_menu">
<!--
<?php
/* the menu here prints links to the lastest revision */
$par = $this->converter->AsciiTohex ($fullpath);
print anchor (
"source/file/{$project->id}/{$par}",
$this->lang->line('Details'));
/*
if (...)
{
print ' | ';
$xpar = "source/blame/{$project->id}/{$par}";
print anchor ($xpar, $this->lang->line('Blame'));
print ' | ';
$xpar = "source/diff/{$project->id}/{$par}";
print anchor ($xpar, $this->lang->line('Difference'));
} */
?>
-->
</div> <!-- project_source_history_mainarea_menu --> </div> <!-- project_source_history_mainarea_menu -->
<div id="project_source_history_mainarea_result"> <div id="project_source_history_mainarea_result">
@ -96,7 +76,7 @@ $this->load->view (
<th><?=$this->lang->line('Author')?></th> <th><?=$this->lang->line('Author')?></th>
<th><?=$this->lang->line('Date')?></th> <th><?=$this->lang->line('Date')?></th>
<th><?=$this->lang->line('Message')?></th> <th><?=$this->lang->line('Message')?></th>
<?php if ($file['type'] == 'file') print '<th></th>'; ?> <?php if ($file['type'] == 'file' || $file['type'] == 'dir') print '<th></th>'; ?>
</tr> </tr>
<?php <?php
$rowclasses = array ('even', 'odd'); $rowclasses = array ('even', 'odd');
@ -157,17 +137,9 @@ $this->load->view (
// let's track the copy path. // let's track the copy path.
// //
$paths = $h['paths']; $paths = $h['paths'];
$colspan = ($file['type'] == 'file')? 5: 4; $colspan = ($file['type'] == 'file' || $file['type'] == 'dir')? 5: 4;
foreach ($paths as $p) foreach ($paths as $p)
{ {
/*
if (array_key_exists ('copyfrom', $p) &&
$p['path'] == $curfullpath && $p['action'] == 'A')
{
$curfullpath = $p['copyfrom'];
print "<tr class='title'><td colspan='{$colspan}'>{$curfullpath}</td></tr>";
}
*/
if (array_key_exists ('copyfrom', $p) && if (array_key_exists ('copyfrom', $p) &&
$p['action'] == 'A') $p['action'] == 'A')
{ {

View File

@ -38,12 +38,70 @@
top: 0; top: 0;
right: 0; right: 0;
width: 20em; width: 20em;
background-color: red;
} }
#project_source_file_mainarea_result_info pre { #project_source_file_mainarea_result_info pre {
overflow: auto;
border: 0; border: 0;
margin: 0; margin: 0;
padding: 0;
}
#project_source_file_mainarea_result_info .title {
background-color: #7777FF;
border: 0;
margin: 0;
font-size: 0.8em;
text-align: right;
}
#project_source_file_mainarea_result_info .title a {
color: white;
font-size: inherit;
background-color: inherit;
}
#project_source_file_mainarea_result_info .title a:hover {
background-color: inherit;
}
/*-----------------------------------------------
* project source blame view
*-----------------------------------------------*/
#project_source_blame_mainarea_result {
position: relative;
}
#project_source_blame_mainarea_result_info {
position: absolute;
top: 0;
right: 0;
width: 20em;
}
#project_source_blame_mainarea_result_info pre {
overflow: auto;
border: 0;
margin: 0;
padding: 0;
}
#project_source_blame_mainarea_result_info .title {
background-color: #7777FF;
border: 0;
margin: 0;
font-size: 0.8em;
text-align: right;
}
#project_source_blame_mainarea_result_info .title a {
color: white;
font-size: inherit;
background-color: inherit;
}
#project_source_blame_mainarea_result_info .title a:hover {
background-color: inherit;
} }
/*----------------------------------------------- /*-----------------------------------------------