##// END OF EJS Templates
largefiles: restore R status of removed largefiles correctly at "hg rollback"...
largefiles: restore R status of removed largefiles correctly at "hg rollback" Before this patch, removed or forgotten largefiles aren't treated as removed ("R") after "hg rollback". Removed ones are treated as missing ("!") and forgotten ones are treated as clean ("C") unexpectedly. "overriderollback" uses "normallookup" to restore status in lfdirstate for largefiles other than ones not added in rollback-ed revision, but this isn't correct for removed (or forgotten) largefiles. This patch uses "lfutil.synclfdirstate" to restore "R" status of removed (or forgotten) largefiles correctly at "hg rollback". This is a temporary way to fix with less changes. For fundamental resolution of this kind of problems in the future, lfdirstate should be rollback-ed as a part of transaction, as same as dirstate.

File last commit:

r19008:9d33d6e0 default
r22096:61e52658 default
Show More
wirestore.py
40 lines | 1.3 KiB | text/x-python | PythonLexer
# 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.
'''largefile store working over Mercurial's wire protocol'''
import lfutil
import remotestore
class wirestore(remotestore.remotestore):
def __init__(self, ui, repo, remote):
cap = remote.capable('largefiles')
if not cap:
raise lfutil.storeprotonotcapable([])
storetypes = cap.split(',')
if 'serve' not in storetypes:
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)
def _stat(self, hashes):
'''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.'''
batch = self.remote.batch()
futures = {}
for hash in hashes:
futures[hash] = batch.statlfile(hash)
batch.submit()
retval = {}
for hash in hashes:
retval[hash] = futures[hash].value
return retval