diff --git a/gitlab_release_notes/generate.py b/gitlab_release_notes/generate.py
index a66c81e..9e3dc67 100644
--- a/gitlab_release_notes/generate.py
+++ b/gitlab_release_notes/generate.py
@@ -1,4 +1,5 @@
import datetime
+import dateutil.parser
import gitlab
import os.path
import sys
@@ -43,16 +44,22 @@ def generate_release_notes(project_id, endstr = '
', since=None, quiet=Fals
last_date = since
elif not project.releases.list(get_all=False):
log_pending = f"Changelog of {project.name}:{endstr}"
- last_date = '0000-01-01T00:00:00Z'
+ last_date = dateutil.parser.isoparse('0000-01-01T00:00:00Z')
else:
last_release = project.releases.list(get_all=False)[0]
log_pending = f"Changelog since release {last_release.name} of {project.name}:{endstr}"
- last_date = last_release.released_at
+ last_date = dateutil.parser.isoparse(last_release.released_at)
+
+ last_datetime = last_date
+ if not isinstance(last_datetime, datetime.datetime):
+ last_datetime = \
+ datetime.datetime.combine(last_datetime, datetime.datetime.min.time()) \
+ .replace(tzinfo=datetime.timezone.utc)
page = 1
list_mrs = project.mergerequests.list(state='merged',
get_all=False,
- order_by='updated_at',
+ order_by='merged_at',
updated_after=last_date,
page=page)
if not list_mrs:
@@ -64,6 +71,11 @@ def generate_release_notes(project_id, endstr = '
', since=None, quiet=Fals
log += log_pending
while list_mrs:
for mr in list_mrs:
+ # `updated_at` could be after `merged_at`, e.g. for MRs that has
+ # additional comments after it's merged.
+ if dateutil.parser.isoparse(mr.merged_at) < last_datetime:
+ continue
+
line = f" * {mr.title} (@{mr.author['username']}){endstr}"
log += line
diff --git a/setup.py b/setup.py
index 8a19d99..34f22fd 100644
--- a/setup.py
+++ b/setup.py
@@ -43,7 +43,7 @@ def read_requirements(path):
long_description_content_type="text/markdown",
author="vuillaut",
packages=find_packages(exclude=["gitlab_release_notes/tests", ".github"]),
- install_requires=['python-gitlab>=3.0'],
+ install_requires=['python-gitlab>=3.0', 'python-dateutil'],
entry_points={
"console_scripts": ["gitlab-release-notes = gitlab_release_notes.generate:main"]
},