mirror of
https://github.com/haiwen/seafile-server.git
synced 2025-09-01 23:46:53 +00:00
@@ -299,6 +299,14 @@ func doFile(rsp http.ResponseWriter, r *http.Request, repo *repomgr.Repo, fileID
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if operation != "view" {
|
||||||
|
oper := "web-file-download"
|
||||||
|
if operation == "download-link" {
|
||||||
|
oper = "link-file-download"
|
||||||
|
}
|
||||||
|
sendStatisticMsg(repo.StoreID, user, oper, file.FileSize)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,6 +454,12 @@ func doFileRange(rsp http.ResponseWriter, r *http.Request, repo *repomgr.Repo, f
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
oper := "web-file-download"
|
||||||
|
if operation == "download-link" {
|
||||||
|
oper = "link-file-download"
|
||||||
|
}
|
||||||
|
sendStatisticMsg(repo.StoreID, user, oper, file.FileSize)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -632,6 +646,8 @@ func doBlock(rsp http.ResponseWriter, r *http.Request, repo *repomgr.Repo, fileI
|
|||||||
log.Printf("fatild to write block %s to response: %v", blkID, err)
|
log.Printf("fatild to write block %s to response: %v", blkID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sendStatisticMsg(repo.StoreID, user, "web-file-download", uint64(size))
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1670,7 +1686,7 @@ func genCommitNeedRetry(repo *repomgr.Repo, base *commitmgr.Commit, commit *comm
|
|||||||
mergedCommit = commit
|
mergedCommit = commit
|
||||||
}
|
}
|
||||||
|
|
||||||
err = updateBranch(repoID, mergedCommit.CommitID, currentHead.CommitID)
|
err = updateBranch(repoID, mergedCommit.CommitID, currentHead.CommitID, commit.CommitID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
@@ -1693,7 +1709,7 @@ func genMergeDesc(repo *repomgr.Repo, mergedRoot, p1Root, p2Root string) string
|
|||||||
return desc
|
return desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateBranch(repoID, newCommitID, oldCommitID string) error {
|
func updateBranch(repoID, newCommitID, oldCommitID, secondParentID string) error {
|
||||||
var commitID string
|
var commitID string
|
||||||
name := "master"
|
name := "master"
|
||||||
var sqlStr string
|
var sqlStr string
|
||||||
@@ -1730,6 +1746,34 @@ func updateBranch(repoID, newCommitID, oldCommitID string) error {
|
|||||||
|
|
||||||
trans.Commit()
|
trans.Commit()
|
||||||
|
|
||||||
|
if secondParentID != "" {
|
||||||
|
if err := onBranchUpdated(repoID, secondParentID, false); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := onBranchUpdated(repoID, newCommitID, true); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func onBranchUpdated(repoID string, commitID string, updateRepoInfo bool) error {
|
||||||
|
if updateRepoInfo {
|
||||||
|
if err := repomgr.UpdateRepoInfo(repoID, commitID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
isVirtual, err := repomgr.IsVirtualRepo(repoID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if isVirtual {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
publishUpdateEvent(repoID, commitID)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -427,8 +427,7 @@ func DelUploadTmpFile(repoID, filePath string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetRepoCommitToDb updates the table of RepoInfo.
|
func setRepoCommitToDb(repoID, repoName string, updateTime int64, version int, isEncrypted string, lastModifier string) error {
|
||||||
func SetRepoCommitToDb(repoID, repoName string, updateTime int64, version int, isEncrypted string, lastModifier string) error {
|
|
||||||
var exists int
|
var exists int
|
||||||
var encrypted int
|
var encrypted int
|
||||||
|
|
||||||
@@ -641,3 +640,15 @@ func GetRepoOwner(repoID string) (string, error) {
|
|||||||
|
|
||||||
return owner, nil
|
return owner, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UpdateRepoInfo(repoID, commitID string) error {
|
||||||
|
head, err := commitmgr.Load(repoID, commitID)
|
||||||
|
if err != nil {
|
||||||
|
err := fmt.Errorf("failed to get commit %s:%s", repoID, commitID)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
setRepoCommitToDb(repoID, head.RepoName, head.Ctime, head.Version, head.Encrypted, head.CreatorName)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@@ -42,6 +42,7 @@ const (
|
|||||||
permExpireTime = 7200
|
permExpireTime = 7200
|
||||||
virtualRepoExpireTime = 7200
|
virtualRepoExpireTime = 7200
|
||||||
syncAPICleaningIntervalSec = 300
|
syncAPICleaningIntervalSec = 300
|
||||||
|
maxObjectPackSize = 1 << 20 // 1MB
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -473,6 +474,7 @@ func packFSCB(rsp http.ResponseWriter, r *http.Request) *appError {
|
|||||||
return &appError{nil, err.Error(), http.StatusBadRequest}
|
return &appError{nil, err.Error(), http.StatusBadRequest}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var totalSize int
|
||||||
var data bytes.Buffer
|
var data bytes.Buffer
|
||||||
for i := 0; i < len(fsIDList); i++ {
|
for i := 0; i < len(fsIDList); i++ {
|
||||||
if !isObjectIDValid(fsIDList[i]) {
|
if !isObjectIDValid(fsIDList[i]) {
|
||||||
@@ -489,6 +491,11 @@ func packFSCB(rsp http.ResponseWriter, r *http.Request) *appError {
|
|||||||
binary.BigEndian.PutUint32(tmpLen, uint32(tmp.Len()))
|
binary.BigEndian.PutUint32(tmpLen, uint32(tmp.Len()))
|
||||||
data.Write(tmpLen)
|
data.Write(tmpLen)
|
||||||
data.Write(tmp.Bytes())
|
data.Write(tmp.Bytes())
|
||||||
|
|
||||||
|
totalSize += tmp.Len()
|
||||||
|
if totalSize >= maxObjectPackSize {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp.Header().Set("Content-Length", strconv.Itoa(data.Len()))
|
rsp.Header().Set("Content-Length", strconv.Itoa(data.Len()))
|
||||||
@@ -1128,6 +1135,13 @@ func publishRepoEvent(rData *repoEventData) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func publishUpdateEvent(repoID string, commitID string) {
|
||||||
|
buf := fmt.Sprintf("repo-update\t%s\t%s", repoID, commitID)
|
||||||
|
if _, err := rpcclient.Call("publish_event", seafileServerChannelEvent, buf); err != nil {
|
||||||
|
log.Printf("Failed to publish event: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func removeSyncAPIExpireCache() {
|
func removeSyncAPIExpireCache() {
|
||||||
deleteTokens := func(key interface{}, value interface{}) bool {
|
deleteTokens := func(key interface{}, value interface{}) bool {
|
||||||
if info, ok := value.(*tokenInfo); ok {
|
if info, ok := value.(*tokenInfo); ok {
|
||||||
|
@@ -321,24 +321,12 @@ func editRepoNeedRetry(repoID, name, desc, user string) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = updateBranch(repoID, commit.CommitID, parent.CommitID)
|
err = updateBranch(repoID, commit.CommitID, parent.CommitID, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
updateRepoInfo(repoID, commit.CommitID)
|
repomgr.UpdateRepoInfo(repoID, commit.CommitID)
|
||||||
|
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateRepoInfo(repoID, commitID string) error {
|
|
||||||
head, err := commitmgr.Load(repoID, commitID)
|
|
||||||
if err != nil {
|
|
||||||
err := fmt.Errorf("failed to get commit %s:%s", repoID, commitID)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
repomgr.SetRepoCommitToDb(repoID, head.RepoName, head.Ctime, head.Version, head.Encrypted, head.CreatorName)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user