@ -5,7 +5,6 @@ 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					package  base  
					 
					 
					 
					package  base  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  (  
					 
					 
					 
					import  (  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"bytes"   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"container/list"   
					 
					 
					 
						"container/list"   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"encoding/json"   
					 
					 
					 
						"encoding/json"   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"errors"   
					 
					 
					 
						"errors"   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -107,7 +106,6 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{ 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return  a  +  b   
					 
					 
					 
							return  a  +  b   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						} ,   
					 
					 
					 
						} ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"ActionIcon" :  ActionIcon ,   
					 
					 
					 
						"ActionIcon" :  ActionIcon ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"ActionDesc" :  ActionDesc ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"DateFormat" :  DateFormat ,   
					 
					 
					 
						"DateFormat" :  DateFormat ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"List" :        List ,   
					 
					 
					 
						"List" :        List ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"Mail2Domain" :  func ( mail  string )  string  {   
					 
					 
					 
						"Mail2Domain" :  func ( mail  string )  string  {   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -162,19 +160,6 @@ func ActionIcon(opType int) string { 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					// FIXME: Legacy
  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					const  (  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						TPL_CREATE_REPO     =  ` <a href="%s/user/%s">%s</a> created repository <a href="%s">%s</a> `   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						TPL_COMMIT_REPO     =  ` <a href="%s/user/%s">%s</a> pushed to <a href="%s/src/%s">%s</a> at <a href="%s">%s</a>%s `   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						TPL_COMMIT_REPO_LI  =  ` <div><img src="%s?s=16" alt="user-avatar"/> <a href="%s/commit/%s" rel="nofollow">%s</a> %s</div> `   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						TPL_CREATE_ISSUE    =  ` < a  href = "%s/user/%s" > % s < / a >  opened  issue  < a  href = "%s/issues/%s" > % s # % s < / a >   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					< div > < img  src = "%s?s=16"  alt = "user-avatar" / >  % s < / div > `  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						TPL_TRANSFER_REPO  =  ` <a href="%s/user/%s">%s</a> transfered repository <code>%s</code> to <a href="%s">%s</a> `   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						TPL_PUSH_TAG       =  ` <a href="%s/user/%s">%s</a> pushed tag <a href="%s/src/%s" rel="nofollow">%s</a> at <a href="%s">%s</a> `   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						TPL_COMMENT_ISSUE  =  ` < a  href = "%s/user/%s" > % s < / a >  commented  on  issue  < a  href = "%s/issues/%s" > % s # % s < / a >   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					< div > < img  src = "%s?s=16"  alt = "user-avatar" / >  % s < / div > `  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					)  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					type  PushCommit  struct  {  
					 
					 
					 
					type  PushCommit  struct  {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						Sha1         string   
					 
					 
					 
						Sha1         string   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						Message      string   
					 
					 
					 
						Message      string   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -185,6 +170,7 @@ type PushCommit struct { 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					type  PushCommits  struct  {  
					 
					 
					 
					type  PushCommits  struct  {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						Len         int   
					 
					 
					 
						Len         int   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						Commits     [ ] * PushCommit   
					 
					 
					 
						Commits     [ ] * PushCommit   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						CompareUrl  string   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					func  ActionContent2Commits ( act  Actioner )  * PushCommits  {  
					 
					 
					 
					func  ActionContent2Commits ( act  Actioner )  * PushCommits  {  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -195,52 +181,6 @@ func ActionContent2Commits(act Actioner) *PushCommits { 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						return  push   
					 
					 
					 
						return  push   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					// FIXME: Legacy
  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					// ActionDesc accepts int that represents action operation type
  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					// and returns the description.
  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					func  ActionDesc ( act  Actioner )  string  {  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						actUserName  :=  act . GetActUserName ( )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						email  :=  act . GetActEmail ( )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						repoUserName  :=  act . GetRepoUserName ( )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						repoName  :=  act . GetRepoName ( )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						repoLink  :=  repoUserName  +  "/"  +  repoName   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						branch  :=  act . GetBranch ( )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						content  :=  act . GetContent ( )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						switch  act . GetOpType ( )  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						case  1 :  // Create repository.
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return  fmt . Sprintf ( TPL_CREATE_REPO ,  setting . AppSubUrl ,  actUserName ,  actUserName ,  repoLink ,  repoName )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						case  5 :  // Commit repository.
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							var  push  * PushCommits   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if  err  :=  json . Unmarshal ( [ ] byte ( content ) ,  & push ) ;  err  !=  nil  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								return  err . Error ( )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							buf  :=  bytes . NewBuffer ( [ ] byte ( "\n" ) )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							for  _ ,  commit  :=  range  push . Commits  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								buf . WriteString ( fmt . Sprintf ( TPL_COMMIT_REPO_LI ,  AvatarLink ( commit . AuthorEmail ) ,  repoLink ,  commit . Sha1 ,  commit . Sha1 [ : 7 ] ,  commit . Message )  +  "\n" )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if  push . Len  >  3  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								buf . WriteString ( fmt . Sprintf ( ` <div><a href=" {{ AppRootSubUrl }} /%s/%s/commits/%s" rel="nofollow">%d other commits >></a></div> ` ,  actUserName ,  repoName ,  branch ,  push . Len ) )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return  fmt . Sprintf ( TPL_COMMIT_REPO ,  setting . AppSubUrl ,  actUserName ,  actUserName ,  repoLink ,  branch ,  branch ,  repoLink ,  repoLink ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								buf . String ( ) )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						case  6 :  // Create issue.
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							infos  :=  strings . SplitN ( content ,  "|" ,  2 )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return  fmt . Sprintf ( TPL_CREATE_ISSUE ,  setting . AppSubUrl ,  actUserName ,  actUserName ,  repoLink ,  infos [ 0 ] ,  repoLink ,  infos [ 0 ] ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								AvatarLink ( email ) ,  infos [ 1 ] )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						case  8 :  // Transfer repository.
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							newRepoLink  :=  content  +  "/"  +  repoName   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return  fmt . Sprintf ( TPL_TRANSFER_REPO ,  setting . AppSubUrl ,  actUserName ,  actUserName ,  repoLink ,  newRepoLink ,  newRepoLink )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						case  9 :  // Push tag.
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return  fmt . Sprintf ( TPL_PUSH_TAG ,  setting . AppSubUrl ,  actUserName ,  actUserName ,  repoLink ,  branch ,  branch ,  repoLink ,  repoLink )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						case  10 :  // Comment issue.
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							infos  :=  strings . SplitN ( content ,  "|" ,  2 )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return  fmt . Sprintf ( TPL_COMMENT_ISSUE ,  setting . AppSubUrl ,  actUserName ,  actUserName ,  repoLink ,  infos [ 0 ] ,  repoLink ,  infos [ 0 ] ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								AvatarLink ( email ) ,  infos [ 1 ] )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						default :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return  "invalid type"   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					func  DiffTypeToStr ( diffType  int )  string  {  
					 
					 
					 
					func  DiffTypeToStr ( diffType  int )  string  {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						diffTypes  :=  map [ int ] string {   
					 
					 
					 
						diffTypes  :=  map [ int ] string {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							1 :  "add" ,  2 :  "modify" ,  3 :  "del" ,   
					 
					 
					 
							1 :  "add" ,  2 :  "modify" ,  3 :  "del" ,