mirror of
https://codeberg.org/git-pages/git-pages.git
synced 2026-08-17 09:26:04 +00:00
Remove code for migrating from v1 data layout.
This commit is contained in:
@@ -122,7 +122,7 @@ The S3 backend, intended for (relatively) high latency connections, caches both
|
||||
Architecture (v1)
|
||||
-----------------
|
||||
|
||||
*This was the original architecture and it is no longer used.*
|
||||
*This was the original architecture and it is no longer used. Migration to v2 was last available in commit [7e9cd17b](https://codeberg.org/whitequark/git-pages/commit/7e9cd17b70717bea2fe240eb6a784cb206243690).*
|
||||
|
||||
Filesystem is used as the sole mechanism for state storage.
|
||||
|
||||
|
||||
+1
-17
@@ -7,7 +7,6 @@ import (
|
||||
"log/slog"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
|
||||
@@ -62,7 +61,6 @@ func main() {
|
||||
InitObservability()
|
||||
|
||||
configPath := flag.String("config", "config.toml", "path to configuration file")
|
||||
migrateV1Path := flag.String("migrate-v1", "", "migrate v1 data directory to storage backend")
|
||||
getManifest := flag.String("get-manifest", "", "retrieve manifest for web root as ProtoJSON")
|
||||
flag.Parse()
|
||||
|
||||
@@ -70,7 +68,6 @@ func main() {
|
||||
log.Fatalln("config:", err)
|
||||
}
|
||||
UpdateConfigEnv() // environment takes priority
|
||||
CompileWildcardPattern()
|
||||
|
||||
switch config.LogFormat {
|
||||
case "short":
|
||||
@@ -114,20 +111,7 @@ func main() {
|
||||
healthListener := listen("health", config.Listen.Health)
|
||||
|
||||
ConfigureBackend()
|
||||
|
||||
if *migrateV1Path != "" {
|
||||
root, err := os.OpenRoot(*migrateV1Path)
|
||||
if err != nil {
|
||||
log.Fatalln("migrate v1:", err)
|
||||
}
|
||||
|
||||
err = MigrateFromV1(root)
|
||||
if err != nil {
|
||||
log.Fatalln("migrate v1:", err)
|
||||
}
|
||||
|
||||
log.Println("migrate v1 ok")
|
||||
}
|
||||
CompileWildcardPattern()
|
||||
|
||||
go serve(pagesListener, ServePages)
|
||||
go serve(caddyListener, ServeCaddy)
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
func readToManifest(root *os.Root) (*Manifest, error) {
|
||||
manifest := Manifest{}
|
||||
manifest.Contents = make(map[string]*Entry)
|
||||
err := fs.WalkDir(root.FS(), ".", func(path string, dirEntry fs.DirEntry, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
manifestEntry := Entry{}
|
||||
if dirEntry.IsDir() {
|
||||
manifestEntry.Type = Type_Directory.Enum()
|
||||
} else if dirEntry.Type().IsRegular() {
|
||||
data, err := root.ReadFile(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
manifestEntry.Type = Type_InlineFile.Enum()
|
||||
manifestEntry.Size = proto.Uint32(uint32(len(data)))
|
||||
manifestEntry.Data = data
|
||||
} else if dirEntry.Type().Type() == fs.ModeSymlink {
|
||||
target, err := root.Readlink(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
manifestEntry.Type = Type_Symlink.Enum()
|
||||
manifestEntry.Size = proto.Uint32(uint32(len(target)))
|
||||
manifestEntry.Data = []byte(target)
|
||||
} else {
|
||||
log.Printf("migrate v1: illegal %s/%s\n", root.Name(), path)
|
||||
}
|
||||
if path == "." {
|
||||
path = ""
|
||||
}
|
||||
manifest.Contents[path] = &manifestEntry
|
||||
return nil
|
||||
})
|
||||
return &manifest, err
|
||||
}
|
||||
|
||||
type ReadDirLinkFS interface { // aaaaahh!!! Why is Go like this!!
|
||||
fs.ReadDirFS
|
||||
fs.ReadLinkFS
|
||||
}
|
||||
|
||||
func MigrateFromV1(root *os.Root) error {
|
||||
data := root.FS().(ReadDirLinkFS)
|
||||
|
||||
domainDirEntries, err := data.ReadDir("www")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, domainDirEntry := range domainDirEntries {
|
||||
domain := domainDirEntry.Name()
|
||||
if !domainDirEntry.IsDir() {
|
||||
return fmt.Errorf("migrate v1: www/%s: not a directory", domain)
|
||||
}
|
||||
|
||||
projectDirEntries, err := data.ReadDir(filepath.Join("www", domain))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, projectDirEntry := range projectDirEntries {
|
||||
projectName := projectDirEntry.Name()
|
||||
if projectDirEntry.Type().Type() != fs.ModeSymlink {
|
||||
return fmt.Errorf("migrate v1: www/%s/%s: not a symlink", domain, projectName)
|
||||
}
|
||||
|
||||
treeRoot, err := root.OpenRoot(filepath.Join("www", domain, projectName))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
manifest, err := readToManifest(treeRoot)
|
||||
if err != nil {
|
||||
return fmt.Errorf("migrate v1: read %s/%s: %w", domain, projectName, err)
|
||||
}
|
||||
|
||||
_, err = StoreManifest(fmt.Sprintf("%s/%s", domain, projectName), manifest)
|
||||
if err != nil {
|
||||
return fmt.Errorf("migrate v1: store %s/%s: %w", domain, projectName, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user