11

Is there a way to show "who contributed to this line" of each line of a page of Wikipedia or of a MediaWiki site?

It would show per page and would be similar to the subversion blame tool.

migrated from superuser.com Jun 4 '11 at 6:14

This question came from our site for computer enthusiasts and power users.

  • Do you want to find the first occurrence of a specific word or phrase in a page's revision history, or is this question about something else? There must be some way to download the full revision history for a specific page, but I haven't found it yet. – Anderson Green Nov 26 '12 at 17:59
  • Yeah that's about right. – rogerdpack Nov 26 '12 at 18:01
  • 1
    It's very easy to do this using WikiBlame, as explained here: webapps.stackexchange.com/a/35914/20087 – Anderson Green Nov 26 '12 at 19:19
  • Wow that's pretty close. Looks like that one drills in to find the committer of "given words" in the wiki page, maybe it could be modified to show the entire page :) – rogerdpack Nov 26 '12 at 19:55
  • It already shows the revision where the text was added, so you can just click on that link to see what the entire page looked like when the text was added. – Anderson Green Nov 26 '12 at 20:02
3

I often need something like this as well, but it looks like there's no ready solution.

What I've done is written a script that helps me grab revisions using the MediaWiki API and import them to the Bazaar version control system. bzr qblame article.wiki, then gives a nice view of who changed what. The script is not really ready for release, but you can find it below or on Pastebin. The script adds to a mercurial repo, which can then be converted to 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)
3

http://search.cpan.org/~daxim/Mediawiki-Blame-0.0.3/lib/Mediawiki/Blame.pm appears to support exactly this. Unfortunately, it's just a perl module, not a user-friendly command, so it's going to be a bit harder to use than one might want …

1

Inspired by previous answers, I've adapted the previous pastebin Python script to use git instead of mercurial as backend

My project is hosted on GitLab

0

Another not very user friendly solution would be the mw-to-git extension for git, which would presumably allow you to run git blame on a page.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.