@ -14,7 +14,7 @@ void print_filepair(struct diff_filepair *pair)
{
char * query ;
char * class ;
switch ( pair - > status ) {
case DIFF_STATUS_ADDED :
class = " add " ;
@ -52,25 +52,25 @@ void print_filepair(struct diff_filepair *pair)
html_filemode ( pair - > two - > mode ) ;
}
if ( pair - > one - > mode ! = pair - > two - > mode & &
! is_null_sha1 ( pair - > one - > sha1 ) & &
if ( pair - > one - > mode ! = pair - > two - > mode & &
! is_null_sha1 ( pair - > one - > sha1 ) & &
! is_null_sha1 ( pair - > two - > sha1 ) ) {
html ( " <span class='modechange'>[ " ) ;
html_filemode ( pair - > one - > mode ) ;
html ( " ]</span> " ) ;
}
htmlf ( " </td><td class='%s'> " , class ) ;
query = fmt ( " id=%s&id2=%s " , sha1_to_hex ( pair - > one - > sha1 ) ,
sha1_to_hex ( pair - > two - > sha1 ) ) ;
html_link_open ( cgit_pageurl ( cgit_query_repo , " diff " , query ) ,
query = fmt ( " id=%s&id2=%s " , sha1_to_hex ( pair - > one - > sha1 ) ,
sha1_to_hex ( pair - > two - > sha1 ) ) ;
html_link_open ( cgit_pageurl ( cgit_query_repo , " diff " , query ) ,
NULL , NULL ) ;
if ( pair - > status = = DIFF_STATUS_COPIED | |
if ( pair - > status = = DIFF_STATUS_COPIED | |
pair - > status = = DIFF_STATUS_RENAMED ) {
html_txt ( pair - > two - > path ) ;
htmlf ( " </a> (%s from " , pair - > status = = DIFF_STATUS_COPIED ?
htmlf ( " </a> (%s from " , pair - > status = = DIFF_STATUS_COPIED ?
" copied " : " renamed " ) ;
query = fmt ( " id=%s " , sha1_to_hex ( pair - > one - > sha1 ) ) ;
html_link_open ( cgit_pageurl ( cgit_query_repo , " view " , query ) ,
query = fmt ( " id=%s " , sha1_to_hex ( pair - > one - > sha1 ) ) ;
html_link_open ( cgit_pageurl ( cgit_query_repo , " view " , query ) ,
NULL , NULL ) ;
html_txt ( pair - > one - > path ) ;
html ( " </a>) " ) ;
@ -81,44 +81,9 @@ void print_filepair(struct diff_filepair *pair)
html ( " <td> " ) ;
//TODO: diffstat graph
html ( " </td></tr> \n " ) ;
files + + ;
}
void diff_format_cb ( struct diff_queue_struct * q ,
struct diff_options * options , void * data )
{
int i ;
for ( i = 0 ; i < q - > nr ; i + + ) {
if ( q - > queue [ i ] - > status = = ' U ' )
continue ;
print_filepair ( q - > queue [ i ] ) ;
}
}
void cgit_diffstat ( struct commit * commit )
{
struct diff_options opt ;
int ret ;
diff_setup ( & opt ) ;
opt . output_format = DIFF_FORMAT_CALLBACK ;
opt . detect_rename = 1 ;
opt . recursive = 1 ;
opt . format_callback = diff_format_cb ;
diff_setup_done ( & opt ) ;
if ( commit - > parents )
ret = diff_tree_sha1 ( commit - > parents - > item - > object . sha1 ,
commit - > object . sha1 ,
" " , & opt ) ;
else
ret = diff_root_tree_sha1 ( commit - > object . sha1 , " " , & opt ) ;
diffcore_std ( & opt ) ;
diff_flush ( & opt ) ;
html ( " </td></tr> \n " ) ;
files + + ;
}
void cgit_print_commit ( const char * hex )
@ -166,17 +131,16 @@ void cgit_print_commit(const char *hex)
" <a href=' " ) ;
query = fmt ( " id=%s " , sha1_to_hex ( p - > item - > object . sha1 ) ) ;
html_attr ( cgit_pageurl ( cgit_query_repo , " commit " , query ) ) ;
htmlf ( " '>%s</a></td></tr> \n " ,
htmlf ( " '>%s</a></td></tr> \n " ,
sha1_to_hex ( p - > item - > object . sha1 ) ) ;
}
if ( cgit_repo - > snapshots ) {
htmlf ( " <tr><th>download</th><td colspan='2' class='sha1'><a href=' " ) ;
filename = fmt ( " %s-%s.zip " , cgit_query_repo , hex ) ;
html_attr ( cgit_pageurl ( cgit_query_repo , " snapshot " ,
html_attr ( cgit_pageurl ( cgit_query_repo , " snapshot " ,
fmt ( " id=%s&name=%s " , hex , filename ) ) ) ;
htmlf ( " '>%s</a></td></tr> " , filename ) ;
}
html ( " </table> \n " ) ;
html ( " <div class='commit-subject'> " ) ;
html_txt ( info - > subject ) ;
@ -186,7 +150,7 @@ void cgit_print_commit(const char *hex)
html ( " </div> " ) ;
html ( " <table class='diffstat'> " ) ;
html ( " <tr><th colspan='3'>Affected files</tr> \n " ) ;
cgit_diffsta t ( commit ) ;
cgit_diff_commi t ( commit , print_filepair ) ;
htmlf ( " <tr><td colspan='3' class='summary'> "
" %d file%s changed</td></tr> \n " , files , files > 1 ? " s " : " " ) ;
html ( " </table> " ) ;