Mercurial > hg
view tests/svn-safe-append.py @ 30118:c19266edd93e
py3: a second argument to open can't be bytes
This fixes open(filename, 'r'), open(filename, 'w'), etc. calls. In Python
3, that second argument *must* be a string, you can't use bytes.
The fix is the same as used with getattr() (where the second argument must
also always be a string); in the tokenizer, where we detect calls, if there
is something that looks like a call to open (and is not an attribute, so
the previous token is not a "." dot) then make sure that that second
argument is not converted to a `bytes` object instead.
There is some remaining issue where the current transformer will also rewrite
open(f('foo')).
However this also affect function for which we perform similar rewrite
('getattr', 'setattr', 'hasattr', 'safehasattr') and will be dealt with in a
follow up.
author | Martijn Pieters <mjpieters@fb.com> |
---|---|
date | Sun, 09 Oct 2016 14:10:01 +0200 |
parents | bdba6a2015d0 |
children | ffa3026d4196 |
line wrap: on
line source
#!/usr/bin/env python from __future__ import absolute_import __doc__ = """Same as `echo a >> b`, but ensures a changed mtime of b. Without this svn will not detect workspace changes.""" import os import sys text = sys.argv[1] fname = sys.argv[2] f = open(fname, "ab") try: before = os.fstat(f.fileno()).st_mtime f.write(text) f.write("\n") finally: f.close() inc = 1 now = os.stat(fname).st_mtime while now == before: t = now + inc inc += 1 os.utime(fname, (t, t)) now = os.stat(fname).st_mtime