Skip to content
This repository has been archived by the owner on Dec 17, 2021. It is now read-only.

[misc] fix sync-to-pdf feature when sibling compiles are disabled #261

Closed
wants to merge 1 commit into from

Conversation

das7pad
Copy link
Member

@das7pad das7pad commented Jul 20, 2021

Description

Fixes overleaf/overleaf#919
For https://digital-science.slack.com/archives/CM8CT5MUP/p1626769788005200

The project paths are tracked with a /./ component in the synctex file.

SyncTeX Version:1
Input:1:/var/lib/sharelatex/data/compiles/PROJECT_ID/./main.tex
...

This was breaking our synctex invocation. This PR is adding the extra compontent.

Related Issues / PRs

Fixes overleaf/overleaf#919
For https://digital-science.slack.com/archives/CM8CT5MUP/p1626769788005200

Review

Sandbox compiles are not affected and tested in CI.

Potential Impact

Low.

Manual Testing Performed

image
image

The paths are tracked with a `/./` component in the synctex file.
```
SyncTeX Version:1
Input:1:/var/lib/sharelatex/data/compiles/PROJECT_ID/./main.tex
...
```
Copy link
Contributor

@briangough briangough left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure about this.

I had a server-ce with 2.6.1 and SIBLING_CONTAINERS_ENABLED=false. The synctex worked both ways.

When I upgraded to server-ce 2.7.0 the /sync/code endpoint stopped working, while /sync/pdf worked.

I'd like to reproduce the problem, because I think it would be better to fix the way we call latexmk so that the path is correct.

Possibly there has been a change in latexmk between the two versions which affects this(?).

@briangough
Copy link
Contributor

Old container:

 docker run -t -i --entrypoint=/bin/sh --rm sharelatex/sharelatex:2.6.1 
# latexmk --version

Latexmk, John Collins, 29 September 2020. Version 4.70b

New container:

$ docker run -t -i --entrypoint=/bin/sh --rm sharelatex/sharelatex:2.7.0 
# latexmk --version

Latexmk, John Collins, 29 May 2021. Version 4.74b

@briangough
Copy link
Contributor

Changes between those versions: http://personal.psu.edu/~jcc8/software/latexmk/versions.html
There are some changes relating to synctex, and aux/output directories.

V. 4.74b dated 29 May 2021.

  • When emulating aux_dir, put .synctex.gz .synctex files in out_dir (as done by MiKTeX, and needed for their use).
  • Turn emulate aux_dir off by default, to match behavior on older versions of latexmk (BACKWARDS INCOMPATIBLE with 4.73 and 4.74.)
  • Add end-of-all-runs warning if emulate aux_dir needed to be turned on, when it was initially off.
  • Add .synctex and .synctex.gz to list of extensions to clear by default.
  • Turn back on default to report rc files read.
  • Add options -rc-report, -rc-report-, -dir_report, -dir_report-.
  • This version will be on CTAN at http://ctan.org/pkg/latexmk/. (After it has been uploaded to CTAN and the files propagate to all mirror sites.)

V. 4.74 dated 16 May 2021.

  • Correct treatment of aux_dir and out_dir to avoid bugs that appeared on MS-Windows only.
  • Remove some informational messages (about rc files, and the state of aux and dir settings after normalization).

V. 4.73 dated 3 May 2021.

  • Correct slowness in parsing some log files.
  • Provide emulation of -aux-directory, so that it can be used with implementation other than MiKTeX. (At the moment the only documentation of this feature is given by latexmk --help.)

V. 4.72b dated 15 Apr. 2021.

  • For bibtex, revert to change-directory default when running bibtex.
  • Add similar procedure for makeindex, but leave old default.
  • Add options -indexfudge, -indexfudge-, -noindexfudge.
  • Solve bug that transition from non-existent file to existent file didn't trigger rerun of *latex. (This concerns files that were flagged as missing in the .log file.)
  • Give .latexmkrc priority of latexmkrc in finding rc files.
  • Correct bug when chapterbib used with non-trivial out or aux dir.
  • Improve handling of situation when auxdir or outdir are specified as absolute paths.
  • Miscellaneous bug corrections.
  • This version is on CTAN at http://ctan.org/pkg/latexmk/.
  • hyperxmp-latexmkrc: Rc file to configure latexmk to work with hyperxmp (v. 5.7 or higher). With the initialization code in this rc file, latexmk gets a correct byteCount field in the xmp metadata produced by hyperxmp in the pdf file.

hyperxmp-latexmkrc: Rc file to configure latexmk to work with hyperxmp (v. 5.7 or higher). With the initialization code in this rc file, latexmk gets a correct byteCount field in the xmp metadata produced by hyperxmp in the pdf file.

V. 4.70b dated 29 Sep. 2020.

  • Fix problems when rearranging rules to deal with change of output file of *latex engine (e.g., .pdf to .dvi). (Previously latexmk would sometimes give a warning of a possible bug.)
  • Fix problem with the new default not to do the change of directory for bibtex. Use of full path names for output-directory or tex file no longer causes a bibtex error.
  • Add options -bibfudge, -bibfudge-, -nobibfudge.

