No description
Find a file
Hwang Yunsung f316b66136 v1.2.0: Add README and code improvements
- Add README.md with installation and usage documentation
- Improve code structure and reliability
2026-01-07 20:00:02 +09:00
i18n v1.2.0: Add README and code improvements 2026-01-07 20:00:02 +09:00
maintenance v1.2.0: Add README and code improvements 2026-01-07 20:00:02 +09:00
sql Initial commit: HideDuplicateRevisions v1.0.0 2026-01-07 18:31:54 +09:00
src v1.2.0: Add README and code improvements 2026-01-07 20:00:02 +09:00
extension.json v1.2.0: Add README and code improvements 2026-01-07 20:00:02 +09:00
README.md v1.2.0: Add README and code improvements 2026-01-07 20:00:02 +09:00

HideDuplicateRevisions

역사 페이지에서 같은 타임스탬프를 가진 중복 리비전을 숨기는 MediaWiki 확장입니다.

개요

XML 덤프를 여러 번 import하거나 데이터 마이그레이션 과정에서 같은 (page_id, timestamp) 조합을 가진 중복 리비전이 생성될 수 있습니다. 이 확장은:

  • 역사 페이지에서 중복 리비전을 숨깁니다 (가장 높은 rev_id만 표시)
  • 바이트 변화량을 올바르게 재계산합니다
  • 원본 데이터는 DB에 그대로 유지됩니다 (표시만 필터링)

기능

  • 중복 리비전 숨김: 같은 타임스탬프를 가진 리비전 중 최신 rev_id만 표시
  • 바이트 변화량 재계산: 숨겨진 리비전을 고려하여 정확한 변화량 표시
  • 캐시 테이블: 빠른 쿼리를 위한 숨길 리비전 목록 캐싱
  • 유지보수 스크립트: 새 import 후 숨김 목록 갱신 지원

요구사항

  • MediaWiki 1.39.0 이상
  • MySQL / MariaDB

설치

  1. 확장 파일을 extensions/HideDuplicateRevisions/ 디렉토리에 복사합니다.

  2. LocalSettings.php에 다음을 추가합니다:

wfLoadExtension( 'HideDuplicateRevisions' );
  1. 데이터베이스 업데이트를 실행합니다:
php maintenance/update.php
  1. 숨길 리비전 목록을 생성합니다:
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. 페이지의 모든 보이는 리비전 크기를 캐시에 로드 (페이지당 1회 쿼리)
  2. 각 행의 바이트 변화량을 재계산하여 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

관련 링크