Skip to content

Commit 59a7237

Browse files
committed
Fix "gitcc rebase" fot empty files
Fixes charleso#20. The existing fix in charleso/git-cc@ccf628db033 is not working. If there is no "checkinversion" in "lshistory" then check if there is 3 items in the history (mkelemfile, mkelembranch, mkelemversion) or 5 items (mkelemfile, mkelembranch, mkelemversion, mkbranchbranch, mkbranchversion) If so then this file is created as an empty one and download it with proper version.
1 parent c3e67d9 commit 59a7237

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

rebase.py

+39-3
Original file line numberDiff line numberDiff line change
@@ -248,15 +248,51 @@ def getFile(line):
248248
history = cc_exec(['lshistory', '-fmt', '%o%m|%Nd|%Vn\\n', added], errors=False)
249249
if not history:
250250
continue
251+
history = filter(None, history.split('\n'))
252+
all_versions = self.parse_history(history)
251253
date = cc_exec(['describe', '-fmt', '%Nd', dir])
252-
def f(s):
253-
return s[0] == 'checkinversion' and s[1] < date and filterBranches(s[2], True)
254-
versions = list(filter(f, list(map(lambda x: x.split('|'), history.split('\n')))))
254+
255+
versions = self.checkin_versions(all_versions, date)
256+
if not versions:
257+
print("No proper versions of '%s' file. Check if it is empty." % added)
258+
versions = self.empty_file_versions(all_versions, date)
255259
if not versions:
256260
print("It appears that you may be missing a branch in the includes section of your gitcc config for file '%s'." % added)
257261
continue
258262
self._add(added, versions[0][2].strip())
259263

264+
def checkin_versions(self, versions, date):
265+
def f(s):
266+
return s[0] == 'checkinversion' and s[1] < date and filterBranches(s[2], True)
267+
return self.filter_versions(versions, f)
268+
269+
def empty_file_versions(self, versions, date):
270+
return self.versions_with_branch(versions, date) or self.versions_without_branch(versions, date)
271+
272+
def versions_with_branch(self, versions, date):
273+
versions = self.filter_versions(versions, lambda x: x[1] < date)
274+
if len(versions) != 5:
275+
return False
276+
return self.mkbranch_versions(versions, date)
277+
278+
def versions_without_branch(self, versions, date):
279+
versions = self.filter_versions(versions, lambda x: x[1] < date)
280+
if len(versions) != 3:
281+
return False
282+
return self.filter_versions(versions, lambda x: x[0] == 'mkelemversion')
283+
284+
def mkbranch_versions(self, versions, date):
285+
def f(s):
286+
return s[0] == 'mkbranchversion' and s[1] < date and filterBranches(s[2], True)
287+
return self.filter_versions(versions, f)
288+
289+
def filter_versions(self, versions, handler):
290+
return list(filter(handler, versions))
291+
292+
def parse_history(self, history_arr):
293+
return list(map(lambda x: x.split('|'), history_arr))
294+
295+
260296
TYPES = {\
261297
'checkinversion': Changeset,\
262298
'checkindirectory version': Uncataloged,\

0 commit comments

Comments
 (0)