Просмотр исходного кода

[repo_editor] Upgrade annex to v7 on upload

When uploading files through the web, if an old tmp staging directory is
already present, the 'git annex init --version=7' will have no effect
and it might remain in v5.
Achilleas Koutsou 6 лет назад
Родитель
Сommit
58590a78e6
3 измененных файлов с 16 добавлено и 5 удалено
  1. 10 4
      models/models_gin.go
  2. 1 1
      models/repo_editor.go
  3. 5 0
      vendor/github.com/G-Node/go-annex/add.go

+ 10 - 4
models/models_gin.go

@@ -103,18 +103,24 @@ func annexSetup(path string) {
 
 
 	// Initialise annex in case it's a new repository
 	// Initialise annex in case it's a new repository
 	if msg, err := gannex.Init(path, "--version=7"); err != nil {
 	if msg, err := gannex.Init(path, "--version=7"); err != nil {
-		log.Error(1, "Annex init failed: %v (%s)", err, msg)
+		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
+	if msg, err := gannex.Upgrade(path); err != nil {
+		log.Error(2, "Annex upgrade failed: %v (%s)", err, msg)
 		return
 		return
 	}
 	}
 
 
 	// Enable addunlocked for annex v7
 	// Enable addunlocked for annex v7
 	if msg, err := gannex.SetAddUnlocked(path); err != nil {
 	if msg, err := gannex.SetAddUnlocked(path); err != nil {
-		log.Error(1, "Failed to set 'addunlocked' annex option: %v (%s)", err, msg)
+		log.Error(2, "Failed to set 'addunlocked' annex option: %v (%s)", err, msg)
 	}
 	}
 
 
 	// Set MD5 as default backend
 	// Set MD5 as default backend
 	if msg, err := gannex.MD5(path); err != nil {
 	if msg, err := gannex.MD5(path); err != nil {
-		log.Error(1, "Failed to set default backend to 'MD5': %v (%s)", err, msg)
+		log.Error(2, "Failed to set default backend to 'MD5': %v (%s)", err, msg)
 	}
 	}
 
 
 	// Set size filter in config
 	// Set size filter in config
@@ -128,7 +134,7 @@ func annexSync(path string) error {
 	if msg, err := gannex.ASync(path, "--content"); err != nil {
 	if msg, err := gannex.ASync(path, "--content"); err != nil {
 		// TODO: This will also DOWNLOAD content, which is unnecessary for a simple upload
 		// TODO: This will also DOWNLOAD content, which is unnecessary for a simple upload
 		// TODO: Use gin-cli upload function instead
 		// TODO: Use gin-cli upload function instead
-		log.Error(1, "Annex sync failed: %v (%s)", err, msg)
+		log.Error(2, "Annex sync failed: %v (%s)", err, msg)
 		return fmt.Errorf("git annex sync --content [%s]", path)
 		return fmt.Errorf("git annex sync --content [%s]", path)
 	}
 	}
 	return nil
 	return nil

+ 1 - 1
models/repo_editor.go

@@ -518,7 +518,7 @@ func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions)
 	}
 	}
 
 
 	if err := annexSync(localPath); err != nil { // Run full annex sync
 	if err := annexSync(localPath); err != nil { // Run full annex sync
-		return err
+		return fmt.Errorf("annex sync %s: %v", localPath, err)
 	}
 	}
 	annexUninit(localPath) // Uninitialise annex to prepare for deletion
 	annexUninit(localPath) // Uninitialise annex to prepare for deletion
 	StartIndexing(*repo)   // Index the new data
 	StartIndexing(*repo)   // Index the new data

+ 5 - 0
vendor/github.com/G-Node/go-annex/add.go

@@ -19,6 +19,11 @@ func Init(dir string, args ...string) (string, error) {
 	return cmd.AddArguments(args...).RunInDir(dir)
 	return cmd.AddArguments(args...).RunInDir(dir)
 }
 }
 
 
+func Upgrade(dir string) (string, error) {
+	cmd := git.NewACommand("upgrade")
+	return cmd.RunInDir(dir)
+}
+
 func Uninit(dir string, args ...string) (string, error) {
 func Uninit(dir string, args ...string) (string, error) {
 	cmd := git.NewACommand("uninit")
 	cmd := git.NewACommand("uninit")
 	return cmd.AddArguments(args...).RunInDir(dir)
 	return cmd.AddArguments(args...).RunInDir(dir)