Merge the two files into env, and make each command explicitly call the function that sets it up in the way that's needed for that command. This means we can finally just import all the modules at the top of each file, without worrying about import order. Phew. While we're here, remove the weird auto-appending-'all'-to-targets feature in env.init(). Instead, do it explicitly, and only from redo and redo-ifchange, only if is_toplevel and no other targets are given.
60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
import sys, os
|
|
import env, state
|
|
from logs import err, debug2
|
|
|
|
|
|
def main():
|
|
env.inherit()
|
|
if len(sys.argv) > 1:
|
|
err('%s: no arguments expected.\n' % sys.argv[0])
|
|
sys.exit(1)
|
|
|
|
if os.isatty(0):
|
|
err('%s: you must provide the data to stamp on stdin\n' % sys.argv[0])
|
|
sys.exit(1)
|
|
|
|
# hashlib is only available in python 2.5 or higher, but the 'sha'
|
|
# module produces a DeprecationWarning in python 2.6 or higher. We want
|
|
# to support python 2.4 and above without any stupid warnings, so let's
|
|
# try using hashlib first, and downgrade if it fails.
|
|
try:
|
|
import hashlib
|
|
except ImportError:
|
|
import sha
|
|
sh = sha.sha()
|
|
else:
|
|
sh = hashlib.sha1()
|
|
|
|
while 1:
|
|
b = os.read(0, 4096)
|
|
sh.update(b)
|
|
if not b:
|
|
break
|
|
|
|
csum = sh.hexdigest()
|
|
|
|
if not env.v.TARGET:
|
|
sys.exit(0)
|
|
|
|
me = os.path.join(env.v.STARTDIR,
|
|
os.path.join(env.v.PWD, env.v.TARGET))
|
|
f = state.File(name=me)
|
|
changed = (csum != f.csum)
|
|
debug2('%s: old = %s\n' % (f.name, f.csum))
|
|
debug2('%s: sum = %s (%s)\n' % (f.name, csum,
|
|
changed and 'changed' or 'unchanged'))
|
|
f.is_generated = True
|
|
f.is_override = False
|
|
f.failed_runid = None
|
|
if changed:
|
|
f.set_changed() # update_stamp might skip this if mtime is identical
|
|
f.csum = csum
|
|
else:
|
|
# unchanged
|
|
f.set_checked()
|
|
f.save()
|
|
state.commit()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|