inotify: server: refactor updatestatus()
* Instead of one entry point, use two entry points, updatefile()
and deletefile(), both internally calling the helper function _updatestatus
* Do not rely on TypeError to detect the type of oldstatus: use isinstance
* The call updatestatus(wpath, None) in deleted() was a bit particular:
because no osstat and no newstatus was given, the newstatus was determined
using the data stored internally. To replace this exact behavior with the
new code, one would use:
root, fn = self.split(wpath)
d = self.dir(self.tree, root)
self.filedeleted(wpath, d.get(fn))
This, however, duplicates code with _updatestatus(), which led us to an
interesting question: why are we basing ourselves on repowatcher data to
update the status, where everywhere else, we are comparing against dirsate?
There is no reason to do this, which is why the new code is:
self.filedeleted(wpath, self.repo.dirstate[wpath])
Incidentally, after this, the test for
issue1371 passes again.
#!/bin/sh
hg init repo
cd repo
echo foo > foo
hg ci -qAm 'add foo'
echo >> foo
hg ci -m 'change foo'
hg up -qC 0
echo bar > bar
hg ci -qAm 'add bar'
hg log
cd ..
hg init copy
cd copy
echo '% pull a missing revision'
hg pull -qr missing ../repo
echo '% pull -r 0'
hg pull -qr 0 ../repo
hg log
echo '% pull -r 1'
hg pull -qr 1 ../repo
hg log
# this used to abort: received changelog group is empty
echo '% pull -r 1 again'
hg pull -qr 1 ../repo