Skip to content

Commit

Permalink
Support passing --poll to the auto plugin to better deal with symlink…
Browse files Browse the repository at this point in the history
… farms.
  • Loading branch information
aknrdureegaesr committed Feb 5, 2024
1 parent 4541149 commit de8fc3d
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 4 deletions.
2 changes: 2 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ New in master
Features
--------

* Support passing ``--poll`` to ``nikola auto`` to better deal with symlink farms.

Bugfixes
--------

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Here are some guidelines about how you can contribute to Nikola:
* **Try writing some tests** if possible — again, following existing tests is
often easiest, and a good way to tell whether the feature you are modifying is
easily testable.
* **Test your code.** If you can, run the test suite with ``pytest tests/``
* **Test your code.** If you can, run the test suite with ``f tests/``
(you will need to install pytest and some other requirements, see
``requirements-tests.txt``). Alternatively, you can push, make a PR and wait
for our CI to pick up and test your changes (but note that workflows for new
Expand Down
2 changes: 1 addition & 1 deletion docs/theming.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
.. description:
.. author: The Nikola Team
:Version: 8.3.0
:Version: 8.3.X
:Author: Roberto Alsina <[email protected]>

.. class:: alert alert-primary float-md-right
Expand Down
14 changes: 13 additions & 1 deletion nikola/plugins/command/auto/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,10 @@

try:
from watchdog.observers import Observer
from watchdog.observers.polling import PollingObserver
except ImportError:
Observer = None
PollingObserver = None

LRJS_PATH = os.path.join(os.path.dirname(__file__), 'livereload.js')
REBUILDING_REFRESH_DELAY = 0.35
Expand Down Expand Up @@ -159,6 +161,16 @@ class CommandAuto(Command):
'type': str,
'help': "Database backend ('dbm', 'json', 'sqlite3')",
'section': 'Arguments passed to `nikola build`'
},
{
# We might be able to improve on this
# if and when https://github.com/gorakhargosh/watchdog/issues/365
# is ever fixed.
'name': 'poll',
'long': 'poll',
'default': False,
'type': bool,
'help': 'Use polling to notice changes behind symbolic links.'
}
]

Expand Down Expand Up @@ -256,7 +268,7 @@ def _execute(self, options, args):
# Run an initial build so we are up-to-date. The server is running, but we are not watching yet.
loop.run_until_complete(self.run_initial_rebuild())

self.wd_observer = Observer()
self.wd_observer = Observer() if not options['poll'] else PollingObserver()
# Watch output folders and trigger reloads
if self.has_server:
self.wd_observer.schedule(NikolaEventHandler(self.reload_page, loop), out_folder, recursive=True)
Expand Down
3 changes: 2 additions & 1 deletion tests/integration/test_dev_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ def test_serves_root_dir(
"port": find_unused_port(),
"db-file": "/dev/null",
"backend": "No backend",
"no-server": False
"no-server": False,
"poll": False
}

# We start an event loop, run the test in an executor,
Expand Down

0 comments on commit de8fc3d

Please sign in to comment.