@@ -16,7 +16,7 @@ import 'dart:io';
1616
1717void main (List <String > args) {
1818 final version = args.isNotEmpty ? args[0 ] : '0.1.0' ;
19- final newReleaseNotes = args.length > 1 ? args[1 ] : 'Initial commit ' ;
19+ final comitMesssage = args.length > 1 ? args[1 ]. replaceFirst ( '+' , '' ) : '' ;
2020 final changelogPath = 'CHANGELOG.md' ;
2121 final file = File (changelogPath);
2222 if (! file.existsSync ()) {
@@ -29,19 +29,19 @@ void main(List<String> args) {
2929 final versionExist = sections.where ((e) => e.version == version).isNotEmpty;
3030 if (versionExist) {
3131 sections.where ((e) => e.version == version).forEach ((e) {
32- e.addUpdate (newReleaseNotes );
32+ e.addUpdate (comitMesssage );
3333 });
3434 } else {
3535 sections.add (
3636 _VersionSection (
3737 version: version,
3838 releasedAt: DateTime .now ().toUtc (),
39- updates: {newReleaseNotes },
39+ updates: {comitMesssage },
4040 ),
4141 );
4242 }
4343 contents = '# Changelog\n\n ${(sections .toList ()..sort ((a , b ) {
44- return b . releasedAt . compareTo ( a . releasedAt );
44+ return compareVersions ( b . version , a . version );
4545 })).map ((e ) => e .toString ()).join ('\n ' )}' ;
4646
4747 file.writeAsStringSync (contents);
@@ -71,19 +71,16 @@ Set<_VersionSection> extractSections(String contents) {
7171 .where ((e) => e.isNotEmpty);
7272 for (var line in old) {
7373 if (line.contains ('Released @' )) {
74- final temp = line.split ('Released @' ).last.trim ();
75- releasedAt = DateTime .tryParse (temp) ?? releasedAt;
74+ releasedAt = parseReleaseDate (line);
7675 } else {
7776 updates.add (line);
7877 }
7978 }
80- results.add (
81- _VersionSection (
82- version: version,
83- releasedAt: releasedAt,
84- updates: updates,
85- ),
86- );
79+ results.add (_VersionSection (
80+ version: version,
81+ releasedAt: releasedAt,
82+ updates: updates,
83+ ));
8784 }
8885
8986 return results;
@@ -107,16 +104,16 @@ class _VersionSection {
107104 _VersionSection ({
108105 required this .version,
109106 required this .releasedAt,
110- this .updates = const {} ,
111- });
107+ Set < String > ? updates ,
108+ }) : this .updates = updates ?? {} ;
112109
113110 //
114111 //
115112 //
116113
117114 void addUpdate (String update) {
118- this . updates.add (update);
119- this . releasedAt = DateTime .now ().toUtc ();
115+ updates.add (update);
116+ releasedAt = DateTime .now ().toUtc ();
120117 }
121118
122119 //
@@ -129,3 +126,45 @@ class _VersionSection {
129126 return '## [$version ]\n\n - Released @ ${releasedAt .month }/${releasedAt .year } (UTC)\n $updatesString \n ' ;
130127 }
131128}
129+
130+ // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
131+
132+ int compareVersions (String version1, String version2) {
133+ List <int > parseVersion (String version) {
134+ // Split by the '+' first to handle the build number
135+ final parts = version.split ('+' );
136+ final versionParts = parts[0 ].split ('.' ).map (int .tryParse).map ((e) => e ?? 0 ).toList ();
137+ // Add the build number as the last part (if it exists)
138+ if (parts.length > 1 ) {
139+ versionParts.add (int .tryParse (parts[1 ]) ?? 0 );
140+ }
141+ return versionParts;
142+ }
143+
144+ final v1 = parseVersion (version1);
145+ final v2 = parseVersion (version2);
146+ final maxLength = v1.length > v2.length ? v1.length : v2.length;
147+ for (var i = 0 ; i < maxLength; i++ ) {
148+ final part1 = i < v1.length ? v1[i] : 0 ;
149+ final part2 = i < v2.length ? v2[i] : 0 ;
150+ if (part1 > part2) return 1 ;
151+ if (part1 < part2) return - 1 ;
152+ }
153+ return 0 ;
154+ }
155+
156+ // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
157+
158+ DateTime parseReleaseDate (String line) {
159+ if (line.contains ('Released @' )) {
160+ final temp = line.split ('Released @' ).last.trim ().replaceAll (' (UTC)' , '' );
161+ final parts = temp.split ('/' );
162+ if (parts.length == 2 ) {
163+ final month = int .tryParse (parts[0 ]) ?? 1 ;
164+ final year = int .tryParse (parts[1 ]) ?? DateTime .now ().year;
165+ return DateTime .utc (year, month);
166+ }
167+ }
168+
169+ return DateTime .now ().toUtc ();
170+ }
0 commit comments