comparison mercurial/patch.py @ 14658:7ddf9a607b75

patch: make filestore store data in memory and fallback to fs
author Patrick Mezard <pmezard@gmail.com>
date Fri, 17 Jun 2011 20:33:02 +0200
parents adbf5e7df96d
children e4d3370fa234
comparison
equal deleted inserted replaced
14654:e21fd445c297 14658:7ddf9a607b75
485 for f in addremoved] 485 for f in addremoved]
486 scmutil.addremove(self.repo, addremoved, similarity=self.similarity) 486 scmutil.addremove(self.repo, addremoved, similarity=self.similarity)
487 return sorted(self.changed) 487 return sorted(self.changed)
488 488
489 class filestore(object): 489 class filestore(object):
490 def __init__(self): 490 def __init__(self, maxsize=None):
491 self.opener = None 491 self.opener = None
492 self.files = {} 492 self.files = {}
493 self.created = 0 493 self.created = 0
494 self.maxsize = maxsize
495 if self.maxsize is None:
496 self.maxsize = 4*(2**20)
497 self.size = 0
498 self.data = {}
494 499
495 def setfile(self, fname, data, mode, copied=None): 500 def setfile(self, fname, data, mode, copied=None):
496 if self.opener is None: 501 if self.maxsize < 0 or (len(data) + self.size) <= self.maxsize:
497 root = tempfile.mkdtemp(prefix='hg-patch-') 502 self.data[fname] = (data, mode, copied)
498 self.opener = scmutil.opener(root) 503 self.size += len(data)
499 # Avoid filename issues with these simple names 504 else:
500 fn = str(self.created) 505 if self.opener is None:
501 self.opener.write(fn, data) 506 root = tempfile.mkdtemp(prefix='hg-patch-')
502 self.created += 1 507 self.opener = scmutil.opener(root)
503 self.files[fname] = (fn, mode, copied) 508 # Avoid filename issues with these simple names
509 fn = str(self.created)
510 self.opener.write(fn, data)
511 self.created += 1
512 self.files[fname] = (fn, mode, copied)
504 513
505 def getfile(self, fname): 514 def getfile(self, fname):
506 if fname not in self.files: 515 if fname in self.data:
516 return self.data[fname]
517 if not self.opener or fname not in self.files:
507 raise IOError() 518 raise IOError()
508 fn, mode, copied = self.files[fname] 519 fn, mode, copied = self.files[fname]
509 return self.opener.read(fn), mode, copied 520 return self.opener.read(fn), mode, copied
510 521
511 def close(self): 522 def close(self):