quarto-dev / quarto-cli

Open-source scientific and technical publishing system built on Pandoc.
https://quarto.org
Other
3.92k stars 322 forks source link

Rendering: ERROR: The directory name is invalid #3871

Open peterejkemp opened 1 year ago

peterejkemp commented 1 year ago

Bug description

Hi,

I have a multi page quarto website, with a index.qmd and multiple linked chapters in a chapters folder.

When I try and render the index.qmd it sometimes works and sometimes doesn't with the error:

ERROR: The directory name is invalid. (os error 267), readdir 'C:\

\index_files\desktop.ini' for path "C:\
\index_files\desktop.ini"

It was the case that the folder index_files persisted from a previous attempt to render the site, and deleting it would let the site render, but that's not working now

I have google drive running and thought it might be that locking the index_files folder to stop it deleting. I've tried to find this issue raised elsewhere, but haven;t had any luck. Annoyingly it;s very hard to reproduce, but does occur on the same project being run on both my laptop and desktop

Checklist

cscheid commented 1 year ago

Thanks for the report. Can you confirm that your document currently exists inside a google drive? Do you see the issue outside of the google drive directory?

peterejkemp commented 1 year ago

The project is in Google Drive, but I've just copied the project to a non-Google Drive folder and it is now working. Also creating an empty index_files folder manually to the non-Google Drive location doesn't seem to break it. Very strange.

So it breaks on Google drive but not always. And when it's decided it't not liking me, when I've paused google drive or disabled it, it still errors out.

cscheid commented 1 year ago

Thank you, that's helpful context. We've had other reports of quarto failing in google drive, onedrive, etc. Unfortunately, the non-determinism makes it hard for us to track it down. Our only known workaround is to move the project outside of google drive.

peterejkemp commented 1 year ago

A quick update

If I run it as a single index.html page with everything embedded it does work as long as I have manually deleted the index_files folder and copied everything to a non-google drive folder before I select render.

when trying to make a multipage website, using the _quarto.yml file to define the files to render and the left navigation, it breaks as above, irrespective of where the files are. The yaml parses, but it breaks on either index.qmd or simple/01-Intro_to_quant_methods.qmd complaining about the readdir error.


number-sections: true

project:
  type: website
  render:
      #- !simple/
    - index.qmd
    - about.qmd
    - simple/01-Intro_to_quant_methods.qmd
    - simple/02-1-Intro_to_analysis_software.qmd
    - simple/02-2-Intro_to_analysis_software.qmd
    - simple/02-2-Intro_to_analysis_software.qmd
    - simple/03-Differing_performance_in_STEM.qmd
    - simple/04-Presentations.qmd
    - simple/05-Gender_differences.qmd
    - simple/06-Maths_anxiety.qmd
    - simple/07-Inquiry_learning_in_science.qmd
    - simple/08-Science_capital.qmd
    - simple/09-Assignment_3_tutorials.qmd
    - simple/10-teachers_relationships_and_STEM_achievement.qmd
    - simple/11-selecting_statistical_tools.qmd
    - simple/12-effective_international_STEM_ed.qmd
    - simple/A1-PISA_analysis.qmd
    - simple/A2-DfE_analysis.qmd
    - simple/A3-TIMSS_analysis.qmd
    - simple/A4-Other_datasets.qmd
    - simple/QandA.qmd

execute:
  freeze: auto

website:
  title: "MASTEMR"
  navbar:
    logo: images/KCL_logo.png
    logo-href: google.com
    left:
      - href: index.qmd
        text: Home
     # - about.qmd

  sidebar:
    style: "docked"
    search: true
    contents:
      - section: "Sessions"
        contents:
          - simple/01-Intro_to_quant_methods.qmd
          - simple/02-1-Intro_to_analysis_software.qmd
          - simple/02-2-Intro_to_analysis_software.qmd
          - simple/02-2-Intro_to_analysis_software.qmd
          - simple/03-Differing_performance_in_STEM.qmd
          - simple/04-Presentations.qmd
          - simple/05-Gender_differences.qmd
          - simple/06-Maths_anxiety.qmd
          - simple/07-Inquiry_learning_in_science.qmd
          - simple/08-Science_capital.qmd
          - simple/09-Assignment_3_tutorials.qmd
          - simple/10-teachers_relationships_and_STEM_achievement.qmd
          - simple/11-selecting_statistical_tools.qmd
          - simple/12-effective_international_STEM_ed.qmd
      - section: "Data sets"
        contents:
          - simple/A1-PISA_analysis.qmd
          - simple/A2-DfE_analysis.qmd
          - simple/A3-TIMSS_analysis.qmd
          - simple/A4-Other_datasets.qmd
      - section: "Common questions"
        contents:
          - simple/QandA.qmd

