{"_id":"cicada","_rev":"36-5c80077797b846def26b3b0087cd9749","name":"cicada","description":"a teeny git-based continuous integration server","dist-tags":{"latest":"1.1.1"},"versions":{"0.0.0":{"name":"cicada","version":"0.0.0","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~0.1.6","shell-quote":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","_id":"cicada@0.0.0","dist":{"shasum":"93b27f7be7efea0b2103bc4ae5b3e133db23b27f","tarball":"https://registry.npmjs.org/cicada/-/cicada-0.0.0.tgz","integrity":"sha512-VAsqkjO5q3Wlvd72JICVQO+FOA22VZe+fsJ0SocHrmmNGlguO5XLwUGP6q4NzkEQ3kDOkI/jIP5aKBdL9JbFQQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFJR59cSXW8zWnvtAcJly9Shs0zSMK1on9eJFc8y06NQAiEA2JeSMQrjUoUn2f3D+uhLwwxKe48D8hCNZHQFpNDDAHA="}]},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"0.1.0":{"name":"cicada","version":"0.1.0","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.0.1","shell-quote":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","_id":"cicada@0.1.0","dist":{"shasum":"5f5aad4bca90899d5d5799c0ae1a2079841d6f56","tarball":"https://registry.npmjs.org/cicada/-/cicada-0.1.0.tgz","integrity":"sha512-NmzDshqlACWXC7klrKPmrTndxJpIRkqW1tjgx2LA1MpL4BtOvN0l94G7YXLsSwf4juWidL0PYbeyF4KfUrrD+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC3qyxquyq/ysSlqNszc58ez32sYX3Ffl7nTORF6NByaAiEApSHaDwrCBmE11gIKANat08O+lpz0E5RNsyxpsdbCh+w="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"0.1.1":{"name":"cicada","version":"0.1.1","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.0.1","shell-quote":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","_id":"cicada@0.1.1","dist":{"shasum":"2154f5b23d6d92592f592bfaea733c4aad21246e","tarball":"https://registry.npmjs.org/cicada/-/cicada-0.1.1.tgz","integrity":"sha512-481LHpUpFerRsAyTC7xCF9mxEJD6goeUU4ZJXFcO0pdsaxUO/Zt8Z6mS/wYdjFegKSYnfkmhLbVsT/gPboVKQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAnxxdjnrrgx/8ugAyhfac75gSP5hmP/b8IsYexA+NODAiEAjXYZPW58mu4nWKQas4wRm72ZnuGMQPqHVhBLpgNy0qA="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"0.1.2":{"name":"cicada","version":"0.1.2","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.1.1","shell-quote":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","_id":"cicada@0.1.2","dist":{"shasum":"899b2837a71852bd7d4c83c5613a9adb4841a89f","tarball":"https://registry.npmjs.org/cicada/-/cicada-0.1.2.tgz","integrity":"sha512-Jy89nXtLo5YdC05RgNmKV248jwKxWPH+njhIeg35Jp2OIxmkxsXJLSsdlQCwCdRzq8cdsvOa+KC/uYWzf806XA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHy5Ec74xw1G/BsDP7v1aWqycn5TSJIhvsiOCUytoy8AAiBkFkN1mqQgbvajvQm7dS0DZdFWi3FdO6FzBHPGoTB5kQ=="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"1.0.0":{"name":"cicada","version":"1.0.0","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.1.1","shell-quote":"~0.0.1"},"devDependencies":{"tap":"~0.3.3","comandante":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n[![build status](https://secure.travis-ci.org/substack/cicada.png)](http://travis-ci.org/substack/cicada)\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts.repodir` is a function, check out repositories to the directory\nspecified by the return value of `opts.repodir(repo)` where `repo` is the repo\nname as a string.\n\nIf `opts.workdir` is a function, check out repositories to the directory\nspecified by the return value of `opts.workdir(commit)` where `commit` is a\ncommit object described below.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","_id":"cicada@1.0.0","dist":{"shasum":"e89fcdb7fa6b37c9a61c9c8b32995316cc30c1bb","tarball":"https://registry.npmjs.org/cicada/-/cicada-1.0.0.tgz","integrity":"sha512-XKk8euzrUtc83l7PTtPJX3Of9hEdyDBUT1gw47/50u7lZTbCPOOqX2EIxkkZFTYbJz60LwdLv4yFfii/kvyRcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDdZxi/SL2K3USc9as8MzgCGLViO7aHmAayVF2yE/rndAiEA70YnlRiS7rFHQVEOP+mAhWhAOxGT/8Fc0Er5KpaAo9U="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"1.0.1":{"name":"cicada","version":"1.0.1","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.2.0","shell-quote":"~0.0.1"},"scripts":{"test":"tap test/*.js"},"devDependencies":{"tap":"~0.3.3","comandante":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n[![build status](https://secure.travis-ci.org/substack/cicada.png)](http://travis-ci.org/substack/cicada)\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts.repodir` is a function, check out repositories to the directory\nspecified by the return value of `opts.repodir(repo)` where `repo` is the repo\nname as a string.\n\nIf `opts.workdir` is a function, check out repositories to the directory\nspecified by the return value of `opts.workdir(commit)` where `commit` is a\ncommit object described below.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","_id":"cicada@1.0.1","dist":{"shasum":"cfe76ad6866308783af29a920ac1c010f8335bf1","tarball":"https://registry.npmjs.org/cicada/-/cicada-1.0.1.tgz","integrity":"sha512-5Axa9Q0ftG3t4eARX7U7CcMjsh4ryz998FUpZOeq7pJN9Jb0vqKbuUypsKOAHtDBCWpA1GE8CZev8dBS2fvZlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVExZWfNUKEEvOpxANNCYdSDvyX2kwxtbVUqyMbffVoAiAhSLFItro6poEh5fnzfr5UurHZZkmx6utUZZuoKQDyxw=="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"1.0.2":{"name":"cicada","version":"1.0.2","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.2.0","shell-quote":"~0.0.1"},"scripts":{"test":"tap test/*.js"},"devDependencies":{"tap":"~0.3.3","comandante":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n[![build status](https://secure.travis-ci.org/substack/cicada.png)](http://travis-ci.org/substack/cicada)\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts.repodir` is a function, check out repositories to the directory\nspecified by the return value of `opts.repodir(repo)` where `repo` is the repo\nname as a string.\n\nIf `opts.workdir` is a function, check out repositories to the directory\nspecified by the return value of `opts.workdir(commit)` where `commit` is a\ncommit object described below.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","_id":"cicada@1.0.2","dist":{"shasum":"b3b91025ca5a032504c1d2e54dc9977afda64a4c","tarball":"https://registry.npmjs.org/cicada/-/cicada-1.0.2.tgz","integrity":"sha512-JTxCg1+rtgFloVhtkn8cFzJL4EHs0nQIKjnp3hXhc+FdX5vLSnchIZfMhLh3UIs2KiZxKQMgQXuGn09GAGZIAA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBQt3mZ3c0vHjwDlR2X0m8AlAZFOvt9Savjvkd6OF385AiBy29JjGRocE2a6hgtJf1K6HzUhqcTU9xBVzod9V4Er/Q=="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"1.0.3":{"name":"cicada","version":"1.0.3","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.3.2","shell-quote":"~0.0.1"},"scripts":{"test":"tap test/*.js"},"devDependencies":{"tap":"~0.3.3","comandante":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n[![build status](https://secure.travis-ci.org/substack/cicada.png)](http://travis-ci.org/substack/cicada)\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts.repodir` is a function, check out repositories to the directory\nspecified by the return value of `opts.repodir(repo)` where `repo` is the repo\nname as a string.\n\nIf `opts.workdir` is a function, check out repositories to the directory\nspecified by the return value of `opts.workdir(commit)` where `commit` is a\ncommit object described below.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","readmeFilename":"readme.markdown","_id":"cicada@1.0.3","dist":{"shasum":"5643b39bc9c7569c9c4d58083838d3516577ecdd","tarball":"https://registry.npmjs.org/cicada/-/cicada-1.0.3.tgz","integrity":"sha512-zbMUkWEzLCMKsrPtXWwYjoZVU6RZQZwixWWAcuJQfnSVCqOAPhdrp2Ixdd6l8KMJ5Mt/WvCY2E5pFhrCycQYOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID81v50PduxcqM90cmY/7FaLspKYC5UiixfRv6k3+l0PAiEAqeghVb78GH8L4K0XJ/V56sOG34MJIbYxJvrlXErJOkM="}]},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"1.0.4":{"name":"cicada","version":"1.0.4","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.3.2","shell-quote":"~0.0.1"},"scripts":{"test":"tap test/*.js"},"devDependencies":{"tap":"~0.3.3","comandante":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n[![build status](https://secure.travis-ci.org/substack/cicada.png)](http://travis-ci.org/substack/cicada)\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts.repodir` is a function, check out repositories to the directory\nspecified by the return value of `opts.repodir(repo)` where `repo` is the repo\nname as a string.\n\nIf `opts.workdir` is a function, check out repositories to the directory\nspecified by the return value of `opts.workdir(commit)` where `commit` is a\ncommit object described below.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","readmeFilename":"readme.markdown","_id":"cicada@1.0.4","dist":{"shasum":"a36b38e886874fd35b55d34352d585cf95a02639","tarball":"https://registry.npmjs.org/cicada/-/cicada-1.0.4.tgz","integrity":"sha512-KqhVXSH3nzTzzCQXl+w86/tgfBK/jlLO0oE4U+gzD8u5Kv6dSWxP4BAd0Uvs45Wyt6c8du4asONhvCYnBjOjXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCszCtd223/4gKC3w7QFTKE2hxyWGoqNPNte4iTBH4cawIgJZbtL+IA/vE8ojWd1bj2pyWGtDeMzvZdcA5tBnq/hxk="}]},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"1.0.5":{"name":"cicada","version":"1.0.5","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.3.2","shell-quote":"~0.0.1"},"scripts":{"test":"tap test/*.js"},"devDependencies":{"tap":"~0.3.3","comandante":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n[![build status](https://secure.travis-ci.org/substack/cicada.png)](http://travis-ci.org/substack/cicada)\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts.repodir` is a function, check out repositories to the directory\nspecified by the return value of `opts.repodir(repo)` where `repo` is the repo\nname as a string.\n\nIf `opts.workdir` is a function, check out repositories to the directory\nspecified by the return value of `opts.workdir(commit)` where `commit` is a\ncommit object described below.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","readmeFilename":"readme.markdown","_id":"cicada@1.0.5","dist":{"shasum":"082aeedefcb2a3cb7c3a30c8234fe5f3c6a47eff","tarball":"https://registry.npmjs.org/cicada/-/cicada-1.0.5.tgz","integrity":"sha512-0IMxanY0PbkMVX7S42e3ZY2+LWaXXidJ7TZFOhSs3jBPiHbNL002HzktnoJJ1qOQu1Q5suDAI9VAFR2h+Xlvag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6pPKk7Fr0D/QCg5zKSifksTRPjr8fxgU83rUikn3G0QIhAL3LN4ZAVwSkpknRKv22JiO4WHHNRVAYBwba1DUa9kbg"}]},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"1.1.0":{"name":"cicada","version":"1.1.0","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.3.2","shell-quote":"~0.0.1"},"scripts":{"test":"tap test/*.js"},"devDependencies":{"tap":"~0.3.3","comandante":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n[![build status](https://secure.travis-ci.org/substack/cicada.png)](http://travis-ci.org/substack/cicada)\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts.repodir` is a function, check out repositories to the directory\nspecified by the return value of `opts.repodir(repo)` where `repo` is the repo\nname as a string.\n\nIf `opts.workdir` is a function, check out repositories to the directory\nspecified by the return value of `opts.workdir(commit)` where `commit` is a\ncommit object described below.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","readmeFilename":"readme.markdown","bugs":{"url":"https://github.com/substack/cicada/issues"},"_id":"cicada@1.1.0","dist":{"shasum":"f649e996e1f67ede8e0509f64966746121f82339","tarball":"https://registry.npmjs.org/cicada/-/cicada-1.1.0.tgz","integrity":"sha512-loRdsyoyeS6FtMGjP9NX3/+rD3XauWxm927KEsUVHTjpzME6YY4k2ax3P/MWaloffpBrqMw7ungZxWYW+cp/+g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmlNVEL9L7dOj4QCMuJ5Sg9VeaKZ9yQvEMSB7Hr1rf4AIhAOVunpl5NSQ49jCcUq64E+toXdlFzmZdLjKSNb4gl3ma"}]},"_from":".","_npmVersion":"1.3.0","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"1.1.1":{"name":"cicada","version":"1.1.1","description":"a teeny git-based continuous integration server","main":"index.js","directories":{"example":"example","test":"test"},"dependencies":{"inherits":"~1.0.0","mkdirp":"~0.3.3","pushover":"~1.3.2","shell-quote":"~0.0.1"},"scripts":{"test":"tap test/*.js"},"devDependencies":{"tap":"~0.3.3","comandante":"~0.0.1"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"homepage":"https://github.com/substack/cicada","keywords":["ci","continuous","integration","git","push","test"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","readme":"# cicada\n\na teeny git-based continuous integration server\n\n[![build status](https://secure.travis-ci.org/substack/cicada.png)](http://travis-ci.org/substack/cicada)\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts.repodir` is a function, check out repositories to the directory\nspecified by the return value of `opts.repodir(repo)` where `repo` is the repo\nname as a string.\n\nIf `opts.workdir` is a function, check out repositories to the directory\nspecified by the return value of `opts.workdir(commit)` where `commit` is a\ncommit object described below.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `opts.basedir` is a string, use `opts.basedir + '/repo'` and `opts.basedir + '/work'`.\n\nIf `opts.bare` is `true` the repo will not be checked out into the `workdir` during a push. If not specified `opts.bare` defaults to `false`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (push) {})\n\nEmitted when somebody pushes to the server.\n\n`push` comes from the [`pushover`](https://github.com/substack/pushover#reposonpush-function-push---) module.\n\nIf you implement a `on('push')` handler you must call `push.accept()` inside of it for the push to complete, otherwise the git client will hang on the other end.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","readmeFilename":"readme.markdown","_id":"cicada@1.1.1","dist":{"shasum":"bba5b8eac66b709cf4fa0752484af76e31c0bd3e","tarball":"https://registry.npmjs.org/cicada/-/cicada-1.1.1.tgz","integrity":"sha512-QCsmEFC8+yajDXC9Ae/X0DO/yqMt/y2SDIS5M5uT6rlSJuboNF4p+ouFIjUieuueXgCzyp6iD4U1ucdTFbob1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBP2thyduWzEcBBF2eqFKce3JAefm0hlozu9L7VqV0hQIhAM/Xqc6h/0+7GCUcmClyYxVWUpaNWHEoDJq3UCzP5Sef"}]},"_from":".","_npmVersion":"1.2.11","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]}},"readme":"# cicada\n\na teeny git-based continuous integration server\n\n# example\n\nJust hack up a cicada server:\n\n``` js\nvar http = require('http');\nvar cicada = require('cicada');\n\nvar ci = cicada('/tmp/blarg');\nci.on('commit', function (commit) {\n    commit.run('test').on('exit', function (code) {\n        var status = code === 0 ? 'PASSED' : 'FAILED';\n        console.log(commit.hash + ' ' + status);\n    });\n});\n\nvar server = http.createServer(ci.handle);\nserver.listen(5255);\n```\n\nrun it\n\n```\n$ node example/ci.js \n```\n\npush some code to it:\n\n```\n$ git push http://localhost:5255/choose.git \nTo http://localhost:5255/choose.git\n   c79cef8..3537c0f  master -> master\n```\n\nand watch the results whiz by!\n\n```\nb7c19c9fd2c34176bd6eef436a69ab7a470ff98d PASSED\nc79cef8c54a9abc2b2d6ecd179d41463767be526 FAILED\n3537c0f83606788bdfb065242a6851b20504fe3e PASSED\n```\n\n# methods\n\n``` js\nvar cicada = require('cicada')\n```\n\n## var ci = cicada(opts, cb)\n\nCreate a new ci server using `opts.repodir` for storing git blobs and\n`opts.workdir` for checking out code.\n\nIf `opts` is a string, use `opts + '/repo'` and `opts + '/work'`.\n\nIf `cb` is provided, it acts as a listener for the `'commit'` event.\n\n## ci.handle(req, res)\n\nHandle requests from an http server. This is necessary to make git work over\nhttp.\n\n## ci.checkout(repo, commit, branch, cb)\n\nManually check out a commit into the workdir.\n\nThe errback `cb(err, commit)` fires with an error or a commit object.\n\n# events\n\n## ci.on('push', function (repo, commit, branch) {})\n\nEmitted when somebody pushes to the server.\n\n## ci.on('commit', function (commit) {})\n\nAfter a push occurs, the commit will be checked out into the workdir.\nOnce the commit is all checked out, this event fires with a commit handle\ndescribed below.\n\n## ci.on('error', function (err) {}\n\nEmitted when errors occur.\n\n# commit object\n\nCommit objects are emitted by the `'commit'` event or they may be created\nmanually with the `ci.checkout()` function.\n\n## commit.run(scriptName, opts)\n\nRun a command from the package.json script hash with `npm run-script`.\n\nReturns the process object.\n\n## commit.spawn(command, args, opts)\n\nSpawn an ordinary shell command in the `commit.dir`.\n\nReturns the process object.\n\n## commit properties\n\ncommit objects have these properties:\n\n* commit.hash - the full git hash string for this commit\n* commit.id - a combination of the hash and the date in microseconds\n* commit.dir - the working directory the commit is checked out into\n* commit.repo - the repository this commit came from\n* commit.branch - the branch this commit came from\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install cicada\n```\n\n# license\n\nMIT\n","maintainers":[{"email":"nopersonsmodules@gmail.com","name":"nopersonsmodules"}],"time":{"modified":"2022-11-11T06:33:55.352Z","created":"2012-08-14T17:25:03.351Z","0.0.0":"2012-08-14T17:25:04.413Z","0.1.0":"2012-09-23T07:03:35.383Z","0.1.1":"2012-09-24T01:41:17.865Z","0.1.2":"2012-12-13T01:27:48.174Z","1.0.0":"2012-12-23T06:34:08.561Z","1.0.1":"2012-12-23T07:10:37.967Z","1.0.2":"2012-12-23T07:17:51.664Z","1.0.3":"2013-04-06T08:58:03.098Z","1.0.4":"2013-04-16T23:33:35.344Z","1.0.5":"2013-05-01T19:04:44.626Z","1.1.0":"2013-07-17T23:11:01.813Z","1.1.1":"2014-01-08T00:08:23.237Z"},"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"repository":{"type":"git","url":"git://github.com/substack/cicada.git"},"users":{"m3talsmith":true,"tunnckocore":true,"sidwood":true,"mparaiso":true}}