diff --git a/product/ERP5Type/DiffUtils.py b/product/ERP5Type/DiffUtils.py index 18033bbd86ded6cb168eacdb2686fe5b1a319c06..2af619206b61b5f325517f0bc801f902cf0726ac 100644 --- a/product/ERP5Type/DiffUtils.py +++ b/product/ERP5Type/DiffUtils.py @@ -57,11 +57,10 @@ class DiffFile(object): """ def __init__(self, raw_diff): - if '@@' not in raw_diff: - self.binary = True + self.children = [] + self.binary = raw_diff and '@@' not in raw_diff + if self.binary or not raw_diff: return - else: - self.binary = False self.header = raw_diff.split('@@')[0][:-1] # Getting file path in header self.path = self.header.split('====')[0][:-1].strip() @@ -84,7 +83,6 @@ class DiffFile(object): if not self.body.startswith('@@'): self.body = os.linesep.join(raw_diff.strip().splitlines()[4:]) # Now splitting modifications - self.children = [] first = True tmp = [] for line in self.body.splitlines(): @@ -97,6 +95,9 @@ class DiffFile(object): tmp.append(line) self.children.append(CodeBlock(os.linesep.join(tmp))) + def __nonzero__(self): + return self.binary or bool(self.children) + def __len__(self): return len(self.children) diff --git a/product/ERP5VCS/Git.py b/product/ERP5VCS/Git.py index 88d4e38ac7ae09e78c88fe505f0cb6dcc6579266..2f3cd3fb4144295991b22b09bcbd8e6fd0567241 100644 --- a/product/ERP5VCS/Git.py +++ b/product/ERP5VCS/Git.py @@ -217,8 +217,10 @@ class Git(WorkingCopy): template = 'Index: %%s\n%s%%s\n' % ('=' * 67) for diff in out: path = diff[:diff.index(' ')] - # XXX: the following line fails if only the file mode changes - diff_dict[path] = template % (path, diff[diff.index('\n---'):]) + try: + diff_dict[path] = template % (path, diff[diff.index('\n---'):]) + except ValueError: + pass # empty file is deleted or only file mode is changed return stat_dict, diff_dict def getModifiedTree(self, show_unmodified=False):