diff options
-rw-r--r-- | doc/man/sconsign.1 | 6 | ||||
-rw-r--r-- | src/CHANGES.txt | 3 | ||||
-rw-r--r-- | src/script/sconsign.py | 27 | ||||
-rw-r--r-- | test/sconsign/script.py | 31 |
4 files changed, 57 insertions, 10 deletions
diff --git a/doc/man/sconsign.1 b/doc/man/sconsign.1 index dc6d0cb..7fc32ec 100644 --- a/doc/man/sconsign.1 +++ b/doc/man/sconsign.1 @@ -162,6 +162,12 @@ Prints the list of cached implicit dependencies for all entries or the the specified entries. .TP +--raw +Prints a pretty-printed representation +of the raw Python dictionary that holds +build information about an entry. + +.TP -r, --readable Prints timestamps in a human-readable string, enclosed in single quotes. diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 6a3e259..545ef2a 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -301,6 +301,9 @@ RELEASE 0.97 - XXX whether an RCS file exists for a missing source file; whether an SCCS file exists for a missing source file. + - Add a --raw argument to the sconsign script, so it can print a + raw representation of each entry's NodeInfo dictionary. + From Wayne Lee: - Avoid "maximum recursion limit" errors when removing $(-$) pairs diff --git a/src/script/sconsign.py b/src/script/sconsign.py index 6145ad6..56152e5 100644 --- a/src/script/sconsign.py +++ b/src/script/sconsign.py @@ -201,6 +201,7 @@ Print_Entries = [] Print_Flags = Flagger() Verbose = 0 Readable = 0 +Raw = 0 def default_mapper(entry, name): try: @@ -251,9 +252,20 @@ def field(name, entry, verbose=Verbose): val = name + ": " + val return val -def nodeinfo_string(name, entry, prefix=""): +def nodeinfo_raw(name, ninfo, prefix=""): + # This does essentially what the pprint module does, + # except that it sorts the keys for deterministic output. + d = ninfo.__dict__ + keys = d.keys() + keys.sort() + l = [] + for k in keys: + l.append('%s: %s' % (repr(k), repr(d[k]))) + return name + ': {' + string.join(l, ', ') + '}' + +def nodeinfo_string(name, ninfo, prefix=""): fieldlist = ["bsig", "csig", "timestamp", "size"] - f = lambda x, e=entry, v=Verbose: field(x, e, v) + f = lambda x, ni=ninfo, v=Verbose: field(x, ni, v) outlist = [name+":"] + filter(None, map(f, fieldlist)) if Verbose: sep = "\n " + prefix @@ -262,7 +274,10 @@ def nodeinfo_string(name, entry, prefix=""): return string.join(outlist, sep) def printfield(name, entry, prefix=""): - print nodeinfo_string(name, entry.ninfo, prefix) + if Raw: + print nodeinfo_raw(name, entry.ninfo, prefix) + else: + print nodeinfo_string(name, entry.ninfo, prefix) outlist = field("implicit", entry, 0) if outlist: @@ -371,6 +386,7 @@ Options: -h, --help Print this message and exit. -i, --implicit Print implicit dependency information. -r, --readable Print timestamps in human-readable form. + --raw Print raw Python object representations. -s, --size Print file sizes human-readable form. -t, --timestamp Print timestamp information. -v, --verbose Verbose, describe each field. @@ -379,7 +395,8 @@ Options: opts, args = getopt.getopt(sys.argv[1:], "bcd:e:f:hirstv", ['bsig', 'csig', 'dir=', 'entry=', 'format=', 'help', 'implicit', - 'readable', 'size', 'timestamp', 'verbose']) + 'raw', 'readable', + 'size', 'timestamp', 'verbose']) for o, a in opts: @@ -410,6 +427,8 @@ for o, a in opts: sys.exit(0) elif o in ('-i', '--implicit'): Print_Flags['implicit'] = 1 + elif o in ('--raw',): + Raw = 1 elif o in ('-r', '--readable'): Readable = 1 elif o in ('-s', '--size'): diff --git a/test/sconsign/script.py b/test/sconsign/script.py index 2c54e40..24bcc70 100644 --- a/test/sconsign/script.py +++ b/test/sconsign/script.py @@ -111,7 +111,7 @@ test.write(['work1', 'sub2', 'inc2.h'], r"""\ #define STRING2 "inc2.h" """) -test.run(chdir = 'work1', arguments = '--debug=stacktrace --implicit-cache .') +test.run(chdir = 'work1', arguments = '--implicit-cache .') test.run_sconsign(arguments = "work1/sub1/.sconsign", stdout = """\ @@ -121,6 +121,14 @@ hello.obj: \S+ None \d+ \d+ hello.c: \S+ """) +test.run_sconsign(arguments = "--raw work1/sub1/.sconsign", + stdout = """\ +hello.exe: {'bsig': '\S+', 'size': \d+, 'timestamp': \d+} + hello.obj: \S+ +hello.obj: {'bsig': '\S+', 'size': \d+, 'timestamp': \d+} + hello.c: \S+ +""") + test.run_sconsign(arguments = "-v work1/sub1/.sconsign", stdout = """\ hello.exe: @@ -315,6 +323,22 @@ hello.obj: \S+ None \d+ \d+ inc2.h: \S+ """) +test.run_sconsign(arguments = "--raw work2/.sconsign", + stdout = """\ +=== sub1: +hello.exe: {'bsig': '\S+', 'size': \d+, 'timestamp': \d+} + hello.obj: \S+ +hello.obj: {'bsig': '\S+', 'size': \d+, 'timestamp': \d+} + hello.c: \S+ +=== sub2: +hello.exe: {'bsig': '\S+', 'size': \d+, 'timestamp': \d+} + hello.obj: \S+ +hello.obj: {'bsig': '\S+', 'size': \d+, 'timestamp': \d+} + hello.c: \S+ + inc1.h: \S+ + inc2.h: \S+ +""") + test.run_sconsign(arguments = "-v work2/.sconsign", stdout = """\ === sub1: @@ -477,11 +501,6 @@ time.sleep(1) test.run(chdir = 'work2', arguments = '. --max-drift=1') -expect = """\ -=== sub1: -hello.c: None \S+ \d+ \d+ -""" - test.run_sconsign(arguments = "-e hello.exe -e hello.obj -d sub1 -f dblite work2/my_sconsign", stdout = """\ === sub1: |