-
-
Notifications
You must be signed in to change notification settings - Fork 83
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
Recursion limit exceeded #1
Comments
Hey there @cristianvasquez! To make sure I understand correctly:
Is that correct? If so, this is by design. A note which includes itself would otherwise lead to infinite recursion (which would eventually cause the program to abort with a panic). I'm not sure off-hand how Obsidian itself handles this (I think it embeds about 7 iframes and then just stops?) but I chose to make this an explicit error to make a note like this very obvious. Would you prefer to see a different behavior here? |
I don't know what should be expected. But this behavior forced me to change my notes, otherwise, I cannot export. This happens if there is any 'closed circuit' in notes that expand. By the way, why it expands the notes? |
Perhaps some sort of .gitignore but for the export would allow ignoring, Or a fail silently option? |
By this, do you mean note A which transcludes note B, where note B in turn transcludes note A again?
I'm afraid I don't understand this question, could you elaborate?
This is already supported, see https://github.com/zoni/obsidian-export#ignoring-files 😄
I think I'd like to understand the use-case slightly better before adding functionality, but I wouldn't be opposed to implementing something like that. |
Oh!... the ignore option was what I looked for :) Regarding the question, I still don't get why a Recursion limit happened :) shouldn't each note be processed only once? |
The current implementation is somewhat naive in that regard. This function is responsible for parsing an Obsidian Markdown file: Line 243 in 7027290
If this encounters the Lines 301 to 303 in 7027290
Line 341 in 7027290
This is what allows a loop to be created. However, I'm already passing through a context struct to hold information about the note that is being processed: Lines 90 to 97 in 7027290
Technically, I would be able to keep track of all files that we've processed up to the root note, which would allow implementing the exact behavior you mention (skip a note if it's already been processed). I may play around with that and implement this (possibly as an optional mode) somewhere over the next couple of weeks. Stay tuned 😄 |
It's possible to end up with "recursive embeds" when two notes embed each other. This happens for example when a `Note A.md` contains `![[Note B]]` but `Note B.md` also contains `![[Note A]]`. By default, this will trigger an error and display the chain of notes which caused the recursion. Using the new `--no-recursive-embeds`, if a note is encountered for a second time while processing the original note, rather than embedding it again a link to the note is inserted instead to break the cycle. See also: #1
Hey @cristianvasquez, happy new year. 😃 I've just published v0.5.0 which includes a new option, |
happy new year to you @zoni ! Thanks for the new option :) |
Hello @zoni, thanks for this plugin!. It's amazing.
My report:
When exporting the note:
Transcluding.md, with the contents:
The action of ![[Transcluding]]
I get:
The text was updated successfully, but these errors were encountered: