mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Cleanup log messaging
This change corrects a few logging issues: * Standardized formatting errors with '%v'. * Standardized failure warning word usage. * Corrected an instance of using the standard log library when the gitea log library should be used instead.
This commit is contained in:
		
				
					committed by
					
						
						Kim "BKC" Carlbäcker
					
				
			
			
				
	
			
			
			
						parent
						
							73d05a51e3
						
					
				
				
					commit
					bf6f61cc69
				
			
							
								
								
									
										14
									
								
								cmd/cert.go
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								cmd/cert.go
									
									
									
									
									
								
							@@ -82,7 +82,7 @@ func pemBlockForKey(priv interface{}) *pem.Block {
 | 
				
			|||||||
	case *ecdsa.PrivateKey:
 | 
						case *ecdsa.PrivateKey:
 | 
				
			||||||
		b, err := x509.MarshalECPrivateKey(k)
 | 
							b, err := x509.MarshalECPrivateKey(k)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Fatalf("Unable to marshal ECDSA private key: %v\n", err)
 | 
								log.Fatalf("Unable to marshal ECDSA private key: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b}
 | 
							return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b}
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
@@ -112,7 +112,7 @@ func runCert(ctx *cli.Context) error {
 | 
				
			|||||||
		log.Fatalf("Unrecognized elliptic curve: %q", ctx.String("ecdsa-curve"))
 | 
							log.Fatalf("Unrecognized elliptic curve: %q", ctx.String("ecdsa-curve"))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatalf("Failed to generate private key: %s", err)
 | 
							log.Fatalf("Failed to generate private key: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var notBefore time.Time
 | 
						var notBefore time.Time
 | 
				
			||||||
@@ -121,7 +121,7 @@ func runCert(ctx *cli.Context) error {
 | 
				
			|||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		notBefore, err = time.Parse("Jan 2 15:04:05 2006", ctx.String("start-date"))
 | 
							notBefore, err = time.Parse("Jan 2 15:04:05 2006", ctx.String("start-date"))
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Fatalf("Failed to parse creation date: %s", err)
 | 
								log.Fatalf("Failed to parse creation date: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -130,7 +130,7 @@ func runCert(ctx *cli.Context) error {
 | 
				
			|||||||
	serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
 | 
						serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
 | 
				
			||||||
	serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
 | 
						serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatalf("Failed to generate serial number: %s", err)
 | 
							log.Fatalf("Failed to generate serial number: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	template := x509.Certificate{
 | 
						template := x509.Certificate{
 | 
				
			||||||
@@ -163,12 +163,12 @@ func runCert(ctx *cli.Context) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv)
 | 
						derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatalf("Failed to create certificate: %s", err)
 | 
							log.Fatalf("Failed to create certificate: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	certOut, err := os.Create("cert.pem")
 | 
						certOut, err := os.Create("cert.pem")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatalf("Failed to open cert.pem for writing: %s", err)
 | 
							log.Fatalf("Failed to open cert.pem for writing: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
 | 
						pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
 | 
				
			||||||
	certOut.Close()
 | 
						certOut.Close()
 | 
				
			||||||
@@ -176,7 +176,7 @@ func runCert(ctx *cli.Context) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	keyOut, err := os.OpenFile("key.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
 | 
						keyOut, err := os.OpenFile("key.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatalf("Failed to open key.pem for writing: %v\n", err)
 | 
							log.Fatalf("Failed to open key.pem for writing: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	pem.Encode(keyOut, pemBlockForKey(priv))
 | 
						pem.Encode(keyOut, pemBlockForKey(priv))
 | 
				
			||||||
	keyOut.Close()
 | 
						keyOut.Close()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								cmd/dump.go
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								cmd/dump.go
									
									
									
									
									
								
							@@ -68,7 +68,7 @@ func runDump(ctx *cli.Context) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	TmpWorkDir, err := ioutil.TempDir(tmpDir, "gitea-dump-")
 | 
						TmpWorkDir, err := ioutil.TempDir(tmpDir, "gitea-dump-")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatalf("Fail to create tmp work directory: %v", err)
 | 
							log.Fatalf("Failed to create tmp work directory: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	log.Printf("Creating tmp work dir: %s", TmpWorkDir)
 | 
						log.Printf("Creating tmp work dir: %s", TmpWorkDir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -78,7 +78,7 @@ func runDump(ctx *cli.Context) error {
 | 
				
			|||||||
	log.Printf("Dumping local repositories...%s", setting.RepoRootPath)
 | 
						log.Printf("Dumping local repositories...%s", setting.RepoRootPath)
 | 
				
			||||||
	zip.Verbose = ctx.Bool("verbose")
 | 
						zip.Verbose = ctx.Bool("verbose")
 | 
				
			||||||
	if err := zip.PackTo(setting.RepoRootPath, reposDump, true); err != nil {
 | 
						if err := zip.PackTo(setting.RepoRootPath, reposDump, true); err != nil {
 | 
				
			||||||
		log.Fatalf("Fail to dump local repositories: %v", err)
 | 
							log.Fatalf("Failed to dump local repositories: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	targetDBType := ctx.String("database")
 | 
						targetDBType := ctx.String("database")
 | 
				
			||||||
@@ -89,26 +89,26 @@ func runDump(ctx *cli.Context) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := models.DumpDatabase(dbDump, targetDBType); err != nil {
 | 
						if err := models.DumpDatabase(dbDump, targetDBType); err != nil {
 | 
				
			||||||
		log.Fatalf("Fail to dump database: %v", err)
 | 
							log.Fatalf("Failed to dump database: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fileName := fmt.Sprintf("gitea-dump-%d.zip", time.Now().Unix())
 | 
						fileName := fmt.Sprintf("gitea-dump-%d.zip", time.Now().Unix())
 | 
				
			||||||
	log.Printf("Packing dump files...")
 | 
						log.Printf("Packing dump files...")
 | 
				
			||||||
	z, err := zip.Create(fileName)
 | 
						z, err := zip.Create(fileName)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatalf("Fail to create %s: %v", fileName, err)
 | 
							log.Fatalf("Failed to create %s: %v", fileName, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := z.AddFile("gitea-repo.zip", reposDump); err != nil {
 | 
						if err := z.AddFile("gitea-repo.zip", reposDump); err != nil {
 | 
				
			||||||
		log.Fatalf("Fail to include gitea-repo.zip: %v", err)
 | 
							log.Fatalf("Failed to include gitea-repo.zip: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := z.AddFile("gitea-db.sql", dbDump); err != nil {
 | 
						if err := z.AddFile("gitea-db.sql", dbDump); err != nil {
 | 
				
			||||||
		log.Fatalf("Fail to include gitea-db.sql: %v", err)
 | 
							log.Fatalf("Failed to include gitea-db.sql: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	customDir, err := os.Stat(setting.CustomPath)
 | 
						customDir, err := os.Stat(setting.CustomPath)
 | 
				
			||||||
	if err == nil && customDir.IsDir() {
 | 
						if err == nil && customDir.IsDir() {
 | 
				
			||||||
		if err := z.AddDir("custom", setting.CustomPath); err != nil {
 | 
							if err := z.AddDir("custom", setting.CustomPath); err != nil {
 | 
				
			||||||
			log.Fatalf("Fail to include custom: %v", err)
 | 
								log.Fatalf("Failed to include custom: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		log.Printf("Custom dir %s doesn't exist, skipped", setting.CustomPath)
 | 
							log.Printf("Custom dir %s doesn't exist, skipped", setting.CustomPath)
 | 
				
			||||||
@@ -124,16 +124,16 @@ func runDump(ctx *cli.Context) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := zipAddDirectoryExclude(z, "data", setting.AppDataPath, sessionAbsPath); err != nil {
 | 
						if err := zipAddDirectoryExclude(z, "data", setting.AppDataPath, sessionAbsPath); err != nil {
 | 
				
			||||||
		log.Fatalf("Fail to include data directory: %v", err)
 | 
							log.Fatalf("Failed to include data directory: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := z.AddDir("log", setting.LogRootPath); err != nil {
 | 
						if err := z.AddDir("log", setting.LogRootPath); err != nil {
 | 
				
			||||||
		log.Fatalf("Fail to include log: %v", err)
 | 
							log.Fatalf("Failed to include log: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// FIXME: SSH key file.
 | 
						// FIXME: SSH key file.
 | 
				
			||||||
	if err = z.Close(); err != nil {
 | 
						if err = z.Close(); err != nil {
 | 
				
			||||||
		_ = os.Remove(fileName)
 | 
							_ = os.Remove(fileName)
 | 
				
			||||||
		log.Fatalf("Fail to save %s: %v", fileName, err)
 | 
							log.Fatalf("Failed to save %s: %v", fileName, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.Chmod(fileName, 0600); err != nil {
 | 
						if err := os.Chmod(fileName, 0600); err != nil {
 | 
				
			||||||
@@ -143,7 +143,7 @@ func runDump(ctx *cli.Context) error {
 | 
				
			|||||||
	log.Printf("Removing tmp work dir: %s", TmpWorkDir)
 | 
						log.Printf("Removing tmp work dir: %s", TmpWorkDir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.RemoveAll(TmpWorkDir); err != nil {
 | 
						if err := os.RemoveAll(TmpWorkDir); err != nil {
 | 
				
			||||||
		log.Fatalf("Fail to remove %s: %v", TmpWorkDir, err)
 | 
							log.Fatalf("Failed to remove %s: %v", TmpWorkDir, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	log.Printf("Finish dumping in file %s", fileName)
 | 
						log.Printf("Finish dumping in file %s", fileName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@ func setup(logPath string) {
 | 
				
			|||||||
	if setting.UseSQLite3 || setting.UseTiDB {
 | 
						if setting.UseSQLite3 || setting.UseTiDB {
 | 
				
			||||||
		workDir, _ := setting.WorkDir()
 | 
							workDir, _ := setting.WorkDir()
 | 
				
			||||||
		if err := os.Chdir(workDir); err != nil {
 | 
							if err := os.Chdir(workDir); err != nil {
 | 
				
			||||||
			log.GitLogger.Fatal(4, "Fail to change directory %s: %v", workDir, err)
 | 
								log.GitLogger.Fatal(4, "Failed to change directory %s: %v", workDir, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -134,10 +134,10 @@ func handleUpdateTask(uuid string, user, repoUser *models.User, reponame string,
 | 
				
			|||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		resp.Body.Close()
 | 
							resp.Body.Close()
 | 
				
			||||||
		if resp.StatusCode/100 != 2 {
 | 
							if resp.StatusCode/100 != 2 {
 | 
				
			||||||
			log.GitLogger.Error(2, "Fail to trigger task: not 2xx response code")
 | 
								log.GitLogger.Error(2, "Failed to trigger task: not 2xx response code")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		log.GitLogger.Error(2, "Fail to trigger task: %v", err)
 | 
							log.GitLogger.Error(2, "Failed to trigger task: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -273,7 +273,7 @@ func runServ(c *cli.Context) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			mode, err := models.AccessLevel(user, repo)
 | 
								mode, err := models.AccessLevel(user, repo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				fail("Internal error", "Fail to check access: %v", err)
 | 
									fail("Internal error", "Failed to check access: %v", err)
 | 
				
			||||||
			} else if mode < requestedMode {
 | 
								} else if mode < requestedMode {
 | 
				
			||||||
				clientMessage := accessDenied
 | 
									clientMessage := accessDenied
 | 
				
			||||||
				if mode >= models.AccessModeRead {
 | 
									if mode >= models.AccessModeRead {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -114,7 +114,7 @@ func newMacaron() *macaron.Macaron {
 | 
				
			|||||||
	localeNames, err := options.Dir("locale")
 | 
						localeNames, err := options.Dir("locale")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to list locale files: %v", err)
 | 
							log.Fatal(4, "Failed to list locale files: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	localFiles := make(map[string][]byte)
 | 
						localFiles := make(map[string][]byte)
 | 
				
			||||||
@@ -655,7 +655,7 @@ func runWeb(ctx *cli.Context) error {
 | 
				
			|||||||
		err = fcgi.Serve(nil, m)
 | 
							err = fcgi.Serve(nil, m)
 | 
				
			||||||
	case setting.UnixSocket:
 | 
						case setting.UnixSocket:
 | 
				
			||||||
		if err := os.Remove(listenAddr); err != nil {
 | 
							if err := os.Remove(listenAddr); err != nil {
 | 
				
			||||||
			log.Fatal(4, "Fail to remove unix socket directory %s: %v", listenAddr, err)
 | 
								log.Fatal(4, "Failed to remove unix socket directory %s: %v", listenAddr, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		var listener *net.UnixListener
 | 
							var listener *net.UnixListener
 | 
				
			||||||
		listener, err = net.ListenUnix("unix", &net.UnixAddr{Name: listenAddr, Net: "unix"})
 | 
							listener, err = net.ListenUnix("unix", &net.UnixAddr{Name: listenAddr, Net: "unix"})
 | 
				
			||||||
@@ -674,7 +674,7 @@ func runWeb(ctx *cli.Context) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to start server: %v", err)
 | 
							log.Fatal(4, "Failed to start server: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,9 +8,9 @@ package cmd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"crypto/tls"
 | 
						"crypto/tls"
 | 
				
			||||||
	"log"
 | 
					 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"github.com/facebookgo/grace/gracehttp"
 | 
						"github.com/facebookgo/grace/gracehttp"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								main.go
									
									
									
									
									
								
							@@ -38,7 +38,7 @@ func main() {
 | 
				
			|||||||
	app.Flags = append(app.Flags, []cli.Flag{}...)
 | 
						app.Flags = append(app.Flags, []cli.Flag{}...)
 | 
				
			||||||
	err := app.Run(os.Args)
 | 
						err := app.Run(os.Args)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to run app with %s: %v", os.Args, err)
 | 
							log.Fatal(4, "Failed to run app with %s: %v", os.Args, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -328,7 +328,7 @@ func attachmentRefactor(x *xorm.Engine) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		dumpPath := path.Join(setting.LogRootPath, "attachment_path.dump")
 | 
							dumpPath := path.Join(setting.LogRootPath, "attachment_path.dump")
 | 
				
			||||||
		ioutil.WriteFile(dumpPath, buf.Bytes(), 0666)
 | 
							ioutil.WriteFile(dumpPath, buf.Bytes(), 0666)
 | 
				
			||||||
		fmt.Println("Fail to rename some attachments, old and new paths are saved into:", dumpPath)
 | 
							log.Info("Failed to rename some attachments, old and new paths are saved into: %s", dumpPath)
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
	for _, attach := range attachments {
 | 
						for _, attach := range attachments {
 | 
				
			||||||
		if err = os.MkdirAll(path.Dir(attach.NewPath), os.ModePerm); err != nil {
 | 
							if err = os.MkdirAll(path.Dir(attach.NewPath), os.ModePerm); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -205,7 +205,7 @@ func getEngine() (*xorm.Engine, error) {
 | 
				
			|||||||
			return nil, errors.New("this binary version does not build support for SQLite3")
 | 
								return nil, errors.New("this binary version does not build support for SQLite3")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err := os.MkdirAll(path.Dir(DbCfg.Path), os.ModePerm); err != nil {
 | 
							if err := os.MkdirAll(path.Dir(DbCfg.Path), os.ModePerm); err != nil {
 | 
				
			||||||
			return nil, fmt.Errorf("Fail to create directories: %v", err)
 | 
								return nil, fmt.Errorf("Failed to create directories: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		connStr = "file:" + DbCfg.Path + "?cache=shared&mode=rwc"
 | 
							connStr = "file:" + DbCfg.Path + "?cache=shared&mode=rwc"
 | 
				
			||||||
	case "tidb":
 | 
						case "tidb":
 | 
				
			||||||
@@ -213,7 +213,7 @@ func getEngine() (*xorm.Engine, error) {
 | 
				
			|||||||
			return nil, errors.New("this binary version does not build support for TiDB")
 | 
								return nil, errors.New("this binary version does not build support for TiDB")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err := os.MkdirAll(path.Dir(DbCfg.Path), os.ModePerm); err != nil {
 | 
							if err := os.MkdirAll(path.Dir(DbCfg.Path), os.ModePerm); err != nil {
 | 
				
			||||||
			return nil, fmt.Errorf("Fail to create directories: %v", err)
 | 
								return nil, fmt.Errorf("Failed to create directories: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		connStr = "goleveldb://" + DbCfg.Path
 | 
							connStr = "goleveldb://" + DbCfg.Path
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
@@ -237,7 +237,7 @@ func NewTestEngine(x *xorm.Engine) (err error) {
 | 
				
			|||||||
func SetEngine() (err error) {
 | 
					func SetEngine() (err error) {
 | 
				
			||||||
	x, err = getEngine()
 | 
						x, err = getEngine()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to connect to database: %v", err)
 | 
							return fmt.Errorf("Failed to connect to database: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	x.SetMapper(core.GonicMapper{})
 | 
						x.SetMapper(core.GonicMapper{})
 | 
				
			||||||
@@ -247,12 +247,12 @@ func SetEngine() (err error) {
 | 
				
			|||||||
	logPath := path.Join(setting.LogRootPath, "xorm.log")
 | 
						logPath := path.Join(setting.LogRootPath, "xorm.log")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to create dir %s: %v", logPath, err)
 | 
							return fmt.Errorf("Failed to create dir %s: %v", logPath, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	f, err := os.Create(logPath)
 | 
						f, err := os.Create(logPath)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to create xorm.log: %v", err)
 | 
							return fmt.Errorf("Failed to create xorm.log: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	x.SetLogger(xorm.NewSimpleLogger(f))
 | 
						x.SetLogger(xorm.NewSimpleLogger(f))
 | 
				
			||||||
	x.ShowSQL(true)
 | 
						x.ShowSQL(true)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -272,13 +272,13 @@ func deleteOrg(e *xorm.Session, u *User) error {
 | 
				
			|||||||
	path := UserPath(u.Name)
 | 
						path := UserPath(u.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.RemoveAll(path); err != nil {
 | 
						if err := os.RemoveAll(path); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to RemoveAll %s: %v", path, err)
 | 
							return fmt.Errorf("Failed to RemoveAll %s: %v", path, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	avatarPath := u.CustomAvatarPath()
 | 
						avatarPath := u.CustomAvatarPath()
 | 
				
			||||||
	if com.IsExist(avatarPath) {
 | 
						if com.IsExist(avatarPath) {
 | 
				
			||||||
		if err := os.Remove(avatarPath); err != nil {
 | 
							if err := os.Remove(avatarPath); err != nil {
 | 
				
			||||||
			return fmt.Errorf("Fail to remove %s: %v", avatarPath, err)
 | 
								return fmt.Errorf("Failed to remove %s: %v", avatarPath, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -275,7 +275,7 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error
 | 
				
			|||||||
	tmpBasePath := path.Join(setting.AppDataPath, "tmp/repos", com.ToStr(time.Now().Nanosecond())+".git")
 | 
						tmpBasePath := path.Join(setting.AppDataPath, "tmp/repos", com.ToStr(time.Now().Nanosecond())+".git")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(path.Dir(tmpBasePath), os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(path.Dir(tmpBasePath), os.ModePerm); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to create dir %s: %v", tmpBasePath, err)
 | 
							return fmt.Errorf("Failed to create dir %s: %v", tmpBasePath, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	defer os.RemoveAll(path.Dir(tmpBasePath))
 | 
						defer os.RemoveAll(path.Dir(tmpBasePath))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,13 +83,13 @@ func LoadRepoConfig() {
 | 
				
			|||||||
	for i, t := range types {
 | 
						for i, t := range types {
 | 
				
			||||||
		files, err := options.Dir(t)
 | 
							files, err := options.Dir(t)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Fatal(4, "Fail to get %s files: %v", t, err)
 | 
								log.Fatal(4, "Failed to get %s files: %v", t, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		customPath := path.Join(setting.CustomPath, "options", t)
 | 
							customPath := path.Join(setting.CustomPath, "options", t)
 | 
				
			||||||
		if com.IsDir(customPath) {
 | 
							if com.IsDir(customPath) {
 | 
				
			||||||
			customFiles, err := com.StatDir(customPath)
 | 
								customFiles, err := com.StatDir(customPath)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				log.Fatal(4, "Fail to get custom %s files: %v", t, err)
 | 
									log.Fatal(4, "Failed to get custom %s files: %v", t, err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			for _, f := range customFiles {
 | 
								for _, f := range customFiles {
 | 
				
			||||||
@@ -131,13 +131,13 @@ func NewRepoContext() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Check Git installation.
 | 
						// Check Git installation.
 | 
				
			||||||
	if _, err := exec.LookPath("git"); err != nil {
 | 
						if _, err := exec.LookPath("git"); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to test 'git' command: %v (forgotten install?)", err)
 | 
							log.Fatal(4, "Failed to test 'git' command: %v (forgotten install?)", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Check Git version.
 | 
						// Check Git version.
 | 
				
			||||||
	gitVer, err := git.BinVersion()
 | 
						gitVer, err := git.BinVersion()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to get Git version: %v", err)
 | 
							log.Fatal(4, "Failed to get Git version: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	log.Info("Git Version: %s", gitVer)
 | 
						log.Info("Git Version: %s", gitVer)
 | 
				
			||||||
@@ -151,11 +151,11 @@ func NewRepoContext() {
 | 
				
			|||||||
			// ExitError indicates this config is not set
 | 
								// ExitError indicates this config is not set
 | 
				
			||||||
			if _, ok := err.(*exec.ExitError); ok || strings.TrimSpace(stdout) == "" {
 | 
								if _, ok := err.(*exec.ExitError); ok || strings.TrimSpace(stdout) == "" {
 | 
				
			||||||
				if _, stderr, gerr := process.GetManager().Exec("NewRepoContext(set "+configKey+")", "git", "config", "--global", configKey, defaultValue); gerr != nil {
 | 
									if _, stderr, gerr := process.GetManager().Exec("NewRepoContext(set "+configKey+")", "git", "config", "--global", configKey, defaultValue); gerr != nil {
 | 
				
			||||||
					log.Fatal(4, "Fail to set git %s(%s): %s", configKey, gerr, stderr)
 | 
										log.Fatal(4, "Failed to set git %s(%s): %s", configKey, gerr, stderr)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				log.Info("Git config %s set to %s", configKey, defaultValue)
 | 
									log.Info("Git config %s set to %s", configKey, defaultValue)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				log.Fatal(4, "Fail to get git %s(%s): %s", configKey, err, stderr)
 | 
									log.Fatal(4, "Failed to get git %s(%s): %s", configKey, err, stderr)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -163,7 +163,7 @@ func NewRepoContext() {
 | 
				
			|||||||
	// Set git some configurations.
 | 
						// Set git some configurations.
 | 
				
			||||||
	if _, stderr, err := process.GetManager().Exec("NewRepoContext(git config --global core.quotepath false)",
 | 
						if _, stderr, err := process.GetManager().Exec("NewRepoContext(git config --global core.quotepath false)",
 | 
				
			||||||
		"git", "config", "--global", "core.quotepath", "false"); err != nil {
 | 
							"git", "config", "--global", "core.quotepath", "false"); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to execute 'git config --global core.quotepath false': %s", stderr)
 | 
							log.Fatal(4, "Failed to execute 'git config --global core.quotepath false': %s", stderr)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	RemoveAllWithNotice("Clean up repository temporary data", filepath.Join(setting.AppDataPath, "tmp"))
 | 
						RemoveAllWithNotice("Clean up repository temporary data", filepath.Join(setting.AppDataPath, "tmp"))
 | 
				
			||||||
@@ -566,7 +566,7 @@ func (repo *Repository) SavePatch(index int64, patch []byte) error {
 | 
				
			|||||||
	dir := filepath.Dir(patchPath)
 | 
						dir := filepath.Dir(patchPath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to create dir %s: %v", dir, err)
 | 
							return fmt.Errorf("Failed to create dir %s: %v", dir, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = ioutil.WriteFile(patchPath, patch, 0644); err != nil {
 | 
						if err = ioutil.WriteFile(patchPath, patch, 0644); err != nil {
 | 
				
			||||||
@@ -679,7 +679,7 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
 | 
				
			|||||||
	migrateTimeout := time.Duration(setting.Git.Timeout.Migrate) * time.Second
 | 
						migrateTimeout := time.Duration(setting.Git.Timeout.Migrate) * time.Second
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.RemoveAll(repoPath); err != nil {
 | 
						if err := os.RemoveAll(repoPath); err != nil {
 | 
				
			||||||
		return repo, fmt.Errorf("Fail to remove %s: %v", repoPath, err)
 | 
							return repo, fmt.Errorf("Failed to remove %s: %v", repoPath, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = git.Clone(opts.RemoteAddr, repoPath, git.CloneRepoOptions{
 | 
						if err = git.Clone(opts.RemoteAddr, repoPath, git.CloneRepoOptions{
 | 
				
			||||||
@@ -693,7 +693,7 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
 | 
				
			|||||||
	wikiRemotePath := wikiRemoteURL(opts.RemoteAddr)
 | 
						wikiRemotePath := wikiRemoteURL(opts.RemoteAddr)
 | 
				
			||||||
	if len(wikiRemotePath) > 0 {
 | 
						if len(wikiRemotePath) > 0 {
 | 
				
			||||||
		if err := os.RemoveAll(wikiPath); err != nil {
 | 
							if err := os.RemoveAll(wikiPath); err != nil {
 | 
				
			||||||
			return repo, fmt.Errorf("Fail to remove %s: %v", wikiPath, err)
 | 
								return repo, fmt.Errorf("Failed to remove %s: %v", wikiPath, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err = git.Clone(wikiRemotePath, wikiPath, git.CloneRepoOptions{
 | 
							if err = git.Clone(wikiRemotePath, wikiPath, git.CloneRepoOptions{
 | 
				
			||||||
@@ -704,7 +704,7 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
 | 
				
			|||||||
		}); err != nil {
 | 
							}); err != nil {
 | 
				
			||||||
			log.Warn("Clone wiki: %v", err)
 | 
								log.Warn("Clone wiki: %v", err)
 | 
				
			||||||
			if err := os.RemoveAll(wikiPath); err != nil {
 | 
								if err := os.RemoveAll(wikiPath); err != nil {
 | 
				
			||||||
				return repo, fmt.Errorf("Fail to remove %s: %v", wikiPath, err)
 | 
									return repo, fmt.Errorf("Failed to remove %s: %v", wikiPath, err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -938,7 +938,7 @@ func initRepository(e Engine, repoPath string, u *User, repo *Repository, opts C
 | 
				
			|||||||
	if opts.AutoInit {
 | 
						if opts.AutoInit {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := os.MkdirAll(tmpDir, os.ModePerm); err != nil {
 | 
							if err := os.MkdirAll(tmpDir, os.ModePerm); err != nil {
 | 
				
			||||||
			return fmt.Errorf("Fail to create dir %s: %v", tmpDir, err)
 | 
								return fmt.Errorf("Failed to create dir %s: %v", tmpDir, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		defer os.RemoveAll(tmpDir)
 | 
							defer os.RemoveAll(tmpDir)
 | 
				
			||||||
@@ -1243,7 +1243,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error
 | 
				
			|||||||
	dir := UserPath(newOwner.Name)
 | 
						dir := UserPath(newOwner.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to create dir %s: %v", dir, err)
 | 
							return fmt.Errorf("Failed to create dir %s: %v", dir, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = os.Rename(RepoPath(owner.Name, repo.Name), RepoPath(newOwner.Name, repo.Name)); err != nil {
 | 
						if err = os.Rename(RepoPath(owner.Name, repo.Name), RepoPath(newOwner.Name, repo.Name)); err != nil {
 | 
				
			||||||
@@ -1818,7 +1818,7 @@ func GitFsck() {
 | 
				
			|||||||
				repo := bean.(*Repository)
 | 
									repo := bean.(*Repository)
 | 
				
			||||||
				repoPath := repo.RepoPath()
 | 
									repoPath := repo.RepoPath()
 | 
				
			||||||
				if err := git.Fsck(repoPath, setting.Cron.RepoHealthCheck.Timeout, setting.Cron.RepoHealthCheck.Args...); err != nil {
 | 
									if err := git.Fsck(repoPath, setting.Cron.RepoHealthCheck.Timeout, setting.Cron.RepoHealthCheck.Args...); err != nil {
 | 
				
			||||||
					desc := fmt.Sprintf("Fail to health check repository (%s): %v", repoPath, err)
 | 
										desc := fmt.Sprintf("Failed to health check repository (%s): %v", repoPath, err)
 | 
				
			||||||
					log.Warn(desc)
 | 
										log.Warn(desc)
 | 
				
			||||||
					if err = CreateRepositoryNotice(desc); err != nil {
 | 
										if err = CreateRepositoryNotice(desc); err != nil {
 | 
				
			||||||
						log.Error(4, "CreateRepositoryNotice: %v", err)
 | 
											log.Error(4, "CreateRepositoryNotice: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -107,7 +107,7 @@ func (repo *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) (
 | 
				
			|||||||
	dir := path.Dir(filePath)
 | 
						dir := path.Dir(filePath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to create dir %s: %v", dir, err)
 | 
							return fmt.Errorf("Failed to create dir %s: %v", dir, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// If it's meant to be a new file, make sure it doesn't exist.
 | 
						// If it's meant to be a new file, make sure it doesn't exist.
 | 
				
			||||||
@@ -192,7 +192,7 @@ func (repo *Repository) GetDiffPreview(branch, treePath, content string) (diff *
 | 
				
			|||||||
	dir := filepath.Dir(filePath)
 | 
						dir := filepath.Dir(filePath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
				
			||||||
		return nil, fmt.Errorf("Fail to create dir %s: %v", dir, err)
 | 
							return nil, fmt.Errorf("Failed to create dir %s: %v", dir, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = ioutil.WriteFile(filePath, []byte(content), 0666); err != nil {
 | 
						if err = ioutil.WriteFile(filePath, []byte(content), 0666); err != nil {
 | 
				
			||||||
@@ -486,7 +486,7 @@ func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions)
 | 
				
			|||||||
	dirPath := path.Join(localPath, opts.TreePath)
 | 
						dirPath := path.Join(localPath, opts.TreePath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(dirPath, os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(dirPath, os.ModePerm); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to create dir %s: %v", dirPath, err)
 | 
							return fmt.Errorf("Failed to create dir %s: %v", dirPath, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Copy uploaded files into repository.
 | 
						// Copy uploaded files into repository.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -140,7 +140,7 @@ func (m *Mirror) runSync() bool {
 | 
				
			|||||||
	if _, stderr, err := process.GetManager().ExecDir(
 | 
						if _, stderr, err := process.GetManager().ExecDir(
 | 
				
			||||||
		timeout, repoPath, fmt.Sprintf("Mirror.runSync: %s", repoPath),
 | 
							timeout, repoPath, fmt.Sprintf("Mirror.runSync: %s", repoPath),
 | 
				
			||||||
		"git", gitArgs...); err != nil {
 | 
							"git", gitArgs...); err != nil {
 | 
				
			||||||
		desc := fmt.Sprintf("Fail to update mirror repository '%s': %s", repoPath, stderr)
 | 
							desc := fmt.Sprintf("Failed to update mirror repository '%s': %s", repoPath, stderr)
 | 
				
			||||||
		log.Error(4, desc)
 | 
							log.Error(4, desc)
 | 
				
			||||||
		if err = CreateRepositoryNotice(desc); err != nil {
 | 
							if err = CreateRepositoryNotice(desc); err != nil {
 | 
				
			||||||
			log.Error(4, "CreateRepositoryNotice: %v", err)
 | 
								log.Error(4, "CreateRepositoryNotice: %v", err)
 | 
				
			||||||
@@ -151,7 +151,7 @@ func (m *Mirror) runSync() bool {
 | 
				
			|||||||
		if _, stderr, err := process.GetManager().ExecDir(
 | 
							if _, stderr, err := process.GetManager().ExecDir(
 | 
				
			||||||
			timeout, wikiPath, fmt.Sprintf("Mirror.runSync: %s", wikiPath),
 | 
								timeout, wikiPath, fmt.Sprintf("Mirror.runSync: %s", wikiPath),
 | 
				
			||||||
			"git", "remote", "update", "--prune"); err != nil {
 | 
								"git", "remote", "update", "--prune"); err != nil {
 | 
				
			||||||
			desc := fmt.Sprintf("Fail to update mirror wiki repository '%s': %s", wikiPath, stderr)
 | 
								desc := fmt.Sprintf("Failed to update mirror wiki repository '%s': %s", wikiPath, stderr)
 | 
				
			||||||
			log.Error(4, desc)
 | 
								log.Error(4, desc)
 | 
				
			||||||
			if err = CreateRepositoryNotice(desc); err != nil {
 | 
								if err = CreateRepositoryNotice(desc); err != nil {
 | 
				
			||||||
				log.Error(4, "CreateRepositoryNotice: %v", err)
 | 
									log.Error(4, "CreateRepositoryNotice: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -376,7 +376,7 @@ func addKey(e Engine, key *PublicKey) (err error) {
 | 
				
			|||||||
	dir := path.Dir(tmpPath)
 | 
						dir := path.Dir(tmpPath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(dir, os.ModePerm); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to create dir %s: %v", dir, err)
 | 
							return fmt.Errorf("Failed to create dir %s: %v", dir, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = ioutil.WriteFile(tmpPath, []byte(key.Content), 0644); err != nil {
 | 
						if err = ioutil.WriteFile(tmpPath, []byte(key.Content), 0644); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -102,7 +102,7 @@ func PushUpdate(opts PushUpdateOptions) (err error) {
 | 
				
			|||||||
	gitUpdate := exec.Command("git", "update-server-info")
 | 
						gitUpdate := exec.Command("git", "update-server-info")
 | 
				
			||||||
	gitUpdate.Dir = repoPath
 | 
						gitUpdate.Dir = repoPath
 | 
				
			||||||
	if err = gitUpdate.Run(); err != nil {
 | 
						if err = gitUpdate.Run(); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to call 'git update-server-info': %v", err)
 | 
							return fmt.Errorf("Failed to call 'git update-server-info': %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if isDelRef {
 | 
						if isDelRef {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -414,7 +414,7 @@ func (u *User) UploadAvatar(data []byte) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(setting.AvatarUploadPath, os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(setting.AvatarUploadPath, os.ModePerm); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to create dir %s: %v", setting.AvatarUploadPath, err)
 | 
							return fmt.Errorf("Failed to create dir %s: %v", setting.AvatarUploadPath, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fw, err := os.Create(u.CustomAvatarPath())
 | 
						fw, err := os.Create(u.CustomAvatarPath())
 | 
				
			||||||
@@ -435,7 +435,7 @@ func (u *User) DeleteAvatar() error {
 | 
				
			|||||||
	log.Trace("DeleteAvatar[%d]: %s", u.ID, u.CustomAvatarPath())
 | 
						log.Trace("DeleteAvatar[%d]: %s", u.ID, u.CustomAvatarPath())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.Remove(u.CustomAvatarPath()); err != nil {
 | 
						if err := os.Remove(u.CustomAvatarPath()); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to remove %s: %v", u.CustomAvatarPath(), err)
 | 
							return fmt.Errorf("Failed to remove %s: %v", u.CustomAvatarPath(), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	u.UseCustomAvatar = false
 | 
						u.UseCustomAvatar = false
 | 
				
			||||||
@@ -924,13 +924,13 @@ func deleteUser(e *xorm.Session, u *User) error {
 | 
				
			|||||||
	path := UserPath(u.Name)
 | 
						path := UserPath(u.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.RemoveAll(path); err != nil {
 | 
						if err := os.RemoveAll(path); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to RemoveAll %s: %v", path, err)
 | 
							return fmt.Errorf("Failed to RemoveAll %s: %v", path, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	avatarPath := u.CustomAvatarPath()
 | 
						avatarPath := u.CustomAvatarPath()
 | 
				
			||||||
	if com.IsExist(avatarPath) {
 | 
						if com.IsExist(avatarPath) {
 | 
				
			||||||
		if err := os.Remove(avatarPath); err != nil {
 | 
							if err := os.Remove(avatarPath); err != nil {
 | 
				
			||||||
			return fmt.Errorf("Fail to remove %s: %v", avatarPath, err)
 | 
								return fmt.Errorf("Failed to remove %s: %v", avatarPath, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -133,7 +133,7 @@ func (repo *Repository) updateWikiPage(doer *User, oldWikiPath, wikiPath, conten
 | 
				
			|||||||
		file := path.Join(localPath, oldWikiPath+".md")
 | 
							file := path.Join(localPath, oldWikiPath+".md")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := os.Remove(file); err != nil {
 | 
							if err := os.Remove(file); err != nil {
 | 
				
			||||||
			return fmt.Errorf("Fail to remove %s: %v", file, err)
 | 
								return fmt.Errorf("Failed to remove %s: %v", file, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -192,7 +192,7 @@ func (repo *Repository) DeleteWikiPage(doer *User, wikiPath string) (err error)
 | 
				
			|||||||
	filename := path.Join(localPath, wikiPath+".md")
 | 
						filename := path.Join(localPath, wikiPath+".md")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.Remove(filename); err != nil {
 | 
						if err := os.Remove(filename); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Fail to remove %s: %v", filename, err)
 | 
							return fmt.Errorf("Failed to remove %s: %v", filename, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	title := ToWikiPageName(wikiPath)
 | 
						title := ToWikiPageName(wikiPath)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -110,7 +110,7 @@ func GetRandomBytesAsBase64(n int) string {
 | 
				
			|||||||
	_, err := io.ReadFull(rand.Reader, bytes)
 | 
						_, err := io.ReadFull(rand.Reader, bytes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Error reading random bytes: %s", err)
 | 
							log.Fatal(4, "Error reading random bytes: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return base64.RawURLEncoding.EncodeToString(bytes)
 | 
						return base64.RawURLEncoding.EncodeToString(bytes)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -151,7 +151,7 @@ func (w *FileLogWriter) initFd() error {
 | 
				
			|||||||
	fd := w.mw.fd
 | 
						fd := w.mw.fd
 | 
				
			||||||
	finfo, err := fd.Stat()
 | 
						finfo, err := fd.Stat()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("get stat: %s", err)
 | 
							return fmt.Errorf("get stat: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	w.maxsizeCursize = int(finfo.Size())
 | 
						w.maxsizeCursize = int(finfo.Size())
 | 
				
			||||||
	w.dailyOpenDate = time.Now().Day()
 | 
						w.dailyOpenDate = time.Now().Day()
 | 
				
			||||||
@@ -194,12 +194,12 @@ func (w *FileLogWriter) DoRotate() error {
 | 
				
			|||||||
		// close fd before rename
 | 
							// close fd before rename
 | 
				
			||||||
		// Rename the file to its newfound home
 | 
							// Rename the file to its newfound home
 | 
				
			||||||
		if err = os.Rename(w.Filename, fname); err != nil {
 | 
							if err = os.Rename(w.Filename, fname); err != nil {
 | 
				
			||||||
			return fmt.Errorf("Rotate: %s", err)
 | 
								return fmt.Errorf("Rotate: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// re-start logger
 | 
							// re-start logger
 | 
				
			||||||
		if err = w.StartLogger(); err != nil {
 | 
							if err = w.StartLogger(); err != nil {
 | 
				
			||||||
			return fmt.Errorf("Rotate StartLogger: %s", err)
 | 
								return fmt.Errorf("Rotate StartLogger: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		go w.deleteOldLog()
 | 
							go w.deleteOldLog()
 | 
				
			||||||
@@ -221,7 +221,7 @@ func (w *FileLogWriter) deleteOldLog() {
 | 
				
			|||||||
			if strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) {
 | 
								if strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if err := os.Remove(path); err != nil {
 | 
									if err := os.Remove(path); err != nil {
 | 
				
			||||||
					returnErr = fmt.Errorf("Fail to remove %s: %v", path, err)
 | 
										returnErr = fmt.Errorf("Failed to remove %s: %v", path, err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ func NewLogger(bufLen int64, mode, config string) {
 | 
				
			|||||||
		loggers = append(loggers, logger)
 | 
							loggers = append(loggers, logger)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := logger.SetLogger(mode, config); err != nil {
 | 
						if err := logger.SetLogger(mode, config); err != nil {
 | 
				
			||||||
		Fatal(2, "Fail to set logger (%s): %v", mode, err)
 | 
							Fatal(2, "Failed to set logger (%s): %v", mode, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -56,7 +56,7 @@ func NewGitLogger(logPath string) {
 | 
				
			|||||||
	path := path.Dir(logPath)
 | 
						path := path.Dir(logPath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := os.MkdirAll(path, os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(path, os.ModePerm); err != nil {
 | 
				
			||||||
		Fatal(4, "Fail to create dir %s: %v", path, err)
 | 
							Fatal(4, "Failed to create dir %s: %v", path, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	GitLogger = newLogger(0)
 | 
						GitLogger = newLogger(0)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -241,7 +241,7 @@ func processMailQueue() {
 | 
				
			|||||||
		case msg := <-mailQueue:
 | 
							case msg := <-mailQueue:
 | 
				
			||||||
			log.Trace("New e-mail sending request %s: %s", msg.GetHeader("To"), msg.Info)
 | 
								log.Trace("New e-mail sending request %s: %s", msg.GetHeader("To"), msg.Info)
 | 
				
			||||||
			if err := gomail.Send(Sender, msg.Message); err != nil {
 | 
								if err := gomail.Send(Sender, msg.Message); err != nil {
 | 
				
			||||||
				log.Error(3, "Fail to send emails %s: %s - %v", msg.GetHeader("To"), msg.Info, err)
 | 
									log.Error(3, "Failed to send emails %s: %s - %v", msg.GetHeader("To"), msg.Info, err)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				log.Trace("E-mails sent %s: %s", msg.GetHeader("To"), msg.Info)
 | 
									log.Trace("E-mails sent %s: %s", msg.GetHeader("To"), msg.Info)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -431,7 +431,7 @@ func init() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	if AppPath, err = execPath(); err != nil {
 | 
						if AppPath, err = execPath(); err != nil {
 | 
				
			||||||
		log.Fatal(4, "fail to get app path: %v\n", err)
 | 
							log.Fatal(4, "Failed to get app path: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Note: we don't use path.Dir here because it does not handle case
 | 
						// Note: we don't use path.Dir here because it does not handle case
 | 
				
			||||||
@@ -483,16 +483,16 @@ func IsRunUserMatchCurrentUser(runUser string) (string, bool) {
 | 
				
			|||||||
func createPIDFile(pidPath string) {
 | 
					func createPIDFile(pidPath string) {
 | 
				
			||||||
	currentPid := os.Getpid()
 | 
						currentPid := os.Getpid()
 | 
				
			||||||
	if err := os.MkdirAll(filepath.Dir(pidPath), os.ModePerm); err != nil {
 | 
						if err := os.MkdirAll(filepath.Dir(pidPath), os.ModePerm); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Can't create PID folder on %s", err)
 | 
							log.Fatal(4, "Failed to create PID folder: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	file, err := os.Create(pidPath)
 | 
						file, err := os.Create(pidPath)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Can't create PID file: %v", err)
 | 
							log.Fatal(4, "Failed to create PID file: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer file.Close()
 | 
						defer file.Close()
 | 
				
			||||||
	if _, err := file.WriteString(strconv.FormatInt(int64(currentPid), 10)); err != nil {
 | 
						if _, err := file.WriteString(strconv.FormatInt(int64(currentPid), 10)); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Can'write PID information on %s", err)
 | 
							log.Fatal(4, "Failed to write PID information: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -501,13 +501,13 @@ func createPIDFile(pidPath string) {
 | 
				
			|||||||
func NewContext() {
 | 
					func NewContext() {
 | 
				
			||||||
	workDir, err := WorkDir()
 | 
						workDir, err := WorkDir()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to get work directory: %v", err)
 | 
							log.Fatal(4, "Failed to get work directory: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Cfg = ini.Empty()
 | 
						Cfg = ini.Empty()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to parse 'app.ini': %v", err)
 | 
							log.Fatal(4, "Failed to parse 'app.ini': %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	CustomPath = os.Getenv("GITEA_CUSTOM")
 | 
						CustomPath = os.Getenv("GITEA_CUSTOM")
 | 
				
			||||||
@@ -533,7 +533,7 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if com.IsFile(CustomConf) {
 | 
						if com.IsFile(CustomConf) {
 | 
				
			||||||
		if err = Cfg.Append(CustomConf); err != nil {
 | 
							if err = Cfg.Append(CustomConf); err != nil {
 | 
				
			||||||
			log.Fatal(4, "Fail to load custom conf '%s': %v", CustomConf, err)
 | 
								log.Fatal(4, "Failed to load custom conf '%s': %v", CustomConf, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		log.Warn("Custom config '%s' not found, ignore this if you're running first time", CustomConf)
 | 
							log.Warn("Custom config '%s' not found, ignore this if you're running first time", CustomConf)
 | 
				
			||||||
@@ -542,7 +542,7 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	homeDir, err := com.HomeDir()
 | 
						homeDir, err := com.HomeDir()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to get home directory: %v", err)
 | 
							log.Fatal(4, "Failed to get home directory: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	homeDir = strings.Replace(homeDir, "\\", "/", -1)
 | 
						homeDir = strings.Replace(homeDir, "\\", "/", -1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -578,7 +578,7 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
		UnixSocketPermissionRaw := sec.Key("UNIX_SOCKET_PERMISSION").MustString("666")
 | 
							UnixSocketPermissionRaw := sec.Key("UNIX_SOCKET_PERMISSION").MustString("666")
 | 
				
			||||||
		UnixSocketPermissionParsed, err := strconv.ParseUint(UnixSocketPermissionRaw, 8, 32)
 | 
							UnixSocketPermissionParsed, err := strconv.ParseUint(UnixSocketPermissionRaw, 8, 32)
 | 
				
			||||||
		if err != nil || UnixSocketPermissionParsed > 0777 {
 | 
							if err != nil || UnixSocketPermissionParsed > 0777 {
 | 
				
			||||||
			log.Fatal(4, "Fail to parse unixSocketPermission: %s", UnixSocketPermissionRaw)
 | 
								log.Fatal(4, "Failed to parse unixSocketPermission: %s", UnixSocketPermissionRaw)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		UnixSocketPermission = uint32(UnixSocketPermissionParsed)
 | 
							UnixSocketPermission = uint32(UnixSocketPermissionParsed)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -602,7 +602,7 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
	SSH.RootPath = path.Join(homeDir, ".ssh")
 | 
						SSH.RootPath = path.Join(homeDir, ".ssh")
 | 
				
			||||||
	SSH.KeyTestPath = os.TempDir()
 | 
						SSH.KeyTestPath = os.TempDir()
 | 
				
			||||||
	if err = Cfg.Section("server").MapTo(&SSH); err != nil {
 | 
						if err = Cfg.Section("server").MapTo(&SSH); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map SSH settings: %v", err)
 | 
							log.Fatal(4, "Failed to map SSH settings: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SSH.KeygenPath = sec.Key("SSH_KEYGEN_PATH").MustString("ssh-keygen")
 | 
						SSH.KeygenPath = sec.Key("SSH_KEYGEN_PATH").MustString("ssh-keygen")
 | 
				
			||||||
@@ -616,9 +616,9 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if !SSH.Disabled && !SSH.StartBuiltinServer {
 | 
						if !SSH.Disabled && !SSH.StartBuiltinServer {
 | 
				
			||||||
		if err := os.MkdirAll(SSH.RootPath, 0700); err != nil {
 | 
							if err := os.MkdirAll(SSH.RootPath, 0700); err != nil {
 | 
				
			||||||
			log.Fatal(4, "Fail to create '%s': %v", SSH.RootPath, err)
 | 
								log.Fatal(4, "Failed to create '%s': %v", SSH.RootPath, err)
 | 
				
			||||||
		} else if err = os.MkdirAll(SSH.KeyTestPath, 0644); err != nil {
 | 
							} else if err = os.MkdirAll(SSH.KeyTestPath, 0644); err != nil {
 | 
				
			||||||
			log.Fatal(4, "Fail to create '%s': %v", SSH.KeyTestPath, err)
 | 
								log.Fatal(4, "Failed to create '%s': %v", SSH.KeyTestPath, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -632,13 +632,13 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = Cfg.Section("server").MapTo(&LFS); err != nil {
 | 
						if err = Cfg.Section("server").MapTo(&LFS); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map LFS settings: %v", err)
 | 
							log.Fatal(4, "Failed to map LFS settings: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if LFS.StartServer {
 | 
						if LFS.StartServer {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := os.MkdirAll(LFS.ContentPath, 0700); err != nil {
 | 
							if err := os.MkdirAll(LFS.ContentPath, 0700); err != nil {
 | 
				
			||||||
			log.Fatal(4, "Fail to create '%s': %v", LFS.ContentPath, err)
 | 
								log.Fatal(4, "Failed to create '%s': %v", LFS.ContentPath, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		LFS.JWTSecretBytes = make([]byte, 32)
 | 
							LFS.JWTSecretBytes = make([]byte, 32)
 | 
				
			||||||
@@ -650,7 +650,7 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
			_, err := io.ReadFull(rand.Reader, LFS.JWTSecretBytes)
 | 
								_, err := io.ReadFull(rand.Reader, LFS.JWTSecretBytes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				log.Fatal(4, "Error reading random bytes: %s", err)
 | 
									log.Fatal(4, "Error reading random bytes: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			LFS.JWTSecretBase64 = base64.RawURLEncoding.EncodeToString(LFS.JWTSecretBytes)
 | 
								LFS.JWTSecretBase64 = base64.RawURLEncoding.EncodeToString(LFS.JWTSecretBytes)
 | 
				
			||||||
@@ -660,14 +660,14 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
			if com.IsFile(CustomConf) {
 | 
								if com.IsFile(CustomConf) {
 | 
				
			||||||
				// Keeps custom settings if there is already something.
 | 
									// Keeps custom settings if there is already something.
 | 
				
			||||||
				if err := cfg.Append(CustomConf); err != nil {
 | 
									if err := cfg.Append(CustomConf); err != nil {
 | 
				
			||||||
					log.Error(4, "Fail to load custom conf '%s': %v", CustomConf, err)
 | 
										log.Error(4, "Failed to load custom conf '%s': %v", CustomConf, err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			cfg.Section("server").Key("LFS_JWT_SECRET").SetValue(LFS.JWTSecretBase64)
 | 
								cfg.Section("server").Key("LFS_JWT_SECRET").SetValue(LFS.JWTSecretBase64)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err := os.MkdirAll(filepath.Dir(CustomConf), os.ModePerm); err != nil {
 | 
								if err := os.MkdirAll(filepath.Dir(CustomConf), os.ModePerm); err != nil {
 | 
				
			||||||
				log.Fatal(4, "Fail to create '%s': %v", CustomConf, err)
 | 
									log.Fatal(4, "Failed to create '%s': %v", CustomConf, err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if err := cfg.SaveTo(CustomConf); err != nil {
 | 
								if err := cfg.SaveTo(CustomConf); err != nil {
 | 
				
			||||||
				log.Fatal(4, "Error saving generated JWT Secret to custom config: %v", err)
 | 
									log.Fatal(4, "Error saving generated JWT Secret to custom config: %v", err)
 | 
				
			||||||
@@ -680,22 +680,22 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		binVersion, err := git.BinVersion()
 | 
							binVersion, err := git.BinVersion()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Fatal(4, "Error retrieving git version: %s", err)
 | 
								log.Fatal(4, "Error retrieving git version: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		splitVersion := strings.SplitN(binVersion, ".", 3)
 | 
							splitVersion := strings.SplitN(binVersion, ".", 3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		majorVersion, err := strconv.ParseUint(splitVersion[0], 10, 64)
 | 
							majorVersion, err := strconv.ParseUint(splitVersion[0], 10, 64)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Fatal(4, "Error parsing git major version: %s", err)
 | 
								log.Fatal(4, "Error parsing git major version: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		minorVersion, err := strconv.ParseUint(splitVersion[1], 10, 64)
 | 
							minorVersion, err := strconv.ParseUint(splitVersion[1], 10, 64)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Fatal(4, "Error parsing git minor version: %s", err)
 | 
								log.Fatal(4, "Error parsing git minor version: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		revisionVersion, err := strconv.ParseUint(splitVersion[2], 10, 64)
 | 
							revisionVersion, err := strconv.ParseUint(splitVersion[2], 10, 64)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Fatal(4, "Error parsing git revision version: %s", err)
 | 
								log.Fatal(4, "Error parsing git revision version: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if !((majorVersion > 2) || (majorVersion == 2 && minorVersion > 1) ||
 | 
							if !((majorVersion > 2) || (majorVersion == 2 && minorVersion > 1) ||
 | 
				
			||||||
@@ -771,11 +771,11 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	ScriptType = sec.Key("SCRIPT_TYPE").MustString("bash")
 | 
						ScriptType = sec.Key("SCRIPT_TYPE").MustString("bash")
 | 
				
			||||||
	if err = Cfg.Section("repository").MapTo(&Repository); err != nil {
 | 
						if err = Cfg.Section("repository").MapTo(&Repository); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map Repository settings: %v", err)
 | 
							log.Fatal(4, "Failed to map Repository settings: %v", err)
 | 
				
			||||||
	} else if err = Cfg.Section("repository.editor").MapTo(&Repository.Editor); err != nil {
 | 
						} else if err = Cfg.Section("repository.editor").MapTo(&Repository.Editor); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map Repository.Editor settings: %v", err)
 | 
							log.Fatal(4, "Failed to map Repository.Editor settings: %v", err)
 | 
				
			||||||
	} else if err = Cfg.Section("repository.upload").MapTo(&Repository.Upload); err != nil {
 | 
						} else if err = Cfg.Section("repository.upload").MapTo(&Repository.Upload); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map Repository.Upload settings: %v", err)
 | 
							log.Fatal(4, "Failed to map Repository.Upload settings: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !filepath.IsAbs(Repository.Upload.TempPath) {
 | 
						if !filepath.IsAbs(Repository.Upload.TempPath) {
 | 
				
			||||||
@@ -823,17 +823,17 @@ please consider changing to GITEA_CUSTOM`)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = Cfg.Section("ui").MapTo(&UI); err != nil {
 | 
						if err = Cfg.Section("ui").MapTo(&UI); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map UI settings: %v", err)
 | 
							log.Fatal(4, "Failed to map UI settings: %v", err)
 | 
				
			||||||
	} else if err = Cfg.Section("markdown").MapTo(&Markdown); err != nil {
 | 
						} else if err = Cfg.Section("markdown").MapTo(&Markdown); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map Markdown settings: %v", err)
 | 
							log.Fatal(4, "Failed to map Markdown settings: %v", err)
 | 
				
			||||||
	} else if err = Cfg.Section("cron").MapTo(&Cron); err != nil {
 | 
						} else if err = Cfg.Section("cron").MapTo(&Cron); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map Cron settings: %v", err)
 | 
							log.Fatal(4, "Failed to map Cron settings: %v", err)
 | 
				
			||||||
	} else if err = Cfg.Section("git").MapTo(&Git); err != nil {
 | 
						} else if err = Cfg.Section("git").MapTo(&Git); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map Git settings: %v", err)
 | 
							log.Fatal(4, "Failed to map Git settings: %v", err)
 | 
				
			||||||
	} else if err = Cfg.Section("mirror").MapTo(&Mirror); err != nil {
 | 
						} else if err = Cfg.Section("mirror").MapTo(&Mirror); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map Mirror settings: %v", err)
 | 
							log.Fatal(4, "Failed to map Mirror settings: %v", err)
 | 
				
			||||||
	} else if err = Cfg.Section("api").MapTo(&API); err != nil {
 | 
						} else if err = Cfg.Section("api").MapTo(&API); err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to map API settings: %v", err)
 | 
							log.Fatal(4, "Failed to map API settings: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if Mirror.DefaultInterval <= 0 {
 | 
						if Mirror.DefaultInterval <= 0 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,6 @@
 | 
				
			|||||||
package ssh
 | 
					package ssh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
	"net"
 | 
						"net"
 | 
				
			||||||
@@ -117,7 +116,7 @@ func handleServerConn(keyID string, chans <-chan ssh.NewChannel) {
 | 
				
			|||||||
func listen(config *ssh.ServerConfig, host string, port int) {
 | 
					func listen(config *ssh.ServerConfig, host string, port int) {
 | 
				
			||||||
	listener, err := net.Listen("tcp", host+":"+com.ToStr(port))
 | 
						listener, err := net.Listen("tcp", host+":"+com.ToStr(port))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(4, "Fail to start SSH server: %v", err)
 | 
							log.Fatal(4, "Failed to start SSH server: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		// Once a ServerConfig has been configured, connections can be accepted.
 | 
							// Once a ServerConfig has been configured, connections can be accepted.
 | 
				
			||||||
@@ -169,23 +168,23 @@ func Listen(host string, port int) {
 | 
				
			|||||||
		filePath := filepath.Dir(keyPath)
 | 
							filePath := filepath.Dir(keyPath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := os.MkdirAll(filePath, os.ModePerm); err != nil {
 | 
							if err := os.MkdirAll(filePath, os.ModePerm); err != nil {
 | 
				
			||||||
			log.Error(4, "Fail to create dir %s: %v", filePath, err)
 | 
								log.Error(4, "Failed to create dir %s: %v", filePath, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		_, stderr, err := com.ExecCmd("ssh-keygen", "-f", keyPath, "-t", "rsa", "-N", "")
 | 
							_, stderr, err := com.ExecCmd("ssh-keygen", "-f", keyPath, "-t", "rsa", "-N", "")
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			panic(fmt.Sprintf("Fail to generate private key: %v - %s", err, stderr))
 | 
								log.Fatal(4, "Failed to generate private key: %v - %s", err, stderr)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		log.Trace("SSH: New private key is generateed: %s", keyPath)
 | 
							log.Trace("SSH: New private key is generateed: %s", keyPath)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	privateBytes, err := ioutil.ReadFile(keyPath)
 | 
						privateBytes, err := ioutil.ReadFile(keyPath)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic("SSH: Fail to load private key")
 | 
							log.Fatal(4, "SSH: Failed to load private key")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	private, err := ssh.ParsePrivateKey(privateBytes)
 | 
						private, err := ssh.ParsePrivateKey(privateBytes)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic("SSH: Fail to parse private key")
 | 
							log.Fatal(4, "SSH: Failed to parse private key")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	config.AddHostKey(private)
 | 
						config.AddHostKey(private)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,7 +51,7 @@ func GlobalInit() {
 | 
				
			|||||||
		highlight.NewContext()
 | 
							highlight.NewContext()
 | 
				
			||||||
		markdown.BuildSanitizer()
 | 
							markdown.BuildSanitizer()
 | 
				
			||||||
		if err := models.NewEngine(); err != nil {
 | 
							if err := models.NewEngine(); err != nil {
 | 
				
			||||||
			log.Fatal(4, "Fail to initialize ORM engine: %v", err)
 | 
								log.Fatal(4, "Failed to initialize ORM engine: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		models.HasEngine = true
 | 
							models.HasEngine = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -242,7 +242,7 @@ func InstallPost(ctx *context.Context, form auth.InstallForm) {
 | 
				
			|||||||
	if com.IsFile(setting.CustomConf) {
 | 
						if com.IsFile(setting.CustomConf) {
 | 
				
			||||||
		// Keeps custom settings if there is already something.
 | 
							// Keeps custom settings if there is already something.
 | 
				
			||||||
		if err = cfg.Append(setting.CustomConf); err != nil {
 | 
							if err = cfg.Append(setting.CustomConf); err != nil {
 | 
				
			||||||
			log.Error(4, "Fail to load custom conf '%s': %v", setting.CustomConf, err)
 | 
								log.Error(4, "Failed to load custom conf '%s': %v", setting.CustomConf, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	cfg.Section("database").Key("DB_TYPE").SetValue(models.DbCfg.Type)
 | 
						cfg.Section("database").Key("DB_TYPE").SetValue(models.DbCfg.Type)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,10 +6,12 @@ package repo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
 | 
						"encoding/base64"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	gotemplate "html/template"
 | 
						gotemplate "html/template"
 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/git"
 | 
						"code.gitea.io/git"
 | 
				
			||||||
@@ -22,9 +24,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/markdown"
 | 
						"code.gitea.io/gitea/modules/markdown"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/templates"
 | 
						"code.gitea.io/gitea/modules/templates"
 | 
				
			||||||
	"encoding/base64"
 | 
					 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
						"github.com/Unknwon/paginater"
 | 
				
			||||||
	"strconv"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -193,7 +193,7 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
 | 
				
			|||||||
			var fileContent string
 | 
								var fileContent string
 | 
				
			||||||
			if content, err := templates.ToUTF8WithErr(buf); err != nil {
 | 
								if content, err := templates.ToUTF8WithErr(buf); err != nil {
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					log.Error(4, "ToUTF8WithErr: %s", err)
 | 
										log.Error(4, "ToUTF8WithErr: %v", err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				fileContent = string(buf)
 | 
									fileContent = string(buf)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user