diff options
-rwxr-xr-x | bin/egencache | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/bin/egencache b/bin/egencache index 06df4f820..b2f208fce 100755 --- a/bin/egencache +++ b/bin/egencache @@ -473,6 +473,12 @@ class GenChangeLogs(object): subsequent_indent = ' ' ) + @staticmethod + def grab(cmd): + p = subprocess.Popen(cmd, stdout=subprocess.PIPE) + return _unicode_decode(p.communicate()[0], + encoding=_encodings['stdio'], errors='strict') + def generate_changelog(self, cp): try: output = codecs.open('ChangeLog', @@ -492,13 +498,8 @@ class GenChangeLogs(object): ''' % (cp, time.strftime('%Y'))).lstrip()) - def grab(cmd): - p = subprocess.Popen(cmd, stdout=subprocess.PIPE) - return _unicode_decode(p.communicate()[0], - encoding=_encodings['stdio'], errors='strict') - # now grab all the commits - commits = grab(['git', 'rev-list', 'HEAD', '--', '.']).split() + commits = self.grab(['git', 'rev-list', 'HEAD', '--', '.']).split() for c in commits: # Explaining the arguments: @@ -510,7 +511,7 @@ class GenChangeLogs(object): # -r (recursive) to get per-file changes # then the commit-id and path. - cinfo = grab(['git', 'diff-tree', '--name-status', '--no-renames', + cinfo = self.grab(['git', 'diff-tree', '--name-status', '--no-renames', '--format=%ct %cN <%cE>%n%B', '--root', '--relative', '-r', c, '--', '.']).rstrip('\n').split('\n') @@ -600,8 +601,16 @@ class GenChangeLogs(object): for cp in self._portdb.cp_all(): os.chdir(os.path.join(repo_path, cp)) - # XXX: support checking somehow whether the ChangeLog is up-to-date. - if 1: + + # Determine whether ChangeLog is up-to-date by comparing + # the newest commit timestamp with the ChangeLog timestamp. + lmod = self.grab(['git', 'log', '--format=%ct', '-1', '.']) + try: + cmod = os.stat('ChangeLog').st_mtime + except OSError: + cmod = 0 + + if float(cmod) < float(lmod): self.generate_changelog(cp) def egencache_main(args): |