No description
- Add README.md with installation and usage documentation - Improve code structure and reliability |
||
|---|---|---|
| i18n | ||
| maintenance | ||
| sql | ||
| src | ||
| extension.json | ||
| README.md | ||
HideDuplicateRevisions
역사 페이지에서 같은 타임스탬프를 가진 중복 리비전을 숨기는 MediaWiki 확장입니다.
개요
XML 덤프를 여러 번 import하거나 데이터 마이그레이션 과정에서 같은 (page_id, timestamp) 조합을 가진 중복 리비전이 생성될 수 있습니다. 이 확장은:
- 역사 페이지에서 중복 리비전을 숨깁니다 (가장 높은
rev_id만 표시) - 바이트 변화량을 올바르게 재계산합니다
- 원본 데이터는 DB에 그대로 유지됩니다 (표시만 필터링)
기능
- 중복 리비전 숨김: 같은 타임스탬프를 가진 리비전 중 최신
rev_id만 표시 - 바이트 변화량 재계산: 숨겨진 리비전을 고려하여 정확한 변화량 표시
- 캐시 테이블: 빠른 쿼리를 위한 숨길 리비전 목록 캐싱
- 유지보수 스크립트: 새 import 후 숨김 목록 갱신 지원
요구사항
- MediaWiki 1.39.0 이상
- MySQL / MariaDB
설치
-
확장 파일을
extensions/HideDuplicateRevisions/디렉토리에 복사합니다. -
LocalSettings.php에 다음을 추가합니다:
wfLoadExtension( 'HideDuplicateRevisions' );
- 데이터베이스 업데이트를 실행합니다:
php maintenance/update.php
- 숨길 리비전 목록을 생성합니다:
php extensions/HideDuplicateRevisions/maintenance/updateHiddenRevisions.php
사용법
숨길 리비전 업데이트
새로운 XML import 후 숨김 목록을 갱신합니다:
# 예상 결과 미리 보기 (실제 변경 없음)
php extensions/HideDuplicateRevisions/maintenance/updateHiddenRevisions.php --dry-run
# 실제 업데이트 실행
php extensions/HideDuplicateRevisions/maintenance/updateHiddenRevisions.php
# 배치 크기 조정 (기본: 10000)
php extensions/HideDuplicateRevisions/maintenance/updateHiddenRevisions.php --batch-size=5000
작동 방식
1. 역사 쿼리 필터링
PageHistoryPager::getQueryInfo 훅을 사용하여 hide_duplicate_revisions 테이블과 LEFT JOIN합니다:
SELECT ... FROM revision
LEFT JOIN hide_duplicate_revisions ON rev_id = hdr_rev_id
WHERE hdr_rev_id IS NULL
2. 바이트 변화량 재계산
중복 리비전이 숨겨지면 바이트 변화량(+N, -N)이 잘못 표시될 수 있습니다. PageHistoryLineEnding 훅에서:
- 페이지의 모든 보이는 리비전 크기를 캐시에 로드 (페이지당 1회 쿼리)
- 각 행의 바이트 변화량을 재계산하여 HTML 수정
3. 캐시 테이블
hide_duplicate_revisions 테이블에 숨길 rev_id만 저장합니다:
CREATE TABLE hide_duplicate_revisions (
hdr_rev_id BIGINT UNSIGNED NOT NULL PRIMARY KEY
);
디렉토리 구조
HideDuplicateRevisions/
├── extension.json # 확장 메타데이터
├── README.md # 이 파일
├── src/
│ └── Hooks.php # 훅 핸들러
├── maintenance/
│ └── updateHiddenRevisions.php # 유지보수 스크립트
├── sql/
│ └── tables.sql # 테이블 스키마
└── i18n/
├── en.json # 영어 메시지
├── ko.json # 한국어 메시지
└── qqq.json # 메시지 문서
성능
- 쿼리 레벨 필터링: 역사 페이지 로드 시 단일 LEFT JOIN 추가
- 인메모리 캐시: 페이지당 리비전 크기를 한 번만 로드
- 인덱스 최적화: PRIMARY KEY만 사용하여 빠른 조회
라이선스
GPL-3.0-or-later
작성자
- OSNuri
- K-Wiki Project