-
-
Notifications
You must be signed in to change notification settings - Fork 283
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix #231 allow square brackets in path #264
Changes from 6 commits
179e339
9b842b0
8c4405c
a065c7f
d9e9d32
0ffc4f7
e19b4ee
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
const mkdirp = require('mkdirp'); | ||
const path = require('path'); | ||
const fs = require('fs'); | ||
const removeIllegalCharacterForWindows = require('./removeIllegalCharacterForWindows'); | ||
|
||
const baseDir = 'compiled_tests/helpers'; | ||
|
||
const specialFiles = { | ||
'[special?directory]/nested/nestedfile.txt': '', | ||
'[special?directory]/(special-*file).txt': 'special', | ||
'[special?directory]/directoryfile.txt': 'new' | ||
}; | ||
|
||
Object.keys(specialFiles).forEach(function (originFile) { | ||
const file = removeIllegalCharacterForWindows(originFile); | ||
const dir = path.dirname(file); | ||
mkdirp.sync(path.join(baseDir, dir)); | ||
fs.writeFileSync(path.join(baseDir, file), specialFiles[originFile]); | ||
}); | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
const path = require('path'); | ||
|
||
module.exports = function (string) { | ||
return path.sep === '/' ? string : string.replace(/[*?"<>|]/g, ''); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If those are illegal characters on windows only then a check for windows should be used instead of |
||
}; | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,7 +8,7 @@ export default function escape(context, from) { | |
// Handles special characters in paths | ||
const absoluteContext = path.resolve(context) | ||
.replace(/\\/, '/') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't this replacement be removed if the character class escaping method is being used? Also, on MacOS, this |
||
.replace(/[\*|\?|\!|\(|\)|\[|\]|\{|\}]/g, (substring) => `\\${substring}`); | ||
.replace(/[\*|\?|\!|\(|\)|\[|\{|\}]/g, (substring) => `[${substring}]`); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The closing brace should probably stay for consistency (i.e., makes for a simple rule of escape all special characters). |
||
|
||
if (!from) { | ||
return absoluteContext; | ||
|
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,6 +15,8 @@ import cacache from 'cacache'; | |
import isGzip from 'is-gzip'; | ||
import zlib from 'zlib'; | ||
|
||
import removeIllegalCharacterForWindows from '../scripts/removeIllegalCharacterForWindows'; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This should probably be in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @loveky yep, move this to |
||
|
||
const BUILD_DIR = path.join(__dirname, 'build'); | ||
const HELPER_DIR = path.join(__dirname, 'helpers'); | ||
const TEMP_DIR = path.join(__dirname, 'tempdir'); | ||
|
@@ -58,6 +60,13 @@ describe('apply function', () => { | |
// Ideally we pass in patterns and confirm the resulting assets | ||
const run = (opts) => { | ||
return new Promise((resolve, reject) => { | ||
if (Array.isArray(opts.patterns)) { | ||
opts.patterns.forEach(function (pattern) { | ||
if (pattern.context) { | ||
pattern.context = removeIllegalCharacterForWindows(pattern.context); | ||
} | ||
}); | ||
} | ||
const plugin = CopyWebpackPlugin(opts.patterns, opts.options); | ||
|
||
// Get a mock compiler to pass to plugin.apply | ||
|
@@ -109,7 +118,7 @@ describe('apply function', () => { | |
return run(opts) | ||
.then((compilation) => { | ||
if (opts.expectedAssetKeys && opts.expectedAssetKeys.length > 0) { | ||
expect(compilation.assets).to.have.all.keys(opts.expectedAssetKeys); | ||
expect(compilation.assets).to.have.all.keys(opts.expectedAssetKeys.map(removeIllegalCharacterForWindows)); | ||
} else { | ||
expect(compilation.assets).to.deep.equal({}); | ||
} | ||
|
@@ -451,7 +460,7 @@ describe('apply function', () => { | |
], | ||
patterns: [{ | ||
from: '*/*.*', | ||
test: /([^\/]+)\/([^\/]+)\.\w+$/, | ||
test: `([^\\${path.sep}]+)\\${path.sep}([^\\${path.sep}]+)\\.\\w+$`, | ||
to: '[1]-[2].[ext]' | ||
}] | ||
}) | ||
|
@@ -984,7 +993,7 @@ describe('apply function', () => { | |
'nested/nestedfile.txt' | ||
], | ||
patterns: [{ | ||
from: '[special?directory]' | ||
from: (path.sep === '/' ? '[special?directory]' : '[specialdirectory]') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The @evilebottnawi A Windows CI instance would probably be very useful for this plugin since windows pathing is vastly different than linux/MacOS/etc. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @clydin we already use |
||
}] | ||
}) | ||
.then(done) | ||
|
@@ -1390,7 +1399,7 @@ describe('apply function', () => { | |
'noextension' | ||
], | ||
options: { | ||
ignore: ['directory/**/*', '\\[special\\?directory\\]/**/*'] | ||
ignore: ['directory/**/*', (path.sep === '/' ? '\\[special\\?directory\\]/**/*' : '[[]specialdirectory]/**/*')] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The escape sequences should be consistent and there should really be a test for both escaping techniques (where appropriate) as they are both accepted. |
||
}, | ||
patterns: [{ | ||
from: '.' | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
a test with
!
in the file/path should be added to ensure that[!]
works as intended.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@loveky yep, add test