Skip to content

minio/rsync-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rsync-go

MIT licensed GoDoc

This is a pure go implementation of the rsync algorithm.

This repo in particular is a fork of Amos Wenger implementation (see the section for details)

Usage

Here is a sample example (without error checking):

import (
	"os"
	"bytes"

	"github.com/minio/rsync-go"
)

func main() {
	srcReader, _ := os.Open("content-v2.bin")
	defer srcReader.Close()

	rs := &rsync.RSync{}

	// here we store the whole signature in a byte slice,
	// but it could just as well be sent over a network connection for example
	sig := make([]rsync.BlockHash, 0, 10)
	writeSignature := func(bl rsync.BlockHash) error {
		sig = append(sig, bl)
		return nil
	}

	rs.CreateSignature(srcReader, writeSignature)

	targetReader, _ := os.Open("content-v1.bin")

	opsOut := make(chan rsync.Operation)
	writeOperation := func(op rsync.Operation) error {
		opsOut <- op
		return nil
	}

	go func() {
		defer close(opsOut)
		rs.CreateDelta(targetReader, writeOperation)
	}()

	srcWriter, _ := os.OpenFile("content-v2-reconstructed.bin")
	srcReader.Seek(0, os.SEEK_SET)

	rs.ApplyDelta(srcWriter, srcReader, opsOut)
}

Links

About

This is a pure go implementation of the rsync algorithm with highwayhash signature

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages