Giter Site home page Giter Site logo

rsynk's Introduction

Rsynk JetBrains team project Build Status

What it is

An embeddable ssh server for rsync client with additional features.

What it is not

Not an rsync re-implementation. Unlike server, client functionality is not an aim of the project.

Goals

The goal is to make a server for rsync client that supports rich files content manipulations which are not implemented in vanilla rsync. Rsynk supplied with API to dynamically select which files are downloadable and set the bounds on those files - offset and length, dynamically as well.

Compatible rsync clients

Minimal client version is 3.1.0 (released September 28th, 2013, see versions), newer versions of rsync can be used. If you're using another rsync protocol implementation - the version of protocol must be 31 or newer.

Building project

Gradle is used to build and test. JDK 1.8 and Kotlin 1.1.1 are required. To build the project, run:

./gradlew

To execute the tests, run:

./gradlew test

Some test suits run vanilla rsync client commands against rsynk server. Those integration tests require an rsync client installed. To run tests in docker container with all necessary dependencies provided, run:

cd docker/integration-tests && ./build-and-run.sh 

rsynk's People

Contributors

l2dy avatar penemue avatar voytovichs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rsynk's Issues

Dynamic change in file boundaries are ignored because of the file last modified time

Suppose client has some version of a file.

On server nothings has changes since the client download that version, except the boundaries, suppose file was expanded and new 100 bytes of data become tracked but first 100 bytes of file become untracked (file on disk itself left untouched though). Server tracks the same file, the length is also the same, however it reads file with kind of an offset.

Imagine clients connects to download a new version of the file. Rsynk sees that servers and clients file sizes and last modified times are identical and it doesn't send the new version of that file.

Add persistent config file with all tracked files listed

On application start in order to be able to download files those files should be added.
After a restart the operation must be done once again.
That can be a good feature to store list of tracked files persistently.

Rsync config format can be used for that.

Generate server public key by provided private key

Currently to start rsynk one needs to pass both private and public parts of the ssh key.
It's done so because apache sshd KeyPairProvider designed in a way it receives both.

Obviously we don't need a public part of a key if we have private.

Public key configuring should be removed from API.
Public key must be read from the private.

To start take a look at RsynkBuilder.kt file.

Add Windows OS support

Rsynk has some platform-dependent code such as retrieving file system information and reading all kinds of file information like owners, permissions, etc.

To add windows we should add another implementation of FileSystemInfo (apart from UnixDefaultFileSystemInfo) and load correct implementation on application start.

P.S. there are tests that uses FIleSystemInfo, to make them work on windows the different implementation should be provided there as well (search for issue#2 in code).

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.