Browse Source

#2558 delete local wiki copy when rename repo and user

tags/v0.9.99
Unknwon 8 years ago
parent
commit
f8182ac521
6 changed files with 40 additions and 25 deletions
  1. 1
    1
      README.md
  2. 1
    1
      gogs.go
  3. 15
    0
      models/admin.go
  4. 12
    20
      models/repo.go
  5. 10
    2
      models/user.go
  6. 1
    1
      templates/.VERSION

+ 1
- 1
README.md View File



![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true) ![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true)


##### Current version: 0.8.30
##### Current version: 0.8.31


| Web | UI | Preview | | Web | UI | Preview |
|:-------------:|:-------:|:-------:| |:-------------:|:-------:|:-------:|

+ 1
- 1
gogs.go View File

"github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/setting"
) )


const APP_VER = "0.8.30.0204"
const APP_VER = "0.8.31.0205"


func init() { func init() {
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())

+ 15
- 0
models/admin.go View File

package models package models


import ( import (
"fmt"
"os"
"strings" "strings"
"time" "time"


"github.com/Unknwon/com" "github.com/Unknwon/com"


"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
) )


type NoticeType int type NoticeType int
return CreateNotice(NOTICE_REPOSITORY, desc) return CreateNotice(NOTICE_REPOSITORY, desc)
} }


// RemoveAllWithNotice removes all directories in given path and
// creates a system notice when error occurs.
func RemoveAllWithNotice(title, path string) {
if err := os.RemoveAll(path); err != nil {
desc := fmt.Sprintf("%s [%s]: %v", title, path, err)
log.Warn(desc)
if err = CreateRepositoryNotice(desc); err != nil {
log.Error(4, "CreateRepositoryNotice: %v", err)
}
}
}

// CountNotices returns number of notices. // CountNotices returns number of notices.
func CountNotices() int64 { func CountNotices() int64 {
count, _ := x.Count(new(Notice)) count, _ := x.Count(new(Notice))

+ 12
- 20
models/repo.go View File

return ErrRepoAlreadyExist{u.Name, newRepoName} return ErrRepoAlreadyExist{u.Name, newRepoName}
} }


repo, err := GetRepositoryByName(u.Id, oldRepoName)
if err != nil {
return fmt.Errorf("GetRepositoryByName: %v", err)
}

// Change repository directory name. // Change repository directory name.
if err = os.Rename(RepoPath(u.Name, oldRepoName), RepoPath(u.Name, newRepoName)); err != nil {
if err = os.Rename(repo.RepoPath(), RepoPath(u.Name, newRepoName)); err != nil {
return fmt.Errorf("rename repository directory: %v", err) return fmt.Errorf("rename repository directory: %v", err)
} }


wikiPath := WikiPath(u.Name, oldRepoName)
wikiPath := repo.WikiPath()
if com.IsExist(wikiPath) { if com.IsExist(wikiPath) {
if err = os.Rename(wikiPath, WikiPath(u.Name, newRepoName)); err != nil { if err = os.Rename(wikiPath, WikiPath(u.Name, newRepoName)); err != nil {
return fmt.Errorf("rename repository wiki: %v", err) return fmt.Errorf("rename repository wiki: %v", err)
} }
RemoveAllWithNotice("Delete repository wiki local copy", repo.LocalWikiPath())
} }


return nil return nil


// Remove repository files. // Remove repository files.
repoPath := repo.repoPath(sess) repoPath := repo.repoPath(sess)
if err = os.RemoveAll(repoPath); err != nil {
desc := fmt.Sprintf("delete repository files [%s]: %v", repoPath, err)
log.Warn(desc)
if err = CreateRepositoryNotice(desc); err != nil {
log.Error(4, "CreateRepositoryNotice: %v", err)
}
}
RemoveAllWithNotice("Delete repository files", repoPath)


wikiPaths := []string{repo.WikiPath(), repo.LocalWikiPath()} wikiPaths := []string{repo.WikiPath(), repo.LocalWikiPath()}
for _, wikiPath := range wikiPaths { for _, wikiPath := range wikiPaths {
if err = os.RemoveAll(wikiPath); err != nil {
desc := fmt.Sprintf("delete repository wiki [%s]: %v", wikiPath, err)
log.Warn(desc)
if err = CreateRepositoryNotice(desc); err != nil {
log.Error(4, "CreateRepositoryNotice: %v", err)
}
}
RemoveAllWithNotice("Delete repository wiki", wikiPath)
} }


// Remove attachment files. // Remove attachment files.
for i := range attachmentPaths { for i := range attachmentPaths {
if err = os.Remove(attachmentPaths[i]); err != nil {
log.Warn("delete attachment: %v", err)
}
RemoveAllWithNotice("Delete attachment", attachmentPaths[i])
} }


if err = sess.Commit(); err != nil { if err = sess.Commit(); err != nil {
} }
for i := range forkRepos { for i := range forkRepos {
if err = DeleteRepository(forkRepos[i].OwnerID, forkRepos[i].ID); err != nil { if err = DeleteRepository(forkRepos[i].OwnerID, forkRepos[i].ID); err != nil {
log.Error(4, "updateRepository[%d]: %v", forkRepos[i].ID, err)
log.Error(4, "DeleteRepository [%d]: %v", forkRepos[i].ID, err)
} }
} }
} else { } else {

+ 10
- 2
models/user.go View File

return ErrUserAlreadyExist{newUserName} return ErrUserAlreadyExist{newUserName}
} }


err = ChangeUsernameInPullRequests(u.Name, newUserName)
if err != nil {
if err = ChangeUsernameInPullRequests(u.Name, newUserName); err != nil {
return fmt.Errorf("ChangeUsernameInPullRequests: %v", err) return fmt.Errorf("ChangeUsernameInPullRequests: %v", err)
} }


// Delete all local copies of repository wiki that user owns.
if err = x.Where("owner_id=?", u.Id).Iterate(new(Repository), func(idx int, bean interface{}) error {
repo := bean.(*Repository)
RemoveAllWithNotice("Delete repository wiki local copy", repo.LocalWikiPath())
return nil
}); err != nil {
return fmt.Errorf("Delete repository wiki local copy: %v", err)
}

return os.Rename(UserPath(u.Name), UserPath(newUserName)) return os.Rename(UserPath(u.Name), UserPath(newUserName))
} }



+ 1
- 1
templates/.VERSION View File

0.8.30.0204
0.8.31.0205

Loading…
Cancel
Save