set_anal.go 689 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. //+build anal
  2. package files
  3. import (
  4. "crypto/md5"
  5. "github.com/calmh/syncthing/scanner"
  6. )
  7. type key struct {
  8. Name string
  9. Version uint64
  10. Modified int64
  11. Hash [md5.Size]byte
  12. }
  13. func keyFor(f scanner.File) key {
  14. h := md5.New()
  15. for _, b := range f.Blocks {
  16. h.Write(b.Hash)
  17. }
  18. return key{
  19. Name: f.Name,
  20. Version: f.Version,
  21. Modified: f.Modified,
  22. Hash: md5.Sum(nil),
  23. }
  24. }
  25. func (a key) newerThan(b key) bool {
  26. if a.Version != b.Version {
  27. return a.Version > b.Version
  28. }
  29. if a.Modified != b.Modified {
  30. return a.Modified > b.Modified
  31. }
  32. for i := 0; i < md5.Size; i++ {
  33. if a.Hash[i] != b.Hash[i] {
  34. return a.Hash[i] > b.Hash[i]
  35. }
  36. }
  37. return false
  38. }