mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-29 02:53:48 -05:00
Keep existing docs as docs when re-importing, regardless of file extension (#9104)
GitOrigin-RevId: b44129e87e97db4a18a77edda7e59631aa222dd5
This commit is contained in:
parent
54dbfa52a4
commit
09cea1cb85
4 changed files with 65 additions and 8 deletions
|
@ -88,6 +88,7 @@ module.exports = UpdateMerger = {
|
||||||
FileTypeManager.getType(
|
FileTypeManager.getType(
|
||||||
path,
|
path,
|
||||||
fsPath,
|
fsPath,
|
||||||
|
existingFileType,
|
||||||
function (err, { binary, encoding }) {
|
function (err, { binary, encoding }) {
|
||||||
if (err != null) {
|
if (err != null) {
|
||||||
return callback(err)
|
return callback(err)
|
||||||
|
|
|
@ -188,7 +188,8 @@ async function importFile(fsPath, projectPath) {
|
||||||
|
|
||||||
const { binary, encoding } = await FileTypeManager.promises.getType(
|
const { binary, encoding } = await FileTypeManager.promises.getType(
|
||||||
filename,
|
filename,
|
||||||
fsPath
|
fsPath,
|
||||||
|
null
|
||||||
)
|
)
|
||||||
if (binary) {
|
if (binary) {
|
||||||
return new FileImport(projectPath, fsPath)
|
return new FileImport(projectPath, fsPath)
|
||||||
|
|
|
@ -43,7 +43,7 @@ const FileTypeManager = {
|
||||||
},
|
},
|
||||||
|
|
||||||
// returns charset as understood by fs.readFile,
|
// returns charset as understood by fs.readFile,
|
||||||
getType(name, fsPath, callback) {
|
getType(name, fsPath, existingFileType, callback) {
|
||||||
if (!name) {
|
if (!name) {
|
||||||
return callback(
|
return callback(
|
||||||
new Error(
|
new Error(
|
||||||
|
@ -59,7 +59,7 @@ const FileTypeManager = {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
const basename = Path.basename(name)
|
const basename = Path.basename(name)
|
||||||
if (!_isTextFilename(basename)) {
|
if (existingFileType !== 'doc' && !_isTextFilename(basename)) {
|
||||||
return callback(null, { binary: true })
|
return callback(null, { binary: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,7 @@ describe('FileTypeManager', function () {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
filename,
|
filename,
|
||||||
'utf8.tex',
|
'utf8.tex',
|
||||||
|
null,
|
||||||
(err, { binary }) => {
|
(err, { binary }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -112,6 +113,7 @@ describe('FileTypeManager', function () {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
'/file.tex',
|
'/file.tex',
|
||||||
'utf8.tex',
|
'utf8.tex',
|
||||||
|
null,
|
||||||
(err, { binary }) => {
|
(err, { binary }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -124,7 +126,7 @@ describe('FileTypeManager', function () {
|
||||||
|
|
||||||
it('should not try to determine the encoding of large files', function (done) {
|
it('should not try to determine the encoding of large files', function (done) {
|
||||||
this.stats.size = 2 * 1024 * 1024 // 2Mb
|
this.stats.size = 2 * 1024 * 1024 // 2Mb
|
||||||
this.FileTypeManager.getType('/file.tex', 'utf8.tex', err => {
|
this.FileTypeManager.getType('/file.tex', 'utf8.tex', null, err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
}
|
}
|
||||||
|
@ -137,6 +139,7 @@ describe('FileTypeManager', function () {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
'/file.tex',
|
'/file.tex',
|
||||||
'utf8.tex',
|
'utf8.tex',
|
||||||
|
null,
|
||||||
(err, { binary, encoding }) => {
|
(err, { binary, encoding }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -153,6 +156,7 @@ describe('FileTypeManager', function () {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
'/file.tex',
|
'/file.tex',
|
||||||
'latin1.tex',
|
'latin1.tex',
|
||||||
|
null,
|
||||||
(err, { binary, encoding }) => {
|
(err, { binary, encoding }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -169,6 +173,7 @@ describe('FileTypeManager', function () {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
'/file.tex',
|
'/file.tex',
|
||||||
'utf16.tex',
|
'utf16.tex',
|
||||||
|
null,
|
||||||
(err, { binary, encoding }) => {
|
(err, { binary, encoding }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -185,6 +190,7 @@ describe('FileTypeManager', function () {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
'/file.tex',
|
'/file.tex',
|
||||||
'latin1-null.tex',
|
'latin1-null.tex',
|
||||||
|
null,
|
||||||
(err, { binary }) => {
|
(err, { binary }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -199,6 +205,7 @@ describe('FileTypeManager', function () {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
'/file.tex',
|
'/file.tex',
|
||||||
'utf8-null.tex',
|
'utf8-null.tex',
|
||||||
|
null,
|
||||||
(err, { binary }) => {
|
(err, { binary }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -213,6 +220,7 @@ describe('FileTypeManager', function () {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
'/file.tex',
|
'/file.tex',
|
||||||
'utf8-non-bmp.tex',
|
'utf8-non-bmp.tex',
|
||||||
|
null,
|
||||||
(err, { binary }) => {
|
(err, { binary }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -227,6 +235,7 @@ describe('FileTypeManager', function () {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
'/file.tex',
|
'/file.tex',
|
||||||
'utf8-control-chars.tex',
|
'utf8-control-chars.tex',
|
||||||
|
null,
|
||||||
(err, { binary, encoding }) => {
|
(err, { binary, encoding }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -250,8 +259,65 @@ describe('FileTypeManager', function () {
|
||||||
BINARY_FILENAMES.forEach(filename => {
|
BINARY_FILENAMES.forEach(filename => {
|
||||||
it(`should classify ${filename} as binary`, function (done) {
|
it(`should classify ${filename} as binary`, function (done) {
|
||||||
this.FileTypeManager.getType(
|
this.FileTypeManager.getType(
|
||||||
'/file.tex',
|
filename,
|
||||||
'utf8.tex',
|
'latin1.tex', // even if the content is not binary
|
||||||
|
null,
|
||||||
|
(err, { binary }) => {
|
||||||
|
if (err) {
|
||||||
|
return done(err)
|
||||||
|
}
|
||||||
|
binary.should.equal(true)
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not try to get the character encoding', function (done) {
|
||||||
|
this.FileTypeManager.getType('/file.png', 'utf8.tex', null, err => {
|
||||||
|
if (err) {
|
||||||
|
return done(err)
|
||||||
|
}
|
||||||
|
sinon.assert.notCalled(this.isUtf8)
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should recognise new binary files as binary', function (done) {
|
||||||
|
this.FileTypeManager.getType(
|
||||||
|
'/file.py',
|
||||||
|
'latin1.tex',
|
||||||
|
null,
|
||||||
|
(err, { binary }) => {
|
||||||
|
if (err) {
|
||||||
|
return done(err)
|
||||||
|
}
|
||||||
|
binary.should.equal(true)
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should recognise existing binary files as binary', function (done) {
|
||||||
|
this.FileTypeManager.getType(
|
||||||
|
'/file.py',
|
||||||
|
'latin1.tex',
|
||||||
|
'file',
|
||||||
|
(err, { binary }) => {
|
||||||
|
if (err) {
|
||||||
|
return done(err)
|
||||||
|
}
|
||||||
|
binary.should.equal(true)
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should preserve existing non-binary files as non-binary', function (done) {
|
||||||
|
this.FileTypeManager.getType(
|
||||||
|
'/file.py',
|
||||||
|
'latin1.tex',
|
||||||
|
'doc',
|
||||||
(err, { binary }) => {
|
(err, { binary }) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
|
@ -262,17 +328,6 @@ describe('FileTypeManager', function () {
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should not try to get the character encoding', function (done) {
|
|
||||||
this.FileTypeManager.getType('/file.png', 'utf8.tex', err => {
|
|
||||||
if (err) {
|
|
||||||
return done(err)
|
|
||||||
}
|
|
||||||
sinon.assert.notCalled(this.isUtf8)
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('shouldIgnore', function () {
|
describe('shouldIgnore', function () {
|
||||||
|
|
Loading…
Reference in a new issue