gitlatex 2.0.0__tar.gz → 2.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. {gitlatex-2.0.0/gitlatex.egg-info → gitlatex-2.0.1}/PKG-INFO +1 -1
  2. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/_version.py +3 -3
  3. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/http.py +13 -0
  4. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/compile.py +4 -1
  5. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/git.py +68 -5
  6. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/workspace.py +5 -1
  7. gitlatex-2.0.1/gitlatex/state.py +34 -0
  8. gitlatex-2.0.0/gitlatex/ui/assets/PdfViewer-Bd94D2QV.js → gitlatex-2.0.1/gitlatex/ui/assets/PdfViewer-CSeWHO6L.js +2 -2
  9. gitlatex-2.0.0/gitlatex/ui/assets/index-Y8smC0mJ.js → gitlatex-2.0.1/gitlatex/ui/assets/index-CRd_ihCz.js +4 -4
  10. gitlatex-2.0.0/gitlatex/ui/assets/monaco-vim.umd-DNcbBSgx.js → gitlatex-2.0.1/gitlatex/ui/assets/monaco-vim.umd-TnvlvL5k.js +2 -2
  11. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/index.html +1 -1
  12. {gitlatex-2.0.0 → gitlatex-2.0.1/gitlatex.egg-info}/PKG-INFO +1 -1
  13. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex.egg-info/SOURCES.txt +3 -3
  14. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex.egg-info/scm_version.json +2 -2
  15. gitlatex-2.0.0/gitlatex/state.py +0 -27
  16. {gitlatex-2.0.0 → gitlatex-2.0.1}/.github/workflows/publish.yml +0 -0
  17. {gitlatex-2.0.0 → gitlatex-2.0.1}/.gitignore +0 -0
  18. {gitlatex-2.0.0 → gitlatex-2.0.1}/MANIFEST.in +0 -0
  19. {gitlatex-2.0.0 → gitlatex-2.0.1}/README.md +0 -0
  20. {gitlatex-2.0.0 → gitlatex-2.0.1}/docs/vim-mode.md +0 -0
  21. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/__init__.py +0 -0
  22. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/__main__.py +0 -0
  23. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/app.py +0 -0
  24. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/engine/manifest.json +0 -0
  25. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/app.js +0 -0
  26. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/bib-commands.json +0 -0
  27. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/base.css +0 -0
  28. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/console.css +0 -0
  29. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/docs.css +0 -0
  30. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/editor.css +0 -0
  31. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/home.css +0 -0
  32. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/layout.css +0 -0
  33. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/loading.css +0 -0
  34. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/outline.css +0 -0
  35. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/problems.css +0 -0
  36. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/review.css +0 -0
  37. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/settings.css +0 -0
  38. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/sidebar.css +0 -0
  39. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/support.css +0 -0
  40. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/toolbar.css +0 -0
  41. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/updates.css +0 -0
  42. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/css/versions.css +0 -0
  43. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/favicon.svg +0 -0
  44. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/index.html +0 -0
  45. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/build/compile.js +0 -0
  46. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/build/problems.js +0 -0
  47. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/core/api.js +0 -0
  48. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/core/filetypes.js +0 -0
  49. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/core/router.js +0 -0
  50. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/core/state.js +0 -0
  51. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/core/storage.js +0 -0
  52. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/completions.js +0 -0
  53. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/envcolors.js +0 -0
  54. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/filetree.js +0 -0
  55. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/languages.js +0 -0
  56. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/mainfile.js +0 -0
  57. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/monaco.js +0 -0
  58. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/outline.js +0 -0
  59. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/projectindex.js +0 -0
  60. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/review.js +0 -0
  61. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/session.js +0 -0
  62. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/snippets.js +0 -0
  63. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/spell.js +0 -0
  64. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/synctex.js +0 -0
  65. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/vim.js +0 -0
  66. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/editor/vimtex.js +0 -0
  67. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/git/actions.js +0 -0
  68. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/git/diffview.js +0 -0
  69. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/git/menu.js +0 -0
  70. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/git/versions.js +0 -0
  71. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/home/repolist.js +0 -0
  72. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/ui/consolepane.js +0 -0
  73. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/ui/layout.js +0 -0
  74. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/ui/loading.js +0 -0
  75. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/ui/modals.js +0 -0
  76. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/ui/pdfviewer.js +0 -0
  77. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/ui/settings.js +0 -0
  78. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/ui/theme.js +0 -0
  79. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/js/ui/viewer.js +0 -0
  80. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/public/latex-commands.json +0 -0
  81. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/__init__.py +0 -0
  82. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/engine.py +0 -0
  83. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/files.py +0 -0
  84. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/pages.py +0 -0
  85. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/projectindex.py +0 -0
  86. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/repos.py +0 -0
  87. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/review.py +0 -0
  88. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/snippets.py +0 -0
  89. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/spell.py +0 -0
  90. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/synctex.py +0 -0
  91. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/routes/system.py +0 -0
  92. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/server.py +0 -0
  93. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/__init__.py +0 -0
  94. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/comments.py +0 -0
  95. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/git_backend.py +0 -0
  96. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/gitrepo.py +0 -0
  97. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/latex.py +0 -0
  98. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/paths.py +0 -0
  99. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/projectindex.py +0 -0
  100. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/snippets.py +0 -0
  101. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/spell.py +0 -0
  102. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/synctex.py +0 -0
  103. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/synctex_reader.py +0 -0
  104. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/services/updates.py +0 -0
  105. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  106. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  107. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  108. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  109. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  110. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  111. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  112. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  113. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  114. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  115. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  116. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  117. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  118. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  119. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  120. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  121. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  122. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  123. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  124. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  125. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  126. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  127. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  128. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  129. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  130. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  131. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  132. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  133. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  134. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  135. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  136. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  137. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  138. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  139. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  140. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  141. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  142. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  143. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  144. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  145. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  146. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  147. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  148. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  149. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  150. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  151. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  152. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  153. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  154. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  155. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  156. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  157. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  158. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  159. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  160. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  161. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  162. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  163. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  164. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/codicon-DF1abBS2.ttf +0 -0
  165. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/editor.worker-Yd1NR0QT.js +0 -0
  166. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/index-DzQbJ7aZ.css +0 -0
  167. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/material-symbols-outlined-DzyP15l8.woff2 +0 -0
  168. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/pdf.worker.min-BmVo14Nb.mjs +0 -0
  169. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/assets/tex.worker-5oo4mY5v.js +0 -0
  170. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex/ui/favicon.svg +0 -0
  171. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex.egg-info/dependency_links.txt +0 -0
  172. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex.egg-info/entry_points.txt +0 -0
  173. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex.egg-info/requires.txt +0 -0
  174. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex.egg-info/scm_file_list.json +0 -0
  175. {gitlatex-2.0.0 → gitlatex-2.0.1}/gitlatex.egg-info/top_level.txt +0 -0
  176. {gitlatex-2.0.0 → gitlatex-2.0.1}/pyproject.toml +0 -0
  177. {gitlatex-2.0.0 → gitlatex-2.0.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitlatex
3
- Version: 2.0.0
3
+ Version: 2.0.1
4
4
  Summary: A simple UI for LaTeX projects with Git support. Clone repos, edit, compile, and push.
5
5
  License-Expression: ISC
6
6
  Project-URL: Homepage, https://github.com/abdussamiakanda/gitlatex
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '2.0.0'
22
- __version_tuple__ = version_tuple = (2, 0, 0)
21
+ __version__ = version = '2.0.1'
22
+ __version_tuple__ = version_tuple = (2, 0, 1)
23
23
 
24
- __commit_id__ = commit_id = 'gf67d4da27'
24
+ __commit_id__ = commit_id = 'ga0d651549'
@@ -1,7 +1,11 @@
1
1
  """Small helpers and constants shared by every route module."""
2
2
 
3
+ import functools
4
+
3
5
  from flask import request
4
6
 
7
+ from gitlatex import state
8
+
5
9
  MIME_TYPES = {
6
10
  ".pdf": "application/pdf",
7
11
  ".png": "image/png",
@@ -29,6 +33,15 @@ ASSET_EXTENSIONS = frozenset({".css", ".js", ".mjs", ".svg", ".ico", ".png", ".j
29
33
  ".woff2", ".ttf", ".wasm"})
30
34
 
31
35
 
36
+ def with_project_lock(view):
37
+ """Run a route while holding state.project_lock (see gitlatex/state.py)."""
38
+ @functools.wraps(view)
39
+ def wrapper(*args, **kwargs):
40
+ with state.project_lock:
41
+ return view(*args, **kwargs)
42
+ return wrapper
43
+
44
+
32
45
  def _json():
33
46
  """Request JSON body; default to empty dict."""
34
47
  return request.get_json(force=True, silent=True) or {}
@@ -7,7 +7,7 @@ import subprocess
7
7
  from flask import Blueprint, jsonify, request, send_file
8
8
 
9
9
  from gitlatex import state
10
- from gitlatex.http import _json
10
+ from gitlatex.http import _json, with_project_lock
11
11
  from gitlatex.services.latex import LATEX_ENGINES, run_latex_build
12
12
  from gitlatex.services.paths import resolve_repo_path
13
13
  from gitlatex.services.synctex import save_remote_synctex
@@ -16,6 +16,7 @@ bp = Blueprint("compile", __name__)
16
16
 
17
17
 
18
18
  @bp.route("/compile", methods=["GET", "POST"])
19
+ @with_project_lock
19
20
  def compile_latex():
20
21
  if request.method == "GET":
21
22
  return jsonify(
@@ -111,11 +112,13 @@ def handle_save_pdf():
111
112
 
112
113
 
113
114
  @bp.route("/save-pdf", methods=["POST"])
115
+ @with_project_lock
114
116
  def save_pdf():
115
117
  return handle_save_pdf()
116
118
 
117
119
 
118
120
  @bp.route("/api/save-pdf", methods=["POST"])
121
+ @with_project_lock
119
122
  def api_save_pdf():
120
123
  return handle_save_pdf()
121
124
 
@@ -1,11 +1,13 @@
1
1
  """Git operations: push, pull, status, history and diffs."""
2
2
 
3
3
  import datetime
4
+ import re
4
5
  import os
5
6
 
6
7
  from flask import Blueprint, jsonify, request
7
8
 
8
9
  from gitlatex import state
10
+ from gitlatex.http import with_project_lock
9
11
  from gitlatex.services.git_backend import NULL_TREE, GitCommandError, Repo
10
12
  from gitlatex.services.gitrepo import _blob_text, _close_repo, _numstat, _open_repo
11
13
  from gitlatex.services.paths import resolve_repo_path
@@ -14,6 +16,7 @@ bp = Blueprint("git", __name__)
14
16
 
15
17
 
16
18
  @bp.route("/push", methods=["POST"])
19
+ @with_project_lock
17
20
  def push():
18
21
  if not state.current_repo_path:
19
22
  return jsonify(error="No repository selected"), 400
@@ -52,6 +55,7 @@ def push():
52
55
 
53
56
 
54
57
  @bp.route("/api/git/commit", methods=["POST"])
58
+ @with_project_lock
55
59
  def commit_all():
56
60
  """Stage everything and commit, without pushing (for projects with no remote)."""
57
61
  if not state.current_repo_path:
@@ -79,6 +83,7 @@ def commit_all():
79
83
 
80
84
 
81
85
  @bp.route("/api/git/init", methods=["POST"])
86
+ @with_project_lock
82
87
  def init_repo():
83
88
  if not state.current_repo_path:
84
89
  return jsonify(error="No repository selected"), 400
@@ -97,7 +102,62 @@ def _json_message():
97
102
  return message.strip() if isinstance(message, str) else ""
98
103
 
99
104
 
105
+ # What TeX writes next to a document. Committed copies are common (people
106
+ # commit main.pdf), and every compile rewrites them locally.
107
+ _BUILD_OUTPUT = re.compile(
108
+ r"\.(synctex\.gz|synctex|aux|log|out|toc|lof|lot|fls|fdb_latexmk|bcf|run\.xml|blg|bbl|nav|snm|vrb|xdv)$",
109
+ re.IGNORECASE,
110
+ )
111
+
112
+
113
+ def _is_build_output(root, path):
114
+ if _BUILD_OUTPUT.search(path):
115
+ return True
116
+ # A PDF is build output only when it is a document's own PDF (main.pdf next
117
+ # to main.tex); figure PDFs are the user's files.
118
+ if path.lower().endswith(".pdf"):
119
+ return os.path.isfile(os.path.join(root, path[:-4] + ".tex"))
120
+ return False
121
+
122
+
123
+ def _clear_stale_build_outputs(repo):
124
+ """Drop local build outputs that the incoming commits replace.
125
+
126
+ Compiling rewrites main.pdf (PDFs embed a timestamp) and writes
127
+ main.synctex.gz, so a project that commits them always looks modified, and
128
+ `git pull` refuses to overwrite them. They are regenerated by the next
129
+ compile anyway, so the remote's copies win. Only files the remote actually
130
+ changes are touched; the user's own edits are left to --autostash.
131
+ Returns the paths cleared.
132
+ """
133
+ try:
134
+ if not repo.remotes or repo.head.is_detached or repo.active_branch.tracking_branch() is None:
135
+ return []
136
+ repo.git.fetch("--quiet")
137
+ incoming = repo.git.diff("--name-only", "HEAD...@{u}").splitlines()
138
+ except (GitCommandError, TypeError, ValueError):
139
+ return []
140
+ root = repo.working_tree_dir
141
+ modified = set(repo.git.diff("--name-only").splitlines()) | set(repo.git.diff("--name-only", "--cached").splitlines())
142
+ untracked = set(repo.untracked_files)
143
+ cleared = []
144
+ for path in incoming:
145
+ if not _is_build_output(root, path):
146
+ continue
147
+ try:
148
+ if path in modified:
149
+ repo.git.checkout("HEAD", "--", path)
150
+ cleared.append(path)
151
+ elif path in untracked:
152
+ os.remove(os.path.join(root, path))
153
+ cleared.append(path)
154
+ except (GitCommandError, OSError) as e:
155
+ print("Could not clear", path, e)
156
+ return cleared
157
+
158
+
100
159
  @bp.route("/pull", methods=["POST"])
160
+ @with_project_lock
101
161
  def pull():
102
162
  if not state.current_repo_path:
103
163
  return jsonify(error="No repository selected"), 400
@@ -107,15 +167,18 @@ def pull():
107
167
  repo = Repo(state.current_repo_path)
108
168
  try:
109
169
  before = repo.head.commit.hexsha if repo.head.is_valid() else None
110
- # --autostash keeps working-tree noise (compile artifacts like main.pdf)
111
- # from blocking the pull; older gits don't support it for merges.
170
+ cleared = _clear_stale_build_outputs(repo)
171
+ # --autostash sets the user's own uncommitted edits aside and puts
172
+ # them back after the merge; older gits don't support it for merges.
112
173
  try:
113
174
  output = repo.git.pull("--autostash")
114
- except GitCommandError:
175
+ except GitCommandError as e:
176
+ if "--autostash" not in str(e) and "autostash" not in str(e).lower():
177
+ raise
115
178
  output = repo.git.pull()
116
179
  after = repo.head.commit.hexsha if repo.head.is_valid() else None
117
- print("Pulled from origin")
118
- return jsonify(success=True, output=output, changed=before != after)
180
+ print("Pulled from origin" + (" (replaced local build output: %s)" % ", ".join(cleared) if cleared else ""))
181
+ return jsonify(success=True, output=output, changed=before != after, cleared=cleared)
119
182
  finally:
120
183
  if getattr(repo, "close", None):
121
184
  try:
@@ -22,7 +22,7 @@ import shutil
22
22
  from flask import Blueprint, jsonify
23
23
 
24
24
  from gitlatex import state
25
- from gitlatex.http import _json
25
+ from gitlatex.http import _json, with_project_lock
26
26
  from gitlatex.services import comments
27
27
  from gitlatex.services.git_backend import Repo
28
28
  from gitlatex.services.paths import resolve_repo_path
@@ -167,6 +167,7 @@ def rename_project():
167
167
 
168
168
 
169
169
  @bp.route("/api/fs/write", methods=["POST"])
170
+ @with_project_lock
170
171
  def write_file():
171
172
  if not state.current_repo_path:
172
173
  return _no_project()
@@ -185,6 +186,7 @@ def write_file():
185
186
 
186
187
 
187
188
  @bp.route("/api/fs/mkdir", methods=["POST"])
189
+ @with_project_lock
188
190
  def make_dir():
189
191
  if not state.current_repo_path:
190
192
  return _no_project()
@@ -201,6 +203,7 @@ def make_dir():
201
203
 
202
204
 
203
205
  @bp.route("/api/fs/delete", methods=["POST"])
206
+ @with_project_lock
204
207
  def delete_path():
205
208
  if not state.current_repo_path:
206
209
  return _no_project()
@@ -220,6 +223,7 @@ def delete_path():
220
223
 
221
224
 
222
225
  @bp.route("/api/fs/move", methods=["POST"])
226
+ @with_project_lock
223
227
  def move_path():
224
228
  if not state.current_repo_path:
225
229
  return _no_project()
@@ -0,0 +1,34 @@
1
+ """Process-wide server state.
2
+
3
+ These values are genuinely global to a running server: which repos folder
4
+ is being served, which project the user has selected, the last compile error,
5
+ and the lock that serializes changes to project files. Route modules import
6
+ this module and read `state.x` rather than importing the names directly, so
7
+ everyone sees the same value after a rebind.
8
+ """
9
+
10
+ import threading
11
+
12
+ # Absolute path of the repos folder, set once at startup by create_app().
13
+ BASE_DIR = None
14
+
15
+ # Absolute path of the project the user has selected, or None.
16
+ current_repo_path = None
17
+
18
+ # Message from the most recent failed compile, surfaced by /compile-error.
19
+ last_compile_error = None
20
+
21
+ # Held by everything that changes a project's files: Git (pull, push, commit),
22
+ # compiles, PDF saves and the editor's writes. A PDF saved in the middle of a
23
+ # pull would otherwise be caught by --autostash and conflict when it is put back.
24
+ project_lock = threading.RLock()
25
+
26
+
27
+ def repo_selected():
28
+ return current_repo_path is not None
29
+
30
+
31
+ def repo_name():
32
+ """Folder name of the selected project, or None."""
33
+ import os
34
+ return os.path.basename(current_repo_path) if current_repo_path else None