[Mediawiki-l] editing wiki pages via subversion

Jonathan Swartz swartz at pobox.com
Tue Jun 5 23:20:37 UTC 2007


Has anyone ever considered integrating mediawiki with svn  
(subversion) so that editors could use svn to check out, edit, and  
commit pages?

I maintain a number of small mediawiki sites for business use. I want  
to use my favorite editor (emacs) to edit pages. But I don't want  
just one-page-at-a-time editing. I want to work with a number of  
pages concurrently, possibly editing them over hours or days, and  
write them back to the wiki only when they are ready. In other words,  
to work with pages just like I work with code.

I can do some of this with third-party tools like Perl's  
CMS::Mediawiki or with WikipediaFS. But even then I have no easy way  
to merge the latest changes from the wiki with my files, or to see  
what changes I've made, or to see version history, etc. In other  
words, I want all the features of a real version control client like  
svn.

Imagine:

    % cd /path/to/my/wiki

    # Download all new pages and changes from the wiki
    # Obviously not something you could do with wikipedia.com :) -  
but great for small-to-medium wikis
    % svn update

    # See what pages I've modified
    % svn status

    # Compare my modifications to the server's versions
    % svn diff

    # Add a few new pages
    % svn add System_functions.wk User_API.wk

    # Commit all my changes
    % svn commit

So. My crazy idea is to modify mediawiki (or write a mediawiki  
plugin) to keep a svn repository in sync with mediawiki's own page  
version database.

Here's a rough outline of how this might work.

In the mediawiki code:

* When a new wiki is created, create an empty svn repository in a  
configurable directory. The repository could be configured to use a  
single flat directory (for small wikis), or an alphabetical  
hierarchical directory A/, B/, C/ (for larger wikis). Each wiki page  
will be represented by a file named like "The_page_title.wk".

* Whenever a new page is created via the web site, "svn add" a  
new .wk file in the repository.

* Whenever a new version of an existing page is saved via the  
website, also modify the file in the server's svn repository and "svn  
commit" it.

And in an svn commit hook:

* Whenever a new page is added, issue a web request (or a command- 
line php script) to create it in mediawiki's database too.

* Whenever a change is committed, issue a web request (or a command- 
line php script) to make that change in mediawiki's database too.

Same with delete, rename, etc. Whatever happens to the mediawiki  
database needs to happen to svn, and vica versa.

Caveats: I don't have an in-depth knowledge of the mediawiki php code  
so I don't know how centralized functions are, e.g. if there a single  
place in the code where pages get added, saved, and deleted. And I  
might be vastly underestimating how easy it is to keep these two  
datastores in sync.

Feedback, pointers, references to similar work, or gentle  
explanations of why I'm insane are greatly appreciated.

Thanks for reading this far :),
Jon




More information about the MediaWiki-l mailing list