summaryrefslogtreecommitdiffstats
path: root/pym/repoman
diff options
context:
space:
mode:
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