ibneko: (Default)
ibneko ([personal profile] ibneko) wrote2007-03-08 05:37 pm
Entry tags:

WebSVN

I've been looking around for various web "front ends" for svn - essentially allowing comfortable browsing of an svn repository. The catch, however, is it must support remote repositories. As in, accessed through http:// or https://. Most, like Trac and ViewVC (was ViewCVS) either are working on handling it, or don't handle it at all.

So WebSVN [http://websvn.tigris.org/] handles it. And runs in PHP. That is good. (Trac and ViewVC are python based, a bit more of a hassle to install, at least for me.)

"XML error: no element found (3) at line 3 column 0 byte 45"

This error is due to a custom certificate. If you hit this, you'll need to find some way to tell svn to accept that certificate. Since my certificate was signed by CACert, all I had to do with add their root file to the svn config:
(in ~/.subversion/servers, on the bottom, after the [global])
ssl-authority-files = /etc/ssl/certs/cacert-root-ca.crt

And then I hacked configclass.inc (and modified config.inc)
Diff as follows:
Index: include/configclass.inc
===================================================================
--- include/configclass.inc     (revision 522)
+++ include/configclass.inc     (working copy)
@@ -434,6 +434,7 @@
    // Tool path locations
 
    var $svnlook = "svnlook";
+   var $config_dir = "/tmp";
    var $svn = "svn --non-interactive --config-dir /tmp";
    var $svn_noparams = "svn --config-dir /tmp"; 
    var $diff = "diff";
@@ -811,6 +812,15 @@
          
       $var .= " ".$params;
    }
+   
+   // setSVNConfigPath
+   //
+   // Define the location of the svn config directory
+   
+   function setSVNConfigPath($path)
+   {
+      $this->setPath($this->config_dir, $path, "", "");
+   }
 
    // setSVNCommandPath
    //
@@ -818,8 +828,8 @@
    
    function setSVNCommandPath($path)
    {
-      $this->setPath($this->svn, $path, "svn", "--non-interactive --config-dir /tmp");
-      $this->setPath($this->svn_noparams, $path, "svn", " --config-dir /tmp");
+      $this->setPath($this->svn, $path, "svn", "--non-interactive --config-dir ".$this->config_dir);
+      $this->setPath($this->svn_noparams, $path, "svn", " --config-dir ".$this->config_dir);
       $this->setPath($this->svnlook, $path, "svnlook");
    }


Note: the configuration location set function must be called BEFORE setSVNCommandPath. ie;
$config->setSVNConfigPath("/Path/To/Subversion/config/.subversion ie. /Users/benjamin/.subversion");
$config->setSVNCommandPath("/usr/local/bin/");

Also, yes, it does use your subversion settings. I see no problems with this, but I may be sadly mistaken. If you want to play it safe, recreate the folder somewhere and set the "servers" file there.

--
Side note: accessing an SVN repository remotely is quite slow. If you have alternatives, use them.

Post a comment in response:

If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org