From: Fabian Groffen <grobian@gentoo.org>
To: gentoo-portage-dev@lists.gentoo.org
Subject: [gentoo-portage-dev] [PATCH 2 of 3] repoman: get ChangeLog header from skel.ChangeLog
Date: Wed, 19 Oct 2011 21:55:45 +0200 [thread overview]
Message-ID: <7159f5c3632b51ac9372.1319054145@nut.cheops.ods.org> (raw)
In-Reply-To: <patchbomb.1319054143@nut.cheops.ods.org>
Use skel.ChangeLog from the repo to create the header of a new ChangeLog
file. Else, we just retain the original header of the ChangeLog. When
no skel.ChangeLog file exists, and this is a new ChangeLog, no header is
used.
diff --git a/bin/repoman b/bin/repoman
--- a/bin/repoman
+++ b/bin/repoman
@@ -2450,7 +2450,7 @@
new_changelog = utilities.UpdateChangeLog(checkdir_relative, \
catdir, pkgdir, \
clnew, clremoved, clchanged, \
- changelog_msg, options.pretend)
+ changelog_msg, options.pretend, repodir)
if new_changelog is None:
writemsg_level("!!! Updating the ChangeLog failed\n", \
level=logging.ERROR, noiselevel=-1)
diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py
--- a/pym/repoman/utilities.py
+++ b/pym/repoman/utilities.py
@@ -523,7 +523,8 @@
return outvcs
-def UpdateChangeLog(pkgdir, category, package, new, removed, changed, msg, pretend):
+def UpdateChangeLog(pkgdir, category, package, new, removed, changed, \
+ msg, pretend, repodir):
""" Write an entry to an existing ChangeLog, or create a new one. """
# figure out who to write as
@@ -550,7 +551,6 @@
cl_path = os.path.join(pkgdir, 'ChangeLog')
clold_lines = []
clnew_lines = []
- old_header_lines = []
header_lines = []
try:
@@ -559,41 +559,50 @@
mode='r', encoding=_encodings['repo.content'], errors='replace')
except EnvironmentError:
clold_file = None
+
+ clskel_file = None
+ if clold_file is None:
+ # we will only need the ChangeLog skeleton if there is no
+ # ChangeLog yet
+ try:
+ clskel_path = os.path.join(repodir, 'skel.ChangeLog')
+ clskel_file = io.open(_unicode_encode(clskel_path,
+ encoding=_encodings['fs'], errors='strict'),
+ mode='r', encoding=_encodings['repo.content'],
+ errors='replace')
+ except EnvironmentError:
+ pass
f, clnew_path = mkstemp()
- # create an empty ChangeLog.new with correct header first
+ # construct correct header first
try:
- f = io.open(f, mode='w', encoding=_encodings['repo.content'],
- errors='backslashreplace')
-
- if clold_file is None:
- header_lines.append(_unicode_decode('# ChangeLog for %s/%s\n' %
- (category, package)))
- year = time.strftime('%Y')
- header_lines.append(_unicode_decode('# Copyright 1999-'
- '%s Gentoo Foundation; Distributed under the GPL v2\n' % year))
- header_lines.append(_unicode_decode('# $Header: $\n'))
- header_lines.append(_unicode_decode('\n'))
- else:
+ if clold_file is not None:
+ # retain header from old ChangeLog
for line in clold_file:
- line_strip = line.strip()
- if line_strip and line[:1] != "#":
- clold_lines.append(line)
+ line_strip = line.strip()
+ clold_lines.append(line)
+ if line_strip[:1] != '#':
break
- header_lines.append(line)
+ if clskel_file is None:
+ clnew_lines.append(line)
if not line_strip:
break
-
- # update the copyright year
- old_header_lines = header_lines[:]
- if len(header_lines) >= 2:
- header_lines[1] = re.sub(r'^(# Copyright \d\d\d\d)-\d\d\d\d ',
- r'\1-%s ' % time.strftime('%Y'), header_lines[1])
+ elif clskel_file is not None:
+ # read skel.ChangeLog up to first empty line
+ for line in clskel_file:
+ line_strip = line.strip()
+ if not line_strip:
+ break
+ line = line.replace('<CATEGORY>', category)
+ line = line.replace('<PACKAGE_NAME>', package)
+ line = re.sub(r'^(# Copyright \d\d\d\d)-\d\d\d\d ',
+ r'\1-%s ' % time.strftime('%Y'), line)
+ clnew_lines.append(line)
+ clnew_lines.append(_unicode_decode('\n'))
+ clskel_file.close()
# write new ChangeLog entry
- clnew_lines.extend(header_lines)
- date = time.strftime('%d %b %Y')
newebuild = False
for fn in new:
if not fn.endswith('.ebuild'):
@@ -632,20 +641,18 @@
clnew_lines.append(_unicode_decode('%s\n' % line))
clnew_lines.append(_unicode_decode('\n'))
+ f = io.open(f, mode='w', encoding=_encodings['repo.content'],
+ errors='backslashreplace')
+
for line in clnew_lines:
f.write(line)
# append stuff from old ChangeLog
if clold_file is not None:
- # If the old ChangeLog didn't have a header, then
# clold_lines may contain a saved non-header line
# that we want to write first.
- for line in clold_lines:
- f.write(line)
-
- # Now prepend old_header_lines to clold_lines, for use
- # in the unified_diff call below.
- clold_lines = old_header_lines + clold_lines
+ if clold_lines[-1].strip():
+ f.write(clold_lines[-1])
for line in clold_file:
f.write(line)
@@ -655,7 +662,7 @@
# show diff (do we want to keep on doing this, or only when
# pretend?)
for line in difflib.unified_diff(clold_lines, clnew_lines,
- fromfile=cl_path, tofile=cl_path + '.new', n=0):
+ fromfile=cl_path, tofile=cl_path, n=0):
util.writemsg_stdout(line, noiselevel=-1)
util.writemsg_stdout("\n", noiselevel=-1)
@@ -663,7 +670,7 @@
# remove what we've done
os.remove(clnew_path)
else:
- # rename ChangeLog.new to ChangeLog, and set permissions
+ # rename to ChangeLog, and set permissions
try:
clold_stat = os.stat(cl_path)
except OSError:
next prev parent reply other threads:[~2011-10-19 19:58 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-19 19:55 [gentoo-portage-dev] [PATCH 0 of 3] repoman changelog patches Fabian Groffen
2011-10-19 19:55 ` [gentoo-portage-dev] [PATCH 1 of 3] repoman: get default to update changelog from layout.conf Fabian Groffen
2011-10-19 19:55 ` Fabian Groffen [this message]
2011-10-19 21:58 ` [gentoo-portage-dev] [PATCH 2 of 3] repoman: get ChangeLog header from skel.ChangeLog Zac Medico
2011-10-20 17:36 ` Fabian Groffen
2011-10-19 19:55 ` [gentoo-portage-dev] [PATCH 3 of 3] repoman: update copyright on modified files Fabian Groffen
2011-10-19 22:14 ` Zac Medico
2011-10-20 18:23 ` [gentoo-portage-dev] [PATCH] " Fabian Groffen
2011-10-20 18:38 ` Zac Medico
2011-10-20 18:55 ` Mike Gilbert
2011-10-20 19:12 ` Zac Medico
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7159f5c3632b51ac9372.1319054145@nut.cheops.ods.org \
--to=grobian@gentoo.org \
--cc=gentoo-portage-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox