$RcOldFile 관련 버그 수정
- 오리지널 0.92 버전에서는 페이지 삭제나 이름 바꾸기를 하면 RcOldFile ("oldrclog" 로 지정되어 있음) 을 열 수 없다며 에러가 나온다. 화일이 있는지 없는지를 판단하지 않고 무조건 관련 연산을 수행하기 때문이다.
- UseModWiki/Bugs 에 관련 내용이 언급되어 있다.
- Luke 님의 K3 버전에서는 $RcOldFile = "rcold.log" 로 지정했는데, 이러면 위의 에러는 발생하지 않는데, 최근변경내역에서 다음과 같이 항목이 중복해서 나오는 문제가 발생한다.
-
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 이기 때문에 엉뚱한 출력이 나오는 것이다.
- PalmWiki 에서 정재목님이 이 것을 다시 수정을 하여, rclog 라인을 읽을 때마다 그 라인의 timestamp 를 저장해 두어 이런 라인의 timestamp 와 비교하는 방법을 사용했는데, 결과적으로 불필요한 일일 뿐더라 최근변경내역을 날짜순으로 출력시킬 경우 하나도 출력이 되지 않는 문제가 있다.
- 필수 요구 사항: 없음
- 선택 요구 사항: 없음
- config.pl 에서 다음 라인 수정
$RcOldFile = "$DataDir/oldrclog";
- wiki.pl 에서 재목님의 패치를 제거한다.
sub GetRcHtml {
...
my @outrc = @_;
my ($rcline, $html, $date, $sum, $edit, $count, $newtop, $author);
my ($showedit, $inlist, $link, $all, $idOnly);
my ($ts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp);
my ($tEdit, $tChanges, $tDiff);
my %extra = ();
...
$idOnly = &GetParam("rcidonly", "");
@outrc = reverse @outrc if ($newtop);
foreach $rcline (@outrc) {
($ts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp)
= split(/$FS3/, $rcline);
next if ((!$all) && ($ts < $changetime{$pagename}));
next if (($idOnly ne "") && ($idOnly ne $pagename));
%extra = split(/$FS2/, $extraTemp, -1);
...
}
- RcOldFile 이 존재할 경우에만 치환 작업을 하도록 수정
sub EditRecentChanges {
my ($action, $old, $new) = @_;
&EditRecentChangesFile($RcFile, $action, $old, $new);
&EditRecentChangesFile($RcOldFile, $action, $old, $new) if (-f $RcOldFile);
}
위키위키분류