Jelajahi Sumber

Merge pull request #86 from achilleas-k/fix/commit-timeout

Fix/commit timeout
Michael Sonntag 5 tahun lalu
induk
melakukan
4cbb0d481e
2 mengubah file dengan 32 tambahan dan 8 penghapusan
  1. 28 4
      internal/db/models_gin.go
  2. 4 4
      internal/db/repo_editor.go

+ 28 - 4
internal/db/models_gin.go

@@ -8,6 +8,7 @@ import (
 	"path/filepath"
 	"strings"
 
+	"github.com/G-Node/git-module"
 	"github.com/G-Node/gogs/internal/setting"
 	"github.com/G-Node/libgin/libgin"
 	"github.com/G-Node/libgin/libgin/annex"
@@ -71,7 +72,7 @@ func RebuildIndex() error {
 }
 
 func annexUninit(path string) {
-	// walker sets the permission for any file found to 0600, to allow deletion
+	// walker sets the permission for any file found to 0660, to allow deletion
 	var mode os.FileMode
 	walker := func(path string, info os.FileInfo, err error) error {
 		if info == nil {
@@ -102,18 +103,18 @@ func annexSetup(path string) {
 	log.Trace("Running annex add (with filesize filter) in '%s'", path)
 
 	// Initialise annex in case it's a new repository
-	if msg, err := annex.Init(path, "--version=7"); err != nil {
+	if msg, err := annex.Init(path); err != nil {
 		log.Error(2, "Annex init failed: %v (%s)", err, msg)
 		return
 	}
 
-	// Upgrade to v7 in case the directory was here before and wasn't cleaned up properly
+	// Upgrade to v8 in case the directory was here before and wasn't cleaned up properly
 	if msg, err := annex.Upgrade(path); err != nil {
 		log.Error(2, "Annex upgrade failed: %v (%s)", err, msg)
 		return
 	}
 
-	// Enable addunlocked for annex v7
+	// Enable addunlocked for annex v8
 	if msg, err := annex.SetAddUnlocked(path); err != nil {
 		log.Error(2, "Failed to set 'addunlocked' annex option: %v (%s)", err, msg)
 	}
@@ -145,3 +146,26 @@ func annexSync(path string) error {
 	}
 	return nil
 }
+
+func annexAdd(repoPath string, all bool, files ...string) error {
+	cmd := git.NewCommand("annex", "add")
+	if all {
+		cmd.AddArguments(".")
+	}
+	_, err := cmd.AddArguments(files...).RunInDir(repoPath)
+	return err
+}
+
+func annexUpload(repoPath, remote string) error {
+	log.Trace("Synchronising annex info")
+	if msg, err := git.NewCommand("annex", "sync").RunInDir(repoPath); err != nil {
+		log.Error(2, "git-annex sync failed: %v (%s)", err, msg)
+	}
+	log.Trace("Uploading annexed data")
+	cmd := git.NewCommand("annex", "copy", fmt.Sprintf("--to=%s", remote), "--all")
+	if msg, err := cmd.RunInDir(repoPath); err != nil {
+		log.Error(2, "git-annex copy failed: %v (%s)", err, msg)
+		return fmt.Errorf("git annex copy [%s]", repoPath)
+	}
+	return nil
+}

+ 4 - 4
internal/db/repo_editor.go

@@ -502,8 +502,8 @@ func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions)
 	}
 
 	annexSetup(localPath) // Initialise annex and set configuration (with add filter for filesizes)
-	if err = git.AddChanges(localPath, true); err != nil {
-		return fmt.Errorf("git add --all: %v", err)
+	if err = annexAdd(localPath, true); err != nil {
+		return fmt.Errorf("git annex add: %v", err)
 	} else if err = git.CommitChanges(localPath, git.CommitChangesOptions{
 		Committer: doer.NewGitSig(),
 		Message:   opts.Message,
@@ -521,8 +521,8 @@ func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions)
 		return fmt.Errorf("git push origin %s: %v", opts.NewBranch, err)
 	}
 
-	if err := annexSync(localPath); err != nil { // Run full annex sync
-		return fmt.Errorf("annex sync %s: %v", localPath, err)
+	if err := annexUpload(localPath, "origin"); err != nil { // Copy new files
+		return fmt.Errorf("annex copy %s: %v", localPath, err)
 	}
 	annexUninit(localPath) // Uninitialise annex to prepare for deletion
 	StartIndexing(*repo)   // Index the new data