On Thu, Jun 13, 2013 at 4:54 PM, Alexey Petrushin < alexey.petrus...@gmail.com> wrote:
> That's nice, thanks for your work Tim. > > You mentioned custom back-ends in documentation, is it possible to create > a back-end that will use AWS S3 or something similar as a storage? Maybe > with a subset of git functionality? > Yes. And in fact, I'm working on the code that accepts these custom backends as we speak. My goal is to get it done before I leave for my trip next week so you and others can play with it and implement more custom backends. For bare-repos (no staging area) all that's needed is basically a key/value system. For full repos a fs-style interface is needed as well. The two interfaces are already documented at: - https://github.com/creationix/js-git/blob/master/specs/fs.md - https://github.com/creationix/js-git/blob/master/specs/git-db.md I just finished a node implementation of the fs backend earlier today and I'll make an abstract implementation of the db backend that piggybacks on top of the fs interface (combined they will work like real git with the .git folder) > > On Thursday, June 13, 2013 11:54:14 PM UTC+4, Tim Caswell wrote: >> >> As some of you know, and many of you do not, I've been spending the last >> few months working on implementing git in javascript. >> >> I started out with a small, but successful [kickstarter] that enabled me >> to quit my day job and work full time on JS-Git. Since then I've worked >> with others like Chris Dickinson on the project. At this time, there is a >> node CLI tool in npm called "js-git-node" (I'll probably rename to just >> "js-git" or "js-git-cli") that supports full clone. I also have a chrome >> app that shows one way the code can run in a non-node'js environment with >> minimal changes. >> >> The goal of the project is to give git to all JavaScript environments as >> a set of modular packages. I will target chrome apps, websites, node >> client and servers, and anything else that makes sense. >> >> While working on this project, I've developed many new interfaces for >> things like streams and callbacks. I didn't want to port the node APIs >> directly to other platforms and instead took this opportunity to redesign >> from scratch what I would have done for node in hindsight. >> >> I'm now at the point where I'm very happy with the resulting API >> primitives. >> >> The new stream interface is called [min-stream] because is the minimal >> API surface for streams (data or objects) with backpressure and protocol >> filters. It's a lot simpler than node streams and can interop with node >> streams using the [min-stream-node] library. >> >> The stream interface is designed in such a way that creating a stream is >> nothing more than creating a function with a certain behavior and >> signature. Piping a stream source to a stream sink is just a normal >> function call. There is no need for an 82 line [pipe] function to connect >> min-streams. >> >> // The body of a TCP echo server in min-streams is simple >> socket.sink(socket.source); >> >> Another primitive that replaces callback-last-style in node is called >> [continuables]. It's much closer to node callbacks than promises (in fact >> all it takes to convert a node style function to a continuable is to use >> bind to partially apply the non-callback arguments). >> >> To convert setTimeout to continuable format is simply: >> >> function sleep(ms) { >> return function (callback) { >> setTimeout(callback, ms); >> }; >> } >> >> Also of interest is integrating generators into continuables. The next >> v0.11.3 release of node should finally have full support for ES6 generators >> (behind a flag for now) and chrome dev channel already has it (also behind >> a flag). By using a tiny 40 line helper library, it's trivial to write >> sync style code that consumes native callback or continuable code with no >> build step as I've done in the [gen-run] library. >> >> Then using the sleep function above is as simple as: >> >> function* () { >> console.log("Waiting 1 second"); >> yield sleep(1000); >> console.log("Done waiting") >> } >> >> I'm still working on js-git and am starting to make progress much faster >> now that I've decided what APIs I want to build from and implemented most >> the primitives. Any of these sub-projects can be used standalone and >> probably deserve their own announcement mail, but I'd rather not spam the >> list with every project I release. Follow me on twitter @creationix if you >> want that level of traffic. >> >> I do need your help. In order to finish [js-git] in a timely manner, I >> need to continue working on it full-time. If you find this project >> worthwhile and/or need it in your project, please show support by backing >> the fundraiser on [bountysource]. (or better, getting your employer to >> sponsor) >> >> There are so many awesome project ideas that have git in javascript as a >> dependency. I'm running out of money from the kickstarter (it's been >> months) and will have to stop working on js-git and get a new job if I >> don't get more funds soon. >> >> This is an experiment to see if a person can live off making 100% open >> source software that doesn't cater to any particular business. >> >> All software I've released in the open and is licensed MIT for anyone to >> use. I have open discussion on IRC (#js-git) and twitter and the jsgit >> google group every day looking for community feedback on the APIs. >> >> Let me know what you think. >> >> -Tim Caswell >> >> [bountysource]: >> https://www.**bountysource.com/#fundraisers/**325-js-git<https://www.bountysource.com/#fundraisers/325-js-git> >> [js-git]: >> https://github.com/**creationix/js-git<https://github.com/creationix/js-git> >> [kickstarter]: >> http://www.**kickstarter.com/projects/**creationix/js-git<http://www.kickstarter.com/projects/creationix/js-git> >> [js-git-node]: >> https://github.**com/creationix/js-git-node<https://github.com/creationix/js-git-node> >> [min-stream]: https://github.**com/creationix/js-git/blob/** >> master/specs/min-stream.md<https://github.com/creationix/js-git/blob/master/specs/min-stream.md> >> [min-stream-node]: >> https://**github.com/creationix/min-**stream-node<https://github.com/creationix/min-stream-node> >> [continuable]: https://github.**com/creationix/js-git/blob/** >> master/specs/continuable.md<https://github.com/creationix/js-git/blob/master/specs/continuable.md> >> [gen-run]: >> https://github.com/**creationix/gen-run<https://github.com/creationix/gen-run> >> >> [pipe]: https://github.com/**joyent/node/blob/master/lib/** >> stream.js#L46-L127<https://github.com/joyent/node/blob/master/lib/stream.js#L46-L127> >> > -- > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to nodejs@googlegroups.com > To unsubscribe from this group, send email to > nodejs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > > --- > You received this message because you are subscribed to the Google Groups > "nodejs" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to nodejs+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.