Community technical support mailing list was retired 2010 and replaced with a professional technical support team. For assistance please contact: Pre-sales Technical support via email to sales@march-hare.com.
Hi All, I have a problem with being unable to setup POSTCOMMIT to work as desired. I already searched documentation and entire web site & mailing list archive, and have read the following article, and a number of mailing list posts: http://www.cvsnt.org/wiki/PostCommit Here is my setup: - CVS is used for web development. - CVS server is CVSNT on a Linux server (same machine is web server). - Clients are using TortoiseCVS on Windows. - Web server document root needs to be updated immediately when anything is committed to CVS. - Here is how everything is setup on Linux server: - There are multiple repositories setup - for multiple projects. - All repositories are setup under one system user ("cvsadmin"). - Each project is setup as a different system user (i.e. "project1", "project2", etc). - Programmers have FTP and shell access to all projects - this is required for various purposes. Here is how it works now when changes are committed: 1) Changes are committed to CVS. 2) Programmer logs in via SSH as a project's system user, and runs a shell script to update repository: ------------------------------ #!/bin/bash rm -rf /project1/tmpdir/* cd /project1 /usr/local/bin/cvs -d :pserver:export_user:PASSWORD at myserver.com/project1 \ export -f -r HEAD -d tmpdir . cd tmpdir cp -R * ../wwwroot/ ------------------------------ It works great, but we need to automate it. What I need, is to set it up so when anything is committed in a repository, web server document root would automatically get updated too. I guess, my problems are because repository and project are different system users. I understand that if I setup repository as same system user as project, I can setup a shell script (similar to above) to be executed on POSTCOMMIT. However, there are reasons to not do it - in particular, because CVS users have shell access, and will be able to access CVSROOT directly - I don't want that. As a solution, I tried setting up the following script to POSTCOMMIT for a repository: ------------------------------- #!/usr/bin/expect # run "cvs_update" shell script - similar to shell script above spawn su -s /bin/bash project1 -c "cd /project1; ./cvs_update" sleep 2 expect phrase: send "PASSWORD\r" sleep 2 ------------------------------- However, this seems to be an ugly way, and it does not work in TortoiseCVS for some reason... When I do a "commit" via TortoiseCVS, and "su"'s password prompt appears in TortoiseCVS log window, it prints "ok" and just hangs forever! Like this: ------------------------------- ...... Password: ok ------------------------------- I guess, it is a bug of TortoiseCVS, since it works great if I commit to repository from a standard Linux CVS client (located on same Linux server). I don't like this method much anyway - as system user's password is disclosed in POSTCOMMIT script. Seems to be insecure. Can anyone suggest anything better? THANK YOU! Alexander.