diff -r 7a8ea1397816 -r d718eddf01d9 mercurial/bundle2.py --- a/mercurial/bundle2.py Thu Dec 08 15:33:19 2022 +0100 +++ b/mercurial/bundle2.py Thu Aug 31 23:56:15 2023 +0200 @@ -980,7 +980,7 @@ def close(self): """close underlying file""" - if util.safehasattr(self._fp, 'close'): + if hasattr(self._fp, 'close'): return self._fp.close() @@ -1068,7 +1068,7 @@ The new part have the very same content but no partid assigned yet. Parts with generated data cannot be copied.""" - assert not util.safehasattr(self.data, 'next') + assert not hasattr(self.data, 'next') return self.__class__( self.type, self._mandatoryparams, @@ -1137,9 +1137,7 @@ msg.append(b')') if not self.data: msg.append(b' empty payload') - elif util.safehasattr(self.data, 'next') or util.safehasattr( - self.data, '__next__' - ): + elif hasattr(self.data, 'next') or hasattr(self.data, '__next__'): msg.append(b' streamed payload') else: msg.append(b' %i bytes payload' % len(self.data)) @@ -1233,9 +1231,7 @@ Exists to handle the different methods to provide data to a part.""" # we only support fixed size data now. # This will be improved in the future. - if util.safehasattr(self.data, 'next') or util.safehasattr( - self.data, '__next__' - ): + if hasattr(self.data, 'next') or hasattr(self.data, '__next__'): buff = util.chunkbuffer(self.data) chunk = buff.read(preferedchunksize) while chunk: @@ -1380,9 +1376,7 @@ def __init__(self, ui, header, fp): super(unbundlepart, self).__init__(fp) - self._seekable = util.safehasattr(fp, 'seek') and util.safehasattr( - fp, 'tell' - ) + self._seekable = hasattr(fp, 'seek') and hasattr(fp, 'tell') self.ui = ui # unbundle state attr self._headerdata = header