fs.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. // Generated by IcedCoffeeScript 1.7.1-c
  2. (function() {
  3. var C, File, Tmp, base58, constants, crypto, fs, iced, log, mkdir_p, open, path, strip_extension, tmp_filename, __iced_k, __iced_k_noop;
  4. iced = require('iced-runtime').iced;
  5. __iced_k = __iced_k_noop = function() {};
  6. fs = require('fs');
  7. log = require('./log');
  8. C = require('constants');
  9. base58 = require('./basex').base58;
  10. crypto = require('crypto');
  11. path = require('path');
  12. mkdir_p = require('iced-utils').fs.mkdir_p;
  13. constants = require('./constants').constants;
  14. exports.File = File = (function() {
  15. function File(_arg) {
  16. this.stream = _arg.stream, this.stat = _arg.stat, this.realpath = _arg.realpath, this.filename = _arg.filename, this.fd = _arg.fd;
  17. }
  18. File.prototype.close = function() {
  19. var _ref;
  20. return (_ref = this.stream) != null ? _ref.close() : void 0;
  21. };
  22. return File;
  23. })();
  24. exports.open = open = function(_arg, cb) {
  25. var bufferSize, err, f, fd, file, filename, flags, mode, opts, realpath, ret, stat, stream, write, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  26. __iced_k = __iced_k_noop;
  27. ___iced_passed_deferral = iced.findDeferral(arguments);
  28. filename = _arg.filename, write = _arg.write, mode = _arg.mode, bufferSize = _arg.bufferSize;
  29. mode || (mode = 0x1a0);
  30. bufferSize || (bufferSize = 1024 * 1024);
  31. stat = null;
  32. err = null;
  33. flags = write ? C.O_WRONLY | C.O_TRUNC | C.O_EXCL | C.O_CREAT : C.O_RDONLY;
  34. (function(_this) {
  35. return (function(__iced_k) {
  36. if (!write) {
  37. (function(__iced_k) {
  38. __iced_deferrals = new iced.Deferrals(__iced_k, {
  39. parent: ___iced_passed_deferral,
  40. filename: "/Users/max/src/keybase/node-client/src/fs.iced"
  41. });
  42. fs.stat(filename, __iced_deferrals.defer({
  43. assign_fn: (function() {
  44. return function() {
  45. err = arguments[0];
  46. return stat = arguments[1];
  47. };
  48. })(),
  49. lineno: 30
  50. }));
  51. __iced_deferrals._fulfill();
  52. })(function() {
  53. return __iced_k(err != null ? log.warn("Failed to access file " + filename + ": " + err) : void 0);
  54. });
  55. } else {
  56. return __iced_k();
  57. }
  58. });
  59. })(this)((function(_this) {
  60. return function() {
  61. (function(__iced_k) {
  62. if (err == null) {
  63. ret = null;
  64. (function(__iced_k) {
  65. __iced_deferrals = new iced.Deferrals(__iced_k, {
  66. parent: ___iced_passed_deferral,
  67. filename: "/Users/max/src/keybase/node-client/src/fs.iced"
  68. });
  69. fs.open(filename, flags, mode, __iced_deferrals.defer({
  70. assign_fn: (function() {
  71. return function() {
  72. err = arguments[0];
  73. return fd = arguments[1];
  74. };
  75. })(),
  76. lineno: 35
  77. }));
  78. __iced_deferrals._fulfill();
  79. })(__iced_k);
  80. } else {
  81. return __iced_k();
  82. }
  83. })(function() {
  84. (function(__iced_k) {
  85. if (err == null) {
  86. (function(__iced_k) {
  87. __iced_deferrals = new iced.Deferrals(__iced_k, {
  88. parent: ___iced_passed_deferral,
  89. filename: "/Users/max/src/keybase/node-client/src/fs.iced"
  90. });
  91. fs.realpath(filename, __iced_deferrals.defer({
  92. assign_fn: (function() {
  93. return function() {
  94. err = arguments[0];
  95. return realpath = arguments[1];
  96. };
  97. })(),
  98. lineno: 37
  99. }));
  100. __iced_deferrals._fulfill();
  101. })(function() {
  102. return __iced_k(err != null ? log.warn("Realpath failed on file " + filename + ": " + err) : void 0);
  103. });
  104. } else {
  105. return __iced_k();
  106. }
  107. })(function() {
  108. if (err == null) {
  109. opts = {
  110. fd: fd,
  111. bufferSize: bufferSize
  112. };
  113. f = write ? fs.createWriteStream : fs.createReadStream;
  114. stream = f(filename, opts);
  115. }
  116. file = err != null ? null : new File({
  117. stream: stream,
  118. stat: stat,
  119. realpath: realpath,
  120. filename: filename,
  121. fd: fd
  122. });
  123. return cb(err, file);
  124. });
  125. });
  126. };
  127. })(this));
  128. };
  129. exports.tmp_filename = tmp_filename = function(stem) {
  130. var ext;
  131. ext = base58.encode(crypto.rng(8));
  132. return [stem, ext].join('.');
  133. };
  134. exports.strip_extension = strip_extension = function(fn, ext) {
  135. var l, v;
  136. v = fn.split(".");
  137. l = v.length;
  138. if (v[l - 1] === ext) {
  139. return v.slice(0, l - 1).join('.');
  140. } else {
  141. return null;
  142. }
  143. };
  144. exports.stdout = function() {
  145. return new File({
  146. stream: process.stdout,
  147. filename: "<stdout>",
  148. realpath: "<stdout>",
  149. fd: -1
  150. });
  151. };
  152. exports.Tmp = Tmp = (function() {
  153. function Tmp(_arg) {
  154. this.target = _arg.target, this.mode = _arg.mode, this.bufferSize = _arg.bufferSize;
  155. this.tmpname = tmp_filename(this.target);
  156. this.renamed = false;
  157. }
  158. Tmp.prototype.open = function(cb) {
  159. var err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  160. __iced_k = __iced_k_noop;
  161. ___iced_passed_deferral = iced.findDeferral(arguments);
  162. (function(_this) {
  163. return (function(__iced_k) {
  164. __iced_deferrals = new iced.Deferrals(__iced_k, {
  165. parent: ___iced_passed_deferral,
  166. filename: "/Users/max/src/keybase/node-client/src/fs.iced",
  167. funcname: "Tmp.open"
  168. });
  169. open({
  170. filename: _this.tmpname,
  171. write: true,
  172. mode: _this.mode,
  173. bufferSize: _this.bufferSize
  174. }, __iced_deferrals.defer({
  175. assign_fn: (function(__slot_1) {
  176. return function() {
  177. err = arguments[0];
  178. return __slot_1.tmp = arguments[1];
  179. };
  180. })(_this),
  181. lineno: 82
  182. }));
  183. __iced_deferrals._fulfill();
  184. });
  185. })(this)((function(_this) {
  186. return function() {
  187. if (typeof err !== "undefined" && err !== null) {
  188. log.error("Error opening file: " + err);
  189. }
  190. return cb(typeof err === "undefined" || err === null);
  191. };
  192. })(this));
  193. };
  194. Tmp.prototype.close = function() {
  195. var _ref;
  196. return (_ref = this.tmp) != null ? _ref.close() : void 0;
  197. };
  198. Tmp.prototype.rename = function(cb) {
  199. var err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  200. __iced_k = __iced_k_noop;
  201. ___iced_passed_deferral = iced.findDeferral(arguments);
  202. (function(_this) {
  203. return (function(__iced_k) {
  204. __iced_deferrals = new iced.Deferrals(__iced_k, {
  205. parent: ___iced_passed_deferral,
  206. filename: "/Users/max/src/keybase/node-client/src/fs.iced",
  207. funcname: "Tmp.rename"
  208. });
  209. fs.rename(_this.tmpname, _this.target, __iced_deferrals.defer({
  210. assign_fn: (function() {
  211. return function() {
  212. return err = arguments[0];
  213. };
  214. })(),
  215. lineno: 90
  216. }));
  217. __iced_deferrals._fulfill();
  218. });
  219. })(this)((function(_this) {
  220. return function() {
  221. if (typeof err !== "undefined" && err !== null) {
  222. log.error("Failed to rename temporary file: " + err);
  223. } else {
  224. _this.renamed = true;
  225. }
  226. return cb(typeof err === "undefined" || err === null);
  227. };
  228. })(this));
  229. };
  230. Tmp.prototype.finish = function(cb) {
  231. var ___iced_passed_deferral, __iced_deferrals, __iced_k;
  232. __iced_k = __iced_k_noop;
  233. ___iced_passed_deferral = iced.findDeferral(arguments);
  234. (function(_this) {
  235. return (function(__iced_k) {
  236. __iced_deferrals = new iced.Deferrals(__iced_k, {
  237. parent: ___iced_passed_deferral,
  238. filename: "/Users/max/src/keybase/node-client/src/fs.iced",
  239. funcname: "Tmp.finish"
  240. });
  241. _this.rename(__iced_deferrals.defer({
  242. lineno: 98
  243. }));
  244. __iced_deferrals._fulfill();
  245. });
  246. })(this)((function(_this) {
  247. return function() {
  248. (function(__iced_k) {
  249. __iced_deferrals = new iced.Deferrals(__iced_k, {
  250. parent: ___iced_passed_deferral,
  251. filename: "/Users/max/src/keybase/node-client/src/fs.iced",
  252. funcname: "Tmp.finish"
  253. });
  254. _this.cleanup(__iced_deferrals.defer({
  255. lineno: 99
  256. }));
  257. __iced_deferrals._fulfill();
  258. })(function() {
  259. return cb();
  260. });
  261. };
  262. })(this));
  263. };
  264. Tmp.prototype.cleanup = function(cb) {
  265. var err, ok, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  266. __iced_k = __iced_k_noop;
  267. ___iced_passed_deferral = iced.findDeferral(arguments);
  268. ok = false;
  269. (function(_this) {
  270. return (function(__iced_k) {
  271. if (!_this.renamed) {
  272. (function(__iced_k) {
  273. __iced_deferrals = new iced.Deferrals(__iced_k, {
  274. parent: ___iced_passed_deferral,
  275. filename: "/Users/max/src/keybase/node-client/src/fs.iced",
  276. funcname: "Tmp.cleanup"
  277. });
  278. fs.unlink(_this.tmpname, __iced_deferrals.defer({
  279. assign_fn: (function() {
  280. return function() {
  281. return err = arguments[0];
  282. };
  283. })(),
  284. lineno: 105
  285. }));
  286. __iced_deferrals._fulfill();
  287. })(function() {
  288. return __iced_k(typeof err !== "undefined" && err !== null ? (log.error("failed to remove temporary file: " + err), ok = false) : void 0);
  289. });
  290. } else {
  291. return __iced_k();
  292. }
  293. });
  294. })(this)((function(_this) {
  295. return function() {
  296. return cb(ok);
  297. };
  298. })(this));
  299. };
  300. Tmp.prototype.stream = function() {
  301. var _ref;
  302. return (_ref = this.tmp) != null ? _ref.stream : void 0;
  303. };
  304. return Tmp;
  305. })();
  306. exports.mkdirp = function(fn, cb) {
  307. var d, err, found, n, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  308. __iced_k = __iced_k_noop;
  309. ___iced_passed_deferral = iced.findDeferral(arguments);
  310. d = path.dirname(fn);
  311. n = 0;
  312. err = null;
  313. (function(_this) {
  314. return (function(__iced_k) {
  315. __iced_deferrals = new iced.Deferrals(__iced_k, {
  316. parent: ___iced_passed_deferral,
  317. filename: "/Users/max/src/keybase/node-client/src/fs.iced",
  318. funcname: "mkdirp"
  319. });
  320. fs.exists(d, __iced_deferrals.defer({
  321. assign_fn: (function() {
  322. return function() {
  323. return found = arguments[0];
  324. };
  325. })(),
  326. lineno: 119
  327. }));
  328. __iced_deferrals._fulfill();
  329. });
  330. })(this)((function(_this) {
  331. return function() {
  332. (function(__iced_k) {
  333. if (!found) {
  334. (function(__iced_k) {
  335. __iced_deferrals = new iced.Deferrals(__iced_k, {
  336. parent: ___iced_passed_deferral,
  337. filename: "/Users/max/src/keybase/node-client/src/fs.iced",
  338. funcname: "mkdirp"
  339. });
  340. mkdir_p(d, constants.permissions.dir, __iced_deferrals.defer({
  341. assign_fn: (function() {
  342. return function() {
  343. err = arguments[0];
  344. return n = arguments[1];
  345. };
  346. })(),
  347. lineno: 121
  348. }));
  349. __iced_deferrals._fulfill();
  350. })(function() {
  351. return __iced_k((err == null) && n > 0 ? log.info("Made directory '" + d + "'") : void 0);
  352. });
  353. } else {
  354. return __iced_k();
  355. }
  356. })(function() {
  357. return cb(err, d, n);
  358. });
  359. };
  360. })(this));
  361. };
  362. }).call(this);