main.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package main
  2. import (
  3. "compress/gzip"
  4. "flag"
  5. "log"
  6. "os"
  7. "github.com/calmh/syncthing/protocol"
  8. )
  9. func main() {
  10. log.SetFlags(0)
  11. log.SetOutput(os.Stdout)
  12. showBlocks := flag.Bool("b", false, "Show blocks")
  13. flag.Parse()
  14. name := flag.Arg(0)
  15. idxf, err := os.Open(name)
  16. if err != nil {
  17. log.Fatal(err)
  18. }
  19. defer idxf.Close()
  20. gzr, err := gzip.NewReader(idxf)
  21. if err != nil {
  22. log.Fatal(err)
  23. }
  24. defer gzr.Close()
  25. var im protocol.IndexMessage
  26. err = im.DecodeXDR(gzr)
  27. if err != nil {
  28. log.Fatal(err)
  29. }
  30. log.Printf("Repo: %q, Files: %d", im.Repository, len(im.Files))
  31. for _, file := range im.Files {
  32. del := file.Flags&protocol.FlagDeleted != 0
  33. inv := file.Flags&protocol.FlagInvalid != 0
  34. dir := file.Flags&protocol.FlagDirectory != 0
  35. prm := file.Flags & 0777
  36. log.Printf("File: %q, Ver:%d, Del: %v, Inv: %v, Dir: %v, Perm: 0%03o, Modified: %d, Blocks: %d",
  37. file.Name, file.Version, del, inv, dir, prm, file.Modified, len(file.Blocks))
  38. if *showBlocks {
  39. for _, block := range file.Blocks {
  40. log.Printf(" Size: %6d, Hash: %x", block.Size, block.Hash)
  41. }
  42. }
  43. }
  44. }