##// END OF EJS Templates
changelog: keep track of file end in appender (issue5444)...
changelog: keep track of file end in appender (issue5444) Previously, changelog.appender.end() would compute the end of the file by joining all the current appended data and checking the length. This is an O(n) operation. e240e914d226 introduced a seek call before every revlog write, which means we are hitting this O(n) behavior n times, which causes changelog writes during a pull to be n^2. In our large repo, this caused pulling 100k commits to go from 17s to 130s. With this fix, it's back to 17s.

File last commit:

r29316:28dfcf3d default
r30596:be520fe3 default
Show More
wirestore.py
39 lines | 1.3 KiB | text/x-python | PythonLexer
various
hgext: add largefiles extension...
r15168 # Copyright 2010-2011 Fog Creek Software
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Greg Ward
largefiles: improve comments, internal docstrings...
r15252 '''largefile store working over Mercurial's wire protocol'''
liscju
py3: make largefiles/wirestore.py use absolute_import
r29316 from __future__ import absolute_import
various
hgext: add largefiles extension...
r15168
liscju
py3: make largefiles/wirestore.py use absolute_import
r29316 from . import (
lfutil,
remotestore,
)
various
hgext: add largefiles extension...
r15168
class wirestore(remotestore.remotestore):
def __init__(self, ui, repo, remote):
cap = remote.capable('largefiles')
if not cap:
raise lfutil.storeprotonotcapable([])
storetypes = cap.split(',')
Brodie Rao
cleanup: "not x in y" -> "x not in y"
r16686 if 'serve' not in storetypes:
various
hgext: add largefiles extension...
r15168 raise lfutil.storeprotonotcapable(storetypes)
self.remote = remote
super(wirestore, self).__init__(ui, repo, remote.url())
def _put(self, hash, fd):
return self.remote.putlfile(hash, fd)
def _get(self, hash):
return self.remote.getlfile(hash)
Na'Tosha Bard
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)...
r17127 def _stat(self, hashes):
Mads Kiilerich
largefiles: stat all largefiles in one batch before downloading...
r19008 '''For each hash, return 0 if it is available, other values if not.
It is usually 2 if the largefile is missing, but might be 1 the server
has a corrupted copy.'''
Augie Fackler
largefiles: use iterbatch instead of batch...
r28439 batch = self.remote.iterbatch()
Na'Tosha Bard
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)...
r17127 for hash in hashes:
Augie Fackler
largefiles: use iterbatch instead of batch...
r28439 batch.statlfile(hash)
Na'Tosha Bard
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)...
r17127 batch.submit()
Augie Fackler
largefiles: use iterbatch instead of batch...
r28439 return dict(zip(hashes, batch.results()))