add wrapper script adding inotify support to sassc

This commit is contained in:
Frédéric Péters 2019-08-20 13:23:05 +02:00
parent 58569f6d89
commit e107c8e210
1 changed files with 38 additions and 0 deletions

38
bin/sassw Executable file
View File

@ -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()