123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- let fs = require('fs');
- let Task = require('./task').Task;
- function isFileOrDirectory(t) {
- return (t instanceof FileTask ||
- t instanceof DirectoryTask);
- }
- function isFile(t) {
- return (t instanceof FileTask && !(t instanceof DirectoryTask));
- }
- class FileTask extends Task {
- constructor(...args) {
- super(...args);
- this.dummy = false;
- if (fs.existsSync(this.name)) {
- this.updateModTime();
- }
- else {
- this.modTime = null;
- }
- }
- isNeeded() {
- let prereqs = this.prereqs;
- let prereqName;
- let prereqTask;
-
- if (this.taskStatus == Task.runStatuses.DONE) {
- return false;
- }
-
- else if (jake.program.opts['always-make']) {
- return true;
- }
-
- else {
-
-
- try {
- this.updateModTime();
- }
-
- catch(e) {
- if (typeof this.action == 'function') {
- return true;
- }
- else {
- throw new Error('File-task ' + this.fullName + ' has no ' +
- 'existing file, and no action to create one.');
- }
- }
-
-
- if (prereqs && prereqs.length) {
- for (let i = 0, ii = prereqs.length; i < ii; i++) {
- prereqName = prereqs[i];
- prereqTask = this.namespace.resolveTask(prereqName) ||
- jake.createPlaceholderFileTask(prereqName, this.namespace);
-
-
-
-
- if (prereqTask) {
- if (!isFileOrDirectory(prereqTask) ||
- (isFile(prereqTask) && prereqTask.modTime > this.modTime)) {
- return true;
- }
- }
- }
- this.taskStatus = Task.runStatuses.DONE;
- return false;
- }
-
- else {
-
- this.taskStatus = Task.runStatuses.DONE;
- return false;
- }
- }
- }
- updateModTime() {
- let stats = fs.statSync(this.name);
- this.modTime = stats.mtime;
- }
- complete() {
- if (!this.dummy) {
- this.updateModTime();
- }
-
- Task.prototype.complete.apply(this, arguments);
- }
- }
- exports.FileTask = FileTask;
- let DirectoryTask = require('./directory_task').DirectoryTask;
|