Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/patch.py @ 14609:f53dc0787424
patch: extend filtestore to store an optional copy source
This will help wrapping filestores in memctx.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Tue, 14 Jun 2011 23:24:34 +0200 |
parents | d0c2cc11e611 |
children | adbf5e7df96d |
comparison
equal
deleted
inserted
replaced
14608:4aef71839337 | 14609:f53dc0787424 |
---|---|
489 def __init__(self): | 489 def __init__(self): |
490 self.opener = None | 490 self.opener = None |
491 self.files = {} | 491 self.files = {} |
492 self.created = 0 | 492 self.created = 0 |
493 | 493 |
494 def setfile(self, fname, data, mode): | 494 def setfile(self, fname, data, mode, copied=None): |
495 if self.opener is None: | 495 if self.opener is None: |
496 root = tempfile.mkdtemp(prefix='hg-patch-') | 496 root = tempfile.mkdtemp(prefix='hg-patch-') |
497 self.opener = scmutil.opener(root) | 497 self.opener = scmutil.opener(root) |
498 # Avoid filename issues with these simple names | 498 # Avoid filename issues with these simple names |
499 fn = str(self.created) | 499 fn = str(self.created) |
500 self.opener.write(fn, data) | 500 self.opener.write(fn, data) |
501 self.created += 1 | 501 self.created += 1 |
502 self.files[fname] = (fn, mode) | 502 self.files[fname] = (fn, mode, copied) |
503 | 503 |
504 def getfile(self, fname): | 504 def getfile(self, fname): |
505 if fname not in self.files: | 505 if fname not in self.files: |
506 raise IOError() | 506 raise IOError() |
507 fn, mode = self.files[fname] | 507 fn, mode, copied = self.files[fname] |
508 return self.opener.read(fn), mode | 508 return self.opener.read(fn), mode, copied |
509 | 509 |
510 def close(self): | 510 def close(self): |
511 if self.opener: | 511 if self.opener: |
512 shutil.rmtree(self.opener.base) | 512 shutil.rmtree(self.opener.base) |
513 | 513 |
533 try: | 533 try: |
534 if self.copysource is None: | 534 if self.copysource is None: |
535 data, mode = backend.getfile(self.fname) | 535 data, mode = backend.getfile(self.fname) |
536 self.exists = True | 536 self.exists = True |
537 else: | 537 else: |
538 data, mode = store.getfile(self.copysource) | 538 data, mode = store.getfile(self.copysource)[:2] |
539 self.exists = backend.exists(self.fname) | 539 self.exists = backend.exists(self.fname) |
540 self.missing = False | 540 self.missing = False |
541 if data: | 541 if data: |
542 self.lines = data.splitlines(True) | 542 self.lines = data.splitlines(True) |
543 if self.mode is None: | 543 if self.mode is None: |
1246 if gp.op == 'DELETE': | 1246 if gp.op == 'DELETE': |
1247 backend.unlink(gp.path) | 1247 backend.unlink(gp.path) |
1248 continue | 1248 continue |
1249 data, mode = None, None | 1249 data, mode = None, None |
1250 if gp.op in ('RENAME', 'COPY'): | 1250 if gp.op in ('RENAME', 'COPY'): |
1251 data, mode = store.getfile(gp.oldpath) | 1251 data, mode = store.getfile(gp.oldpath)[:2] |
1252 if gp.mode: | 1252 if gp.mode: |
1253 mode = gp.mode | 1253 mode = gp.mode |
1254 if gp.op == 'ADD': | 1254 if gp.op == 'ADD': |
1255 # Added files without content have no hunk and | 1255 # Added files without content have no hunk and |
1256 # must be created | 1256 # must be created |