Documentation improvements
Document that git is needed.
Be clearer about the entry sort key being an entry sort key, not just
a merge order. Be clearer about what "merge order" means.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/scripts/assemble_changelog.py b/scripts/assemble_changelog.py
index 928f73b..ea91578 100755
--- a/scripts/assemble_changelog.py
+++ b/scripts/assemble_changelog.py
@@ -5,6 +5,17 @@
Add changelog entries to the first level-2 section.
Create a new level-2 section for unreleased changes if needed.
Remove the input files unless --keep-entries is specified.
+
+In each level-3 section, entries are sorted in chronological order
+(oldest first). From oldest to newest:
+* Merged entry files are sorted according to their merge date (date of
+ the merge commit that brought the commit that created the file into
+ the target branch).
+* Committed but unmerged entry files are sorted according to the date
+ of the commit that adds them.
+* Uncommitted entry files are sorted according to their modification time.
+
+You must run this program from within a git working directory.
"""
# Copyright (C) 2019, Arm Limited, All Rights Reserved
@@ -224,11 +235,18 @@
@functools.total_ordering
-class FileMergeTimestamp:
- """A timestamp indicating when a file was merged.
+class EntryFileSortKey:
+ """This classes defines an ordering on changelog entry files: older < newer.
- If file1 was merged before file2, then
- FileMergeTimestamp(file1) <= FileMergeTimestamp(file2).
+ * Merged entry files are sorted according to their merge date (date of
+ the merge commit that brought the commit that created the file into
+ the target branch).
+ * Committed but unmerged entry files are sorted according to the date
+ of the commit that adds them.
+ * Uncommitted entry files are sorted according to their modification time.
+
+ This class assumes that the file is in a git working directory with
+ the target branch checked out.
"""
# Categories of files. A lower number is considered older.
@@ -301,7 +319,12 @@
return datetime.datetime.fromtimestamp(mtime)
def __init__(self, filename):
- """Determine the timestamp at which the file was merged."""
+ """Determine position of the file in the changelog entry order.
+
+ This constructor returns an object that can be used with comparison
+ operators, with `sort` and `sorted`, etc. Older entries are sorted
+ before newer entries.
+ """
self.filename = filename
creation_hash = self.creation_hash(filename)
if not creation_hash:
@@ -317,10 +340,9 @@
self.datetime = self.commit_timestamp(merge_hash)
def sort_key(self):
- """"Return a sort key for this merge timestamp object.
+ """"Return a concrete sort key for this entry file sort key object.
- ts1.sort_key() < ts2.sort_key() if and only if ts1 is
- considered to be older than ts2.
+ ``ts1 < ts2`` is implemented as ``ts1.sort_key() < ts2.sort_key()``.
"""
return (self.category, self.datetime, self.filename)
@@ -375,11 +397,10 @@
def list_files_to_merge(options):
"""List the entry files to merge, oldest first.
- A file is considered older if it was merged earlier. See
- `FileMergeTimestamp` for details.
+ "Oldest" is defined by `EntryFileSortKey`.
"""
files_to_merge = glob.glob(os.path.join(options.dir, '*.md'))
- files_to_merge.sort(key=lambda f: FileMergeTimestamp(f).sort_key())
+ files_to_merge.sort(key=lambda f: EntryFileSortKey(f).sort_key())
return files_to_merge
def merge_entries(options):
@@ -410,7 +431,7 @@
"""
files = list_files_to_merge(options)
for filename in files:
- ts = FileMergeTimestamp(filename)
+ ts = EntryFileSortKey(filename)
print(ts.category, ts.datetime, filename)
def set_defaults(options):