@das7pad das7pad closed this Aug 6, 2021
@das7pad das7pad reopened this Aug 6, 2021
@das7pad das7pad closed this Aug 10, 2021
@emcsween
Copy link
Contributor

In order to confirm @briangough's hypothesis, I swapped the latexmk script directly inside the server-ce container, keeping everything else constant, and I found that, indeed, version 4.70b works, and version 4.72b doesn't. So, it's a change between the two versions that creates the problem. Maybe this excerpt from the Changelog

  • Improve handling of situation when auxdir or outdir are specified as absolute paths.

I also tested the TeX Live 2021 image, which has the newer latexmk, and got the same problem, so there's even more reason to fix that.

@emcsween
Copy link
Contributor

emcsween commented Aug 21, 2021

AFAICT, what happens is that latexmk added a step to "normalize" the aux and output directories. The normalization changes the path so that it is relative to the current directory. When the aux directory is equal to the current directory, the normalized path becomes the empty string, which disables another step in latexmk, where the aux dir would be added to the TEXINPUTS and BIBINPUTS env variables. This, in turn, adds the /./ segment in synctex paths through a mechanism described in this old tex.sx post.

We can probably fix that by setting TEXINPUTS and BIBINPUTS prior to calling latexmk. This is also related to https://github.com/overleaf/internal/issues/1816. It would be nice if what we do here solved that issue as well.

@das7pad das7pad deleted the jpa-fix-sync-to-pdf branch August 23, 2021 08:10
@das7pad
Copy link
Member Author

das7pad commented Aug 23, 2021

Thanks for your investigation here!

We can probably fix that by setting TEXINPUTS and BIBINPUTS prior to calling latexmk. This is also related to overleaf/internal#1816. It would be nice if what we do here solved that issue as well.

That did not do the trick alone 😞

Tested via https://github.com/overleaf/internal/commit/b2d9f548dd8d021e4dddca5c13bcd233da12c80e
Base line is running TeX Live 2021 in CI: https://github.com/overleaf/internal/commit/3b7c3b0cb04d72cc026f41417b78fc432494c509 (fails CI)

dockerOptions.Env = [
  'TEXINPUTS=/compile:',
  'BIBINPUTS=/compile:',
  ...
]

(Also tested without success using a trailing slash TEXINPUTS=/compile/: and dot TEXINPUTS=/compile/.: and dot slash TEXINPUTS=/compile/./:)

