wrote code to corelate issues and code revisions.

changed the code revision view to show corelated issues
This commit is contained in:
hyung-hwan 2016-01-22 18:12:06 +00:00
parent ab7156eb67
commit fdfa5ecaa0
22 changed files with 418 additions and 207 deletions

View File

@ -142,7 +142,7 @@ CREATE TABLE issue_change (
PRIMARY KEY (projectid, id, sno),
KEY issue_update_time (projectid, id, updatedon),
CONSTRAINT issue_update_id FOREIGN KEY (projectid,id) REFERENCES issue(projectid,id)
CONSTRAINT issue_change_id FOREIGN KEY (projectid,id) REFERENCES issue(projectid,id)
ON DELETE RESTRICT ON UPDATE CASCADE
) charset=utf8 engine=InnoDB;
@ -168,6 +168,31 @@ CREATE TABLE issue_change_file_list (
ON DELETE RESTRICT ON UPDATE CASCADE
) charset=utf8 engine=InnoDB;
CREATE TABLE issue_coderev (
projectid VARCHAR(32) NOT NULL,
issueid BIGINT NOT NULL,
codeproid VARCHAR(32) NOT NULL,
coderev VARCHAR(64) NOT NULL, -- git commit id is 40 characters. subversion revision is a number.
UNIQUE KEY issue_coderev_uid(projectid, issueid, codeproid, coderev),
KEY issue_coderev_codekey (codeproid, coderev),
KEY issue_coderev_issuekey (projectid, issueid),
CONSTRAINT issue_coderev_projectid FOREIGN KEY (projectid) REFERENCES project(id)
ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT issue_coderev_codeproid FOREIGN KEY (codeproid) REFERENCES project(id)
ON DELETE RESTRICT ON UPDATE CASCADE
-- Commit message is typypicall free text. Its issue reference could be error-prone.
-- So i won't have this constraint enforced.
-- CONSTRAINT issue_coderev_issueid FOREIGN KEY (projectid,issueid) REFERENCES issue(projectid,id)
-- ON DELETE RESTRICT ON UPDATE CASCADE
) charset=utf8 engine=InnoDB;
CREATE TABLE file (
projectid VARCHAR(32) NOT NULL,
name VARCHAR(255) NOT NULL,

View File

@ -109,6 +109,45 @@ sub close_database
$dbh->disconnect ();
}
sub find_issue_reference_in_commit_message
{
my ($dbh, $prefix, $projectid, $revision, $commit_message) = @_;
# find [[#IXXXX]]
my @issue_ids = ($commit_message =~ /\[\[#I(\d+)\]\]/g);
# find unique issue ids in the findings.
my %tmp;
@tmp{@issue_ids}=1;
my @unique_issue_ids=keys %tmp;
$dbh->begin_work ();
my $query = $dbh->prepare ("DELETE FROM ${QC}${prefix}issue_coderev${QC} WHERE ${QC}codeproid${QC}=? AND ${QC}coderev${QC}=?");
if (!$query || !$query->execute ($projectid, $revision))
{
my $errstr = $dbh->errstr();
if ($query) { $query->finish (); }
$dbh->rollback ();
return (-1, $errstr);
}
$query->finish ();
for my $issue_id(@unique_issue_ids)
{
my $query = $dbh->prepare ("INSERT INTO ${QC}${prefix}issue_coderev${QC} (${QC}projectid${QC},${QC}issueid${QC},${QC}codeproid${QC},${QC}coderev${QC}) VALUES (?,?,?,?)");
if ($query)
{
# ignore errors
$query->execute ($projectid, $issue_id, $projectid, $revision);
$query->finish ();
}
}
$dbh->commit ();
return (0, undef);
}
sub write_commit_log
{
my ($dbh, $prefix, $projectid, $revision, $userid) = @_;
@ -136,7 +175,7 @@ sub write_commit_log
if (!$query || !$query->execute ('code', $projectid, $message, 'commit', $userid))
{
my $errstr = $dbh->errstr();
$query->finish ();
if ($query) { $query->finish (); }
$dbh->rollback ();
return (-1, $errstr);
}
@ -185,8 +224,8 @@ sub get_commit_message
return undef;
}
my $author = $fs->revision_prop ($REV, 'svn:log');
return $author;
my $logmsg = $fs->revision_prop ($REV, 'svn:log');
return $logmsg;
}
@ -317,6 +356,7 @@ sub email_message_to_project_members
my $query = $dbh->prepare ("SELECT ${QC}userid${QC} FROM ${QC}${prefix}project_membership${QC} WHERE ${QC}projectid${QC}=?");
if (!$query || !$query->execute ($projectid))
{
if ($query) { $query->finish (); }
return (-1, $dbh->errstr());
}
@ -408,6 +448,9 @@ if (!defined($dbh))
exit (1);
}
my $raw_commit_message = get_commit_message();
find_issue_reference_in_commit_message ($dbh, $cfg->{database_prefix}, $REPOBASE, $REV, $raw_commit_message);
write_commit_log ($dbh, $cfg->{database_prefix}, $REPOBASE, $REV, $AUTHOR);
if (lc($cfg->{commit_notification}) eq 'yes')
@ -424,10 +467,9 @@ if (lc($cfg->{commit_notification}) eq 'yes')
$commit_message = format_commit_url($cfg->{commit_notification_url}, $REPOBASE, $AUTHOR, $REV);
}
my $m = get_commit_message ();
if (defined($m))
if (defined($raw_commit_message))
{
$commit_message = $commit_message . "\n" . $m;
$commit_message = $commit_message . "\n" . $raw_commit_message;
}

