Calling an svn update from a php script via a browser is not working

10,864

Solution 1

OK. I got it. It is an issue with permissions. The .svn directory must have the right permissions because the svn update command is using those directories to write stuff.

So! ---Make sure you run all chmod commands as sudo or root----

  1. run a chmod 777 on .svn directory
  2. run an svn update via command line
  3. call script

If nothing. You must run chmod 777 recursively for all .svn directories then run another svn update

Still nothing?

Make sure you don't have two svn clients In my case, the svn client used by the UI is different from the svn (command line) If you have two clients, make sure they are running the same version Or update your script to call the client directly.

Still nothing?

Run a chmod 777 -R * svn update and try again

If you can make it work with another set of permissions, please let me know. I know that 777 is not ideal, but I can't make it work with something lower.

Thanks again guys.

Solution 2

I was also encountering the same problem but not even permissions solved it.

Based on some of the other advice here, I did:

<?php
echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive');

I then got an error dumped into my browser:

svn: warning: Can't open file '/root/.subversion/servers': Permission denied
svn: OPTIONS of 'http://my.svn.server/svn/project/trunk': authorization failed: Could not authenticate to server: rejected Basic challenge (http://my.svn.server)

Not sure why my web server user tried to access /root but I fixed the problem without changing any permissions by adding --config-dir to the svn up command:

<?php
echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive --config-dir /path/to/my/home/.subversion');

*Note that /path/to/my/home/.subversion exists because the initial checkout was done on the command line

Solution 3

to get the standard error in the return value use :

shell_exec('2>&1 svn update')

it doesn't work if you put the 2>&1 at the end

Solution 4

It might be permission problem: script called via a web browser runs under different username than svn working directory's owner, therefore it has read-only access. Read-only access should be enough for svn status to execute, but not for svn update (though in this case there should be an error like "svn: Can't open file '.svn/lock': Permission denied").

Solution 5

Have you tried the PECL svn extension? You don't need to use shell_exec for this.

Share:
10,864
hbt
Author by

hbt

Updated on June 13, 2022

Comments

  • hbt
    hbt almost 2 years

    I have two scripts.

    1. running an update and calling shell_exec('svn update') and shell_exec('svn st')
    2. running a mysqldump shell_exec('mysqldump params')

    The svn script is not running the update command, the svn st is printing results but not the svn update

    I tried to declare parameters when calling svn update eg 'svn update ' . dir . ' --username myuser --password mypasswd --non-interactive'; -- still nothing Played with most of the params

    If this is something related to binaries/permissions/groups, I don't see it. The mysqldump command works fine and is producing a file, so why isn't the svn updating the filesystem?

    Please do not advise using core SVN classes in PHP. This is not an option, I don't have complete control over the server and the module is not available.

    Thanks for your help,

    -hbt

    PS: important thing to mention here. The scripts works when called via the command line. It only fails when called via a web browser.