¿Hay alguna manera de mostrar "quién contribuyó a esta línea" de cada línea de una página de Wikipedia o de un sitio de MediaWiki?
Se mostraría por página y sería similar a la herramienta de subversión.
¿Hay alguna manera de mostrar "quién contribuyó a esta línea" de cada línea de una página de Wikipedia o de un sitio de MediaWiki?
Se mostraría por página y sería similar a la herramienta de subversión.
Respuestas:
A menudo necesito algo como esto también, pero parece que no hay una solución lista.
Lo que he hecho es escribir un script que me ayuda a obtener revisiones usando la API MediaWiki e importarlas al sistema de control de versiones de Bazaar. bzr qblame article.wiki
, luego da una buena vista de quién cambió qué. El script no está realmente listo para su lanzamiento, pero puede encontrarlo a continuación o en Pastebin . El script se agrega a un repositorio mercurial, que luego se puede convertir a Bazar.
# 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 admitir exactamente esto. Desafortunadamente, es solo un módulo perl, no un comando fácil de usar, por lo que será un poco más difícil de usar de lo que uno podría desear ...
Inspirado por respuestas anteriores, he adaptado el script anterior de Pastebin Python para usar git en lugar de mercurial como backend
Mi proyecto está alojado en GitLab
Otra solución no muy fácil de usar sería la extensión de mw a git para git, que presumiblemente le permitiría ejecutar git blame
en una página.