X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=buildscripts%2Fgit-update-changelog.py;h=35dd2e6c7538795821ed1a6abc41706578e9bead;hb=3b2883eac4e40ebab564cb47fd446c3d31063bff;hp=4b98c6c1994e0e3a8a2073f4144e7e8c91e53c99;hpb=00b685480bb47512f6e8a206c2679f3ec96ca297;p=lilypond.git diff --git a/buildscripts/git-update-changelog.py b/buildscripts/git-update-changelog.py index 4b98c6c199..35dd2e6c75 100644 --- a/buildscripts/git-update-changelog.py +++ b/buildscripts/git-update-changelog.py @@ -43,6 +43,41 @@ class Commit: self.diff = read_pipe ('git show %s' % self.committish) def compare (self, other): return sign (time.mktime (self.date) - time.mktime (other.date)) + + def check_diff_chunk (self, filename, chunk): + removals = [] + def note_removal (m): + removals.append (m.group (1)) + + re.sub ('\n-([^\n]+)', note_removal, chunk) + + if removals == []: + return True + + contents = open (filename).read () + for r in removals: + if r not in contents: + return False + + return True + + def check_diff (self): + chunks = re.split ('\ndiff --git ', self.diff) + + ok = True + for c in chunks: + m = re.search ('^a/([^ ]+)', c) + if not m: + continue + + file = m.group (1) + + c = re.sub('\n--- [^\n]+', '', c) + ok = ok and self.check_diff_chunk (file, c) + if not ok: + break + + return ok def touched_files (self): files = [] @@ -189,6 +224,7 @@ Run this file from the CVS directory, with commits from the repository in --git- except OSError: previously_done = {} + commits = [c for c in commits if not previously_done.has_key (c.committish)] commits = [c for c in commits if not previously_done.has_key (c.committish)] commits = sorted (commits, cmp=Commit.compare) @@ -196,18 +232,27 @@ Run this file from the CVS directory, with commits from the repository in --git- file_adddel = [] collated_log = '' collated_message = '' - commits_done = [] while commits: c = commits[0] - commits = commits[1:] - commits_done.append (c) - if not c.has_patch (): print 'patchless commit (merge?)' continue - + + ok = c.check_diff () + + if not ok: + print "Patch doesn't seem to apply" + print 'skipping', c.committish + print 'message:', c.message + + break + + + commits = commits[1:] + commits_done.append (c) + print 'patch ', c.committish try: c.apply (file_adddel)