# HG changeset patch # User Yuya Nishihara # Date 1584692294 -32400 # Node ID f8427841c8fcbe678756eb99ab12dc935537378c # Parent 2ec6160449aa4dd4dfc9d1b393741d747337d029# Parent bc9a9016467d90a613816950175e05671af277e6 merge with stable diff -r 2ec6160449aa -r f8427841c8fc contrib/byteify-strings.py --- a/contrib/byteify-strings.py Thu Mar 19 14:54:10 2020 -0400 +++ b/contrib/byteify-strings.py Fri Mar 20 17:18:14 2020 +0900 @@ -328,6 +328,7 @@ 'allow-attr-methods': args.allow_attr_methods, } for fname in args.files: + fname = os.path.realpath(fname) if args.inplace: with editinplace(fname) as fout: with open(fname, 'rb') as fin: diff -r 2ec6160449aa -r f8427841c8fc contrib/heptapod-ci.yml --- a/contrib/heptapod-ci.yml Thu Mar 19 14:54:10 2020 -0400 +++ b/contrib/heptapod-ci.yml Fri Mar 20 17:18:14 2020 +0900 @@ -6,7 +6,7 @@ - hg clone . /tmp/mercurial-ci/ --noupdate - hg -R /tmp/mercurial-ci/ update `hg log --rev '.' --template '{node}'` - cd /tmp/mercurial-ci/ - - (cd tests; ls -1 test-check-*.*) > /tmp/check-tests.txt + - ls -1 tests/test-check-*.* > /tmp/check-tests.txt variables: PYTHON: python @@ -14,10 +14,9 @@ .runtests_template: &runtests script: - - cd tests/ - echo "python used, $PYTHON" - echo "$RUNTEST_ARGS" - - HGMODULEPOLICY="$TEST_HGMODULEPOLICY" "$PYTHON" run-tests.py --color=always $RUNTEST_ARGS + - HGMODULEPOLICY="$TEST_HGMODULEPOLICY" "$PYTHON" tests/run-tests.py --color=always $RUNTEST_ARGS checks-py2: <<: *runtests diff -r 2ec6160449aa -r f8427841c8fc mercurial/archival.py --- a/mercurial/archival.py Thu Mar 19 14:54:10 2020 -0400 +++ b/mercurial/archival.py Fri Mar 20 17:18:14 2020 +0900 @@ -135,34 +135,38 @@ '''write archive to tar file or stream. can write uncompressed, or compress with gzip or bzip2.''' - class GzipFileWithTime(gzip.GzipFile): - def __init__(self, *args, **kw): - timestamp = None - if 'timestamp' in kw: - timestamp = kw.pop('timestamp') - if timestamp is None: - self.timestamp = time.time() - else: - self.timestamp = timestamp - gzip.GzipFile.__init__(self, *args, **kw) + if pycompat.ispy3: + GzipFileWithTime = gzip.GzipFile # camelcase-required + else: + + class GzipFileWithTime(gzip.GzipFile): + def __init__(self, *args, **kw): + timestamp = None + if 'mtime' in kw: + timestamp = kw.pop('mtime') + if timestamp is None: + self.timestamp = time.time() + else: + self.timestamp = timestamp + gzip.GzipFile.__init__(self, *args, **kw) - def _write_gzip_header(self): - self.fileobj.write(b'\037\213') # magic header - self.fileobj.write(b'\010') # compression method - fname = self.name - if fname and fname.endswith(b'.gz'): - fname = fname[:-3] - flags = 0 - if fname: - flags = gzip.FNAME # pytype: disable=module-attr - self.fileobj.write(pycompat.bytechr(flags)) - gzip.write32u( # pytype: disable=module-attr - self.fileobj, int(self.timestamp) - ) - self.fileobj.write(b'\002') - self.fileobj.write(b'\377') - if fname: - self.fileobj.write(fname + b'\000') + def _write_gzip_header(self): + self.fileobj.write(b'\037\213') # magic header + self.fileobj.write(b'\010') # compression method + fname = self.name + if fname and fname.endswith(b'.gz'): + fname = fname[:-3] + flags = 0 + if fname: + flags = gzip.FNAME # pytype: disable=module-attr + self.fileobj.write(pycompat.bytechr(flags)) + gzip.write32u( # pytype: disable=module-attr + self.fileobj, int(self.timestamp) + ) + self.fileobj.write(b'\002') + self.fileobj.write(b'\377') + if fname: + self.fileobj.write(fname + b'\000') def __init__(self, dest, mtime, kind=b''): self.mtime = mtime @@ -178,7 +182,7 @@ pycompat.sysstr(mode + b'b'), zlib.Z_BEST_COMPRESSION, fileobj, - timestamp=mtime, + mtime=mtime, ) self.fileobj = gzfileobj return tarfile.TarFile.taropen( # pytype: disable=attribute-error diff -r 2ec6160449aa -r f8427841c8fc mercurial/cext/revlog.c --- a/mercurial/cext/revlog.c Thu Mar 19 14:54:10 2020 -0400 +++ b/mercurial/cext/revlog.c Fri Mar 20 17:18:14 2020 +0900 @@ -159,7 +159,10 @@ sizeof(*self->offsets)); if (self->offsets == NULL) return (const char *)PyErr_NoMemory(); - inline_scan(self, self->offsets); + Py_ssize_t ret = inline_scan(self, self->offsets); + if (ret == -1) { + return NULL; + }; } return self->offsets[pos]; } diff -r 2ec6160449aa -r f8427841c8fc rust/hg-core/src/lib.rs --- a/rust/hg-core/src/lib.rs Thu Mar 19 14:54:10 2020 -0400 +++ b/rust/hg-core/src/lib.rs Fri Mar 20 17:18:14 2020 +0900 @@ -27,6 +27,14 @@ pub mod re2; pub mod utils; +// Remove this to see (potential) non-artificial compile failures. MacOS +// *should* compile, but fail to compile tests for example as of 2020-03-06 +#[cfg(not(target_os = "linux"))] +compile_error!( + "`hg-core` has only been tested on Linux and will most \ + likely not behave correctly on other platforms." +); + use crate::utils::hg_path::{HgPathBuf, HgPathError}; pub use filepatterns::{ parse_pattern_syntax, read_pattern_file, IgnorePattern, diff -r 2ec6160449aa -r f8427841c8fc tests/run-tests.py --- a/tests/run-tests.py Thu Mar 19 14:54:10 2020 -0400 +++ b/tests/run-tests.py Fri Mar 20 17:18:14 2020 +0900 @@ -1632,7 +1632,7 @@ return self._have.get(allreqs) # TODO do something smarter when all other uses of hghave are gone. - runtestdir = os.path.abspath(os.path.dirname(_sys2bytes(__file__))) + runtestdir = osenvironb[b'RUNTESTDIR'] tdir = runtestdir.replace(b'\\', b'/') proc = Popen4( b'%s -c "%s/hghave %s"' % (self._shell, tdir, allreqs),