def apply_textdelta(self, file_baton, base_checksum, pool=None): if file_baton is None: return lambda x: None if file_baton not in self._openfiles: raise EditingError('trying to patch a closed file %s' % file_baton) path, base, isexec, islink, copypath = self._openfiles[file_baton] if not isinstance(base, basestring): raise EditingError('trying to edit a file again: %s' % path) if not self.meta.is_path_valid(path): return lambda x: None target = svnwrap.SimpleStringIO(closing=False) self.stream = target handler = svnwrap.apply_txdelta(base, target) if not callable(handler): # pragma: no cover raise hgutil.Abort('Error in Subversion bindings: ' 'cannot call handler!') def txdelt_window(window): try: if not self.meta.is_path_valid(path): return # are we skipping this branch entirely? br_path, branch = self.meta.split_branch_path(path)[:2] if self.meta.skipbranch(branch): return try: handler(window) except AssertionError, e: # pragma: no cover # Enhance the exception message msg, others = e.args[0], e.args[1:] if msg: msg += '\n' msg += _TXDELT_WINDOW_HANDLER_FAILURE_MSG e.args = (msg,) + others # re-raising ensures that we show the full stack trace raise # window being None means commit this file if not window: self._openfiles[file_baton] = ( path, target, isexec, islink, copypath) except svnwrap.SubversionException, e: # pragma: no cover self.ui.traceback() if e.args[1] == svnwrap.ERR_INCOMPLETE_DATA: self.addmissing(path) else: # pragma: no cover raise hgutil.Abort(*e.args)
def apply_textdelta(self, file_baton, base_checksum, pool=None): # We know coming in here the file must be one of the following options: # 1) Deleted (invalid, fail an assertion) # 2) Missing a base text (bail quick since we have to fetch a full plaintext) # 3) Has a base text in self.current.files, apply deltas base = '' if not self.meta.is_path_valid(self.current.file): return lambda x: None if self.current.file in self.current.deleted: msg = ('cannot apply textdelta to %s: file is deleted' % self.current.file) raise IOError(errno.ENOENT, msg) if (self.current.file not in self.current.files and self.current.file not in self.current.missing): msg = ('cannot apply textdelta to %s: file not found' % self.current.file) raise IOError(errno.ENOENT, msg) if self.current.file in self.current.missing: return lambda x: None base = self.current.files[self.current.file] target = cStringIO.StringIO() self.stream = target handler = svnwrap.apply_txdelta(base, target) if not callable(handler): # pragma: no cover raise hgutil.Abort('Error in Subversion bindings: ' 'cannot call handler!') def txdelt_window(window): try: if not self.meta.is_path_valid(self.current.file): return # Already get and store the value here, because calling # handler(window) seems to close the target in Subversion 1.7. val = target.getvalue() handler(window) # window being None means commit this file if not window: self.current.files[self.current.file] = val except svnwrap.SubversionException, e: # pragma: no cover if e.args[1] == svnwrap.ERR_INCOMPLETE_DATA: self.current.missing.add(self.current.file) else: # pragma: no cover raise hgutil.Abort(*e.args) except: # pragma: no cover
def apply_textdelta(self, file_baton, base_checksum, pool=None): # We know coming in here the file must be one of the following options: # 1) Deleted (invalid, fail an assertion) # 2) Missing a base text (bail quick since we have to fetch a full plaintext) # 3) Has a base text in self.current.files, apply deltas base = '' if not self.meta.is_path_valid(self.current.file): return lambda x: None if self.current.file in self.current.deleted: msg = ('cannot apply textdelta to %s: file is deleted' % self.current.file) raise IOError(errno.ENOENT, msg) if (self.current.file not in self.current.files and self.current.file not in self.current.missing): msg = ('cannot apply textdelta to %s: file not found' % self.current.file) raise IOError(errno.ENOENT, msg) if self.current.file in self.current.missing: return lambda x: None base = self.current.files[self.current.file] target = cStringIO.StringIO() self.stream = target handler = svnwrap.apply_txdelta(base, target) if not callable(handler): #pragma: no cover raise hgutil.Abort('Error in Subversion bindings: ' 'cannot call handler!') def txdelt_window(window): try: if not self.meta.is_path_valid(self.current.file): return handler(window) # window being None means commit this file if not window: self.current.files[self.current.file] = target.getvalue() except svnwrap.SubversionException, e: #pragma: no cover if e.args[1] == svnwrap.ERR_INCOMPLETE_DATA: self.current.missing.add(self.current.file) else: #pragma: no cover raise hgutil.Abort(*e.args) except: #pragma: no cover
def apply_textdelta(self, file_baton, base_checksum, pool=None): stream = svnwrap.SimpleStringIO(closing=False) handler = svnwrap.apply_txdelta('', stream) if not callable(handler): raise error.Abort('Error in Subversion bindings: ' 'cannot call handler!') def txdelt_window(window): handler(window) # window being None means we're done if window: return fctx = self.ctx[self.file] hgdata = fctx.data() svndata = stream.getvalue() if 'svn:executable' in self.props: if fctx.flags() != 'x': self.ui.write('wrong flags for: %s\n' % self.file) self.failed = True elif 'svn:special' in self.props: hgdata = 'link ' + hgdata if fctx.flags() != 'l': self.ui.write('wrong flags for: %s\n' % self.file) self.failed = True elif fctx.flags(): self.ui.write('wrong flags for: %s\n' % self.file) self.failed = True if hgdata != svndata: self.ui.write('difference in: %s\n' % self.file) diff_file(self.file, svndata) self.failed = True if self.file is not None: return txdelt_window
def apply_textdelta(self, file_baton, base_checksum, pool=None): stream = svnwrap.SimpleStringIO(closing=False) handler = svnwrap.apply_txdelta('', stream) if not callable(handler): raise hgutil.Abort('Error in Subversion bindings: ' 'cannot call handler!') def txdelt_window(window): handler(window) # window being None means we're done if window: return fctx = self.ctx[self.file] hgdata = fctx.data() svndata = stream.getvalue() if 'svn:executable' in self.props: if fctx.flags() != 'x': self.ui.warn('wrong flags for: %s\n' % self.file) self.failed = True elif 'svn:special' in self.props: hgdata = 'link ' + hgdata if fctx.flags() != 'l': self.ui.warn('wrong flags for: %s\n' % self.file) self.failed = True elif fctx.flags(): self.ui.warn('wrong flags for: %s\n' % self.file) self.failed = True if hgdata != svndata: self.ui.warn('difference in: %s\n' % self.file) diff_file(self.file, svndata) self.failed = True if self.file is not None: return txdelt_window