diff options
author | LinuxWizard42 <computerwizard@linuxmail.org> | 2022-10-12 22:54:37 +0300 |
---|---|---|
committer | LinuxWizard42 <computerwizard@linuxmail.org> | 2022-10-12 22:54:37 +0300 |
commit | 703e03aba33f234712206769f57717ba7d92d23d (patch) | |
tree | 0041f04ccb75bd5379c764e9fe42249fffe75fc3 /node_modules/dir-compare/src/entry/entryEquality.js | |
parent | ab6e257e6e9d9a483d7e86f220d8b209a2cd7753 (diff) | |
download | FlashRunner-703e03aba33f234712206769f57717ba7d92d23d.tar.gz FlashRunner-703e03aba33f234712206769f57717ba7d92d23d.tar.zst |
Added export_allowed file to make repository visible in cgit
Diffstat (limited to 'node_modules/dir-compare/src/entry/entryEquality.js')
-rw-r--r-- | node_modules/dir-compare/src/entry/entryEquality.js | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/node_modules/dir-compare/src/entry/entryEquality.js b/node_modules/dir-compare/src/entry/entryEquality.js new file mode 100644 index 0000000..f1b8d78 --- /dev/null +++ b/node_modules/dir-compare/src/entry/entryEquality.js @@ -0,0 +1,135 @@ +var fs = require('fs') +/** + * Compares two entries with identical name and type. + */ +module.exports = { + isEntryEqualSync: function (entry1, entry2, type, options) { + if (type === 'file') { + return isFileEqualSync(entry1, entry2, options) + } + if (type === 'directory') { + return isDirectoryEqual(entry1, entry2, options) + } + if (type === 'broken-link') { + return isBrokenLinkEqual() + } + throw new Error('Unexpected type ' + type) + }, + + isEntryEqualAsync: function (entry1, entry2, type, diffSet, options) { + if (type === 'file') { + return isFileEqualAsync(entry1, entry2, type, diffSet, options) + } + if (type === 'directory') { + return isDirectoryEqual(entry1, entry2, options) + } + if (type === 'broken-link') { + return isBrokenLinkEqual() + } + throw new Error('Unexpected type ' + type) + } +} + + +function isFileEqualSync(entry1, entry2, options) { + var p1 = entry1 ? entry1.absolutePath : undefined + var p2 = entry2 ? entry2.absolutePath : undefined + if (options.compareSymlink && !isSymlinkEqual(entry1, entry2)) { + return { same: false, reason: 'different-symlink' } + } + if (options.compareSize && entry1.stat.size !== entry2.stat.size) { + return { same: false, reason: 'different-size' } + } + if (options.compareDate && !isDateEqual(entry1.stat.mtime, entry2.stat.mtime, options.dateTolerance)) { + return { same: false, reason: 'different-date' } + } + if (options.compareContent && !options.compareFileSync(p1, entry1.stat, p2, entry2.stat, options)) { + return { same: false, reason: 'different-content' } + } + return { same: true } +} + +function isFileEqualAsync(entry1, entry2, type, diffSet, options) { + var p1 = entry1 ? entry1.absolutePath : undefined + var p2 = entry2 ? entry2.absolutePath : undefined + if (options.compareSymlink && !isSymlinkEqual(entry1, entry2)) { + return { same: false, reason: 'different-symlink' } + } + if (options.compareSize && entry1.stat.size !== entry2.stat.size) { + return { same: false, samePromise: undefined, reason: 'different-size' } + } + + if (options.compareDate && !isDateEqual(entry1.stat.mtime, entry2.stat.mtime, options.dateTolerance)) { + return { same: false, samePromise: undefined, reason: 'different-date' } + } + + if (options.compareContent) { + var samePromise = undefined + var subDiffSet + if (!options.noDiffSet) { + subDiffSet = [] + diffSet.push(subDiffSet) + } + samePromise = options.compareFileAsync(p1, entry1.stat, p2, entry2.stat, options) + .then(function (comparisonResult) { + var same, error + if (typeof (comparisonResult) === "boolean") { + same = comparisonResult + } else { + error = comparisonResult + } + + return { + entry1: entry1, entry2: entry2, same: same, + error: error, type1: type, type2: type, + diffSet: subDiffSet, + reason: same ? undefined : 'different-content' + } + }) + .catch(function (error) { + return { + error: error + } + }) + + return { same: undefined, samePromise: samePromise } + } + + return { same: true, samePromise: undefined } +} + +function isDirectoryEqual(entry1, entry2, options) { + if (options.compareSymlink && !isSymlinkEqual(entry1, entry2)) { + return { same: false, reason: 'different-symlink' } + } + return { same: true } +} + +function isBrokenLinkEqual() { + return { same: false, reason: 'broken-link' } // broken links are never considered equal +} + +/** + * Compares two dates and returns true/false depending on tolerance (milliseconds). + * Two dates are considered equal if the difference in milliseconds between them is less or equal than tolerance. + */ +function isDateEqual(date1, date2, tolerance) { + return Math.abs(date1.getTime() - date2.getTime()) <= tolerance ? true : false +} + +/** + * Compares two entries for symlink equality. + */ +function isSymlinkEqual(entry1, entry2) { + if (!entry1.isSymlink && !entry2.isSymlink) { + return true + } + if (entry1.isSymlink && entry2.isSymlink && hasIdenticalLink(entry1.absolutePath, entry2.absolutePath)) { + return true + } + return false +} + +function hasIdenticalLink(path1, path2) { + return fs.readlinkSync(path1) === fs.readlinkSync(path2) +}
\ No newline at end of file |