comparison mercurial/hg.py @ 26240:2b1434e5eaa0

hg: always create new localrepository instance cachedlocalrepo.copy() didn't actually create new localrepository instances. This meant that the new thread isolation code in hgweb wasn't actually using separate localrepository instances, even though it was properly using separate cachedlocalrepo instances. Because the behavior of the API changed, the single caller in hgweb had to be refactored to always call _webifyrepo() or it may not have used the proper filter. I confirmed via print() debugging that id(repo) is in fact different on each thread. This was not the case before. For reasons I can't yet explain, this does not fix issue4756. I suspect there is shared cache somewhere that isn't thread safe.
author Gregory Szorc <gregory.szorc@gmail.com>
date Sat, 12 Sep 2015 11:31:56 -0700
parents ae33fff17c1e
children 7c20d501709b
comparison
equal deleted inserted replaced
26239:f39953663cc9 26240:2b1434e5eaa0
885 maxmtime = max(maxmtime, st.st_mtime) 885 maxmtime = max(maxmtime, st.st_mtime)
886 886
887 return tuple(state), maxmtime 887 return tuple(state), maxmtime
888 888
889 def copy(self): 889 def copy(self):
890 """Obtain a copy of this class instance.""" 890 """Obtain a copy of this class instance.
891 c = cachedlocalrepo(self._repo) 891
892 A new localrepository instance is obtained. The new instance should be
893 completely independent of the original.
894 """
895 repo = repository(self._repo.baseui, self._repo.origroot)
896 c = cachedlocalrepo(repo)
892 c._state = self._state 897 c._state = self._state
893 c.mtime = self.mtime 898 c.mtime = self.mtime
894 return c 899 return c