summaryrefslogtreecommitdiffstats
path: root/pym/repoman
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2012-06-11 16:16:59 -0400
committerMike Frysinger <vapier@gentoo.org>2012-06-12 18:09:06 -0400
commit84b1cdcf057576bf59d2f038609e8b32995f3231 (patch)
tree54e600d4d9ecd3d9c9afde871d55980e5ce19b16 /pym/repoman
parent04b2e10ee87e4a09543d0b45d54dbcc9c4c990c8 (diff)
downloadportage-84b1cdcf057576bf59d2f038609e8b32995f3231.tar.gz
portage-84b1cdcf057576bf59d2f038609e8b32995f3231.tar.bz2
portage-84b1cdcf057576bf59d2f038609e8b32995f3231.zip
repoman: update cat/pkg info in header all the time
There are edge cases where repoman's changelog code is not as good as the existing echangelog. Mostly related to out of date headers. Have the code check the header in more cases not just for missing lines, but also outdated values all the time. While we're at it, write some tests! Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'pym/repoman')
-rw-r--r--pym/repoman/utilities.py57
1 files changed, 32 insertions, 25 deletions
diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py
index bee67aaa6..1e07bad4c 100644
--- a/pym/repoman/utilities.py
+++ b/pym/repoman/utilities.py
@@ -681,7 +681,7 @@ def get_committer_name(env=None):
return user
def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
- new=(), removed=(), changed=(), pretend=False):
+ new=(), removed=(), changed=(), pretend=False, quiet=False):
"""
Write an entry to an existing ChangeLog, or create a new one.
Updates copyright year on changed files, and updates the header of
@@ -689,8 +689,8 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
"""
if '<root@' in user:
- err = 'Please set ECHANGELOG_USER or run as non-root'
- logging.critical(err)
+ if not quiet:
+ logging.critical('Please set ECHANGELOG_USER or run as non-root')
return None
# ChangeLog times are in UTC
@@ -711,24 +711,13 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
old_header_lines = []
header_lines = []
+ clold_file = None
try:
clold_file = io.open(_unicode_encode(cl_path,
encoding=_encodings['fs'], errors='strict'),
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_file = io.open(_unicode_encode(skel_path,
- encoding=_encodings['fs'], errors='strict'),
- mode='r', encoding=_encodings['repo.content'],
- errors='replace')
- except EnvironmentError:
- pass
+ pass
f, clnew_path = mkstemp()
@@ -736,17 +725,35 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
try:
if clold_file is not None:
# retain header from old ChangeLog
+ first_line = True
for line in clold_file:
- line_strip = line.strip()
+ line_strip = line.strip()
if line_strip and line[:1] != "#":
clold_lines.append(line)
break
+ # always make sure cat/pkg is up-to-date in case we are
+ # moving packages around, or copied from another pkg, or ...
+ if first_line:
+ if line.startswith('# ChangeLog for'):
+ line = '# ChangeLog for %s/%s\n' % (category, package)
+ first_line = False
old_header_lines.append(line)
header_lines.append(_update_copyright_year(year, line))
if not line_strip:
break
- elif clskel_file is not None:
+ clskel_file = None
+ if not header_lines:
+ # delay opening this until we find we need a header
+ try:
+ clskel_file = io.open(_unicode_encode(skel_path,
+ encoding=_encodings['fs'], errors='strict'),
+ mode='r', encoding=_encodings['repo.content'],
+ errors='replace')
+ except EnvironmentError:
+ pass
+
+ if clskel_file is not None:
# read skel.ChangeLog up to first empty line
for line in clskel_file:
line_strip = line.strip()
@@ -806,7 +813,7 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
errors='backslashreplace')
for line in clnew_lines:
- f.write(line)
+ f.write(_unicode_decode(line))
# append stuff from old ChangeLog
if clold_file is not None:
@@ -837,12 +844,12 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
clold_file.close()
f.close()
- # 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, n=0):
- util.writemsg_stdout(line, noiselevel=-1)
- util.writemsg_stdout("\n", noiselevel=-1)
+ # show diff
+ if not quiet:
+ for line in difflib.unified_diff(clold_lines, clnew_lines,
+ fromfile=cl_path, tofile=cl_path, n=0):
+ util.writemsg_stdout(line, noiselevel=-1)
+ util.writemsg_stdout("\n", noiselevel=-1)
if pretend:
# remove what we've done