[첫화면으로]UseModWiki소스수정/RcOldFile버그

마지막으로 [b]

$RcOldFile 관련 버그 수정

2003-03-09
   ...
2003-03-08
   ...
   ...
2003-02-20    
   ...          <-- rclog 화일의 가장 첫번째 라인
2003-03-08      <-- rclog.old 화일의 가장 마지막 라인
   ...          <-- 이하 rclog.old 화일의 내용이 다시 한 번 출력된다.
이 문제의 원인은, "oldrclog" 와 "rclog.old" 는 서로 다른 역할의 화일이라는 것이다. oldrclog 는 rclog 의 내용이 너무 길어질 경우에 일정 기간 이전의 내용을 따로 떼어내어 보관하기 위한 화일이다. "90일 전까지의 변경"을 볼 때, rclog 의 내용을 다 읽었는데도 90일이 채 되지 않은 경우에 이 oldrclog 화일을 마저 읽어서 채워넣는다. rclog 화일의 내용을 oldrclog 로 옮기는 것은 수작업으로 해 주어야 한다.
rclog.old 는, 페이지 삭제 또는 이름 바꾸기를 할 때 rclog 화일 엔트리도 같이 치환을 하는데, 이 때 치환되기 전의 내용을 백업해 두기 위해서 자동으로 생성되는 화일이다.
따라서, 사이트가 생성된지 90일이 되지 않은 상태에서, 90일 이전까지의 변경 내역을 보겠다고 하면 저 RcOldFile 을 읽어서 합쳐넣게 되는데, 이 때 k3 버전에서는 RcOldFile 이 자동으로 생성된 rclog.old 이기 때문에 엉뚱한 출력이 나오는 것이다.

config.pl 에서 다음 라인 수정
# $RcOldFile   = "$DataDir/rclog.old"; # Old RecentChanges logfile
  $RcOldFile   = "$DataDir/oldrclog"; # 굳이 oldrclog 가 아니더라도 되지만, 어쨌거나 rclog.old 가 아닌 다른 이름으로 지정

wiki.pl 에서 재목님의 패치를 제거한다.
sub GetRcHtml {
    ...
    my @outrc = @_;
    my ($rcline, $html, $date, $sum, $edit, $count, $newtop, $author);
    my ($showedit, $inlist, $link, $all, $idOnly);
###############
### replaced by gypark
### RcOldFile 버그 수정
#   my ($ts, $oldts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp);
    my ($ts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp);
###
###############
    my ($tEdit, $tChanges, $tDiff);
    my %extra = ();
    ...
    $idOnly = &GetParam("rcidonly", "");

    @outrc = reverse @outrc if ($newtop);
###############
### commented by gypark
### RcOldFile 버그 수정
#   ($oldts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp)
#       = split(/$FS3/, $outrc[0]);
#   $oldts += 1;
###
###############
    foreach $rcline (@outrc) {
        ($ts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp)
            = split(/$FS3/, $rcline);
        # Later: need to change $all for new-RC?
        next  if ((!$all) && ($ts < $changetime{$pagename}));
        next  if (($idOnly ne "") && ($idOnly ne $pagename));
###############
### commented by gypark
### RcOldFile 버그 수정
#       next  if ($ts >= $oldts);
#       $oldts = $ts;
###
###############
        # print $ts . " " . $pagename . "<br>\n";
        %extra = split(/$FS2/, $extraTemp, -1);
    ...
}

RcOldFile 이 존재할 경우에만 치환 작업을 하도록 수정
sub EditRecentChanges {
    my ($action, $old, $new) = @_;

    &EditRecentChangesFile($RcFile,    $action, $old, $new);
###############
### replaced by gypark
### RcOldFile 버그 수정
#   &EditRecentChangesFile($RcOldFile, $action, $old, $new);
    &EditRecentChangesFile($RcOldFile, $action, $old, $new) if (-f $RcOldFile);
###
###############
}


위키위키분류

마지막 편집일: 2007-1-8 12:19 pm (변경사항 [d])
899 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기