* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-forge_define_config_item('default_server', 'scmgit', forge_get_config ('web_host')) ;
-forge_define_config_item('repos_path', 'scmgit', forge_get_config('chroot').'/scmrepos/git') ;
+forge_define_config_item('default_server', 'scmgit', forge_get_config ('web_host'));
+forge_define_config_item('repos_path', 'scmgit', forge_get_config('chroot').'/scmrepos/git');
+forge_define_config_item('use_ssh', 'scmgit', false);
+forge_set_config_item_bool('use_ssh', 'scmgit');
+forge_define_config_item('use_dav', 'scmgit', true);
+forge_set_config_item_bool('use_dav', 'scmgit');
+forge_define_config_item('use_ssl', 'scmgit', true);
+forge_set_config_item_bool('use_ssl', 'scmgit');
+
class GitPlugin extends SCMPlugin {
function GitPlugin() {
system ("chmod +x $main_repo/hooks/post-update") ;
}
system ("echo \"Git repository for $project_name\" > $main_repo/description") ;
- system ("find $main_repo -type d | xargs chmod g+s") ;
+ system ("find $main_repo -type d | xargs chmod g+s");
+ if (forge_get_config('use_dav','scmgit')) {
+ $f = fopen(forge_get_config('config_path').'/httpd.conf.d/plugin-scmgit-dav.inc','a');
+ fputs($f,'Use Project '.$project_name."\n");
+ fclose($f);
+ system("service httpd reload");
+ }
}
if (forge_get_config('use_ssh','scmgit')) {
$unix_group = 'scm_' . $project_name ;
} else {
$unix_user = forge_get_config('apache_user');
$unix_group = forge_get_config('apache_group');
- system ("chown -R $unix_user:$unix_group $main_repo") ;
- system ("chmod -R g-rwx,o-rwx $main_repo") ;
+ system("chown -R $unix_user:$unix_group $main_repo");
+ system("chmod -R g-rwx,o-rwx $main_repo");
}
// Create project-wide secondary repositories
fwrite($config_f, "\$javascript = '". util_make_url('/plugins/scmgit/gitweb.js')."';\n");
fwrite($config_f, "\$prevent_xss = 'true';\n");
fclose($config_f);
- chmod ($fname.'.new', 0644) ;
- rename ($fname.'.new', $fname) ;
+ chmod($fname.'.new', 0644);
+ rename($fname.'.new', $fname);
- $fname = $config_dir . '/gitweb.list' ;
+ $fname = $config_dir . '/gitweb.list';
+ $f = fopen($fname.'.new', 'w');
- $f = fopen ($fname.'.new', 'w');
+ $engine = RBACEngine::getInstance();
foreach ($list as $project) {
- $repos = $this->getRepositories($rootdir . "/" . $project->getUnixName());
- foreach ($repos as $repo) {
- $reldir = substr($repo, strlen($rootdir) + 1);
- fwrite($f, $reldir . "\n");
- }
+ $repos = $this->getRepositories($rootdir . "/" . $project->getUnixName());
+ foreach ($repos as $repo) {
+ $reldir = substr($repo, strlen($rootdir) + 1);
+ fwrite($f, $reldir . "\n");
+ }
+ $users = $engine->getUsersByAllowedAction('scm',$project->getID(),'write');
+ $password_data = '';
+ foreach ($users as $user) {
+ $password_data .= $user->getUnixName().':'.$user->getUnixPasswd()."\n";
+ }
+ $faname = forge_get_config('data_path').'/gituser-authfile.'.$project->getUnixName();
+ $fa = fopen($faname.'.new', 'w');
+ fwrite($fa, $password_data);
+ fclose($fa);
+ chmod($faname.'.new', 0644);
+ rename($faname.'.new', $faname);
}
fclose($f);
chmod($fname.'.new', 0644);
-Alias "/scmrepos/git" /var/lib/gforge/chroot/scmrepos/git
+Alias "/scmrepos/git" {core/data_path}/chroot/scmrepos/git
+#this is a fake repo... looks like my configuration has a bug somewhere ? ...
+#so I declare this Location as fake git repo
<Location "/scmrepos/git">
DAV on
-
Options +Indexes -ExecCGI -FollowSymLinks -MultiViews
-
- php_admin_flag engine off
- php_admin_value open_basedir /opt/groups/
-
-# # Use the generated access file for WebDAV access.
-# SVNParentPath /opt/groups
-# AuthzSVNAccessFile /etc/gforge/http/davroot-access
-
AuthType Basic
AuthName "Git repository"
- AuthUserFile /var/lib/gforge/svnroot-authfile
+ AuthUserFile {core/data_path}/gituser-authfile.__fake__
+ Require valid-user
+</Location>
- # Try anonymous access first, then authentication if necessary.
- Satisfy Any
- Require valid-user
+#this part is based on apache mod_macro, you need to load the mod_macro module to use it
+<Macro Project $repository>
+<Location "/scmrepos/git/$repository">
+ DAV on
+ Options +Indexes -ExecCGI -FollowSymLinks -MultiViews
+ AuthType Basic
+ AuthName "Git repository: $repository"
+ #The AuthUserFile filename is needed in the code. Please do not rename it.
+ AuthUserFile {core/data_path}/gituser-authfile.$repository
+ Require valid-user
</Location>
+</Macro>
+
+#######
+# define each valid project below using this syntax:
+# example for project named "myproject"
+# Use Project myproject
+#
+# the list of available projects should be generate automaticaly by cronjob but you need to restart httpd
+# to reload the configuration: service httpd reload (done by cronjob if you uncomment the lines)