diff -r 3388ab21d768 -r d7fff529d85d mercurial/localrepo.py --- a/mercurial/localrepo.py Wed Sep 15 10:44:10 2010 +0200 +++ b/mercurial/localrepo.py Wed Sep 15 11:06:22 2010 +0200 @@ -1784,7 +1784,7 @@ return newheads - oldheads + 1 - def stream_in(self, remote): + def stream_in(self, remote, requirements): fp = remote.stream_out() l = fp.readline() try: @@ -1829,6 +1829,13 @@ self.ui.status(_('transferred %s in %.1f seconds (%s/sec)\n') % (util.bytecount(total_bytes), elapsed, util.bytecount(total_bytes / elapsed))) + + # new requirements = old non-format requirements + new format-related + # requirements from the streamed-in repository + requirements.update(set(self.requirements) - self.supportedformats) + self._applyrequirements(requirements) + self._writerequirements() + self.invalidate() return len(self.heads()) + 1 @@ -1847,8 +1854,17 @@ # and format flags on "stream" capability, and use # uncompressed only if compatible. - if stream and not heads and remote.capable('stream'): - return self.stream_in(remote) + if stream and not heads: + # 'stream' means remote revlog format is revlogv1 only + if remote.capable('stream'): + return self.stream_in(remote, set(('revlogv1',))) + # otherwise, 'streamreqs' contains the remote revlog format + streamreqs = remote.capable('streamreqs') + if streamreqs: + streamreqs = set(streamreqs.split(',')) + # if we support it, stream in and adjust our requirements + if not streamreqs - self.supportedformats: + return self.stream_in(remote, streamreqs) return self.pull(remote, heads) def pushkey(self, namespace, key, old, new):