Wiki: New pages not saved correctly if ending the file with ##

Created on 1 May 2017  路  5Comments  路  Source: Requarks/wiki

Actual behavior

When saving a new page and ending it with ## you get an error. The new page can't be found under All Pages, but the .md file (with all the text saved correctly) is in the repo folder in the project root. Afterwards if you try and create a new page with the same name it will say that the file already exists (which is true, it's just not listed under All Pages).

Expected behavior

The saved file can be found under All Pages.

Steps to reproduce the behavior

Create a new file and use this text:

<!-- TITLE: Test -->
<!-- SUBTITLE: A quick summary of Test -->

# Header
text
## sub header
More text and now I will end with two hash tags
##

Extra info

This was on macOS 10.12.4 running [email protected].

This is from the error log:

2017-05-01T11:43:37.003Z - [31merror[39m: [SERVER]  OperationalError: Entry test does not exist!
    at fs.statAsync.then.catch (/wikijs-test/server/libs/entries.js:158:13)
    at tryCatcher (/wikijs-test/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/wikijs-test/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:689:18)
    at Async._drainQueue (/wikijs-test/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/wikijs-test/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues (/wikijs-test/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
2017-05-01T11:43:37.005Z - [31merror[39m: [SERVER]  TypeError: Cannot read property 'title' of undefined
    at self.fetchOriginal.catch.then.catch.then (/wikijs-test/server/libs/entries.js:258:28)
    at tryCatcher (/wikijs-test/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/wikijs-test/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:693:18)
    at Promise._fulfill (/wikijs-test/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:582:21)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:693:18)
    at Promise._fulfill (/wikijs-test/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/wikijs-test/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/wikijs-test/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:693:18)
    at Promise._fulfill (/wikijs-test/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/wikijs-test/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/wikijs-test/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:689:18)
    at Async._drainQueue (/wikijs-test/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/wikijs-test/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues (/wikijs-test/node_modules/bluebird/js/release/async.js:17:14)

If you need the entire error log I can send it on gitter.

bug

All 5 comments

note: this is true if there are any unlabeled headers: #, ##, ###, not just eof.

I've done some more testing and I've also noticed what @bitworm saw, as well as some more interesting behavior: if you edit any existing file, add in an empty header and then save it you will see the previous version of the page when going back to 'view mode'. Also, this appears in the error log after doing this:

2017-05-01T17:56:43.147Z - [31merror[39m: [SERVER]  OperationalError: Entry dd does not exist!
    at fs.statAsync.then.catch (/wikijs-test/server/libs/entries.js:158:13)
    at tryCatcher (/wikijs-test/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/wikijs-test/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:689:18)
    at Async._drainQueue (/wikijs-test/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/wikijs-test/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues (/wikijs-test/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
2017-05-01T17:56:43.149Z - [31merror[39m: [SERVER]  TypeError: Cannot read property 'title' of undefined
    at self.fetchOriginal.catch.then.catch.then (/wikijs-test/server/libs/entries.js:258:28)
    at tryCatcher (/wikijs-test/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/wikijs-test/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:693:18)
    at Promise._fulfill (/wikijs-test/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:582:21)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:693:18)
    at Promise._fulfill (/wikijs-test/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/wikijs-test/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/wikijs-test/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:693:18)
    at Promise._fulfill (/wikijs-test/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/wikijs-test/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/wikijs-test/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/wikijs-test/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/wikijs-test/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/wikijs-test/node_modules/bluebird/js/release/promise.js:689:18)
    at Async._drainQueue (/wikijs-test/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/wikijs-test/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues (/wikijs-test/node_modules/bluebird/js/release/async.js:17:14)

If you then go back into the editor, all the changes you made are still there. And if you add something to the empty header and save it, it is now saved correctly.

This is because the markdown-to-HTML rendering failed. So the view version is still the last HTML render that completed successfully while the edit version is the raw markdown.

There's indeed a bug with empty headers. I'll take a look at it.

Fixed for Beta 12 (a9ed499006ecb38df4f4f47f536c3f983bdb7266)

Cool! Thanks for the quick response :)

Was this page helpful?
0 / 5 - 0 ratings