diff --git a/services/clsi/app/js/DockerRunner.js b/services/clsi/app/js/DockerRunner.js
index 5bb2aeccf4..9d00fd62bd 100644
--- a/services/clsi/app/js/DockerRunner.js
+++ b/services/clsi/app/js/DockerRunner.js
@@ -262,2 +262,4 @@ const DockerRunner = {
 
+    console.error(options.Env)
+
     if (Settings.path != null && Settings.path.synctexBinHostPath != null) {
diff --git a/services/clsi/test/acceptance/js/Stats.js b/services/clsi/test/acceptance/js/Stats.js
index 4f071abe5f..24653e25ae 100644
--- a/services/clsi/test/acceptance/js/Stats.js
+++ b/services/clsi/test/acceptance/js/Stats.js
@@ -3,2 +3,3 @@ const Settings = require('@overleaf/settings')
 after(function (done) {
+  return done()
   request(
clsi$ MOCHA_GREP=Syncing make test_acceptance
COMPOSE_PROJECT_NAME=test_acceptance_clsi BUILD_NUMBER=local BRANCH_NAME=jpa-synctex-fix PROJECT_NAME=clsi MOCHA_GREP=Syncing docker-compose -f docker-compose.yml down -v -t 0
Removing network test_acceptance_clsi_default
COMPOSE_PROJECT_NAME=test_acceptance_clsi BUILD_NUMBER=local BRANCH_NAME=jpa-synctex-fix PROJECT_NAME=clsi MOCHA_GREP=Syncing docker-compose -f docker-compose.yml run --rm test_acceptance
Creating network "test_acceptance_clsi_default" with the default driver
Creating test_acceptance_clsi_test_acceptance_run ... done
Docker version 19.03.15, build 99e3ed8919
cp: cannot create regular file '/app/bin/synctex-mount/synctex': No such file or directory
Using default settings from /app/config/settings.defaults.js
Using settings from /app/config/settings.defaults.js
Set UV_THREADPOOL_SIZE=16
ENABLE_TRACE_AGENT set to undefined
ENABLE_DEBUG_AGENT set to undefined
ENABLE_PROFILE_AGENT set to undefined
62 61 1000 [ 999, 1000 ] PID
starting test server on 4242 localhost


  Syncing
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"msg":"clsi running in dev mode","time":"2021-08-23T11:41:21.330Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"msg":"db sync complete","time":"2021-08-23T11:41:21.381Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"bb33037a5d54d","msg":"syncing resources to disk","time":"2021-08-23T11:41:21.399Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"bb33037a5d54d","msg":"full sync","time":"2021-08-23T11:41:21.399Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"args":["/app/compiles/bb33037a5d54d","(","-name",".cache","-o","-name",".archive","-o","-name",".project-*",")","-prune","-o","-type","f","-print"],"msg":"running find command","time":"2021-08-23T11:41:21.400Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"basePath":"/app/compiles/bb33037a5d54d","msg":"clearing sync state","time":"2021-08-23T11:41:21.434Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"bb33037a5d54d","time_taken":36,"msg":"written files to disk","time":"2021-08-23T11:41:21.435Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"compileDir":"/app/compiles/bb33037a5d54d","mainFile":"main.tex","usesTikzExternalize":false,"usesPsTool":false,"msg":"checked for packages needing main file as output.tex","time":"2021-08-23T11:41:21.436Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"directory":"/app/compiles/bb33037a5d54d","compiler":"pdflatex","timeout":600000,"mainFile":"main.tex","environment":{"TEXINPUTS":"$COMPILE_DIR:","BIBINPUTS":"$COMPILE_DIR:"},"flags":[],"msg":"starting compile","time":"2021-08-23T11:41:21.437Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"path":"/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles","msg":"altering bind path for sibling containers","time":"2021-08-23T11:41:21.437Z","v":0}
[
  'HOME=/tmp',
  'TEXINPUTS=/compile:',
  'BIBINPUTS=/compile:',
  'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/'
]
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"projectId":"bb33037a5d54d","msg":"running docker container","time":"2021-08-23T11:41:21.438Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"container_name":"project-bb33037a5d54d-be2f938aad0202a1c44a6404284739d5","msg":"starting container","time":"2021-08-23T11:41:21.439Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-bb33037a5d54d-be2f938aad0202a1c44a6404284739d5","msg":"attached to container","time":"2021-08-23T11:41:21.479Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-bb33037a5d54d-be2f938aad0202a1c44a6404284739d5","msg":"waiting for docker container","time":"2021-08-23T11:41:21.615Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-bb33037a5d54d-be2f938aad0202a1c44a6404284739d5","exitCode":0,"msg":"docker container returned","time":"2021-08-23T11:41:22.015Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"exitCode":0,"options":{"Cmd":["latexmk","-cd","-f","-jobname=output","-auxdir=/compile","-outdir=/compile","-synctex=1","-interaction=batchmode","-pdf","/compile/main.tex"],"Image":"quay.io/sharelatex/texlive-full:2021.1","Volumes":{"/compile":{}},"WorkingDir":"/compile","NetworkDisabled":true,"Memory":1099511627776,"User":"tex","Env":["HOME=/tmp","TEXINPUTS=/compile:","BIBINPUTS=/compile:","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/"],"HostConfig":{"Binds":["/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles/bb33037a5d54d:/compile:rw","/code/overleaf/dev-environment/overleaf-internal/services/clsi/bin/synctex:/opt/synctex:ro"],"LogConfig":{"Type":"none","Config":{}},"Ulimits":[{"Name":"cpu","Soft":605,"Hard":610}],"CapDrop":"ALL","SecurityOpt":null},"name":"project-bb33037a5d54d-be2f938aad0202a1c44a6404284739d5"},"msg":"docker container has exited","time":"2021-08-23T11:41:22.015Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"bb33037a5d54d","time_taken":581,"stats":{"latexmk-errors":0,"latex-runs":1,"latex-runs-with-errors":0,"latex-runs-1":1,"latex-runs-with-errors-1":0},"timings":{},"loadavg":[1.45,1.35,2.02],"msg":"done compile","time":"2021-08-23T11:41:22.018Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"args":["/app/compiles/bb33037a5d54d","(","-name",".cache","-o","-name",".archive","-o","-name",".project-*",")","-prune","-o","-type","f","-print"],"msg":"running find command","time":"2021-08-23T11:41:22.018Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/bb33037a5d54d/compile","method":"POST","remote-addr":"127.0.0.1","content-length":"169"},"res":{"statusCode":200},"response-time":710,"msg":"POST /project/bb33037a5d54d/compile","time":"2021-08-23T11:41:22.051Z","v":0}
    from code to pdf
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"path":"/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles","msg":"altering bind path for sibling containers","time":"2021-08-23T11:41:22.059Z","v":0}
[
  'HOME=/tmp',
  'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/'
]
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"projectId":"bb33037a5d54d","msg":"running docker container","time":"2021-08-23T11:41:22.059Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"container_name":"project-bb33037a5d54d-e8656d06f39a25b5ad31cece718aaab0","msg":"starting container","time":"2021-08-23T11:41:22.059Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-bb33037a5d54d-e8656d06f39a25b5ad31cece718aaab0","msg":"attached to container","time":"2021-08-23T11:41:22.102Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-bb33037a5d54d-e8656d06f39a25b5ad31cece718aaab0","msg":"waiting for docker container","time":"2021-08-23T11:41:22.231Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-bb33037a5d54d-e8656d06f39a25b5ad31cece718aaab0","exitCode":0,"msg":"docker container returned","time":"2021-08-23T11:41:22.277Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"exitCode":0,"options":{"Cmd":["/opt/synctex","code","/compile/output.pdf","/compile/main.tex","3","5"],"Image":"quay.io/sharelatex/texlive-full:2021.1","Volumes":{"/compile":{}},"WorkingDir":"/compile","NetworkDisabled":true,"Memory":1099511627776,"User":"tex","Env":["HOME=/tmp","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/"],"HostConfig":{"Binds":["/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles/bb33037a5d54d:/compile:rw","/code/overleaf/dev-environment/overleaf-internal/services/clsi/bin/synctex:/opt/synctex:ro"],"LogConfig":{"Type":"none","Config":{}},"Ulimits":[{"Name":"cpu","Soft":65,"Hard":70}],"CapDrop":"ALL","SecurityOpt":null,"AutoRemove":true},"name":"project-bb33037a5d54d-e8656d06f39a25b5ad31cece718aaab0"},"msg":"docker container has exited","time":"2021-08-23T11:41:22.277Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"bb33037a5d54d","file_name":"main.tex","line":3,"column":5,"command":["/opt/synctex","code","/compile/output.pdf","/compile/main.tex",3,5],"stdout":"SyncTeX Warning: No tag for /compile/main.tex\n","msg":"synctex code output","time":"2021-08-23T11:41:22.277Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/bb33037a5d54d/sync/code?imageName=&file=main.tex&line=3&column=5","method":"GET","remote-addr":"127.0.0.1"},"res":{"statusCode":200},"response-time":220,"msg":"GET /project/bb33037a5d54d/sync/code?imageName=&file=main.tex&line=3&column=5","time":"2021-08-23T11:41:22.278Z","v":0}
      1) should return the correct location
    from pdf to code
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"path":"/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles","msg":"altering bind path for sibling containers","time":"2021-08-23T11:41:22.284Z","v":0}
[
  'HOME=/tmp',
  'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/'
]
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"projectId":"bb33037a5d54d","msg":"running docker container","time":"2021-08-23T11:41:22.287Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"container_name":"project-bb33037a5d54d-15d358b4312911f2bcd7210f5eaa01f4","msg":"starting container","time":"2021-08-23T11:41:22.287Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-bb33037a5d54d-15d358b4312911f2bcd7210f5eaa01f4","msg":"attached to container","time":"2021-08-23T11:41:22.307Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-bb33037a5d54d-15d358b4312911f2bcd7210f5eaa01f4","msg":"waiting for docker container","time":"2021-08-23T11:41:22.387Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-bb33037a5d54d-15d358b4312911f2bcd7210f5eaa01f4","exitCode":0,"msg":"docker container returned","time":"2021-08-23T11:41:22.418Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"exitCode":0,"options":{"Cmd":["/opt/synctex","pdf","/compile/output.pdf","1","100","200"],"Image":"quay.io/sharelatex/texlive-full:2021.1","Volumes":{"/compile":{}},"WorkingDir":"/compile","NetworkDisabled":true,"Memory":1099511627776,"User":"tex","Env":["HOME=/tmp","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/"],"HostConfig":{"Binds":["/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles/bb33037a5d54d:/compile:rw","/code/overleaf/dev-environment/overleaf-internal/services/clsi/bin/synctex:/opt/synctex:ro"],"LogConfig":{"Type":"none","Config":{}},"Ulimits":[{"Name":"cpu","Soft":65,"Hard":70}],"CapDrop":"ALL","SecurityOpt":null,"AutoRemove":true},"name":"project-bb33037a5d54d-15d358b4312911f2bcd7210f5eaa01f4"},"msg":"docker container has exited","time":"2021-08-23T11:41:22.418Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"bb33037a5d54d","page":1,"h":100,"v":0,"stdout":"NODE\t/compile/./main.tex\t3\t-1\n","msg":"synctex pdf output","time":"2021-08-23T11:41:22.418Z"}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/bb33037a5d54d/sync/pdf?imageName=&page=1&h=100&v=200","method":"GET","remote-addr":"127.0.0.1"},"res":{"statusCode":200},"response-time":136,"msg":"GET /project/bb33037a5d54d/sync/pdf?imageName=&page=1&h=100&v=200","time":"2021-08-23T11:41:22.419Z","v":0}
      2) should return the correct location
    when the project directory is not available
      from code to pdf
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"err":{"message":"no output directory","name":"NotFoundError","stack":"NotFoundError: no output directory\n    at new NotFoundError (/app/app/js/Errors.js:11:17)\n    at /app/app/js/CompileManager.js:552:25\n    at FSReqCallback.oncomplete (fs.js:168:21)","info":{}},"url":"/project/0e45f74374267/sync/code?imageName=&file=main.tex&line=3&column=5","msg":"not found error","time":"2021-08-23T11:41:22.424Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/0e45f74374267/sync/code?imageName=&file=main.tex&line=3&column=5","method":"GET","remote-addr":"127.0.0.1"},"res":{"statusCode":404},"response-time":2,"msg":"GET /project/0e45f74374267/sync/code?imageName=&file=main.tex&line=3&column=5","time":"2021-08-23T11:41:22.424Z","v":0}
        ✓ should return a 404 response
      from pdf to code
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"err":{"message":"no output directory","name":"NotFoundError","stack":"NotFoundError: no output directory\n    at new NotFoundError (/app/app/js/Errors.js:11:17)\n    at /app/app/js/CompileManager.js:552:25\n    at FSReqCallback.oncomplete (fs.js:168:21)","info":{}},"url":"/project/0e45f74374267/sync/pdf?imageName=&page=1&h=100&v=200","msg":"not found error","time":"2021-08-23T11:41:22.427Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/0e45f74374267/sync/pdf?imageName=&page=1&h=100&v=200","method":"GET","remote-addr":"127.0.0.1"},"res":{"statusCode":404},"response-time":1,"msg":"GET /project/0e45f74374267/sync/pdf?imageName=&page=1&h=100&v=200","time":"2021-08-23T11:41:22.428Z","v":0}
        ✓ should return a 404 response
    when the synctex file is not available
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"178dc945f6cf8","msg":"syncing resources to disk","time":"2021-08-23T11:41:22.439Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"178dc945f6cf8","msg":"full sync","time":"2021-08-23T11:41:22.439Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"args":["/app/compiles/178dc945f6cf8","(","-name",".cache","-o","-name",".archive","-o","-name",".project-*",")","-prune","-o","-type","f","-print"],"msg":"running find command","time":"2021-08-23T11:41:22.439Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"basePath":"/app/compiles/178dc945f6cf8","msg":"clearing sync state","time":"2021-08-23T11:41:22.446Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"178dc945f6cf8","time_taken":7,"msg":"written files to disk","time":"2021-08-23T11:41:22.446Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"compileDir":"/app/compiles/178dc945f6cf8","mainFile":"main.tex","usesTikzExternalize":false,"usesPsTool":false,"msg":"checked for packages needing main file as output.tex","time":"2021-08-23T11:41:22.446Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"directory":"/app/compiles/178dc945f6cf8","compiler":"pdflatex","timeout":600000,"mainFile":"main.tex","environment":{"TEXINPUTS":"$COMPILE_DIR:","BIBINPUTS":"$COMPILE_DIR:"},"flags":[],"msg":"starting compile","time":"2021-08-23T11:41:22.446Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"path":"/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles","msg":"altering bind path for sibling containers","time":"2021-08-23T11:41:22.446Z","v":0}
[
  'HOME=/tmp',
  'TEXINPUTS=/compile:',
  'BIBINPUTS=/compile:',
  'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/'
]
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"projectId":"178dc945f6cf8","msg":"running docker container","time":"2021-08-23T11:41:22.447Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"container_name":"project-178dc945f6cf8-2e51d38041435ebeb1e96d776d27656c","msg":"starting container","time":"2021-08-23T11:41:22.447Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-178dc945f6cf8-2e51d38041435ebeb1e96d776d27656c","msg":"attached to container","time":"2021-08-23T11:41:22.527Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-178dc945f6cf8-2e51d38041435ebeb1e96d776d27656c","msg":"waiting for docker container","time":"2021-08-23T11:41:22.645Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-178dc945f6cf8-2e51d38041435ebeb1e96d776d27656c","exitCode":12,"msg":"docker container returned","time":"2021-08-23T11:41:22.863Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"exitCode":12,"options":{"Cmd":["latexmk","-cd","-f","-jobname=output","-auxdir=/compile","-outdir=/compile","-synctex=1","-interaction=batchmode","-pdf","/compile/main.tex"],"Image":"quay.io/sharelatex/texlive-full:2021.1","Volumes":{"/compile":{}},"WorkingDir":"/compile","NetworkDisabled":true,"Memory":1099511627776,"User":"tex","Env":["HOME=/tmp","TEXINPUTS=/compile:","BIBINPUTS=/compile:","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/"],"HostConfig":{"Binds":["/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles/178dc945f6cf8:/compile:rw","/code/overleaf/dev-environment/overleaf-internal/services/clsi/bin/synctex:/opt/synctex:ro"],"LogConfig":{"Type":"none","Config":{}},"Ulimits":[{"Name":"cpu","Soft":605,"Hard":610}],"CapDrop":"ALL","SecurityOpt":null},"name":"project-178dc945f6cf8-2e51d38041435ebeb1e96d776d27656c"},"msg":"docker container has exited","time":"2021-08-23T11:41:22.863Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"178dc945f6cf8","time_taken":418,"stats":{"latexmk-errors":1,"latex-runs":1,"latex-runs-with-errors":1,"latex-runs-1":1,"latex-runs-with-errors-1":1},"timings":{},"loadavg":[3.09,1.7,2.13],"msg":"done compile","time":"2021-08-23T11:41:22.864Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"args":["/app/compiles/178dc945f6cf8","(","-name",".cache","-o","-name",".archive","-o","-name",".project-*",")","-prune","-o","-type","f","-print"],"msg":"running find command","time":"2021-08-23T11:41:22.864Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":40,"project_id":"178dc945f6cf8","outputFiles":[{"path":"output.fdb_latexmk","type":"fdb_latexmk","build":"17b72d0aa36-3bc1508bd1186a93"},{"path":"output.stdout","type":"stdout","build":"17b72d0aa36-3bc1508bd1186a93"},{"path":"output.fls","type":"fls","build":"17b72d0aa36-3bc1508bd1186a93"},{"path":"output.aux","type":"aux","build":"17b72d0aa36-3bc1508bd1186a93"},{"path":"output.stderr","type":"stderr","build":"17b72d0aa36-3bc1508bd1186a93"},{"path":"output.log","type":"log","build":"17b72d0aa36-3bc1508bd1186a93"}],"msg":"project failed to compile successfully, no output.pdf generated","time":"2021-08-23T11:41:22.874Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/178dc945f6cf8/compile","method":"POST","remote-addr":"127.0.0.1","content-length":"117"},"res":{"statusCode":200},"response-time":444,"msg":"POST /project/178dc945f6cf8/compile","time":"2021-08-23T11:41:22.875Z","v":0}
      from code to pdf
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"err":{"message":"no output file","name":"NotFoundError","stack":"NotFoundError: no output file\n    at new NotFoundError (/app/app/js/Errors.js:11:17)\n    at /app/app/js/CompileManager.js:559:27\n    at FSReqCallback.oncomplete (fs.js:168:21)","info":{}},"url":"/project/178dc945f6cf8/sync/code?imageName=&file=main.tex&line=3&column=5","msg":"not found error","time":"2021-08-23T11:41:22.877Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/178dc945f6cf8/sync/code?imageName=&file=main.tex&line=3&column=5","method":"GET","remote-addr":"127.0.0.1"},"res":{"statusCode":404},"response-time":1,"msg":"GET /project/178dc945f6cf8/sync/code?imageName=&file=main.tex&line=3&column=5","time":"2021-08-23T11:41:22.878Z","v":0}
        ✓ should return a 404 response
      from pdf to code
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"err":{"message":"no output file","name":"NotFoundError","stack":"NotFoundError: no output file\n    at new NotFoundError (/app/app/js/Errors.js:11:17)\n    at /app/app/js/CompileManager.js:559:27\n    at FSReqCallback.oncomplete (fs.js:168:21)","info":{}},"url":"/project/178dc945f6cf8/sync/pdf?imageName=&page=1&h=100&v=200","msg":"not found error","time":"2021-08-23T11:41:22.880Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/178dc945f6cf8/sync/pdf?imageName=&page=1&h=100&v=200","method":"GET","remote-addr":"127.0.0.1"},"res":{"statusCode":404},"response-time":1,"msg":"GET /project/178dc945f6cf8/sync/pdf?imageName=&page=1&h=100&v=200","time":"2021-08-23T11:41:22.880Z","v":0}
        ✓ should return a 404 response

  Syncing
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"6cd2c6ea35e81","msg":"syncing resources to disk","time":"2021-08-23T11:41:22.889Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"6cd2c6ea35e81","msg":"full sync","time":"2021-08-23T11:41:22.890Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"args":["/app/compiles/6cd2c6ea35e81","(","-name",".cache","-o","-name",".archive","-o","-name",".project-*",")","-prune","-o","-type","f","-print"],"msg":"running find command","time":"2021-08-23T11:41:22.890Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"basePath":"/app/compiles/6cd2c6ea35e81","msg":"clearing sync state","time":"2021-08-23T11:41:22.896Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"6cd2c6ea35e81","time_taken":7,"msg":"written files to disk","time":"2021-08-23T11:41:22.896Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"compileDir":"/app/compiles/6cd2c6ea35e81","mainFile":"main.tex","usesTikzExternalize":false,"usesPsTool":false,"msg":"checked for packages needing main file as output.tex","time":"2021-08-23T11:41:22.896Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"directory":"/app/compiles/6cd2c6ea35e81","compiler":"pdflatex","timeout":600000,"mainFile":"main.tex","environment":{"TEXINPUTS":"$COMPILE_DIR:","BIBINPUTS":"$COMPILE_DIR:"},"flags":[],"msg":"starting compile","time":"2021-08-23T11:41:22.897Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"path":"/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles","msg":"altering bind path for sibling containers","time":"2021-08-23T11:41:22.897Z","v":0}
[
  'HOME=/tmp',
  'TEXINPUTS=/compile:',
  'BIBINPUTS=/compile:',
  'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/'
]
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"projectId":"6cd2c6ea35e81","msg":"running docker container","time":"2021-08-23T11:41:22.897Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"container_name":"project-6cd2c6ea35e81-675e4c02214bdb60054b5e1e4a9be95e","msg":"starting container","time":"2021-08-23T11:41:22.897Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-6cd2c6ea35e81-675e4c02214bdb60054b5e1e4a9be95e","msg":"attached to container","time":"2021-08-23T11:41:22.918Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-6cd2c6ea35e81-675e4c02214bdb60054b5e1e4a9be95e","msg":"waiting for docker container","time":"2021-08-23T11:41:23.168Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-6cd2c6ea35e81-675e4c02214bdb60054b5e1e4a9be95e","exitCode":12,"msg":"docker container returned","time":"2021-08-23T11:41:23.868Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"exitCode":12,"options":{"Cmd":["latexmk","-cd","-f","-jobname=output","-auxdir=/compile","-outdir=/compile","-synctex=1","-interaction=batchmode","-pdf","/compile/main.tex"],"Image":"quay.io/sharelatex/texlive-full:2021.1","Volumes":{"/compile":{}},"WorkingDir":"/compile","NetworkDisabled":true,"Memory":1099511627776,"User":"tex","Env":["HOME=/tmp","TEXINPUTS=/compile:","BIBINPUTS=/compile:","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/"],"HostConfig":{"Binds":["/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles/6cd2c6ea35e81:/compile:rw","/code/overleaf/dev-environment/overleaf-internal/services/clsi/bin/synctex:/opt/synctex:ro"],"LogConfig":{"Type":"none","Config":{}},"Ulimits":[{"Name":"cpu","Soft":605,"Hard":610}],"CapDrop":"ALL","SecurityOpt":null},"name":"project-6cd2c6ea35e81-675e4c02214bdb60054b5e1e4a9be95e"},"msg":"docker container has exited","time":"2021-08-23T11:41:23.868Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"6cd2c6ea35e81","time_taken":973,"stats":{"latexmk-errors":1,"latex-runs":2,"latex-runs-with-errors":2,"latex-runs-2":1,"latex-runs-with-errors-2":1},"timings":{},"loadavg":[3.09,1.7,2.13],"msg":"done compile","time":"2021-08-23T11:41:23.869Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"args":["/app/compiles/6cd2c6ea35e81","(","-name",".cache","-o","-name",".archive","-o","-name",".project-*",")","-prune","-o","-type","f","-print"],"msg":"running find command","time":"2021-08-23T11:41:23.869Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":40,"project_id":"6cd2c6ea35e81","outputFiles":[{"path":"output.fdb_latexmk","type":"fdb_latexmk","build":"17b72d0ae23-8c61281486e637aa"},{"path":"output.stdout","type":"stdout","build":"17b72d0ae23-8c61281486e637aa"},{"path":"output.fls","type":"fls","build":"17b72d0ae23-8c61281486e637aa"},{"path":"output.aux","type":"aux","build":"17b72d0ae23-8c61281486e637aa"},{"path":"output.stderr","type":"stderr","build":"17b72d0ae23-8c61281486e637aa"},{"path":"output.log","type":"log","build":"17b72d0ae23-8c61281486e637aa"}],"msg":"project failed to compile successfully, no output.pdf generated","time":"2021-08-23T11:41:23.879Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/6cd2c6ea35e81/compile","method":"POST","remote-addr":"127.0.0.1","content-length":"25311"},"res":{"statusCode":200},"response-time":997,"msg":"POST /project/6cd2c6ea35e81/compile","time":"2021-08-23T11:41:23.880Z","v":0}
    wordcount file
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"file":"main.tex","project_id":"6cd2c6ea35e81","msg":"word count request","time":"2021-08-23T11:41:23.883Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"6cd2c6ea35e81","file_name":"main.tex","msg":"running wordcount","time":"2021-08-23T11:41:23.883Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"path":"/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles","msg":"altering bind path for sibling containers","time":"2021-08-23T11:41:23.883Z","v":0}
[
  'HOME=/tmp',
  'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/'
]
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"projectId":"6cd2c6ea35e81","msg":"running docker container","time":"2021-08-23T11:41:23.883Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"container_name":"project-6cd2c6ea35e81-3947a1fa33007857ab3b60e163969695","msg":"starting container","time":"2021-08-23T11:41:23.883Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-6cd2c6ea35e81-3947a1fa33007857ab3b60e163969695","msg":"attached to container","time":"2021-08-23T11:41:23.942Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-6cd2c6ea35e81-3947a1fa33007857ab3b60e163969695","msg":"waiting for docker container","time":"2021-08-23T11:41:24.004Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"containerId":"project-6cd2c6ea35e81-3947a1fa33007857ab3b60e163969695","exitCode":0,"msg":"docker container returned","time":"2021-08-23T11:41:24.201Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"exitCode":0,"options":{"Cmd":["texcount","-nocol","-inc","/compile/main.tex","-out=/compile/main.tex.wc"],"Image":"quay.io/sharelatex/texlive-full:2021.1","Volumes":{"/compile":{}},"WorkingDir":"/compile","NetworkDisabled":true,"Memory":1099511627776,"User":"tex","Env":["HOME=/tmp","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2021/bin/x86_64-linux/"],"HostConfig":{"Binds":["/code/overleaf/dev-environment/overleaf-internal/services/clsi/compiles/6cd2c6ea35e81:/compile:rw","/code/overleaf/dev-environment/overleaf-internal/services/clsi/bin/synctex:/opt/synctex:ro"],"LogConfig":{"Type":"none","Config":{}},"Ulimits":[{"Name":"cpu","Soft":65,"Hard":70}],"CapDrop":"ALL","SecurityOpt":null,"AutoRemove":true},"name":"project-6cd2c6ea35e81-3947a1fa33007857ab3b60e163969695"},"msg":"docker container has exited","time":"2021-08-23T11:41:24.201Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"project_id":"6cd2c6ea35e81","wordcount":{"encode":"utf8","textWords":2281,"headWords":2,"outside":0,"headers":2,"elements":0,"mathInline":6,"mathDisplay":0,"errors":0,"messages":""},"msg":"word count results","time":"2021-08-23T11:41:24.203Z","v":0}
{"name":"clsi","hostname":"c75d62677481","pid":62,"level":30,"req":{"url":"/project/6cd2c6ea35e81/wordcount?file=main.tex","method":"GET","remote-addr":"127.0.0.1"},"res":{"statusCode":200},"response-time":323,"msg":"GET /project/6cd2c6ea35e81/wordcount?file=main.tex","time":"2021-08-23T11:41:24.206Z","v":0}
      ✓ should return wordcount info (327ms)


  5 passing (3s)
  2 failing

  1) Syncing
       from code to pdf
         should return the correct location:

      Uncaught AssertionError: expected { pdf: [] } to deeply equal { Object (pdf) }
      + expected - actual

       {
      -  "pdf": []
      +  "pdf": [
      +    {
      +      "h": 133.77
      +      "height": 6.92
      +      "page": 1
      +      "v": 134.76
      +      "width": 343.71
      +    }
      +  ]
       }
      
      at /app/test/acceptance/js/SynctexTests.js:60:40
      at Request._callback (test/acceptance/js/helpers/Client.js:101:16)
      at Request.self.callback (node_modules/request/request.js:185:22)
      at Request.<anonymous> (node_modules/request/request.js:1154:10)
      at IncomingMessage.<anonymous> (node_modules/request/request.js:1076:12)
      at endReadableNT (_stream_readable.js:1241:12)
      at processTicksAndRejections (internal/process/task_queues.js:84:21)

  2) Syncing
       from pdf to code
         should return the correct location:

      Uncaught AssertionError: expected { Object (code) } to deeply equal { Object (code) }
      + expected - actual

       {
         "code": [
           {
             "column": -1
      -      "file": "./main.tex"
      +      "file": "main.tex"
             "line": 3
           }
         ]
       }
      
      at /app/test/acceptance/js/SynctexTests.js:82:41
      at Request._callback (test/acceptance/js/helpers/Client.js:132:16)
      at Request.self.callback (node_modules/request/request.js:185:22)
      at Request.<anonymous> (node_modules/request/request.js:1154:10)
      at IncomingMessage.<anonymous> (node_modules/request/request.js:1076:12)
      at endReadableNT (_stream_readable.js:1241:12)
      at processTicksAndRejections (internal/process/task_queues.js:84:21)



