// Command pvfcmpscene 逐字节比较两个 Script.pvf 里 storydigest / townmovielist // 这几个过场相关文件是否一致。 // // 用法: // // go run ./cmd/scratch/pvfcmpscene -a <旧.pvf> -b <新.pvf> package main import ( "crypto/sha256" "flag" "fmt" "os" platformpvf "longheng.io/server/internal/platform/pvf" ) func main() { aPath := flag.String("a", "", "对照 PVF") bPath := flag.String("b", "", "待检查 PVF") flag.Parse() if *aPath == "" || *bPath == "" { fmt.Fprintln(os.Stderr, "需要 -a 与 -b") os.Exit(2) } a, err := platformpvf.Open(*aPath) if err != nil { fmt.Fprintln(os.Stderr, "打开 A 失败:", err) os.Exit(1) } b, err := platformpvf.Open(*bPath) if err != nil { fmt.Fprintln(os.Stderr, "打开 B 失败:", err) os.Exit(1) } paths := []string{ "etc/storydigest/scene.etc", "etc/storydigest/digest.etc", "etc/townmovielist.etc", } for _, rel := range paths { rawA, errA := a.ReadRaw(rel) rawB, errB := b.ReadRaw(rel) if errA != nil || errB != nil { fmt.Printf("%-34s A=%v B=%v\n", rel, errA, errB) continue } same := len(rawA) == len(rawB) diffCount := 0 if same { for i := range rawA { if rawA[i] != rawB[i] { diffCount++ } } same = diffCount == 0 } fmt.Printf("%-34s A=%d B=%d 相同=%v", rel, len(rawA), len(rawB), same) if !same { fmt.Printf(" 不同字节=%d", diffCount) } sumA := sha256.Sum256(rawA) sumB := sha256.Sum256(rawB) fmt.Printf(" shaA=%x shaB=%x\n", sumA[:6], sumB[:6]) } }