detect symbolic link packages

* detect symbolic link packages
This commit is contained in:
Amin Yahyaabadi 2020-09-08 08:04:47 -05:00 committed by GitHub
parent 10dfeb8c56
commit 5b2c05a745
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 1 deletions

View File

@ -0,0 +1,4 @@
{
"name": "package-symlinked",
"version": "0.1.0"
}

View File

@ -1890,4 +1890,26 @@ describe('PackageManager', () => {
});
});
});
describe('::getAvailablePackageNames', () => {
it('detects a symlinked package', () => {
const packageSymLinkedSource = path.join(
__dirname,
'fixtures',
'packages',
'folder',
'package-symlinked'
);
const destination = path.join(
atom.packages.getPackageDirPaths()[0],
'package-symlinked'
);
if (!fs.isDirectorySync(destination)) {
fs.symlinkSync(packageSymLinkedSource, destination, 'junction');
}
const availablePackages = atom.packages.getAvailablePackageNames();
expect(availablePackages.includes('package-symlinked')).toBe(true);
fs.removeSync(destination);
});
});
});

View File

@ -419,9 +419,16 @@ module.exports = class PackageManager {
for (const packageDirPath of this.packageDirPaths) {
if (fs.isDirectorySync(packageDirPath)) {
// checks for directories.
// dirent is faster, but for checking symbolic link we need stat.
const packageNames = fs
.readdirSync(packageDirPath, { withFileTypes: true })
.filter(dirent => dirent.isDirectory())
.filter(
dirent =>
dirent.isDirectory() ||
(dirent.isSymbolicLink() &&
fs.isDirectorySync(path.join(packageDirPath, dirent.name)))
)
.map(dirent => dirent.name);
for (const packageName of packageNames) {