ERROR: 2
Makefile:60: recipe for target 'test_acceptance_run' failed
make: *** [test_acceptance_run] Error 2

@emcsween
Copy link
Contributor

Ok. It turns out that latexmk doesn't normalize the aux dir to the empty string, but to '.', which it then prepends to TEXINPUTS, defeating any manipulation of TEXINPUTS we can do beforehand. However, it looks like newer versions of synctex deal with paths better and will work.

It just so happens that we stumbled upon another good reason to upgrade synctex in support today, so I moved https://github.com/overleaf/internal/issues/2478 to the backlog.

@axkibe
Copy link

axkibe commented Nov 16, 2021

Applied above commit manually to my CE (3.0.1) and now it works, many thanks.
Just to clarify did this PR not yet make it to the release, did I fail to actually upgrade properly or is there something else I didn't get?

@das7pad
Copy link
Member Author

das7pad commented Nov 16, 2021

Applied above commit manually to my CE (3.0.1) and now it works, many thanks. Just to clarify did this PR not yet make it to the release, did I fail to actually upgrade properly or is there something else I didn't get?

Hi! This patch never made it into production or Server CE/Pro. We came up with a different solution that landed after the 3.0 cut: overleaf/overleaf@9ee92da

@axkibe
Copy link

axkibe commented Nov 16, 2021

I see, thanks for clearing this up! I was just confused, since from the dates I supposed it should have been in the cut. But with this simple edit it works already now in CE and I guess it will work after the next upgrade with a different solution. Cheers :)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

go to code location in pdf is not working
4 participants