UNPKG

1.54 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7require('cli-engine-config');
8
9var _rwlockfile = require('rwlockfile');
10
11var _rwlockfile2 = _interopRequireDefault(_rwlockfile);
12
13var _path = require('path');
14
15var _path2 = _interopRequireDefault(_path);
16
17var _cliUx = require('cli-ux');
18
19function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21class Lock {
22
23 constructor(config) {
24 this.config = config;
25 this.cli = new _cliUx.CLI({ mock: config.mock });
26 }
27
28 get updatelockfile() {
29 return _path2.default.join(this.config.cacheDir, 'update.lock');
30 }
31
32 // get read lock
33 async read() {
34 return _rwlockfile2.default.read(this.updatelockfile);
35 }
36
37 async unread() {
38 await _rwlockfile2.default.unread(this.updatelockfile);
39 }
40
41 async canRead() {
42 let hasWriter = await _rwlockfile2.default.hasWriter(this.updatelockfile);
43 return !hasWriter;
44 }
45
46 // upgrade to writer
47 async upgrade() {
48 // take off reader
49 await this.unread();
50
51 // check for other readers
52 if (await _rwlockfile2.default.hasReaders(this.updatelockfile)) {
53 this.cli.action.status = `Waiting for all commands to finish`;
54 }
55
56 // grab writer lock
57 let unlock = await _rwlockfile2.default.write(this.updatelockfile);
58
59 // return downgrade function
60 return async () => {
61 // turn back into reader when unlocking
62 await unlock();
63 return _rwlockfile2.default.read(this.updatelockfile);
64 };
65 }
66}
67exports.default = Lock;
\No newline at end of file