Giter Club home page Giter Club logo

xferspdy's Introduction

xferspdy

This library provides binary diff and patch API in golang.

Supported today:

  • Command line utilities to diff and patch binary files
  • Library for fingerprint generation, rolling hash and block matching
  • NEW : For large files, fingerprint generation automatically switches to parallel mode wherein multiple go routines are used concurrently. For files > 20 MB, there is an improvement of ~50% compared to sequential fingerprint generation.

Reference : [Rsync Algorithm] (https://rsync.samba.org/tech_report/node2.html)

Setup

  • Need to have go installed, [golang downloads] (https://golang.org/dl/)

  • Do go get

     `go get github.com/monmohan/xferspdy`
    
  • Install the command line utilities

    Run go install ./... from the xferspdy directory

Using the API

See GoDoc. The docs also contain an example usage of the API.

Using the fpgen, diff and patch CLI utilities:

The library also provides CLI wrappers on API.

Example

  • You can see the usage of any of these commands using $ GOPATH/bin/<command> --help

  • Lets say you have a binary file (e.g. power point presentation MyPrezVersion1.pptx).

  • First generate a fingerprint of version 1

    $ GOPATH/bin/fpgen -file <path>/MyPrezVersion1.pptx

    This will generate the fingerprint file /MyPrezVersion1.pptx.fingerprint.

  • Lets say that the file was changed now (for example add a slide or image) and saved as MyPrezVersion2.pptx

  • Now Generate a diff (doesn't require original file)

    $ GOPATH/bin/diff -fingerprint <path>/MyPrezVersion1.pptx.fingerprint -file <path>/MyPrezVersion2.pptx

It will create a patch file <path>/MyPrezVersion2.pptx.patch

  • Now patch the Version 1 file to get the Version 2

    $ GOPATH/bin/patch -patch <path>/MyPrezVersion2.pptx.patch -base <path>/MyPrezVersion1.pptx

  • This will generate /Patched_MyPrezVersion1.pptx. This file would exactly be same as MyPrezVersion2.pptx.

NOTE: diff and patch are also common utilities present on most distributions so its better to give explicit path to these binaries. for example use $GOPATH/bin/diff and $GOPATH/bin/patch

xferspdy's People

Contributors

monmohan avatar

Watchers

Martin avatar James Cloos avatar Anders Tall avatar Henrik Rosqvist avatar

Forkers

gino4 engineone

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.