enhanced code search.

added configuration items: allow_set_time_limit and signin_for_code_search
This commit is contained in:
hyung-hwan 2014-05-25 04:26:23 +00:00
parent 73efd665cc
commit 197df5adc3
12 changed files with 70 additions and 31 deletions

View File

@ -173,6 +173,20 @@ log_threshold = 0
;------------------------------------------------------------------------------
force_project_delete = "no"
;------------------------------------------------------------------------------
; When yes, a codepot page can use set_time_limit() to adjust the maximum
; execution time to override the global value. For example, the code search
; page can take very long if the code repository is very large. You can
; set this item to yes to allow such a page to complete its processing.
;------------------------------------------------------------------------------
allow_set_time_limit = "no"
;------------------------------------------------------------------------------
; When yes, a user must sign in to be able to search code.
; When no, an anonymous user can search code.
;------------------------------------------------------------------------------
signin_for_code_search = "yes"
;------------------------------------------------------------------------------
; customized footer
;------------------------------------------------------------------------------

View File

@ -507,7 +507,7 @@ class Code extends Controller
$this->load->model ('SubversionModel', 'subversion');
$login = $this->login->getUser ();
if (CODEPOT_SIGNIN_COMPULSORY && $login['id'] == '')
if ((CODEPOT_SIGNIN_COMPULSORY || CODEPOT_SIGNIN_FOR_CODE_SEARCH) && $login['id'] == '')
redirect ("main/signin/" . $this->converter->AsciiTohex(current_url()));
$project = $this->projects->get ($projectid);
@ -533,7 +533,6 @@ class Code extends Controller
redirect ("main/signin/" . $this->converter->AsciiTohex(current_url()));
}
$this->_search_code ($project, $login);
}
}

View File

@ -5,4 +5,6 @@ $lang['CODE_PROPERTY'] = 'Property';
$lang['CODE_MSG_COMMITTED_BY'] = 'Committed by %s';
$lang['CODE_MSG_COMMITTED_BY_ON'] = 'Committed by %s on %s';
$lang['CODE_BAD_SEARCH_PATTERN'] = 'Bad search pattern';
?>

View File

@ -3,7 +3,6 @@ $lang['Administration'] = 'Administration';
$lang['All'] = 'All';
$lang['Attachment'] = 'Attachment';
$lang['Attachments'] = 'Attachments';
$lang['Author'] = 'Author';
$lang['Blame'] = 'Blame';
$lang['Cancel'] = 'Cancel';
$lang['Change'] = 'Change';
@ -12,6 +11,7 @@ $lang['Code'] = 'Code';
$lang['Code changes'] = 'Code changes';
$lang['Comment'] = 'Comment';
$lang['Commitable'] = 'Commitable';
$lang['Commiter'] = 'Commiter';
$lang['Create'] = 'Create';
$lang['Created by'] = 'Created by';
$lang['Created on'] = 'Created on';

View File

@ -1,7 +1,6 @@
<?php
$lang['Administration'] = 'Administration';
$lang['All'] = 'Semua';
$lang['Author'] = 'Pengarang';
$lang['Blame'] = 'Menyalahkan';
$lang['Cancel'] = 'Cancel';
$lang['Change'] = 'Change';
@ -10,6 +9,7 @@ $lang['Code'] = 'Kode';
$lang['Code changes'] = 'Kode changes'
$lang['Comment'] = 'Comment';
$lang['Commitable'] = 'Commitable';
$lang['Commiter'] = 'Pengarang';
$lang['Create'] = 'Dibuat';
$lang['Created by'] = 'Dibuat oleh';
$lang['Created on'] = 'Waktu dibuat';

View File

@ -3,6 +3,8 @@ $lang['CODE_COMMIT'] = '커밋';
$lang['CODE_PROPERTIES'] = '속성';
$lang['CODE_PROPERTY'] = '속성';
$lang['CODE_MSG_COMMITTED_BY'] = '%s이(가) 커밋함';
$lang['CODE_MSG_COMMITTED_BY_ON'] = '%s이(가) %s에 커밋함';
$lang['CODE_MSG_COMMITTED_BY'] = '커밋터 %s';
$lang['CODE_MSG_COMMITTED_BY_ON'] = '커밋터 %s 시간 %s';
$lang['CODE_BAD_SEARCH_PATTERN'] = '검색패턴이 잘못되었습니다';
?>

View File

@ -3,7 +3,6 @@ $lang['Administration'] = '관리';
$lang['All'] = '모두';
$lang['Attachment'] = '첨부';
$lang['Attachments'] = '첨부';
$lang['Author'] = '저자';
$lang['Blame'] = '책임전가';
$lang['Cancel'] = '취소';
$lang['Change'] = '변경';
@ -12,6 +11,7 @@ $lang['Code'] = '코드';
$lang['Code changes'] = '코드변경';
$lang['Comment'] = '소견';
$lang['Commitable'] = '커밋가능';
$lang['Commiter'] = '커밋터';
$lang['Create'] = '생성';
$lang['Created by'] = '최초생성인';
$lang['Created on'] = '최초생성시간';
@ -87,12 +87,12 @@ $lang['Username'] = '사용자명';
$lang['Wiki'] = '위키';
$lang['Wikis'] = '위키';
$lang['MSG_LOG_COMMIT_BY'] = '%s이(가) 커밋했습니다';
$lang['MSG_LOG_CHANGE_BY'] = '%s이(가) 변경했습니다';
$lang['MSG_LOG_CREATE_BY'] = '%s이(가) 생성했습니다';
$lang['MSG_LOG_DELETE_BY'] = '%s이(가) 삭제했습니다';
$lang['MSG_LOG_UPDATE_BY'] = '%s이(가) 갱신했습니다';
$lang['MSG_LOG_REVPROP_CHANGE_BY'] = '리비전 속성 %s을(를) %s이(가) 변경했습니다';
$lang['MSG_LOG_COMMIT_BY'] = '%s 커밋';
$lang['MSG_LOG_CHANGE_BY'] = '%s 변경';
$lang['MSG_LOG_CREATE_BY'] = '%s 생성';
$lang['MSG_LOG_DELETE_BY'] = '%s 삭제';
$lang['MSG_LOG_UPDATE_BY'] = '%s 갱신';
$lang['MSG_LOG_REVPROP_CHANGE_BY'] = '리비전속성 %s 변경. 변경자 %s';
$lang['MSG_NO_DIFF'] = '차이점이 없습니다';

