mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-30 04:31:02 +00:00
python/clippy: make output file writing less weird
This should stomp out any parallel build issues in this regard. Fixes: #971 Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
3cbb67f229
commit
67eb7a6c99
@ -13,8 +13,7 @@ CLIPPY_DEPS = $(HOSTTOOLS)lib/clippy $(top_srcdir)/python/clidef.py
|
|||||||
SUFFIXES = _clippy.c .proto .pb-c.c .pb-c.h .pb.h
|
SUFFIXES = _clippy.c .proto .pb-c.c .pb-c.h .pb.h
|
||||||
.c_clippy.c:
|
.c_clippy.c:
|
||||||
@{ test -x $(top_builddir)/$(HOSTTOOLS)lib/clippy || $(MAKE) -C $(top_builddir)/$(HOSTTOOLS) lib/clippy; }
|
@{ test -x $(top_builddir)/$(HOSTTOOLS)lib/clippy || $(MAKE) -C $(top_builddir)/$(HOSTTOOLS) lib/clippy; }
|
||||||
$(AM_V_CLIPPY)$(top_builddir)/$(HOSTTOOLS)lib/clippy $(top_srcdir)/python/clidef.py $< > $@.tmp
|
$(AM_V_CLIPPY)$(top_builddir)/$(HOSTTOOLS)lib/clippy $(top_srcdir)/python/clidef.py -o $@ $<
|
||||||
@{ test -f $@ && diff $@.tmp $@ >/dev/null 2>/dev/null; } && rm $@.tmp || mv $@.tmp $@
|
|
||||||
|
|
||||||
## automake's "ylwrap" is a great piece of GNU software... not.
|
## automake's "ylwrap" is a great piece of GNU software... not.
|
||||||
.l.c:
|
.l.c:
|
||||||
|
@ -257,4 +257,4 @@ if __name__ == '__main__':
|
|||||||
process_file(args.cfile, ofd, dumpfd, args.all_defun)
|
process_file(args.cfile, ofd, dumpfd, args.all_defun)
|
||||||
|
|
||||||
if args.o is not None:
|
if args.o is not None:
|
||||||
clippy.wrdiff(args.o, ofd)
|
clippy.wrdiff(args.o, ofd, [args.cfile, os.path.realpath(__file__)])
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
# with this program; see the file COPYING; if not, write to the Free Software
|
# with this program; see the file COPYING; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
import os, stat
|
||||||
import _clippy
|
import _clippy
|
||||||
from _clippy import parse, Graph, GraphNode
|
from _clippy import parse, Graph, GraphNode
|
||||||
|
|
||||||
@ -47,7 +48,7 @@ def dump(graph):
|
|||||||
for i, depth in graph_iterate(graph):
|
for i, depth in graph_iterate(graph):
|
||||||
print('\t%s%s %r' % (' ' * (depth * 2), i.type, i.text))
|
print('\t%s%s %r' % (' ' * (depth * 2), i.type, i.text))
|
||||||
|
|
||||||
def wrdiff(filename, buf):
|
def wrdiff(filename, buf, reffiles = []):
|
||||||
'''write buffer to file if contents changed'''
|
'''write buffer to file if contents changed'''
|
||||||
|
|
||||||
expl = ''
|
expl = ''
|
||||||
@ -57,8 +58,16 @@ def wrdiff(filename, buf):
|
|||||||
try: old = open(filename, 'r').read()
|
try: old = open(filename, 'r').read()
|
||||||
except: pass
|
except: pass
|
||||||
if old == buf:
|
if old == buf:
|
||||||
|
for reffile in reffiles:
|
||||||
|
# ensure output timestamp is newer than inputs, for make
|
||||||
|
reftime = os.stat(reffile)[stat.ST_MTIME]
|
||||||
|
outtime = os.stat(filename)[stat.ST_MTIME]
|
||||||
|
if outtime <= reftime:
|
||||||
|
os.utime(filename, (reftime + 1, reftime + 1))
|
||||||
# sys.stderr.write('%s unchanged, not written\n' % (filename))
|
# sys.stderr.write('%s unchanged, not written\n' % (filename))
|
||||||
return
|
return
|
||||||
with open('.new.' + filename, 'w') as out:
|
|
||||||
|
newname = '%s.new-%d' % (filename, os.getpid())
|
||||||
|
with open(newname, 'w') as out:
|
||||||
out.write(buf)
|
out.write(buf)
|
||||||
os.rename('.new.' + filename, filename)
|
os.rename(newname, filename)
|
||||||
|
Loading…
Reference in New Issue
Block a user