LGTM (didn't look very closely though)
https://codereview.appspot.com/555220043/diff/553480046/scripts/lilypond-book.py File scripts/lilypond-book.py (left): https://codereview.appspot.com/555220043/diff/553480046/scripts/lilypond-book.py#oldcode426 scripts/lilypond-book.py:426: return hash (' '.join([l.basename() for l in snippets])) alternatively, you could simply do a global search and replace of hash with zlib.crc32 https://codereview.appspot.com/555220043/diff/553480046/scripts/lilypond-book.py File scripts/lilypond-book.py (right): https://codereview.appspot.com/555220043/diff/553480046/scripts/lilypond-book.py#newcode409 scripts/lilypond-book.py:409: checksum = hashlib.md5 () add a comment that this is not security sensitive, so md5 is ok despite being brokenn. https://codereview.appspot.com/555220043/diff/553480046/scripts/lilypond-book.py#newcode441 scripts/lilypond-book.py:441: logfile = snippet_names_path[:-3] os.path.splitext https://codereview.appspot.com/555220043/