From 79c6bccb4576e58815e480751f4ad69903d819fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sun, 3 Oct 2010 20:28:11 +0200 Subject: egencache --update-changelogs: write if needed Compare the last commit timestamp with the ChangeLog file timestamp to guess whether a particular ChangeLog needs updating. --- bin/egencache | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'bin/egencache') 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): -- cgit v1.2.3-1-g7c22