Cv Wiki

CvWiki was an early WikiWikiClone. Once the only WikiWikiClone with functioning TransClusion, BackLinks and WayBackMode, but there are lots of better ones these days. Try ZwiKi ...

CvWiki is a WikiWikiClone of Ward's code that

There are several smaller twiddles in it too, like debugged LinkPatterns and EmphasisPatterns. But it's all backward-compatible with the existing wikibase.

A large amount of this clone is still under Ward's copyright, but unless Ward has objections you should be able to pick up a copy of Pete's hack at (BrokenLink) (alternate link: (Also BrokenLink)) Pete's parts of this are all under LGPL.

Be warned that installing the thing properly will require you to install CVS (see which is free but requires a little expertise. And CvWiki comes with zero documentation at the moment.


I want to try out CVWiki. I have Perl and CVS installed, but get tons of errors when I try the naive thing (running cvwiki from a command line to see what happens). I am assuming that if I grovel through code long enough, I might get it to work. Still, if someone has a reasonable list of the things that need editing to get this to work, that would be helpful.


Okay, being the cause of some angst, here's the basics; others ought to fill in the difficulties they've had with each step:

I'm trying to set up a departmental CvWiki. I don't know much about CVS and I don't know how to accomplish the above step. Could someone provide example CVS commands?

I get good use from this tool, but it's not free of Ward's copyright, I make no money from it, and as you can read in its source I neither support nor warranty it for any use at all. Use strictly at your own risk. -- PeterMerel

I wrote a Wiki Clone based on CvWiki running at (New address:

I'd be glad to help someone who wants to set up CvWiki. It was hard enough for me, I don't want anyone else to have to go through that. CVS 1.9 is buggy; CvWiki requires 1.9.26 or later.

Before you can use WayBackMode, you have to:

  1. Create the directory for the CVWiki database.
  2. Put this empty directory in the repository. Make sure the directory in the repository is the same name as the directory for the database, and only one level deep (not 2, with the parent directory name duplicating the subdirectory name).
  3. Remove the directory you made. The canonical version remains in the repository.
  4. Check out the same directory, making sure it checks out in the same location it was at before. The only difference is that there will be a CVS/ subdirectory with some files in it.
  5. Test adding a page to the wiki database. Keep a close eye on the web server logs for CVS errors. The CGI wiki script must run as a user that has write permission to: the repository (using CVS), and also the checked out version of the wiki database.


Is there a CvWiki running anywhere that one could check out? The Tunes one appears not to connect to anything. -- RonJeffries

It's there, it just seems to be down the end of a long narrow pipe. I stuck a transclusion example on its front page for you to play with. -- PeterMerel

I'm running (internal to our firewall, alas) a modified version of CvWiki. Some of the interesting changes include:

As well as more minor tweaks and fixes. The basic notion of the revision controlled wiki is a great addition; I also find the diffs addition addictive (OK, RecentChanges says it's changed but where!) and personally use that more than WayBackMode per se. I just added the Append feature recently, really motivated by a desire to have a mail-to-wiki gateway (a little forwarder script extracts a WikiName from a mail Subject, and invokes a wiki append to that page via http), but it seems to have potential for ThreadMode discussions, notably avoiding stepped-on edits, and in contexts where some users are not secure enough in wiki lore to edit someone else's comments.

I'd be glad to mail it to interested parties. -- JimPerry

I think I like the sound of most of that except the thready stuff, which it seems to me might detract from the WikiNature. RCS vs. CVS makes no difference unless you're versioning your wiki along with your project, in which case CVS is handy. I like the diff idea - should like to see it in action before I could opine on whether I like it better or worse than WayBackMode. I guess I can think of good uses of both. -- PeterMerel

For better or worse we're not seeing much wiki-ish interactivity, but it is proving useful as a repository, hence the mail-gateway/append experiment. YMMV.The diff thing is orthogonal to WayBackMode; the word "modified" on each revision listed is linked to the diffs at that rev (from the previous), the date is still linked to the WayBackMode of that page at that rev. -- JimPerry

Concurrency problem. CvWiki runs on Solaris as nobody. The user edits and clicks on Save. CvWiki creates a lock directory /tmp/wiki. The user decides to go back, edit for a second, and clicks on Save again. CvWiki runs a second time but finds that /tmp/wiki still exists. Since the first run never removed the lock directory CvWiki can't create a new one and aborts.

How can this concurrency conflict be resolved? (It's a pain to remove the /tmp/wiki directory "by hand" because I don't own it, i.e. I have to do it from inside the script). -- FrankGerhardt

The behaviour of CGI scripts depends on the http server you use. Some servers will kill a script before it finishes, leaving lock files hanging around indefinitely. I've run CvWiki successfully with both the Xitami and Netscape SuiteSpot? servers over NT. I haven't tried it on Solaris, but I'd suggest SuiteSpot? and Apache are worth trying if your present server is killing scripts before locks can be removed.

Alternatively you could play with Perl SIGHANDLERs in the script to cause the locks to be removed on a kill - if you do this and it works then I'd be happy to integrate your changes back into my otherwise unsupported version of the code ... -- PeterMerel

If you are using a linux system change the 1st line to #!/usr/bin/perl or wherever perl is located.

I found this made digging out problems a little easier: create a script (I called mine

 system 'perl /pathname/',@args;

For some reason from perl the errors do not get logged but from a script they do.

You can also call the script from the command line to get it up and running.

Now someone who is better at HTTP and perl might post a series of commands that would emulate a call from a browser to test various Wiki calls.

Also if I remove the "perl" in the, and just tries to execute the script it fails. Don't know why. runs right next to it OK.

If someone has an idea of how to add access control lists.

I would like to have a specialised wiki for work ( for process documents etc. ), and want to restrict it to workers while keeping it on the WorldsWildWeb?.

People should be able to make tools that can help you manage the repository. For example to delete a page. (I wonder what happens when you do cvs delete and someone tries to recreate the page?)

Also can you create the page WorkingTheWayBack??

Finally: If you are using CVS and don't want to risk corrupting your repository, or intermingle wiki with other stuff here are the steps to use another repository ( and not have to screw aroung with CVSROOT ).

  1. Define a variable in the script called $Repository, set it to the directory you want to store things in. $Repository='therepositry';
  2. Login as the user ( or su user ) that httpd runs the script under. With Apache that generally defaults to 'nobody'.
  3. Create the repository directory.
  4. Cd to that directory. Run the command: cvs -d $Repository init
  5. Create the $DatabaseName directory.
  6. cd to $DatabaseName
  7. cvs -d $Repository import $DatabaseName'as a local directory' vendor version. Make something up for vendor. The first character of version must be alphabetic.
  8. cd ..
  9. cvs -d $Repository co $DatabaseName'as a local directory'.
  10. Look in $DatabaseName to see if the folder CVSROOT is there. If not you've made errors.
  11. The nastiest part:edit the script ($Repository should already be there) put '$cvs="cvs -d $Repository"' at the top. Every time you see a string 'cvs somecommand' change it to '$cvs somecommand'. For example change cvs import to $cvs -d $Repository import.
  12. Sit back enjoy.

PS Where are the UnitTests for and

PPS Sorry for the messiness of my contribution. I will clean it up tonight.

-- ThaddeusOlczyk

What's the difference between this page and


EditText of this page (last edited May 9, 2012) or FindPage with title or text search

Meatball   Wikibase