[cvsnt] Problem with POSTCOMMIT on Linux

Alexander Plakidin cvsnt at plakidin.com
Fri Aug 27 09:11:48 BST 2004


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.




More information about the cvsnt mailing list
Download the latest CVSNT, TortosieCVS, WinCVS etc. for Windows 8 etc.
@CVSNT on Twitter   CVSNT on Facebook