Построчное отображение автора, ответственного за вклад на странице MediaWiki

11

Есть ли способ показать "кто внес вклад в эту строку" в каждой строке страницы Википедии или сайта MediaWiki?

Он будет отображаться на странице и будет похож на инструмент обвинения в Subversion.

rogerdpack
источник
Вы хотите найти первое вхождение определенного слова или фразы в истории изменений страницы, или этот вопрос о чем-то еще? Должен быть какой-то способ загрузить полную историю изменений для конкретной страницы, но я еще не нашел ее.
Андерсон Грин
Да, это правильно.
rogerdpack
1
Это очень легко сделать, используя WikiBlame, как объясняется здесь: webapps.stackexchange.com/a/35914/20087
Андерсон Грин,
Вау, это довольно близко. Похоже на то, что это делается для того, чтобы найти
коммитера
Он уже показывает ревизию, в которой был добавлен текст, поэтому вы можете просто нажать на эту ссылку, чтобы увидеть, как выглядела вся страница при добавлении текста.
Андерсон Грин

Ответы:

3

Мне часто нужно что-то подобное, но похоже, что готового решения не существует.

Я написал скрипт, который помогает мне получать ревизии с помощью MediaWiki API и импортировать их в систему контроля версий Bazaar. bzr qblame article.wiki, а затем дает хорошее представление о том, кто что изменил. Скрипт на самом деле не готов к выпуску, но вы можете найти его ниже или на Pastebin . Сценарий добавляет к ртутному репо, который затем может быть преобразован в базар.

# I hereby place this script into the Public Domain!
import os, sys
import time

import mwclient

import mercurial.ui
from mercurial import localrepo
from mercurial import commands

article = 'Love'
#start_time = None
start_time = '2011-01-01T00:00:00Z'

# set up mercurial repo
ui = mercurial.ui.ui()
repo_dir = article
repo = localrepo.localrepository(ui, path=repo_dir, create = not os.path.isdir(repo_dir))
#if not os.path.isdir(article):
#   os.mkdir(article)
#os.chdir(article)
print "rep in", repo.root
content_path = os.path.join(repo.root, article + '.wiki')

site = mwclient.Site('en.wikipedia.org')
page = site.Pages[article]

for rev in page.revisions(start=start_time, limit=50,dir='newer', prop='ids|timestamp|flags|comment|user|content'):
    content = rev['*']
    timestamp = time.asctime(rev['timestamp'])
    comment = rev['comment'].encode('utf8')
    if len(comment) == 0: comment = "blank"
    print "writing revision from", timestamp

    f = open(content_path, 'wb')
    f.write(content.encode('utf8'))
    f.close()

    commands.addremove(ui, repo)
    commands.commit(ui, repo, message=comment, user=rev['user'].encode('utf8'), date=timestamp)
Евг
источник
3

http://search.cpan.org/~daxim/Mediawiki-Blame-0.0.3/lib/Mediawiki/Blame.pm, кажется, поддерживает именно это. К сожалению, это всего лишь модуль perl, а не удобная команда, поэтому его будет сложнее использовать, чем хотелось бы…

Самба
источник
Но для этого модуля можно создать веб-интерфейс, подобный wikipedia.ramselehof.de/wikiblame.php
Nemo,
0

Другим не очень удобным решением было бы расширение mw-to-git для git, которое, по-видимому, позволило бы вам запускать git blameна странице.

scribu
источник