예제 #1
0
파일: model.go 프로젝트: nbrownus/syncthing
func (m *Model) loadIndex(repo string, dir string) []protocol.FileInfo {
	id := fmt.Sprintf("%x", sha1.Sum([]byte(m.repoDirs[repo])))
	name := id + ".idx.gz"
	name = filepath.Join(dir, name)

	idxf, err := os.Open(name)
	if err != nil {
		return nil
	}
	defer idxf.Close()

	gzr, err := gzip.NewReader(idxf)
	if err != nil {
		return nil
	}
	defer gzr.Close()

	var im protocol.IndexMessage
	err = im.DecodeXDR(gzr)
	if err != nil || im.Repository != repo {
		return nil
	}

	return im.Files
}
예제 #2
0
func main() {
	log.SetFlags(0)
	log.SetOutput(os.Stdout)

	showBlocks := flag.Bool("b", false, "Show blocks")
	flag.Parse()
	name := flag.Arg(0)

	idxf, err := os.Open(name)
	if err != nil {
		log.Fatal(err)
	}
	defer idxf.Close()

	gzr, err := gzip.NewReader(idxf)
	if err != nil {
		log.Fatal(err)
	}
	defer gzr.Close()

	var im protocol.IndexMessage
	err = im.DecodeXDR(gzr)
	if err != nil {
		log.Fatal(err)
	}

	log.Printf("Repo: %q, Files: %d", im.Repository, len(im.Files))
	for _, file := range im.Files {
		del := file.Flags&protocol.FlagDeleted != 0
		inv := file.Flags&protocol.FlagInvalid != 0
		dir := file.Flags&protocol.FlagDirectory != 0
		prm := file.Flags & 0777
		log.Printf("File: %q, Ver:%d, Del: %v, Inv: %v, Dir: %v, Perm: 0%03o, Modified: %d, Blocks: %d",
			file.Name, file.Version, del, inv, dir, prm, file.Modified, len(file.Blocks))
		if *showBlocks {
			for _, block := range file.Blocks {
				log.Printf("   Size: %6d, Hash: %x", block.Size, block.Hash)
			}
		}
	}
}
예제 #3
0
func loadIndex(m *Model) {
	name := m.RepoID() + ".idx.gz"
	idxf, err := os.Open(path.Join(confDir, name))
	if err != nil {
		return
	}
	defer idxf.Close()

	gzr, err := gzip.NewReader(idxf)
	if err != nil {
		return
	}
	defer gzr.Close()

	var im protocol.IndexMessage
	err = im.DecodeXDR(gzr)
	if err != nil || im.Repository != "local" {
		return
	}
	m.SeedLocal(im.Files)
}