Create named subdirectories for new repositories

This commit is contained in:
Mikei386
2026-06-14 23:52:37 +02:00
parent 854d9c9e3e
commit 7542133692
12 changed files with 117 additions and 17 deletions
+14 -3
View File
@@ -22,6 +22,7 @@ type MountManager struct {
type MountedRepository struct {
Repository model.Repository
Mounted bool
MountPoint string
CredentialFile string
}
@@ -32,7 +33,12 @@ func (m *MountManager) Prepare(ctx context.Context, repo model.Repository) (Moun
}
if repo.Mount == nil || !repo.Mount.Managed {
if _, err := os.Stat(repo.Location); err != nil {
return result, fmt.Errorf("connectivity: external mount unavailable: %w", err)
if !os.IsNotExist(err) {
return result, fmt.Errorf("connectivity: external mount unavailable: %w", err)
}
if _, parentErr := os.Stat(filepath.Dir(repo.Location)); parentErr != nil {
return result, fmt.Errorf("connectivity: external mount unavailable: %w", parentErr)
}
}
return result, nil
}
@@ -40,6 +46,11 @@ func (m *MountManager) Prepare(ctx context.Context, repo model.Repository) (Moun
if !strings.HasPrefix(point, "/mnt/remotes/") && !strings.HasPrefix(point, "/mnt/disks/") {
return result, errors.New("validation: managed mountPoint must be below /mnt/remotes or /mnt/disks")
}
repositoryPath := filepath.Clean(repo.Location)
relative, err := filepath.Rel(point, repositoryPath)
if err != nil || relative == ".." || strings.HasPrefix(relative, ".."+string(filepath.Separator)) {
return result, errors.New("validation: managed repository location must be inside its mountPoint")
}
if err := os.MkdirAll(point, 0700); err != nil {
return result, err
}
@@ -86,7 +97,7 @@ func (m *MountManager) Prepare(ctx context.Context, repo model.Repository) (Moun
return result, fmt.Errorf("connectivity: mount repository: %w", err)
}
result.Mounted = true
result.Repository.Location = point
result.MountPoint = point
return result, nil
}
@@ -97,5 +108,5 @@ func (m *MountManager) Cleanup(ctx context.Context, mounted MountedRepository) e
if !mounted.Mounted {
return nil
}
return exec.CommandContext(ctx, "umount", mounted.Repository.Location).Run()
return exec.CommandContext(ctx, "umount", mounted.MountPoint).Run()
}