format:
  html:
    theme: journal #cosmo
    css: css/CRESTEMR.css
    toc: true
    code-line-numbers: true
    code-link: true

editor: 
  mode: source

crossref: 
  chapters: true

bibliography: references/mastemr.bib
peterejkemp commented 8 months ago

Hi, I can see this is now in v1.5. Just to add that the issue appears to be getting worse. I've written code that every time I want to output a website, copies the whole RProj directory from the google drive to another non-google drive, it then manually runs quarto render on that directory. This was working fine until recently, when it's now breaking randomly and giving me the following error:

[3/9] chapters\access.qmd

processing file: access.qmd

output file: access.knit.md

ERROR: The directory name is invalid. (os error 267), readdir 'D:\temp\TRACER\chapters\access_files\desktop.ini' for path "D:\temp\TRACER\chapters\access_files\desktop.ini"

Error: The directory name is invalid. (os error 267), readdir 'D:\temp\TRACER\chapters\access_files\desktop.ini'
    at Object.readDirSync (deno:runtime/js/30_fs.js:120:16)
    at walkSync (file:///C:/Users/xxxx/AppData/Local/Apps/Quarto/bin/quarto.js:2800:24)
    at walkSync.next (<anonymous>)
    at copyMinimal (file:///C:/Users/xxxx/AppData/Local/Apps/Quarto/bin/quarto.js:58495:16)
    at copyToProjectFreezer (file:///C:/Users/xxxx/AppData/Local/Apps/Quarto/bin/quarto.js:86355:17)
    at renderExecute (file:///C:/Users/xxxx/AppData/Local/Apps/Quarto/bin/quarto.js:86488:9)
    at async renderFiles (file:///C:/Users/xxxx/AppData/Local/Apps/Quarto/bin/quarto.js:86593:51)
    at async renderProject (file:///C:/Users/xxxx/AppData/Local/Apps/Quarto/bin/quarto.js:86800:25)
    at async Command.fn (file:///C:/Users/xxxx/AppData/Local/Apps/Quarto/bin/quarto.js:90856:32)
    at async Command.execute (file:///C:/Users/xxxx/AppData/Local/Apps/Quarto/bin/quarto.js:8437:13)
[1] 1

After running quarto render multiple times and not editing any files, it eventually renders, as if it renders a page, crashes, finds the cache for that render and on the next render pass renders the next page, crashes, and so on.

cderv commented 8 months ago

Do you have a repo available for your project we could use to help reproduce ?

The new error you get is happening at the freeze stage. You probably have freeze feature activated. I don't know exactly what happens but is this error always with desktop.ini file ?

This is a windows special file (https://learn.microsoft.com/en-us/windows/win32/shell/how-to-customize-folders-with-desktop-ini) that was probably created automatically in some folders. I have some on my windows too.

I don't remember anything changing in our freeze process, but I'll check why this file would be identified to be copied to project freezer as a folder - which the issue seems to indicate; maybe conflict between Deno and Windows OS access.

This seems to be a different issue though than you're google drive one. If you can send a bundle of your project that would really help. We can see that by email if you can't/don't want to share here.

Thanks

peterejkemp commented 8 months ago

sorry, I should have thought of that, freeze: false solves this particular issue.

I'll see if I can cut down my code base to send a reproducible example.

many thanks

cderv commented 8 months ago

sorry, I should have thought of that, freeze: false solves this particular issue.

Don't be sorry - this seems definitely an issue with the freeze process specific to windows and some OS dedicated file. If you manage to send me a reproducible project bundle which include those files, I can look into it further;

I could try to reproduce it, but never encountered this issue yet on windows.