main.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright (C) 2014 Jakob Borg and other contributors. All rights reserved.
  2. // Use of this source code is governed by an MIT-style license that can be
  3. // found in the LICENSE file.
  4. package main
  5. import (
  6. "compress/gzip"
  7. "flag"
  8. "log"
  9. "os"
  10. "github.com/calmh/syncthing/protocol"
  11. )
  12. func main() {
  13. log.SetFlags(0)
  14. log.SetOutput(os.Stdout)
  15. showBlocks := flag.Bool("b", false, "Show blocks")
  16. flag.Parse()
  17. name := flag.Arg(0)
  18. idxf, err := os.Open(name)
  19. if err != nil {
  20. log.Fatal(err)
  21. }
  22. defer idxf.Close()
  23. gzr, err := gzip.NewReader(idxf)
  24. if err != nil {
  25. log.Fatal(err)
  26. }
  27. defer gzr.Close()
  28. var im protocol.IndexMessage
  29. err = im.DecodeXDR(gzr)
  30. if err != nil {
  31. log.Fatal(err)
  32. }
  33. log.Printf("Repo: %q, Files: %d", im.Repository, len(im.Files))
  34. for _, file := range im.Files {
  35. del := file.Flags&protocol.FlagDeleted != 0
  36. inv := file.Flags&protocol.FlagInvalid != 0
  37. dir := file.Flags&protocol.FlagDirectory != 0
  38. prm := file.Flags & 0777
  39. log.Printf("File: %q, Ver:%d, Del: %v, Inv: %v, Dir: %v, Perm: 0%03o, Modified: %d, Blocks: %d",
  40. file.Name, file.Version, del, inv, dir, prm, file.Modified, len(file.Blocks))
  41. if *showBlocks {
  42. for _, block := range file.Blocks {
  43. log.Printf(" Size: %6d, Hash: %x", block.Size, block.Hash)
  44. }
  45. }
  46. }
  47. }