| @@ -79,7 +79,6 @@ func runDump(ctx *cli.Context) error { | |||||
| 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 { | ||||
| os.Remove(fileName) | |||||
| log.Fatalf("Fail to create %s: %v", fileName, err) | log.Fatalf("Fail to create %s: %v", fileName, err) | ||||
| } | } | ||||
| @@ -102,7 +101,7 @@ func runDump(ctx *cli.Context) error { | |||||
| } | } | ||||
| // 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("Fail to save %s: %v", fileName, err) | ||||
| } | } | ||||
| @@ -111,7 +110,10 @@ func runDump(ctx *cli.Context) error { | |||||
| } | } | ||||
| log.Printf("Removing tmp work dir: %s", TmpWorkDir) | log.Printf("Removing tmp work dir: %s", TmpWorkDir) | ||||
| os.RemoveAll(TmpWorkDir) | |||||
| if err := os.RemoveAll(TmpWorkDir); err != nil { | |||||
| log.Fatalf("Fail to remove %s: %v", TmpWorkDir, err) | |||||
| } | |||||
| log.Printf("Finish dumping in file %s", fileName) | log.Printf("Finish dumping in file %s", fileName) | ||||
| return nil | return nil | ||||
| @@ -51,7 +51,9 @@ func setup(logPath string) { | |||||
| if setting.UseSQLite3 || setting.UseTiDB { | if setting.UseSQLite3 || setting.UseTiDB { | ||||
| workDir, _ := setting.WorkDir() | workDir, _ := setting.WorkDir() | ||||
| os.Chdir(workDir) | |||||
| if err := os.Chdir(workDir); err != nil { | |||||
| log.GitLogger.Fatal(4, "Fail to change directory %s: %v", workDir, err) | |||||
| } | |||||
| } | } | ||||
| models.SetEngine() | models.SetEngine() | ||||
| @@ -654,8 +654,9 @@ func runWeb(ctx *cli.Context) error { | |||||
| case setting.FCGI: | case setting.FCGI: | ||||
| err = fcgi.Serve(nil, m) | err = fcgi.Serve(nil, m) | ||||
| case setting.UnixSocket: | case setting.UnixSocket: | ||||
| os.Remove(listenAddr) | |||||
| if err := os.Remove(listenAddr); err != nil { | |||||
| log.Fatal(4, "Fail 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"}) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -10,6 +10,8 @@ import ( | |||||
| "os" | "os" | ||||
| "runtime" | "runtime" | ||||
| "code.gitea.io/gitea/modules/log" | |||||
| "code.gitea.io/gitea/cmd" | "code.gitea.io/gitea/cmd" | ||||
| "code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
| "github.com/urfave/cli" | "github.com/urfave/cli" | ||||
| @@ -37,5 +39,9 @@ func main() { | |||||
| cmd.CmdAdmin, | cmd.CmdAdmin, | ||||
| } | } | ||||
| app.Flags = append(app.Flags, []cli.Flag{}...) | app.Flags = append(app.Flags, []cli.Flag{}...) | ||||
| app.Run(os.Args) | |||||
| err := app.Run(os.Args) | |||||
| if err != nil { | |||||
| log.Fatal(4, "Fail to run app with %s: %v", os.Args, err) | |||||
| } | |||||
| } | } | ||||
| @@ -192,7 +192,10 @@ func SetEngine() (err error) { | |||||
| // WARNING: for serv command, MUST remove the output to os.stdout, | // WARNING: for serv command, MUST remove the output to os.stdout, | ||||
| // so use log file to instead print to stdout. | // so use log file to instead print to stdout. | ||||
| logPath := path.Join(setting.LogRootPath, "xorm.log") | logPath := path.Join(setting.LogRootPath, "xorm.log") | ||||
| os.MkdirAll(path.Dir(logPath), os.ModePerm) | |||||
| if err := os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil { | |||||
| return fmt.Errorf("Fail to create dir %s: %v", logPath, err) | |||||
| } | |||||
| f, err := os.Create(logPath) | f, err := os.Create(logPath) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -218,7 +218,11 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error | |||||
| // Clone base repo. | // Clone base repo. | ||||
| 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") | ||||
| os.MkdirAll(path.Dir(tmpBasePath), os.ModePerm) | |||||
| if err := os.MkdirAll(path.Dir(tmpBasePath), os.ModePerm); err != nil { | |||||
| return fmt.Errorf("Fail to create dir %s: %v", tmpBasePath, err) | |||||
| } | |||||
| defer os.RemoveAll(path.Dir(tmpBasePath)) | defer os.RemoveAll(path.Dir(tmpBasePath)) | ||||
| var stderr string | var stderr string | ||||
| @@ -622,8 +626,11 @@ func (pr *PullRequest) PushToBaseRepo() (err error) { | |||||
| headFile := fmt.Sprintf("refs/pull/%d/head", pr.Index) | headFile := fmt.Sprintf("refs/pull/%d/head", pr.Index) | ||||
| // Remove head in case there is a conflict. | // Remove head in case there is a conflict. | ||||
| os.Remove(path.Join(pr.BaseRepo.RepoPath(), headFile)) | |||||
| file := path.Join(pr.BaseRepo.RepoPath(), headFile) | |||||
| if err := os.Remove(file); err != nil { | |||||
| return fmt.Errorf("Fail to remove dir %s: %v", path.Join(pr.BaseRepo.RepoPath(), headFile), err) | |||||
| } | |||||
| if err = git.Push(headRepoPath, tmpRemoteName, fmt.Sprintf("%s:%s", pr.HeadBranch, headFile)); err != nil { | if err = git.Push(headRepoPath, tmpRemoteName, fmt.Sprintf("%s:%s", pr.HeadBranch, headFile)); err != nil { | ||||
| return fmt.Errorf("Push: %v", err) | return fmt.Errorf("Push: %v", err) | ||||
| } | } | ||||
| @@ -558,8 +558,12 @@ func (repo *Repository) SavePatch(index int64, patch []byte) error { | |||||
| if err != nil { | if err != nil { | ||||
| return fmt.Errorf("PatchPath: %v", err) | return fmt.Errorf("PatchPath: %v", err) | ||||
| } | } | ||||
| dir := filepath.Dir(patchPath) | |||||
| if err := os.MkdirAll(dir, os.ModePerm); err != nil { | |||||
| return fmt.Errorf("Fail to create dir %s: %v", dir, err) | |||||
| } | |||||
| os.MkdirAll(filepath.Dir(patchPath), os.ModePerm) | |||||
| if err = ioutil.WriteFile(patchPath, patch, 0644); err != nil { | if err = ioutil.WriteFile(patchPath, patch, 0644); err != nil { | ||||
| return fmt.Errorf("WriteFile: %v", err) | return fmt.Errorf("WriteFile: %v", err) | ||||
| } | } | ||||
| @@ -669,7 +673,10 @@ 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 | ||||
| os.RemoveAll(repoPath) | |||||
| if err := os.RemoveAll(repoPath); err != nil { | |||||
| return repo, fmt.Errorf("Fail to remove %s: %v", repoPath, err) | |||||
| } | |||||
| if err = git.Clone(opts.RemoteAddr, repoPath, git.CloneRepoOptions{ | if err = git.Clone(opts.RemoteAddr, repoPath, git.CloneRepoOptions{ | ||||
| Mirror: true, | Mirror: true, | ||||
| Quiet: true, | Quiet: true, | ||||
| @@ -680,7 +687,11 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) { | |||||
| wikiRemotePath := wikiRemoteURL(opts.RemoteAddr) | wikiRemotePath := wikiRemoteURL(opts.RemoteAddr) | ||||
| if len(wikiRemotePath) > 0 { | if len(wikiRemotePath) > 0 { | ||||
| os.RemoveAll(wikiPath) | |||||
| if err := os.RemoveAll(wikiPath); err != nil { | |||||
| return repo, fmt.Errorf("Fail to remove %s: %v", wikiPath, err) | |||||
| } | |||||
| if err = git.Clone(wikiRemotePath, wikiPath, git.CloneRepoOptions{ | if err = git.Clone(wikiRemotePath, wikiPath, git.CloneRepoOptions{ | ||||
| Mirror: true, | Mirror: true, | ||||
| Quiet: true, | Quiet: true, | ||||
| @@ -902,7 +913,11 @@ func initRepository(e Engine, repoPath string, u *User, repo *Repository, opts C | |||||
| // Initialize repository according to user's choice. | // Initialize repository according to user's choice. | ||||
| if opts.AutoInit { | if opts.AutoInit { | ||||
| os.MkdirAll(tmpDir, os.ModePerm) | |||||
| if err := os.MkdirAll(tmpDir, os.ModePerm); err != nil { | |||||
| return fmt.Errorf("Fail to create dir %s: %v", tmpDir, err) | |||||
| } | |||||
| defer os.RemoveAll(tmpDir) | defer os.RemoveAll(tmpDir) | ||||
| if err = prepareRepoCommit(repo, tmpDir, repoPath, opts); err != nil { | if err = prepareRepoCommit(repo, tmpDir, repoPath, opts); err != nil { | ||||
| @@ -1198,7 +1213,12 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error | |||||
| } | } | ||||
| // Rename remote repository to new path and delete local copy. | // Rename remote repository to new path and delete local copy. | ||||
| os.MkdirAll(UserPath(newOwner.Name), os.ModePerm) | |||||
| dir := UserPath(newOwner.Name) | |||||
| if err := os.MkdirAll(dir, os.ModePerm); err != nil { | |||||
| return fmt.Errorf("Fail 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 { | ||||
| return fmt.Errorf("rename repository directory: %v", err) | return fmt.Errorf("rename repository directory: %v", err) | ||||
| } | } | ||||
| @@ -104,7 +104,11 @@ func (repo *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) ( | |||||
| localPath := repo.LocalCopyPath() | localPath := repo.LocalCopyPath() | ||||
| oldFilePath := path.Join(localPath, opts.OldTreeName) | oldFilePath := path.Join(localPath, opts.OldTreeName) | ||||
| filePath := path.Join(localPath, opts.NewTreeName) | filePath := path.Join(localPath, opts.NewTreeName) | ||||
| os.MkdirAll(path.Dir(filePath), os.ModePerm) | |||||
| dir := path.Dir(filePath) | |||||
| if err := os.MkdirAll(dir, os.ModePerm); err != nil { | |||||
| return fmt.Errorf("Fail 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. | ||||
| if opts.IsNewFile { | if opts.IsNewFile { | ||||
| @@ -185,7 +189,12 @@ func (repo *Repository) GetDiffPreview(branch, treePath, content string) (diff * | |||||
| localPath := repo.LocalCopyPath() | localPath := repo.LocalCopyPath() | ||||
| filePath := path.Join(localPath, treePath) | filePath := path.Join(localPath, treePath) | ||||
| os.MkdirAll(filepath.Dir(filePath), os.ModePerm) | |||||
| dir := filepath.Dir(filePath) | |||||
| if err := os.MkdirAll(dir, os.ModePerm); err != nil { | |||||
| return nil, fmt.Errorf("Fail 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 { | ||||
| return nil, fmt.Errorf("WriteFile: %v", err) | return nil, fmt.Errorf("WriteFile: %v", err) | ||||
| } | } | ||||
| @@ -475,7 +484,10 @@ func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions) | |||||
| localPath := repo.LocalCopyPath() | localPath := repo.LocalCopyPath() | ||||
| dirPath := path.Join(localPath, opts.TreePath) | dirPath := path.Join(localPath, opts.TreePath) | ||||
| os.MkdirAll(dirPath, os.ModePerm) | |||||
| if err := os.MkdirAll(dirPath, os.ModePerm); err != nil { | |||||
| return fmt.Errorf("Fail to create dir %s: %v", dirPath, err) | |||||
| } | |||||
| // Copy uploaded files into repository. | // Copy uploaded files into repository. | ||||
| for _, upload := range uploads { | for _, upload := range uploads { | ||||
| @@ -373,7 +373,12 @@ func addKey(e Engine, key *PublicKey) (err error) { | |||||
| // Calculate fingerprint. | // Calculate fingerprint. | ||||
| tmpPath := strings.Replace(path.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()), | tmpPath := strings.Replace(path.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()), | ||||
| "id_rsa.pub"), "\\", "/", -1) | "id_rsa.pub"), "\\", "/", -1) | ||||
| os.MkdirAll(path.Dir(tmpPath), os.ModePerm) | |||||
| dir := path.Dir(tmpPath) | |||||
| if err := os.MkdirAll(dir, os.ModePerm); err != nil { | |||||
| return fmt.Errorf("Fail 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 { | ||||
| return err | return err | ||||
| } | } | ||||
| @@ -392,7 +392,10 @@ func (u *User) UploadAvatar(data []byte) error { | |||||
| return fmt.Errorf("updateUser: %v", err) | return fmt.Errorf("updateUser: %v", err) | ||||
| } | } | ||||
| os.MkdirAll(setting.AvatarUploadPath, os.ModePerm) | |||||
| if err := os.MkdirAll(setting.AvatarUploadPath, os.ModePerm); err != nil { | |||||
| return fmt.Errorf("Fail to create dir %s: %v", setting.AvatarUploadPath, err) | |||||
| } | |||||
| fw, err := os.Create(u.CustomAvatarPath()) | fw, err := os.Create(u.CustomAvatarPath()) | ||||
| if err != nil { | if err != nil { | ||||
| return fmt.Errorf("Create: %v", err) | return fmt.Errorf("Create: %v", err) | ||||
| @@ -409,7 +412,10 @@ func (u *User) UploadAvatar(data []byte) error { | |||||
| // DeleteAvatar deletes the user's custom avatar. | // DeleteAvatar deletes the user's custom avatar. | ||||
| func (u *User) DeleteAvatar() error { | func (u *User) DeleteAvatar() error { | ||||
| log.Trace("DeleteAvatar[%d]: %s", u.ID, u.CustomAvatarPath()) | log.Trace("DeleteAvatar[%d]: %s", u.ID, u.CustomAvatarPath()) | ||||
| os.Remove(u.CustomAvatarPath()) | |||||
| if err := os.Remove(u.CustomAvatarPath()); err != nil { | |||||
| return fmt.Errorf("Fail to remove %s: %v", u.CustomAvatarPath(), err) | |||||
| } | |||||
| u.UseCustomAvatar = false | u.UseCustomAvatar = false | ||||
| if err := UpdateUser(u); err != nil { | if err := UpdateUser(u); err != nil { | ||||
| @@ -866,9 +872,16 @@ func deleteUser(e *xorm.Session, u *User) error { | |||||
| // FIXME: system notice | // FIXME: system notice | ||||
| // Note: There are something just cannot be roll back, | // Note: There are something just cannot be roll back, | ||||
| // so just keep error logs of those operations. | // so just keep error logs of those operations. | ||||
| path := UserPath(u.Name) | |||||
| os.RemoveAll(UserPath(u.Name)) | |||||
| os.Remove(u.CustomAvatarPath()) | |||||
| if err := os.RemoveAll(path); err != nil { | |||||
| return fmt.Errorf("Fail to RemoveAll %s: %v", path, err) | |||||
| } | |||||
| avatarPath := u.CustomAvatarPath() | |||||
| if err := os.Remove(avatarPath); err != nil { | |||||
| return fmt.Errorf("Fail to remove %s: %v", avatarPath, err) | |||||
| } | |||||
| return nil | return nil | ||||
| } | } | ||||
| @@ -112,7 +112,11 @@ func (repo *Repository) updateWikiPage(doer *User, oldTitle, title, content, mes | |||||
| return ErrWikiAlreadyExist{filename} | return ErrWikiAlreadyExist{filename} | ||||
| } | } | ||||
| } else { | } else { | ||||
| os.Remove(path.Join(localPath, oldTitle+".md")) | |||||
| file := path.Join(localPath, oldTitle+".md") | |||||
| if err := os.Remove(file); err != nil { | |||||
| return fmt.Errorf("Fail to remove %s: %v", file, err) | |||||
| } | |||||
| } | } | ||||
| // SECURITY: if new file is a symlink to non-exist critical file, | // SECURITY: if new file is a symlink to non-exist critical file, | ||||
| @@ -120,7 +124,10 @@ func (repo *Repository) updateWikiPage(doer *User, oldTitle, title, content, mes | |||||
| // as a new page operation. | // as a new page operation. | ||||
| // So we want to make sure the symlink is removed before write anything. | // So we want to make sure the symlink is removed before write anything. | ||||
| // The new file we created will be in normal text format. | // The new file we created will be in normal text format. | ||||
| os.Remove(filename) | |||||
| if err := os.Remove(filename); err != nil { | |||||
| return fmt.Errorf("Fail to remove %s: %v", filename, err) | |||||
| } | |||||
| if err = ioutil.WriteFile(filename, []byte(content), 0666); err != nil { | if err = ioutil.WriteFile(filename, []byte(content), 0666); err != nil { | ||||
| return fmt.Errorf("WriteFile: %v", err) | return fmt.Errorf("WriteFile: %v", err) | ||||
| @@ -168,7 +175,10 @@ func (repo *Repository) DeleteWikiPage(doer *User, title string) (err error) { | |||||
| title = ToWikiPageName(title) | title = ToWikiPageName(title) | ||||
| filename := path.Join(localPath, title+".md") | filename := path.Join(localPath, title+".md") | ||||
| os.Remove(filename) | |||||
| if err := os.Remove(filename); err != nil { | |||||
| return fmt.Errorf("Fail to remove %s: %v", filename, err) | |||||
| } | |||||
| message := "Delete page '" + title + "'" | message := "Delete page '" + title + "'" | ||||
| @@ -219,7 +219,10 @@ func (w *FileLogWriter) deleteOldLog() { | |||||
| if !info.IsDir() && info.ModTime().Unix() < (time.Now().Unix()-60*60*24*w.Maxdays) { | if !info.IsDir() && info.ModTime().Unix() < (time.Now().Unix()-60*60*24*w.Maxdays) { | ||||
| if strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) { | if strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) { | ||||
| os.Remove(path) | |||||
| if err := os.Remove(path); err != nil { | |||||
| returnErr = fmt.Errorf("Fail to remove %s: %v", path, err) | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| return returnErr | return returnErr | ||||
| @@ -42,7 +42,12 @@ func NewLogger(bufLen int64, mode, config string) { | |||||
| // NewGitLogger create a logger for git | // NewGitLogger create a logger for git | ||||
| // FIXME: use same log level as other loggers. | // FIXME: use same log level as other loggers. | ||||
| func NewGitLogger(logPath string) { | func NewGitLogger(logPath string) { | ||||
| os.MkdirAll(path.Dir(logPath), os.ModePerm) | |||||
| path := path.Dir(logPath) | |||||
| if err := os.MkdirAll(path, os.ModePerm); err != nil { | |||||
| Fatal(4, "Fail to create dir %s: %v", path, err) | |||||
| } | |||||
| GitLogger = newLogger(0) | GitLogger = newLogger(0) | ||||
| GitLogger.SetLogger("file", fmt.Sprintf(`{"level":0,"filename":"%s","rotate":false}`, logPath)) | GitLogger.SetLogger("file", fmt.Sprintf(`{"level":0,"filename":"%s","rotate":false}`, logPath)) | ||||
| } | } | ||||
| @@ -162,7 +162,12 @@ func Listen(port int) { | |||||
| keyPath := filepath.Join(setting.AppDataPath, "ssh/gogs.rsa") | keyPath := filepath.Join(setting.AppDataPath, "ssh/gogs.rsa") | ||||
| if !com.IsExist(keyPath) { | if !com.IsExist(keyPath) { | ||||
| os.MkdirAll(filepath.Dir(keyPath), os.ModePerm) | |||||
| filePath := filepath.Dir(keyPath) | |||||
| if err := os.MkdirAll(filePath, os.ModePerm); err != nil { | |||||
| log.Error(4, "Fail 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)) | panic(fmt.Sprintf("Fail to generate private key: %v - %s", err, stderr)) | ||||