diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py index acfca07a8f26e88e5373c5926b4c4263d5308400_bWVyY3VyaWFsL3NjbXV0aWwucHk=..236bb604dc39438327db8551ced7ad7b9c37e487_bWVyY3VyaWFsL3NjbXV0aWwucHk= 100644 --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -803,6 +803,10 @@ return self def __get__(self, obj, type=None): + # do we need to check if the file changed? + if self.name in obj.__dict__: + return obj.__dict__[self.name] + entry = obj._filecache.get(self.name) if entry: @@ -818,5 +822,5 @@ obj._filecache[self.name] = entry - setattr(obj, self.name, entry.obj) + obj.__dict__[self.name] = entry.obj return entry.obj @@ -822,1 +826,12 @@ return entry.obj + + def __set__(self, obj, value): + if self.name in obj._filecache: + obj._filecache[self.name].obj = value # update cached copy + obj.__dict__[self.name] = value # update copy returned by obj.x + + def __delete__(self, obj): + try: + del obj.__dict__[self.name] + except KeyError: + raise AttributeError, self.name diff --git a/mercurial/statichttprepo.py b/mercurial/statichttprepo.py index acfca07a8f26e88e5373c5926b4c4263d5308400_bWVyY3VyaWFsL3N0YXRpY2h0dHByZXBvLnB5..236bb604dc39438327db8551ced7ad7b9c37e487_bWVyY3VyaWFsL3N0YXRpY2h0dHByZXBvLnB5 100644 --- a/mercurial/statichttprepo.py +++ b/mercurial/statichttprepo.py @@ -112,6 +112,7 @@ self.spath = self.store.path self.sopener = self.store.opener self.sjoin = self.store.join + self._filecache = {} self.manifest = manifest.manifest(self.sopener) self.changelog = changelog.changelog(self.sopener) @@ -122,7 +123,6 @@ self.encodepats = None self.decodepats = None self.capabilities.difference_update(["pushkey"]) - self._filecache = {} def url(self): return self._url diff --git a/tests/test-commandserver.py b/tests/test-commandserver.py index acfca07a8f26e88e5373c5926b4c4263d5308400_dGVzdHMvdGVzdC1jb21tYW5kc2VydmVyLnB5..236bb604dc39438327db8551ced7ad7b9c37e487_dGVzdHMvdGVzdC1jb21tYW5kc2VydmVyLnB5 100644 --- a/tests/test-commandserver.py +++ b/tests/test-commandserver.py @@ -181,6 +181,13 @@ os.system('hg upd bm1 -q') runcommand(server, ['bookmarks']) + runcommand(server, ['bookmarks', 'bm3']) + f = open('a', 'ab') + f.write('a\n') + f.close() + runcommand(server, ['commit', '-Amm']) + runcommand(server, ['bookmarks']) + def tagscache(server): readchannel(server) runcommand(server, ['id', '-t', '-r', '0']) diff --git a/tests/test-commandserver.py.out b/tests/test-commandserver.py.out index acfca07a8f26e88e5373c5926b4c4263d5308400_dGVzdHMvdGVzdC1jb21tYW5kc2VydmVyLnB5Lm91dA==..236bb604dc39438327db8551ced7ad7b9c37e487_dGVzdHMvdGVzdC1jb21tYW5kc2VydmVyLnB5Lm91dA== 100644 --- a/tests/test-commandserver.py.out +++ b/tests/test-commandserver.py.out @@ -114,6 +114,12 @@ runcommand bookmarks * bm1 1:d3a0a68be6de bm2 1:d3a0a68be6de + runcommand bookmarks bm3 + runcommand commit -Amm + runcommand bookmarks + bm1 1:d3a0a68be6de + bm2 1:d3a0a68be6de + * bm3 2:aef17e88f5f0 testing tagscache: @@ -125,5 +131,5 @@ testing setphase: runcommand phase -r . -2: draft +3: draft runcommand phase -r . @@ -129,2 +135,2 @@ runcommand phase -r . -2: public +3: public