Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dat-ecosystem-archive/hyperdrive-staging-area
Staging area for local, uncommited writes that can sync to a hyperdrive [ DEPRECATED - More info on active projects and modules at https://dat-ecosystem.org/ ]
https://github.com/dat-ecosystem-archive/hyperdrive-staging-area
Last synced: 3 months ago
JSON representation
Staging area for local, uncommited writes that can sync to a hyperdrive [ DEPRECATED - More info on active projects and modules at https://dat-ecosystem.org/ ]
- Host: GitHub
- URL: https://github.com/dat-ecosystem-archive/hyperdrive-staging-area
- Owner: dat-ecosystem-archive
- Archived: true
- Created: 2017-04-21T18:55:33.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2022-01-05T15:36:04.000Z (about 3 years ago)
- Last Synced: 2024-05-16T13:16:17.050Z (9 months ago)
- Language: JavaScript
- Homepage:
- Size: 28.3 KB
- Stars: 8
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-dat - hyperdrive-staging-area - staging area for uncommited writes that can sync to a hyperdrive archive (Using Dat / File Imports & Exports)
README
[![deprecated](http://badges.github.io/stability-badges/dist/deprecated.svg)](https://dat-ecosystem.org/)
More info on active projects and modules at [dat-ecosystem.org](https://dat-ecosystem.org/)
---
# hyperdrive-staging-area
Staging area for local, uncommited writes that can sync to a hyperdrive. Respects `.datignore`.
```
npm install hyperdrive-staging-area
```## Usage
hyperdrive-staging-area provides an fs-compatible object, plus a few additional methods
```js
var hyperdrive = require('hyperdrive')
var hyperstaging = require('hyperdrive-staging-area')
var archive = hyperdrive('./my-first-hyperdrive-meta') // metadata will be stored in this folder
var staging = hyperstaging(archive, './my-first-hyperdrive') // content will be stored in this folderstaging.writeFile('/hello.txt', 'world', function (err) {
if (err) throw errstaging.readdir('/', function (err, list) {
if (err) throw err
console.log(list) // prints ['hello.txt']staging.readFile('/hello.txt', 'utf-8', function (err, data) {
if (err) throw err
console.log(data) // prints 'world'
})
})
})
```At this point, the archive is still unchanged.
```js
archive.readFile('/hello.txt', 'utf-8', function (err) {
console.log(err) // => NotFound
})
```To be applied to the archive, the changes must be committed:
```js
staging.diff(function (err, changes) {
if (err) throw err
console.log(changes) // prints [{change: 'add', type: 'file', path: '/hello.txt'}]staging.commit(function (err) {
if (err) throw errstaging.diff(function (err, changes) {
if (err) throw err
console.log(changes) // prints []archive.readFile('/hello.txt', 'utf-8', function (err, data) {
if (err) throw err
console.log(data) // prints 'world'
})
})
})
})
```Changes can also be reverted after writing them to staging.
```js
staging.writeFile('/hello.txt', 'universe!', function (err) {
if (err) throw errstaging.diff(function (err, changes) {
if (err) throw err
console.log(changes) // prints [{change: 'mod', type: 'file', path: '/hello.txt'}]staging.revert(function (err) {
if (err) throw err
staging.readFile('/hello.txt', 'utf-8', function (err, data) {
if (err) throw err
console.log(data) // prints 'world'
})
})
})
})
```## API
#### `var staging = HyperdriveStagingArea(archive, stagingPath[, baseOpts])`
Create a staging area for `archive` at the given `stagingPath`.
You can specify `baseOpts` to be passed as the defaults to diff, commit, and revert. Options include:
```
{
skipDatIgnore: false // dont use the .datignore rules
ignore: ['.dat', '.git'] // base ignore rules (used in addition to .datignore)
filter: false // a predicate of (path) => bool, where writes are skipped if == true. Takes precedence over .datignore
shallow: false // dont recurse into folders that need to be added or removed
}
```#### `staging.path`
Path to staging folder.
#### `staging.isStaging`
True
#### `staging.key`
Archive key.
#### `staging.writable`
Is the archive writable?
#### `staging.diff(opts, cb)`
List the changes currently in staging. Output looks like:
```js
[
{
change: 'add' | 'mod' | 'del'
type: 'dir' | 'file'
path: String (path of the file)
},
...
]
```Options include:
```
{
skipDatIgnore: false // dont use the .datignore rules
ignore: ['.dat', '.git'] // base ignore rules (used in addition to .datignore)
filter: false // a predicate of (path) => bool, where writes are skipped if == true. Takes precedence over .datignore
shallow: false // dont recurse into folders that need to be added or removed
compareContent: false // diff by content? (this removes false positives)
}
```#### `staging.commit(opts, cb)`
Write all changes to the archive.
Options include:
```
{
skipDatIgnore: false // dont use the .datignore rules
ignore: ['.dat', '.git'] // base ignore rules (used in addition to .datignore)
filter: false // a predicate of (path) => bool, where writes are skipped if == true. Takes precedence over .datignore
shallow: false // dont recurse into folders that need to be added or removed
compareContent: false // diff by content? (this removes false positives)
}
```#### `staging.revert(opts, cb)`
Undo all changes so that staging is reverted to the archive stage.
Options include:
```
{
skipDatIgnore: false // dont use the .datignore rules
ignore: ['.dat', '.git'] // base ignore rules (used in addition to .datignore)
filter: false // a predicate of (path) => bool, where writes are skipped if == true. Takes precedence over .datignore
shallow: false // dont recurse into folders that need to be added or removed
compareContent: false // diff by content? (this removes false positives)
}
```#### `staging.readIgnore(opts, cb)`
Read the .datignore and provide a `filter(path)=>bool` function. The callback does not provide an error, so its signature is `cb(filterFn)`.
Options include:
```
{
skipDatIgnore: false // dont use the .datignore rules
ignore: ['.dat', '.git'] // base ignore rules (used in addition to .datignore)
}
```#### `staging.startAutoSync()`
Listens for updates to the archive and automatically reverts the staging area when a new entry is appended. Useful for syncing the staging for downloaded archives.
#### `staging.stopAutoSync()`
Stop syncing the staging area.
#### `HyperdriveStagingArea.parseIgnoreRules(str)`
Parses the list of rules in a `.datignore` and outputs an array that can be used by anymatch.