@@ -63,7 +63,7 @@ def run(cmd, **kwargs):
6363 """Run a command as a subprocess and get the output as a string"""
6464 quiet_error = kwargs .pop ("quiet_error" , False )
6565 show_cwd = kwargs .pop ("show_cwd" , False )
66- quiet = kwargs .pop ("quiet" , False )
66+ quiet = kwargs .get ("quiet" , False )
6767 echo = kwargs .pop ("echo" , False )
6868
6969 if echo :
@@ -78,7 +78,6 @@ def run(cmd, **kwargs):
7878 # subprocess methods
7979 return _run_win (cmd , ** kwargs )
8080
81- quiet = kwargs .get ("quiet" )
8281 kwargs .setdefault ("check" , True )
8382
8483 try :
@@ -281,28 +280,53 @@ def bump_version(version_spec, *, changelog_path="", version_cmd=""):
281280 # Add some convenience options on top of "tbump" and "hatch"
282281 if "tbump" in version_cmd or "hatch" in version_cmd :
283282 v = parse_version (get_version ())
283+ log (f"Current version was: { v } " )
284284 assert isinstance (v , Version )
285285
286286 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+
288298 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 } "
292308
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
294314 elif version_spec == "minor" :
295- version_spec = f"{ v .major } .{ v .minor } . { v . micro } "
315+ version_spec = f"{ vc .major } .{ v .minor + 1 } .0 "
296316
297317 # Bump to the next dev version.
298318 elif version_spec == "dev" :
299319 assert v .dev is not None
300320 version_spec = f"{ v .major } .{ v .minor } .{ v .micro } .dev{ v .dev + 1 } "
301321
302322 else :
303- # Bump to next minor for dev .
323+ # Handle dev version spec .
304324 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"
306330
307331 # For next, go to next prerelease or patch if it is a final version.
308332 elif version_spec == "next" :
@@ -321,7 +345,7 @@ def bump_version(version_spec, *, changelog_path="", version_cmd=""):
321345 version_spec = f"{ v .major } .{ v .minor + 1 } .0"
322346
323347 # Bump the version
324- run (f"{ version_cmd } { version_spec } " )
348+ run (f"{ version_cmd } { version_spec } " , echo = True )
325349
326350 return get_version ()
327351
0 commit comments