@ -47,12 +47,20 @@ static int is_git_dir(const char *path)
struct cgit_repo * repo ;
struct cgit_repo * repo ;
repo_config_fn config_fn ;
repo_config_fn config_fn ;
char * owner ;
static void repo_config ( const char * name , const char * value )
static void repo_config ( const char * name , const char * value )
{
{
config_fn ( repo , name , value ) ;
config_fn ( repo , name , value ) ;
}
}
static int git_owner_config ( const char * key , const char * value , void * cb )
{
if ( ! strcmp ( key , " gitweb.owner " ) )
owner = xstrdup ( value ) ;
return 0 ;
}
static void add_repo ( const char * base , const char * path , repo_config_fn fn )
static void add_repo ( const char * base , const char * path , repo_config_fn fn )
{
{
struct stat st ;
struct stat st ;
@ -67,11 +75,10 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn)
}
}
if ( ! stat ( fmt ( " %s/noweb " , path ) , & st ) )
if ( ! stat ( fmt ( " %s/noweb " , path ) , & st ) )
return ;
return ;
if ( ( pwd = getpwuid ( st . st_uid ) ) = = NULL ) {
fprintf ( stderr , " Error reading owner-info for %s: %s (%d) \n " ,
owner = NULL ;
path , strerror ( errno ) , errno ) ;
if ( ctx . cfg . enable_gitweb_owner )
return ;
git_config_from_file ( git_owner_config , fmt ( " %s/config " , path ) , NULL ) ;
}
if ( base = = path )
if ( base = = path )
p = fmt ( " %s " , path ) ;
p = fmt ( " %s " , path ) ;
else
else
@ -86,10 +93,18 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn)
* p = ' \0 ' ;
* p = ' \0 ' ;
repo - > name = repo - > url ;
repo - > name = repo - > url ;
repo - > path = xstrdup ( path ) ;
repo - > path = xstrdup ( path ) ;
p = ( pwd & & pwd - > pw_gecos ) ? strchr ( pwd - > pw_gecos , ' , ' ) : NULL ;
while ( ! owner ) {
if ( p )
if ( ( pwd = getpwuid ( st . st_uid ) ) = = NULL ) {
* p = ' \0 ' ;
fprintf ( stderr , " Error reading owner-info for %s: %s (%d) \n " ,
repo - > owner = ( pwd ? xstrdup ( pwd - > pw_gecos ? pwd - > pw_gecos : pwd - > pw_name ) : " " ) ;
path , strerror ( errno ) , errno ) ;
break ;
}
if ( pwd - > pw_gecos )
if ( ( p = strchr ( pwd - > pw_gecos , ' , ' ) ) )
* p = ' \0 ' ;
owner = xstrdup ( pwd - > pw_gecos ? pwd - > pw_gecos : pwd - > pw_name ) ;
}
repo - > owner = owner ;
p = fmt ( " %s/description " , path ) ;
p = fmt ( " %s/description " , path ) ;
if ( ! stat ( p , & st ) )
if ( ! stat ( p , & st ) )