summaryrefslogtreecommitdiff
path: root/node_modules/dir-compare/src/entry/entryBuilder.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/entryBuilder.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/entryBuilder.js')
-rw-r--r--node_modules/dir-compare/src/entry/entryBuilder.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/node_modules/dir-compare/src/entry/entryBuilder.js b/node_modules/dir-compare/src/entry/entryBuilder.js
new file mode 100644
index 0000000..6a46c62
--- /dev/null
+++ b/node_modules/dir-compare/src/entry/entryBuilder.js
@@ -0,0 +1,102 @@
+var fs = require('fs')
+var minimatch = require('minimatch')
+var pathUtils = require('path')
+var entryComparator = require('./entryComparator')
+
+var PATH_SEP = pathUtils.sep
+
+module.exports = {
+ /**
+ * Returns the sorted list of entries in a directory.
+ */
+ buildDirEntries: function (rootEntry, dirEntries, relativePath, options) {
+ var res = []
+ for (var i = 0; i < dirEntries.length; i++) {
+ var entryName = dirEntries[i]
+ var entryAbsolutePath = rootEntry.absolutePath + PATH_SEP + entryName
+ var entryPath = rootEntry.path + PATH_SEP + entryName
+
+ var entry = this.buildEntry(entryAbsolutePath, entryPath, entryName)
+ if (options.skipSymlinks && entry.isSymlink) {
+ entry.stat = undefined
+ }
+
+ if (filterEntry(entry, relativePath, options)) {
+ res.push(entry)
+ }
+ }
+ return res.sort((a, b) => entryComparator.compareEntry(a, b, options))
+ },
+
+ buildEntry: function (absolutePath, path, name) {
+ var stats = getStatIgnoreBrokenLink(absolutePath)
+
+ return {
+ name: name,
+ absolutePath: absolutePath,
+ path: path,
+ stat: stats.stat,
+ lstat: stats.lstat,
+ isSymlink: stats.lstat.isSymbolicLink(),
+ isBrokenLink: stats.isBrokenLink,
+ isDirectory: stats.stat.isDirectory()
+ }
+ },
+
+}
+
+
+function getStatIgnoreBrokenLink(absolutePath) {
+ var lstat = fs.lstatSync(absolutePath)
+ try {
+ return {
+ stat: fs.statSync(absolutePath),
+ lstat: lstat,
+ isBrokenLink: false
+ }
+ } catch (error) {
+ if (error.code === 'ENOENT') {
+ return {
+ stat: lstat,
+ lstat: lstat,
+ isBrokenLink: true
+ }
+ }
+ throw error
+ }
+}
+
+/**
+ * Filter entries by file name. Returns true if the file is to be processed.
+ */
+function filterEntry(entry, relativePath, options) {
+ if (entry.isSymlink && options.skipSymlinks) {
+ return false
+ }
+ var path = pathUtils.join(relativePath, entry.name)
+
+ if ((entry.stat.isFile() && options.includeFilter) && (!match(path, options.includeFilter))) {
+ return false
+ }
+
+ if ((options.excludeFilter) && (match(path, options.excludeFilter))) {
+ return false
+ }
+
+ return true
+}
+
+/**
+ * Matches path by pattern.
+ */
+function match(path, pattern) {
+ var patternArray = pattern.split(',')
+ for (var i = 0; i < patternArray.length; i++) {
+ var pat = patternArray[i]
+ if (minimatch(path, pat, { dot: true, matchBase: true })) { //nocase
+ return true
+ }
+ }
+ return false
+}
+