add wrapper script adding inotify support to sassc
This commit is contained in:
parent
58569f6d89
commit
e107c8e210
|
@ -0,0 +1,38 @@
|
|||
#! /usr/bin/python3
|
||||
#
|
||||
# Run sassc and watch for changes in source files (using inotitfy) to rebuild
|
||||
# automatically.
|
||||
#
|
||||
# Usage: sassw INPUT
|
||||
# (output will automatically be INPUT with .scss changed to .css)
|
||||
|
||||
import json
|
||||
import os
|
||||
import pyinotify
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
filename = sys.argv[1]
|
||||
|
||||
def build():
|
||||
global sources, directories
|
||||
subprocess.call(['sassc', '-mauto', filename, filename.replace('.scss', '.css')])
|
||||
sources = [os.path.abspath(x) for x in json.load(open(filename.replace('.scss', '.css.map')))['sources']]
|
||||
directories = set([os.path.dirname(x) for x in sources])
|
||||
|
||||
class EventManager(pyinotify.ProcessEvent):
|
||||
def process_default(self, event):
|
||||
if event.pathname in sources:
|
||||
filename = os.path.basename(event.pathname)
|
||||
print(f'{filename} changed, building', end='')
|
||||
build()
|
||||
print('.')
|
||||
|
||||
build()
|
||||
wm = pyinotify.WatchManager()
|
||||
notifier = pyinotify.Notifier(wm, default_proc_fun=EventManager())
|
||||
for directory in directories:
|
||||
wm.add_watch(directory, pyinotify.IN_CLOSE_WRITE)
|
||||
notifier.coalesce_events()
|
||||
print('>>> Sassw is watching for changes. Press Ctrl-C to stop.')
|
||||
notifier.loop()
|
Loading…
Reference in New Issue