@ -92,16 +92,19 @@ static void print_object(const unsigned char *sha1, char *path, const char *base
type = sha1_object_info ( sha1 , & size ) ;
if ( type = = OBJ_BAD ) {
cgit_print_error ( " Bad object name: %s " , sha1_to_hex ( sha1 ) ) ;
cgit_print_error_page ( 404 , " Not found " ,
" Bad object name: %s " , sha1_to_hex ( sha1 ) ) ;
return ;
}
buf = read_sha1_file ( sha1 , & type , & size ) ;
if ( ! buf ) {
cgit_print_error ( " Error reading object %s " , sha1_to_hex ( sha1 ) ) ;
cgit_print_error_page ( 500 , " Internal server error " ,
" Error reading object %s " , sha1_to_hex ( sha1 ) ) ;
return ;
}
cgit_print_layout_start ( ) ;
htmlf ( " blob: %s ( " , sha1_to_hex ( sha1 ) ) ;
cgit_plain_link ( " plain " , NULL , NULL , ctx . qry . head ,
rev , path ) ;
@ -181,6 +184,7 @@ static int ls_item(const unsigned char *sha1, struct strbuf *base,
static void ls_head ( void )
{
cgit_print_layout_start ( ) ;
html ( " <table summary='tree listing' class='list'> \n " ) ;
html ( " <tr class='nohover'> " ) ;
html ( " <th class='left'>Mode</th> " ) ;
@ -193,6 +197,7 @@ static void ls_head(void)
static void ls_tail ( void )
{
html ( " </table> \n " ) ;
cgit_print_layout_end ( ) ;
}
static void ls_tree ( const unsigned char * sha1 , char * path , struct walk_tree_context * walk_tree_ctx )
@ -204,7 +209,8 @@ static void ls_tree(const unsigned char *sha1, char *path, struct walk_tree_cont
tree = parse_tree_indirect ( sha1 ) ;
if ( ! tree ) {
cgit_print_error ( " Not a tree object: %s " , sha1_to_hex ( sha1 ) ) ;
cgit_print_error_page ( 404 , " Not found " ,
" Not a tree object: %s " , sha1_to_hex ( sha1 ) ) ;
return ;
}
@ -231,6 +237,7 @@ static int walk_tree(const unsigned char *sha1, struct strbuf *base,
ls_head ( ) ;
return READ_TREE_RECURSIVE ;
} else {
walk_tree_ctx - > state = 2 ;
print_object ( sha1 , buffer , pathname , walk_tree_ctx - > curr_rev ) ;
return 0 ;
}
@ -265,12 +272,14 @@ void cgit_print_tree(const char *rev, char *path)
rev = ctx . qry . head ;
if ( get_sha1 ( rev , sha1 ) ) {
cgit_print_error ( " Invalid revision name: %s " , rev ) ;
cgit_print_error_page ( 404 , " Not found " ,
" Invalid revision name: %s " , rev ) ;
return ;
}
commit = lookup_commit_reference ( sha1 ) ;
if ( ! commit | | parse_commit ( commit ) ) {
cgit_print_error ( " Invalid commit reference: %s " , rev ) ;
cgit_print_error_page ( 404 , " Not found " ,
" Invalid commit reference: %s " , rev ) ;
return ;
}
@ -284,6 +293,10 @@ void cgit_print_tree(const char *rev, char *path)
read_tree_recursive ( commit - > tree , " " , 0 , 0 , & paths , walk_tree , & walk_tree_ctx ) ;
if ( walk_tree_ctx . state = = 1 )
ls_tail ( ) ;
else if ( walk_tree_ctx . state = = 2 )
cgit_print_layout_end ( ) ;
else
cgit_print_error_page ( 404 , " Not found " , " Path not found " ) ;
cleanup :
free ( walk_tree_ctx . curr_rev ) ;