comparison mercurial/patch.py @ 21717:2a095d3442e0

patch: replace functions in fsbackend to use vfs Several functions in fsbackend are replaced to use vfs functions. vfs operations are applied on filename and path is joined by _join().
author Chinmay Joshi <c@chinmayjoshi.com>
date Thu, 05 Jun 2014 15:24:29 +0530
parents bee0e1cffdd3
children 3fbef7ac26f0
comparison
equal deleted inserted replaced
21716:90f9be5adade 21717:2a095d3442e0
415 415
416 def _join(self, f): 416 def _join(self, f):
417 return os.path.join(self.opener.base, f) 417 return os.path.join(self.opener.base, f)
418 418
419 def getfile(self, fname): 419 def getfile(self, fname):
420 path = self._join(fname) 420 if self.opener.islink(fname):
421 if os.path.islink(path): 421 return (self.opener.readlink(fname), (True, False))
422 return (os.readlink(path), (True, False)) 422
423 isexec = False 423 isexec = False
424 try: 424 try:
425 isexec = os.lstat(path).st_mode & 0100 != 0 425 isexec = self.opener.lstat(fname).st_mode & 0100 != 0
426 except OSError, e: 426 except OSError, e:
427 if e.errno != errno.ENOENT: 427 if e.errno != errno.ENOENT:
428 raise 428 raise
429 return (self.opener.read(fname), (False, isexec)) 429 return (self.opener.read(fname), (False, isexec))
430 430
431 def setfile(self, fname, data, mode, copysource): 431 def setfile(self, fname, data, mode, copysource):
432 islink, isexec = mode 432 islink, isexec = mode
433 if data is None: 433 if data is None:
434 util.setflags(self._join(fname), islink, isexec) 434 self.opener.setflags(fname, islink, isexec)
435 return 435 return
436 if islink: 436 if islink:
437 self.opener.symlink(data, fname) 437 self.opener.symlink(data, fname)
438 else: 438 else:
439 self.opener.write(fname, data) 439 self.opener.write(fname, data)
440 if isexec: 440 if isexec:
441 util.setflags(self._join(fname), False, True) 441 self.opener.setflags(fname, False, True)
442 442
443 def unlink(self, fname): 443 def unlink(self, fname):
444 util.unlinkpath(self._join(fname), ignoremissing=True) 444 self.opener.unlinkpath(fname, ignoremissing=True)
445 445
446 def writerej(self, fname, failed, total, lines): 446 def writerej(self, fname, failed, total, lines):
447 fname = fname + ".rej" 447 fname = fname + ".rej"
448 self.ui.warn( 448 self.ui.warn(
449 _("%d out of %d hunks FAILED -- saving rejects to file %s\n") % 449 _("%d out of %d hunks FAILED -- saving rejects to file %s\n") %
451 fp = self.opener(fname, 'w') 451 fp = self.opener(fname, 'w')
452 fp.writelines(lines) 452 fp.writelines(lines)
453 fp.close() 453 fp.close()
454 454
455 def exists(self, fname): 455 def exists(self, fname):
456 return os.path.lexists(self._join(fname)) 456 return self.opener.lexists(fname)
457 457
458 class workingbackend(fsbackend): 458 class workingbackend(fsbackend):
459 def __init__(self, ui, repo, similarity): 459 def __init__(self, ui, repo, similarity):
460 super(workingbackend, self).__init__(ui, repo.root) 460 super(workingbackend, self).__init__(ui, repo.root)
461 self.repo = repo 461 self.repo = repo