View File

@ -7,9 +7,13 @@ use DBI;
use File::Basename;
use POSIX qw(strftime);
use SVN::Core;
use SVN::Repos;
use SVN::Fs;
my $CFG_FILE = '@CFGDIR@/codepot.ini';
my $REPO = $ARGV[0];
my $REPOBASE = basename($REPO);
my $REPOFS = $ARGV[0];
my $REPOBASE = basename($REPOFS);
my $REV = $ARGV[1];
my $USER = $ARGV[2];
my $PROPNAME = $ARGV[3];
@ -88,6 +92,46 @@ sub close_database
$dbh->disconnect ();
}
sub find_issue_reference_in_commit_message
{
my ($dbh, $prefix, $projectid, $revision, $commit_message) = @_;
# find [[#IXXXX]]
my @issue_ids = ($commit_message =~ /\[\[#I(\d+)\]\]/g);
# find unique issue ids in the findings.
my %tmp;
@tmp{@issue_ids}=1;
my @unique_issue_ids=keys %tmp;
$dbh->begin_work ();
my $query = $dbh->prepare ("DELETE FROM ${QC}${prefix}issue_coderev${QC} WHERE ${QC}codeproid${QC}=? AND ${QC}coderev${QC}=?");
if (!$query || !$query->execute ($projectid, $revision))
{
my $errstr = $dbh->errstr();
if ($query) { $query->finish (); }
$dbh->rollback ();
return (-1, $errstr);
}
$query->finish ();
for my $issue_id(@unique_issue_ids)
{
my $query = $dbh->prepare ("INSERT INTO ${QC}${prefix}issue_coderev${QC} (${QC}projectid${QC},${QC}issueid${QC},${QC}codeproid${QC},${QC}coderev${QC}) VALUES (?,?,?,?)");
if ($query)
{
# ignore errors
$query->execute ($projectid, $issue_id, $projectid, $revision);
$query->finish ();
}
}
$dbh->commit ();
return (0, undef);
}
sub write_revprop_change_log
{
my ($dbh, $prefix, $projectid, $revision, $userid, $propname, $action) = @_;
@ -106,7 +150,7 @@ sub write_revprop_change_log
if (!$query || !$query->execute ('code', $projectid, $message, $createdon, 'revpropchange', $userid))
{
my $errstr = $dbh->errstr();
$query->finish ();
if ($query) { $query->finish (); }
$dbh->rollback ();
return (-1, $errstr);
}
@ -116,6 +160,27 @@ sub write_revprop_change_log
return (0, undef);
}
sub get_commit_message
{
my $pool = SVN::Pool->new(undef);
my $svn = eval { SVN::Repos::open ($REPOFS, $pool) };
if (!defined($svn))
{
print (STDERR "Cannot open svn - $REPOFS\n");
return undef;
}
my $fs = $svn->fs ();
if (!defined($fs))
{
print (STDERR "Cannot open fs - $REPOFS\n");
return undef;
}
my $logmsg = $fs->revision_prop ($REV, 'svn:log');
return $logmsg;
}
#------------------------------------------------------------
# MAIN
#------------------------------------------------------------
@ -134,6 +199,9 @@ if (!defined($dbh))
exit (1);
}
my $raw_commit_message = get_commit_message();
find_issue_reference_in_commit_message ($dbh, $cfg->{database_prefix}, $REPOBASE, $REV, $raw_commit_message);
write_revprop_change_log ($dbh, $cfg->{database_prefix}, $REPOBASE, $REV, $USER, $PROPNAME, $ACTION);
close_database ($dbh);

View File

@ -724,7 +724,7 @@ class Code extends Controller
{
$this->load->model ('ProjectModel', 'projects');
$this->load->model ('SubversionModel', 'subversion');
$this->load->model ('CodeReviewModel', 'code_review');
$this->load->model ('CodeModel', 'code');
$login = $this->login->getUser ();
$revision_saved = -1;
@ -759,10 +759,10 @@ class Code extends Controller
}
else
{
$review_sno = $this->code_review->insertReview ($projectid, $rev, $login['id'], $review_comment);
$review_sno = $this->code->insertReview ($projectid, $rev, $login['id'], $review_comment);
if ($review_sno === FALSE)
{
$status = 'error - ' . $this->code_review->getErrorMessage();
$status = 'error - ' . $this->code->getErrorMessage();
}
else
{
@ -792,7 +792,7 @@ class Code extends Controller
{
$this->load->model ('ProjectModel', 'projects');
$this->load->model ('SubversionModel', 'subversion');
$this->load->model ('CodeReviewModel', 'code_review');
$this->load->model ('CodeModel', 'code');
$login = $this->login->getUser ();
$revision_saved = -1;
@ -832,9 +832,9 @@ class Code extends Controller
}
else
{
if ($this->code_review->updateReview ($projectid, $rev, (integer)$review_no, $login['id'], $review_comment, TRUE) === FALSE)
if ($this->code->updateReview ($projectid, $rev, (integer)$review_no, $login['id'], $review_comment, TRUE) === FALSE)
{
$status = 'error - ' . $this->code_review->getErrorMessage();
$status = 'error - ' . $this->code->getErrorMessage();
}
else
{
@ -993,7 +993,7 @@ class Code extends Controller
{
$this->load->model ('ProjectModel', 'projects');
$this->load->model ('SubversionModel', 'subversion');
$this->load->model ('CodeReviewModel', 'code_review');
$this->load->model ('CodeModel', 'code');
$login = $this->login->getUser ();
if (CODEPOT_SIGNIN_COMPULSORY && $login['id'] == '')
@ -1048,7 +1048,11 @@ class Code extends Controller
if (array_key_exists('rev', $h)) $r_rev = $h['rev'];
}
}
$reviews = $this->code_review->getReviews ($projectid, $r_rev);
$related_issues = $this->code->getRelatedIssues ($projectid, $r_rev);
if ($related_issues == FALSE) $related_issues = array();
$reviews = $this->code->getReviews ($projectid, $r_rev);
if ($reviews === FALSE)
{
$data['project'] = $project;
@ -1122,6 +1126,7 @@ class Code extends Controller
$data['headpath'] = $path;
$data['file'] = $file;
$data['reviews'] = $reviews;
$data['related_issues'] = $related_issues;
$data['revision'] = $rev;
$data['prev_revision'] = $prev_revision;

View File

@ -1,6 +1,6 @@
wwwdir=$(WWWDIR)/codepot/models
www_DATA = \
codereviewmodel.php \
codemodel.php \
dbloginmodel.php \
filemodel.php \
index.html \

View File

@ -145,7 +145,7 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
wwwdir = $(WWWDIR)/codepot/models
www_DATA = \
codereviewmodel.php \
codemodel.php \
dbloginmodel.php \
filemodel.php \
index.html \

View File

@ -1,6 +1,6 @@
<?php
class CodeReviewModel extends Model
class CodeModel extends Model
{
protected $errmsg = '';
@ -9,12 +9,36 @@ class CodeReviewModel extends Model
return $this->errmsg;
}
function CodeReviewModel ()
function CodeModel ()
{
parent::Model ();
$this->load->database ();
}
function getRelatedIssues ($projectid, $revision)
{
$this->db->trans_begin ();
$this->db->from ('issue');
$this->db->join ('issue_coderev', 'issue.projectid = issue_coderev.projectid AND issue.id = issue_coderev.issueid');
//$this->db->where ('issue_coderev.projectid', (string)$projectid);
$this->db->where ('issue_coderev.codeproid', (string)$projectid);
$this->db->where ('issue_coderev.coderev', $revision);
$this->db->order_by ('issue.projectid ASC');
$this->db->order_by ('issue_coderev.issueid ASC');
$this->db->select ('issue.projectid, issue_coderev.issueid, issue.summary, issue.type, issue.status, issue.priority, issue.owner');
$query = $this->db->get ();
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE;
}
$this->db->trans_commit ();
return $query->result();
}
function getReviews ($projectid, $revision)
{
$this->db->trans_begin ();

View File

@ -255,7 +255,7 @@ $this->load->view (
<div style='clear: both'></div>
</div>
<div id='code_blame_metadata_body'>
<div id='code_blame_metadata_body' class='codepot-metadata-collapsible-body'>
<div class='codepot-plain-text-view'>
<pre><?php print htmlspecialchars ($file['logmsg']); ?></pre>
</div>

View File

@ -287,7 +287,7 @@ $this->load->view (
<div style='clear: both'></div>
</div>
<div id='code_diff_metadata_body'>
<div id='code_diff_metadata_body' class='codepot-metadata-collapsible-body'>
<div class='codepot-plain-text-view'>
<pre><?php print htmlspecialchars ($file['logmsg']); ?></pre>
</div>

View File

@ -281,7 +281,7 @@ $this->load->view (
<div style='clear: both'></div>
</div>
<div id='code_file_metadata_body'>
<div id='code_file_metadata_body' class='codepot-metadata-collapsible-body'>
<div class='codepot-plain-text-view'>
<pre><?php print htmlspecialchars ($file['logmsg']); ?></pre>
</div>

View File

@ -883,7 +883,7 @@ $this->load->view (
<div style='clear: both;'></div>
</div>
<div id='code_folder_metadata_body'>
<div id='code_folder_metadata_body' class='codepot-metadata-collapsible-body'>
<div class='codepot-plain-text-view'>
<pre><?php print htmlspecialchars ($file['logmsg']); ?></pre>
</div>

View File

@ -362,7 +362,6 @@ $(function() {
}
);
function make_edit_review_comment_ok_function (no)
{
var form_name = '#code_revision_edit_review_comment_form_' + no;
@ -673,10 +672,41 @@ $history = $file['history'];
<div style='clear: both'></div>
</div>
<div id="code_revision_metadata_body">
<div id="code_revision_metadata_body" class='codepot-metadata-collapsible-body'>
<div class="codepot-plain-text-view">
<pre id="code_revision_metadata_text"><?php print htmlspecialchars($history['msg']); ?></pre>
<?php
$transformed_message = htmlspecialchars($history['msg']);
foreach ($related_issues as $ri)
{
$hex_issueid = $this->converter->AsciiToHex ($ri->issueid);
//$transformed_message = preg_replace ("/\[\[#I{$ri->issueid}\]\]/", anchor ("/issue/show/{$ri->projectid}/{$hex_issueid}", $ri->issueid . ':' . htmlspecialchars($ri->summary), "class='codepot-issue-type-{$ri->type}'"), $transformed_message);
//$transformed_message = preg_replace ("/\[\[(#I{$ri->issueid})\]\]/", "[[<span class='codepot-issue-type-{$ri->type}'>\${1}</span>]]", $transformed_message);
$transformed_message = preg_replace (
"/\[\[(#I{$ri->issueid})\]\]/",
'[[' . anchor ("/issue/show/{$ri->projectid}/{$hex_issueid}", "\${1}", "class='codepot-issue-type-{$ri->type}'") . ']]',
$transformed_message
);
}
?>
<pre id="code_revision_metadata_text"><?php print $transformed_message; ?></pre>
</div>
<?php
if (!empty($related_issues))
{
print '<div><ul id="code_revision_related_issue_list" class="codepot-horizontal-list">';
foreach ($related_issues as $ri)
{
$hex_issueid = $this->converter->AsciiToHex ($ri->issueid);
print '<li>';
print anchor ("/issue/show/{$ri->projectid}/{$hex_issueid}", $ri->issueid . ':' . htmlspecialchars($ri->summary), "class='codepot-issue-type-{$ri->type}'");
print '</li>';
}
print '</ul></div>';
}
?>
<div style='clear: both'></div>
</div>
</div>

View File

@ -613,7 +613,7 @@ $this->load->view (
<div id='file_show_metadata' class='collapsible-box'>
<div id='file_show_metadata_header' class='collapsible-box-header'><?php print $this->lang->line('Metadata')?></div>
<div id='file_show_metadata_body'>
<div id='file_show_metadata_body' class='codepot-metadata-collapsible-body'>
<ul id='file_show_metadata_list'>
<li><?php print $this->lang->line('Created on')?> <?php print codepot_dbdatetodispdate($file->createdon); ?></li>
<li><?php print $this->lang->line('Created by')?> <?php print htmlspecialchars($file->createdby); ?></li>
@ -626,7 +626,7 @@ $this->load->view (
<div id='file_show_files' class='collapsible-box'>
<div id='file_show_files_header' class='collapsible-box-header'><?php print $this->lang->line('Files')?></div>
<div id='file_show_files_body'>
<div id='file_show_files_body' class='codepot-metadata-collapsible-body'>
<?php if (isset($login['id']) && $login['id'] != ''): ?>
<div>
<a id="file_show_add_file_button" href='#'><?php print $this->lang->line('Add')?></a>

View File

@ -927,7 +927,7 @@ function print_issue_state ($con, $issue, $old, $issue_type_array, $issue_status
if ($old == NULL || $issue->type != $old->type)
{
printf ('<li class="issue-type-%s">', $issue->type);
printf ('<li class="codepot-issue-type-%s">', $issue->type);
print $con->lang->line('Type');
print ': ';
print htmlspecialchars($type);
@ -936,7 +936,7 @@ function print_issue_state ($con, $issue, $old, $issue_type_array, $issue_status
if ($old == NULL || $issue->status != $old->status)
{
printf ('<li class="issue-status-%s">', $issue->status);
printf ('<li class="codepot-issue-status-%s">', $issue->status);
print $con->lang->line('Status');
print ': ';
print htmlspecialchars($status);
@ -945,7 +945,7 @@ function print_issue_state ($con, $issue, $old, $issue_type_array, $issue_status
if ($old == NULL || $issue->priority != $old->priority)
{
printf ('<li class="issue-priority-%s">', $issue->priority);
printf ('<li class="codepot-issue-priority-%s">', $issue->priority);
print $con->lang->line('Priority');
print ': ';
print htmlspecialchars($priority);
@ -954,7 +954,7 @@ function print_issue_state ($con, $issue, $old, $issue_type_array, $issue_status
if ($old == NULL || $issue->owner != $old->owner)
{
print '<li class="issue-owner">';
print '<li class="codepot-issue-owner">';
if ($issue->owner != '')
{
print $con->lang->line('Owner');
@ -994,20 +994,31 @@ function print_issue_state ($con, $issue, $old, $issue_type_array, $issue_status
<div id='issue_show_state' class='collapsible-box'>
<div id='issue_show_metadata_header' class='collapsible-box-header'><?php print $this->lang->line('State')?></div>
<div id='issue_show_metadata_body'>
<ul id='issue_show_metadata_list' class='codepot-issue-horizontal-list'>
<div id='issue_show_metadata_body' class='codepot-metadata-collapsible-body'>
<ul id='issue_show_metadata_list' class='codepot-horizontal-list'>
<li><?php print $this->lang->line('Created on')?> <?php print codepot_dbdatetodispdate($issue->createdon); ?></li>
<li><?php print $this->lang->line('Created by')?> <?php print htmlspecialchars($issue->createdby); ?></li>
<li><?php print $this->lang->line('Last updated on')?> <?php print codepot_dbdatetodispdate($issue->updatedon); ?></li>
<li><?php print $this->lang->line('Last updated by')?> <?php print htmlspecialchars($issue->updatedby); ?></li>
</ul>
<ul id='issue_show_state_list' class='codepot-issue-horizontal-list'>
<ul id='issue_show_state_list' class='codepot-horizontal-list'>
<?php
print_issue_state ($this, $issue, NULL, $issue_type_array, $issue_status_array, $issue_priority_array);
?>
</ul>
<?php
if (!empty($related_code_revisions))
{
print '<ul id="issue_show_coderev_list" class="codepot-horizontal-list">';
foreach ($related_code_revisions as $r)
{
}
print '</ul>';
}
?>
<div style='clear: both'></div>
</div>
</div>
@ -1088,7 +1099,7 @@ function print_issue_state ($con, $issue, $old, $issue_type_array, $issue_status
print '<div style="clear: both;"></div>';
print '</div>';
print '<ul id="issue_show_change_start_list" class="codepot-issue-horizontal-list">';
print '<ul id="issue_show_change_start_list" class="codepot-horizontal-list">';
print_issue_state ($this, $new, NULL, $issue_type_array, $issue_status_array, $issue_priority_array);
print '</ul>';
print '<div style="clear: both;"></div>';
@ -1118,7 +1129,7 @@ function print_issue_state ($con, $issue, $old, $issue_type_array, $issue_status
print '<div style="clear: both;"></div>';
print '</div>';
print '<ul class="codepot-issue-horizontal-list">';
print '<ul class="codepot-horizontal-list">';
print_issue_state ($this, $new, $old, $issue_type_array, $issue_status_array, $issue_priority_array);
print '</ul>';

View File

@ -549,7 +549,7 @@ $this->load->view (
<?php print $this->lang->line('WIKI_ATTACHMENTS')?>
<a href='#' id='wiki_edit_add_files_button'><?php print $this->lang->line('New')?></a>
</div>
<div id='wiki_edit_files_body'>
<div id='wiki_edit_files_body' class='codepot-metadata-collapsible-body'>
<input type='file' id='wiki_edit_add_files' name='wiki_add_files' multiple='' autocomplete='off' style='color: transparent; visibility: hidden; display: none;' />
<ul id='wiki_edit_file_list'>

View File

@ -445,6 +445,13 @@ $(function () {
shift: false,
alt: true
},
{ // alt-k
command: 'insertOrderedList',
key: 'K',
meta: false,
shift: false,
alt: true
},
{ // alt-p
command: 'append-pre',
key: 'P',
@ -592,7 +599,7 @@ $this->load->view (
<?php print $this->lang->line('WIKI_ATTACHMENTS')?>
<a href='#' id='wiki_edit_add_files_button'><?php print $this->lang->line('New')?></a>
</div>
<div id='wiki_edit_files_body'>
<div id='wiki_edit_files_body' class='codepot-metadata-collapsible-body'>
<input type='file' id='wiki_edit_add_files' name='wiki_add_files' multiple='' autocomplete='off' style='color: transparent; visibility: hidden; display: none;' />
<ul id='wiki_edit_file_list'>

View File

@ -252,7 +252,7 @@ $this->load->view (
<div id='wiki_show_metadata' class='collapsible-box'>
<div id='wiki_show_metadata_header' class='collapsible-box-header'><?php print $this->lang->line('Metadata')?></div>
<div id='wiki_show_metadata_body'>
<div id='wiki_show_metadata_body' class='codepot-metadata-collapsible-body'>
<ul id='wiki_show_metadata_list'>
<li><?php print $this->lang->line('Created on')?> <?php print codepot_dbdatetodispdate($wiki->createdon); ?></li>

View File

@ -78,17 +78,6 @@
float: right;
}
#code_folder_metadata_body,
#code_file_metadata_body,
#code_blame_metadata_body,
#code_revision_metadata_body,
#code_diff_metadata_body,
#code_diff_metadata_against_body {
background-color: #FCFCFC;
padding: 0.2em 0.2em 0.2em 0.2em;
margin: 0;
}
#code_diff_metadata_body,
#code_diff_metadata_against_body {
border: none;
@ -240,14 +229,28 @@
line-height: 1.2em;
padding: 0.2em 0.2em 0.2em 0.2em;
}
/*
#code_revision_result_files_table,
#code_revision_result_properties_table {
padding: 0.5em 0 0.5em 0;
background: inherit;
line-height: 1.5em;
#code_revision_related_issue_list {
padding-top: 0.3em;
border-top: 1px dashed #EAEAEA
}
#code_revision_related_issue_list li {
margin-top: 0.1em;
margin-bottom: 0.1em;
}
#code_revision_metadata_text a,
#code_revision_related_issue_list a {
padding: 0.3em;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
color: inherit;
filter:alpha(opacity=85); /* IE */
opacity: 0.85; /* Safari, Opera */
-moz-opacity:0.85; /* FireFox */
}
*/
#code_revision_result_files_table td,
#code_revision_result_properties_table td {

View File

@ -600,6 +600,12 @@ pre, code, tt {
padding-right: .2em;
}
.codepot-metadata-collapsible-body {
background-color: #FCFCFC !important;
padding: 0.4em 0.2em 0.2em 0.2em !important;
margin: 0px !important;
}
span.codepot-open-issue-count {
-moz-border-radius: 45%;
-webkit-border-radius: 45%;
@ -1015,16 +1021,135 @@ pre.codepot-line-numbered span.codepot-line-number-clear {
}
.codepot-committer-icon-24x24 {
width: 24px;
width: 24px;
height: 24px;
vertical-align: middle;
margin-right: 2px;
vertical-align: middle;
margin-right: 2px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
/* === list === */
ul.codepot-horizontal-list {
clear: both;
padding: 0;
margin: 0;
list-style: outside none none !important;
}
ul.codepot-horizontal-list li {
padding: 0.2em 0.2em 0.2em 0.2em;
margin: 0 0.2em 0 0.2em;
float: left;
}
/* === common issue class === */
.codepot-issue-type-defect {
background-color: #D9534F;
color: #FFFFFF !important;
}
.codepot-issue-type-request {
background-color: #44AD8E;
color: #FFFFFF !important;
}
.codepot-issue-type-enhancement {
background-color: #558FAD;
color: #FFFFFF !important;
}
.codepot-issue-type-feature {
background-color: #5577BC;
color: #FFFFFF !important;
}
.codepot-issue-type-other {
background-color: #4E8BCA;
color: #FFFFFF !important;
}
.codepot-issue-status-new {
background-color: #44AD8E;
color: #FFFFFF !important;
}
.codepot-issue-status-accepted {
background-color: #44AD8E;
color: #FFFFFF !important;
}
.codepot-issue-status-rejected {
background-color: #AD448E;
color: #FFFFFF !important;
}
.codepot-issue-status-started {
background-color: #44ADAD;
color: #FFFFFF !important;
}
.codepot-issue-status-stalled {
background-color: #ADAD8E;
color: #FFFFFF !important;
}
.codepot-issue-status-testing {
background-color: #44ADBB;
color: #FFFFFF !important;
}
.codepot-issue-status-resolved {
background-color: #34AD56;
color: #FFFFFF !important;
}
.codepot-issue-status-worked-around {
background-color: #65AD67;
color: #FFFFFF !important;
}
.codepot-issue-status-other {
background-color: #888888;
color: #FFFFFF !important;
}
.codepot-issue-type-other {
background-color: #4E8BCA;
color: #FFFFFF !important;
}
.codepot-issue-priority-critical {
background-color: #D9534F;
color: #FFFFFF !important;
}
.codepot-issue-priority-high {
background-color: #B9534F;
color: #FFFFFF !important;
}
.codepot-issue-priority-medium {
background-color: #99534F;
color: #FFFFFF !important;
}
.codepot-issue-priority-low {
background-color: #EEE39E;
color: #FFFFFF !important;
}
.codepot-issue-priority-other {
background-color: #FFF39E;
}
.codepot-issue-owner {
background-color: #FFF39E;
}
/* === footer === */
.codepot-footer-pusher {
clear: both;

View File

@ -22,13 +22,6 @@
white-space: nowrap;
}
#file_show_metadata_body,
#file_show_files_body {
background-color: #FCFCFC;
margin: 0 !important;
padding: 0.5em 0.5em 0.5em 0.5em !important;
}
#file_show_metadata_list {
padding: 0 !important;
margin: 0 0 0.5em 0 !important;

View File

@ -1,18 +1,6 @@
ul.codepot-issue-horizontal-list {
clear: both;
padding: 0;
margin: 0;
list-style: outside none none !important;
}
ul.codepot-issue-horizontal-list li {
padding: 0.2em 0.2em 0.2em 0.2em;
margin: 0 0.2em 0 0.2em;
float: left;
}
.codepot-issue-start ul.codepot-issue-horizontal-list,
.codepot-issue-change ul.codepot-issue-horizontal-list {
.codepot-issue-start ul.codepot-horizontal-list,
.codepot-issue-change ul.codepot-horizontal-list {
padding: 0.3em 0 0.3em 0;
}
@ -65,111 +53,6 @@ textarea.codepot-issue-edit-comment {
font-size: 0.9em;
}
li.issue-type-defect {
background-color: #D9534F;
color: #FFFFFF;
}
li.issue-type-request {
background-color: #44AD8E;
color: #FFFFFF;
}
li.issue-type-enhancement {
background-color: #558FAD;
color: #FFFFFF;
}
li.issue-type-feature {
background-color: #5577BC;
color: #FFFFFF;
}
li.issue-type-other {
background-color: #4E8BCA;
color: #FFFFFF;
}
li.issue-status-new {
background-color: #44AD8E;
color: #FFFFFF;
}
li.issue-status-accepted {
background-color: #44AD8E;
color: #FFFFFF;
}
li.issue-status-rejected {
background-color: #AD448E;
color: #FFFFFF;
}
li.issue-status-started {
background-color: #44ADAD;
color: #FFFFFF;
}
li.issue-status-stalled {
background-color: #ADAD8E;
color: #FFFFFF;
}
li.issue-status-testing {
background-color: #44ADBB;
color: #FFFFFF;
}
li.issue-status-resolved {
background-color: #34AD56;
color: #FFFFFF;
}
li.issue-status-worked-around {
background-color: #65AD67;
color: #FFFFFF;
}
li.issue-status-other {
background-color: #888888;
color: #FFFFFF;
}
li.issue-type-other {
background-color: #4E8BCA;
color: #FFFFFF;
}
li.issue-priority-critical {
background-color: #D9534F;
color: #FFFFFF;
}
li.issue-priority-high {
background-color: #B9534F;
color: #FFFFFF;
}
li.issue-priority-medium {
background-color: #99534F;
color: #FFFFFF;
}
li.issue-priority-low {
background-color: #EEE39E;
color: #FFFFFF;
}
li.issue-priority-other {
background-color: #FFF39E;
}
li.issue-owner {
background-color: #FFF39E;
}
/*---------------------------------------------
* issue home
*---------------------------------------------*/
@ -246,13 +129,15 @@ li.issue-owner {
/*---------------------------------------------
* issue show
*---------------------------------------------*/
#issue_show_metadata_body {
background-color: #FCFCFC;
padding: 1em 1em;
#issue_show_metadata_list li {
margin-top: 0.1em;
margin-bottom: 0.2em;
}
#issue_show_state_list {
padding-top: 0.2em;
#issue_show_state_list,
#issue_show_coderev_list {
padding-top: 0.3em;
border-top: 1px dashed #EAEAEA
}
#issue_show_metadata_list li {

View File

@ -46,13 +46,6 @@
column-gap: 2em;
}
#wiki_show_metadata_body,
#wiki_edit_files_body {
background-color: #FCFCFC;
margin: 0 !important;
padding: 0.5em 0.5em 0.5em 0.5em !important;
}
/*
#wiki_show_file_list a,
*/