Mercurial > hg
comparison hgext/convert/bzr.py @ 22296:650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
The internal API used IOError to indicate that a file should be marked as
removed.
There is some correlation between IOError (especially with ENOENT) and files
that should be removed, but using IOErrors to represent file removal internally
required some hacks.
Instead, use the value None to indicate that the file not is present.
Before, spurious IO errors could cause commits that silently removed files.
They will now be reported like all other IO errors so the root cause can be
fixed.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Tue, 26 Aug 2014 22:03:32 +0200 |
parents | e7cfe3587ea4 |
children | 35ab037de989 |
comparison
equal
deleted
inserted
replaced
22295:926bc0d3b595 | 22296:650b5b6e75ed |
---|---|
120 kind = None | 120 kind = None |
121 if fileid is not None: | 121 if fileid is not None: |
122 kind = revtree.kind(fileid) | 122 kind = revtree.kind(fileid) |
123 if kind not in supportedkinds: | 123 if kind not in supportedkinds: |
124 # the file is not available anymore - was deleted | 124 # the file is not available anymore - was deleted |
125 raise IOError(_('%s is not available in %s anymore') % | 125 return None, None |
126 (name, rev)) | |
127 mode = self._modecache[(name, rev)] | 126 mode = self._modecache[(name, rev)] |
128 if kind == 'symlink': | 127 if kind == 'symlink': |
129 target = revtree.get_symlink_target(fileid) | 128 target = revtree.get_symlink_target(fileid) |
130 if target is None: | 129 if target is None: |
131 raise util.Abort(_('%s.%s symlink has no target') | 130 raise util.Abort(_('%s.%s symlink has no target') |