From 68ad5c0c1aaef33a126de33c88f260d48c7d18ba Mon Sep 17 00:00:00 2001 From: MinchinWeb Date: Sat, 11 Apr 2020 16:14:08 -0600 Subject: Ensure exported entries end in a newline for Markdown and YAML exporters (#908) * [Markdown Exporter] [YAML Exporter] Ensure exported entires end in a newline Fixes #768, Fixes #881. If the exported entry does not have a final empty line, this will add one on export. Some Markdown parsers get picky about not having a empty line above a heading.... * fix black formatting issues * explicitly sort filenames to deal with inconsistent default file ordering on different OS's * Update .gitignore * Update test for typo fix Co-authored-by: Jonathan Wren --- .gitignore | 3 ++- features/regression.feature | 37 +++++++++++++++++++++++++++++++++++++ features/steps/export_steps.py | 5 +++++ jrnl/plugins/markdown_exporter.py | 4 ++++ jrnl/plugins/yaml_exporter.py | 4 ++++ 5 files changed, 52 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2382cabe..db6df82b 100644 --- a/.gitignore +++ b/.gitignore @@ -42,11 +42,12 @@ obj # virtaulenv env/ env*/ +venv*/ # PyCharm Project files .idea/ -# export testing director +# export testing directories exp/ _extras/ diff --git a/features/regression.feature b/features/regression.feature index 4dc35b5a..033ec95c 100644 --- a/features/regression.feature +++ b/features/regression.feature @@ -123,6 +123,43 @@ Feature: Zapped bugs should stay dead. Then the output should contain "Adding an entry right now." Then the output should not contain "A future entry." + # See issues #768 and #881 + # the "deletion" journal is used because it doesn't have a newline at the + # end of the last entry + Scenario: Add a blank line to Markdown export is there isn't one already + Given we use the config "deletion.yaml" + When we run "jrnl --export markdown" + Then the output should be + """ + # 2019 + + ## October + + ### 2019-10-29 11:11 First entry. + + + ### 2019-10-29 11:11 Second entry. + + + ### 2019-10-29 11:13 Third entry. + + """ + + # See issues #768 and #881 + Scenario: Add a blank line to YAML export is there isn't one already + Given we use the config "deletion.yaml" + And we created a directory named "bug768" + When we run "jrnl --export yaml -o bug768" + Then "bug768" should contain the files ["2019-10-29_first-entry.md", "2019-10-29_second-entry.md", "2019-10-29_third-entry.md"] + And the content of exported yaml "bug768/2019-10-29_third-entry.md" should be + """ + title: Third entry. + date: 2019-10-29 11:13 + starred: False + tags: + + """ + @deployment_tests Scenario: Version numbers should stay in sync Given we use the config "basic.yaml" diff --git a/features/steps/export_steps.py b/features/steps/export_steps.py index b7965ab8..40127ecc 100644 --- a/features/steps/export_steps.py +++ b/features/steps/export_steps.py @@ -96,6 +96,11 @@ def create_directory(context, dir_name): def assert_dir_contains_files(context, dir_name, expected_files_json_list): actual_files = os.listdir(dir_name) expected_files = json.loads(expected_files_json_list) + + # sort to deal with inconsistent default file ordering on different OS's + actual_files.sort() + expected_files.sort() + assert actual_files == expected_files, [actual_files, expected_files] diff --git a/jrnl/plugins/markdown_exporter.py b/jrnl/plugins/markdown_exporter.py index 08527ae4..305a9d73 100644 --- a/jrnl/plugins/markdown_exporter.py +++ b/jrnl/plugins/markdown_exporter.py @@ -53,6 +53,10 @@ class MarkdownExporter(TextExporter): previous_line = line newbody = newbody + previous_line # add very last line + # make sure the export ends with a blank line + if previous_line not in ["\r", "\n", "\r\n", "\n\r"]: + newbody = newbody + os.linesep + if warn_on_heading_level is True: print( f"{WARNING_COLOR}WARNING{RESET_COLOR}: " diff --git a/jrnl/plugins/yaml_exporter.py b/jrnl/plugins/yaml_exporter.py index 911e607c..5af19585 100644 --- a/jrnl/plugins/yaml_exporter.py +++ b/jrnl/plugins/yaml_exporter.py @@ -64,6 +64,10 @@ class YAMLExporter(TextExporter): previous_line = line newbody = newbody + previous_line # add very last line + # make sure the export ends with a blank line + if previous_line not in ["\r", "\n", "\r\n", "\n\r"]: + newbody = newbody + os.linesep + if warn_on_heading_level is True: print( "{}WARNING{}: Headings increased past H6 on export - {} {}".format( -- cgit v1.2.3