UNPKG

1.12 kBJavaScriptView Raw
1var errors = require('../errors')
2
3module.exports = function (osm) {
4 return function (id, version, cb) {
5 if (arguments.length === 2) {
6 cb = version
7 version = null
8 }
9
10 // TODO: lock this record
11 osm.get(id, function (err, docs) {
12 if (err) return cb(err)
13 if (Object.keys(docs).length === 0) {
14 return cb(new errors.NotFound('changeset id: ' + id))
15 }
16 if (!version && Object.keys(docs).length > 1) {
17 // TODO: give more meaningful error when api is used directly.
18 return cb(new errors.ForkedChangeset(id))
19 }
20 var doc = version ? docs[version] : docs[Object.keys(docs)[0]]
21 if (!doc) return cb(new errors.NotFound('bla bla changeset id: ' + id + ' version: ' + version))
22 if (doc.closedAt || doc.closed_at) {
23 return cb(new errors.ClosedChangeset(id, doc.closedAt || doc.closed_at))
24 }
25 doc.closed_at = new Date().toISOString()
26 osm.put(id, doc,
27 { links: version ? [version] : undefined },
28 function (err) {
29 if (err) return cb(err)
30 cb(null)
31 }
32 )
33 })
34 }
35}