View File

@ -184,7 +184,7 @@ $this->load->view (
print '<th>' . $this->lang->line('Name') . '</th>';
print '<th>' . $this->lang->line('Revision') . '</th>';
print '<th>' . $this->lang->line('Size') . '</th>';
print '<th>' . $this->lang->line('Author') . '</th>';
print '<th>' . $this->lang->line('Commiter') . '</th>';
print '<th>' . $this->lang->line('Date') . '</th>';
print '<th>' . $this->lang->line('Blame') . '</th>';
print '<th>' . $this->lang->line('Difference') . '</th>';

View File

@ -82,7 +82,7 @@ $this->load->view (
<table id="code_history_mainarea_result_table">
<tr class='heading'>
<th><?=$this->lang->line('Revision')?></th>
<th><?=$this->lang->line('Author')?></th>
<th><?=$this->lang->line('Commiter')?></th>
<th><?=$this->lang->line('Date')?></th>
<th><?=$this->lang->line('Message')?></th>
<?php if ($file['type'] == 'file' || $file['type'] == 'dir') print '<th></th>'; ?>

View File

@ -111,7 +111,7 @@ $history = $file['history'];
<?=anchor ("code/revision/{$project->id}/${xpar}/{$prev_revision}", '<<')?>
<?=$this->lang->line('Revision')?>: <?=$history['rev']?>
<?=anchor ("code/revision/{$project->id}/${xpar}/{$next_revision}", '>>')?> |
<?=$this->lang->line('Author')?>: <?=htmlspecialchars($history['author'])?> |
<?=$this->lang->line('Committer')?>: <?=htmlspecialchars($history['author'])?> |
<?=$this->lang->line('Last updated on')?>: <?=date('r', strtotime($history['date']))?>
</div>

View File

@ -106,15 +106,19 @@ $this->load->view (
<div id="code_search_mainarea_result">
<?php
function search_and_show ($controller, $project, $file, $revision, $pattern)
function search_and_show ($controller, $project, $path, $revision, $pattern, $recurse)
{
if ($file['type'] == 'file')
{
// this function must be called with a directory
// do nothing here.
}
else
//$file = $controller->subversion->getFile ($project->id, $path, $revision);
//if ($file['type'] == 'file') return;
$dirarray = array ($path);
while (count($dirarray) > 0)
{
$path = array_shift ($dirarray);
$file = $controller->subversion->getFile ($project->id, $path, $revision);
if ($file === FALSE || $file['type'] == 'file') continue;;
// search in a directory.
$file_list = $file['content'];
foreach ($file_list as $f)
@ -127,8 +131,15 @@ function search_and_show ($controller, $project, $file, $revision, $pattern)
{
$lines = explode ("\n", $file2['content']);
//$matchkeys = preg_grep ("/{$pattern}/i", $lines, 0);
$matchlines = preg_grep ("/{$pattern}/", $lines, 0);
if (count($matchlines) > 0)
// TODO: allow regular expression
$escaped_pattern = preg_quote ($pattern, '/');
$matchlines = @preg_grep ("/{$pattern}/", $lines, 0);
if ($matchlines === FALSE)
{
print $controller->lang->line('CODE_BAD_SEARCH_PATTERN');
return;
}
else if (count($matchlines) > 0)
{
$hexpath = $controller->converter->AsciiToHex($fullpath);
if ($revision <= 0)
@ -141,12 +152,12 @@ function search_and_show ($controller, $project, $file, $revision, $pattern)
$revreq = "/{$file2['rev']}";
$revreqroot = '/' . $controller->converter->AsciiToHex ('.') . $revreq;
}
print '<li>';
print anchor (
"code/file/{$project->id}/{$hexpath}{$revreq}",
htmlspecialchars($fullpath));
print '<pre>';
foreach ($matchlines as $linenum => $line)
{
@ -155,21 +166,29 @@ function search_and_show ($controller, $project, $file, $revision, $pattern)
print "\n";
}
print '</pre>';
print '</li>';
}
}
else
{
search_and_show ($controller, $project, $file2, $revision, $pattern);
if ($recurse && count($file2['content']) > 0)
{
array_push ($dirarray, $fullpath);
}
}
}
}
}
}
$file = $this->subversion->getFile ($project->id, $file['fullpath'], $revision);
search_and_show ($this, $project, $file, $revision, $pattern);
// the repository search can take very long.
// change the execution time limit to run this script forever if it's allowed.
if (CODEPOT_ALLOW_SET_TIME_LIMIT) set_time_limit (0);
// TODO: prevent recursion to subdirectories depending on input
search_and_show ($this, $project, $file['fullpath'], $revision, $pattern, TRUE);
?>
</div> <!-- code_search_mainarea_result -->

View File

@ -74,6 +74,9 @@ function load_ini ($file)
array ('log_threshold', 'integer', 0),
array ('force_project_delete', 'boolean', FALSE),
array ('allow_set_time_limit', 'boolean', FALSE),
array ('signin_for_code_search', 'boolean', TRUE),
array ('footer', 'string', '')
);