@ -12,6 +12,7 @@ import ( 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"os"   
					 
					 
					 
						"os"   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"path"   
					 
					 
					 
						"path"   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"path/filepath"   
					 
					 
					 
						"path/filepath"   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						"regexp"   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"strings"   
					 
					 
					 
						"strings"   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"sync"   
					 
					 
					 
						"sync"   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"time"   
					 
					 
					 
						"time"   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -82,6 +83,7 @@ var ( 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						ErrRepoAlreadyExist  =  errors . New ( "Repository already exist" )   
					 
					 
					 
						ErrRepoAlreadyExist  =  errors . New ( "Repository already exist" )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						ErrRepoNotExist      =  errors . New ( "Repository does not exist" )   
					 
					 
					 
						ErrRepoNotExist      =  errors . New ( "Repository does not exist" )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						ErrRepoFileNotExist  =  errors . New ( "Target Repo file does not exist" )   
					 
					 
					 
						ErrRepoFileNotExist  =  errors . New ( "Target Repo file does not exist" )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						ErrRepoNameIllegal   =  errors . New ( "Repository name contains illegal characters" )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					)  
					 
					 
					 
					)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					func  init ( )  {  
					 
					 
					 
					func  init ( )  {  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -104,6 +106,15 @@ func init() { 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								os . Exit ( 2 )   
					 
					 
					 
								os . Exit ( 2 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}   
					 
					 
					 
							}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						// Initialize illegal patterns.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						for  i  :=  range  illegalPatterns [ 1 : ]  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							pattern  :=  ""   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							for  j  :=  range  illegalPatterns [ i + 1 ]  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								pattern  +=  "["  +  string ( illegalPatterns [ i + 1 ] [ j ] - 32 )  +  string ( illegalPatterns [ i + 1 ] [ j ] )  +  "]"   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							illegalPatterns [ i + 1 ]  =  pattern   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					// IsRepositoryExist returns true if the repository with given name under user has already existed.
  
					 
					 
					 
					// IsRepositoryExist returns true if the repository with given name under user has already existed.
  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -120,8 +131,28 @@ func IsRepositoryExist(user *User, repoName string) (bool, error) { 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						return  s . IsDir ( ) ,  nil   
					 
					 
					 
						return  s . IsDir ( ) ,  nil   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					var  (  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						// Define as all lower case!!
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						illegalPatterns  =  [ ] string { "[.][Gg][Ii][Tt]" ,  "user" ,  "help" ,  "stars" ,  "issues" ,  "pulls" ,  "commits" ,  "admin" ,  "repo" ,  "template" }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					// IsLegalName returns false if name contains illegal characters.
  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					func  IsLegalName ( repoName  string )  bool  {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						for  _ ,  pattern  :=  range  illegalPatterns  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							has ,  _  :=  regexp . MatchString ( pattern ,  repoName )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							if  has  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								return  false   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						return  true   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					// CreateRepository creates a repository for given user or orgnaziation.
  
					 
					 
					 
					// CreateRepository creates a repository for given user or orgnaziation.
  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					func  CreateRepository ( user  * User ,  repoName ,  desc ,  repoLang ,  license  string ,  private  bool ,  initReadme  bool )  ( * Repository ,  error )  {  
					 
					 
					 
					func  CreateRepository ( user  * User ,  repoName ,  desc ,  repoLang ,  license  string ,  private  bool ,  initReadme  bool )  ( * Repository ,  error )  {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						if  ! IsLegalName ( repoName )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							return  nil ,  ErrRepoNameIllegal   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						isExist ,  err  :=  IsRepositoryExist ( user ,  repoName )   
					 
					 
					 
						isExist ,  err  :=  IsRepositoryExist ( user ,  repoName )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						if  err  !=  nil  {   
					 
					 
					 
						if  err  !=  nil  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return  nil ,  err   
					 
					 
					 
							return  nil ,  err