C'è un modo per mostrare "chi ha contribuito a questa linea" di ogni riga di una pagina di Wikipedia o di un sito MediaWiki?
Mostrerebbe per pagina e sarebbe simile allo strumento di colpa della sovversione.
C'è un modo per mostrare "chi ha contribuito a questa linea" di ogni riga di una pagina di Wikipedia o di un sito MediaWiki?
Mostrerebbe per pagina e sarebbe simile allo strumento di colpa della sovversione.
Risposte:
Spesso ho bisogno anche di qualcosa del genere, ma sembra che non ci sia una soluzione pronta.
Quello che ho fatto è stato scritto uno script che mi aiuta a prendere le revisioni usando l'API MediaWiki e importarle nel sistema di controllo della versione di Bazaar. bzr qblame article.wiki
, quindi offre una buona visione di chi ha cambiato cosa. Lo script non è davvero pronto per il rilascio, ma puoi trovarlo qui sotto o su Pastebin . La sceneggiatura si aggiunge a un repository mercuriale, che può quindi essere convertito in 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 sembra supportare esattamente questo. Sfortunatamente, è solo un modulo perl, non un comando user-friendly, quindi sarà un po 'più difficile da usare di quanto si possa desiderare ...
Ispirato dalle risposte precedenti, ho adattato il precedente script Python di pastebin per usare git invece di mercurial come backend
Il mio progetto è ospitato su GitLab
Un'altra soluzione non molto user friendly sarebbe l' estensione mw-to-git per git, che presumibilmente ti permetterebbe di essere eseguito git blame
su una pagina.