diff --git a/gitlab_release_notes/generate.py b/gitlab_release_notes/generate.py
index f4f1c53..3fb6124 100644
--- a/gitlab_release_notes/generate.py
+++ b/gitlab_release_notes/generate.py
@@ -1,9 +1,10 @@
+import datetime
import gitlab
import os.path
import sys
from .version import __version__
-def generate_release_notes(project_id, endstr = '
', **config):
+def generate_release_notes(project_id, endstr = '
', since=None, **config):
"""
Generate the release notes of a gitlab project from the last release
@@ -32,19 +33,23 @@ def generate_release_notes(project_id, endstr = '
', **config):
gl = gitlab.Gitlab(**config)
project = gl.projects.get(project_id)
- if not project.mergerequests.list(state='merged'):
- raise ValueError(f"There is not merged merge request for project {project_id} {project.name}")
+ if not project.mergerequests.list(get_all=False,state='merged'):
+ raise ValueError(f"There is no merged merge request for project {project_id} {project.name}")
- if not project.releases.list():
+ if since:
+ log = f"Changelog of {project.name} since {since}:{endstr}"
+ last_date = since
+ elif not project.releases.list(get_all=False):
log = f"Changelog of {project.name}:{endstr}"
last_date = '0000-01-01T00:00:00Z'
else:
- last_release = project.releases.list()[0]
+ last_release = project.releases.list(get_all=False)[0]
log = f"Changelog since release {last_release.name} of {project.name}:{endstr}"
last_date = last_release.released_at
page = 1
list_mrs = project.mergerequests.list(state='merged',
+ get_all=False,
order_by='updated_at',
updated_after=last_date,
page=page)
@@ -59,6 +64,7 @@ def generate_release_notes(project_id, endstr = '
', **config):
page += 1
list_mrs = project.mergerequests.list(state='merged',
+ get_all=False,
order_by='updated_at',
updated_after=last_date,
page=page
@@ -80,6 +86,7 @@ def main():
parser.add_argument("--private_token", type=str, required=False, default=None)
parser.add_argument('--version', action='version', version=__version__)
parser.add_argument('--html', action='store_true')
+ parser.add_argument('--since', type=datetime.date.fromisoformat, required=False, default=None)
args = parser.parse_args()
@@ -87,7 +94,12 @@ def main():
endstr = '
'
else:
endstr = '\n'
- notes = generate_release_notes(args.project_id, url=args.url, endstr=endstr, private_token=args.private_token)
+ notes = generate_release_notes(args.project_id,
+ url=args.url,
+ endstr=endstr,
+ since=args.since,
+ private_token=args.private_token,
+ )
print(notes)
if __name__ == "__main__":