summaryrefslogtreecommitdiff
path: root/node_modules/dir-compare/src/entry/entryEquality.js
diff options
context:
space:
mode:
authorLinuxWizard42 <computerwizard@linuxmail.org>2022-10-12 22:54:37 +0300
committerLinuxWizard42 <computerwizard@linuxmail.org>2022-10-12 22:54:37 +0300
commit703e03aba33f234712206769f57717ba7d92d23d (patch)
tree0041f04ccb75bd5379c764e9fe42249fffe75fc3 /node_modules/dir-compare/src/entry/entryEquality.js
parentab6e257e6e9d9a483d7e86f220d8b209a2cd7753 (diff)
downloadFlashRunner-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.js135
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