Existe uma maneira de mostrar "quem contribuiu para esta linha" de cada linha de uma página da Wikipedia ou de um site do MediaWiki?
Seria exibido por página e seria semelhante à ferramenta de culpa do subversion.
Existe uma maneira de mostrar "quem contribuiu para esta linha" de cada linha de uma página da Wikipedia ou de um site do MediaWiki?
Seria exibido por página e seria semelhante à ferramenta de culpa do subversion.
Respostas:
Muitas vezes também preciso de algo assim, mas parece que não há solução pronta.
O que eu fiz foi escrever um script que me ajuda a obter revisões usando a API MediaWiki e importá-las para o sistema de controle de versões do Bazaar. bzr qblame article.wiki
, fornece uma boa visão de quem mudou o quê. O script não está realmente pronto para o lançamento, mas você pode encontrá-lo abaixo ou no Pastebin . O script adiciona um repositório mercurial, que pode ser convertido em Bazaar.
# 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)
http://search.cpan.org/~daxim/Mediawiki-Blame-0.0.3/lib/Mediawiki/Blame.pm parece suportar exatamente isso. Infelizmente, é apenas um módulo perl, não um comando fácil de usar, por isso será um pouco mais difícil de usar do que se poderia querer ...
Inspirado nas respostas anteriores, adaptei o script Python pastebin anterior para usar git em vez de mercurial como back-end
Meu projeto está hospedado no GitLab
Outra solução pouco amigável seria a extensão mw-to-git para git, que provavelmente permitiria que você executasse git blame
em uma página.