@@ -63,7 +63,7 @@ def run(cmd, **kwargs):
63
63
"""Run a command as a subprocess and get the output as a string"""
64
64
quiet_error = kwargs .pop ("quiet_error" , False )
65
65
show_cwd = kwargs .pop ("show_cwd" , False )
66
- quiet = kwargs .pop ("quiet" , False )
66
+ quiet = kwargs .get ("quiet" , False )
67
67
echo = kwargs .pop ("echo" , False )
68
68
69
69
if echo :
@@ -78,7 +78,6 @@ def run(cmd, **kwargs):
78
78
# subprocess methods
79
79
return _run_win (cmd , ** kwargs )
80
80
81
- quiet = kwargs .get ("quiet" )
82
81
kwargs .setdefault ("check" , True )
83
82
84
83
try :
@@ -281,28 +280,53 @@ def bump_version(version_spec, *, changelog_path="", version_cmd=""):
281
280
# Add some convenience options on top of "tbump" and "hatch"
282
281
if "tbump" in version_cmd or "hatch" in version_cmd :
283
282
v = parse_version (get_version ())
283
+ log (f"Current version was: { v } " )
284
284
assert isinstance (v , Version )
285
285
286
286
if v .is_devrelease :
287
- # bump from the version in the changelog.
287
+ # bump from the version in the changelog unless the spec is dev.
288
+ # Import here to avoid circular import.
289
+ from jupyter_releaser .changelog import extract_current_version
290
+
291
+ try :
292
+ vc = parse_version (extract_current_version (changelog_path ))
293
+ log (f"Changelog version was: { vc } " )
294
+ assert isinstance (vc , Version )
295
+ except ValueError :
296
+ vc = v
297
+
288
298
if version_spec in ["patch" , "next" ]:
289
- raise ValueError (
290
- "We do not support 'patch' or 'next' when dev versions are used, please use an explicit version."
291
- )
299
+ if vc .is_prerelease :
300
+ if vc .is_devrelease :
301
+ # Bump to the next dev release.
302
+ assert vc .dev is not None
303
+ version_spec = f"{ vc .major } .{ vc .minor } .{ vc .micro } { vc .dev } { vc .dev + 1 } "
304
+ else :
305
+ assert vc .pre is not None
306
+ # Bump to the next prerelease.
307
+ version_spec = f"{ vc .major } .{ vc .minor } .{ vc .micro } { vc .pre [0 ]} { vc .pre [1 ] + 1 } "
292
308
293
- # Drop the dev portion and move to the minor release.
309
+ else :
310
+ # Bump to the next micro.
311
+ version_spec = f"{ vc .major } .{ vc .minor } .{ vc .micro + 1 } "
312
+
313
+ # Move to the minor release
294
314
elif version_spec == "minor" :
295
- version_spec = f"{ v .major } .{ v .minor } . { v . micro } "
315
+ version_spec = f"{ vc .major } .{ v .minor + 1 } .0 "
296
316
297
317
# Bump to the next dev version.
298
318
elif version_spec == "dev" :
299
319
assert v .dev is not None
300
320
version_spec = f"{ v .major } .{ v .minor } .{ v .micro } .dev{ v .dev + 1 } "
301
321
302
322
else :
303
- # Bump to next minor for dev .
323
+ # Handle dev version spec .
304
324
if version_spec == "dev" :
305
- version_spec = f"{ v .major } .{ v .minor + 1 } .0.dev0"
325
+ if v .pre :
326
+ version_spec = f"{ v .major } .{ v .minor } .{ v .micro } .dev0"
327
+ # Bump to next minor dev.
328
+ else :
329
+ version_spec = f"{ v .major } .{ v .minor + 1 } .0.dev0"
306
330
307
331
# For next, go to next prerelease or patch if it is a final version.
308
332
elif version_spec == "next" :
@@ -321,7 +345,7 @@ def bump_version(version_spec, *, changelog_path="", version_cmd=""):
321
345
version_spec = f"{ v .major } .{ v .minor + 1 } .0"
322
346
323
347
# Bump the version
324
- run (f"{ version_cmd } { version_spec } " )
348
+ run (f"{ version_cmd } { version_spec } " , echo = True )
325
349
326
350
return get_version ()
327
351
0 commit comments