Skip to content

Commit b10dfaa

Browse files
Add spinner progress to update
1 parent bc41bcf commit b10dfaa

File tree

1 file changed

+105
-89
lines changed

1 file changed

+105
-89
lines changed

src/upgrade_dependencies/main.py

Lines changed: 105 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from rich import print as rprint
1010
from rich.console import Group
1111
from rich.panel import Panel
12+
from rich.progress import Progress, SpinnerColumn, TextColumn
1213
from rich.text import Text
1314

1415
from upgrade_dependencies.dependency import GitHubDependency, PyPIDependency
@@ -330,98 +331,113 @@ def update(
330331
version: _description_
331332
project_path: _description_
332333
"""
333-
# TODO: print status of update
334-
project = Project(
335-
project_path=project_path,
336-
gh_pat=GH_PAT,
337-
)
338-
339-
# search for dependency and save old version
340-
try:
341-
dep = project.get_dependency(name=dependency)
342-
old_ver = str(sorted(dep.specifier, key=str)[0].version)
343-
except RuntimeError as e:
344-
rprint(f"Cannot find {dependency} in {project.name}.")
345-
raise typer.Exit(code=1) from e
346-
347-
# fetch data from pypi/github
348-
asyncio.run(dep.save_data())
349-
350-
# get latest/desired version
351-
if version is None:
352-
version = str(dep.get_latest_version())
353-
354-
# create new branch
355-
if isinstance(dep, GitHubDependency) and dep.action:
356-
v = Version(version)
357-
branch_name = f"dependency/{dep.short_name}-v{v.major}"
358-
else:
359-
branch_name = f"dependency/{dep.short_name}-{version}"
360-
361-
run_shell_command(["git", "checkout", "-b", branch_name])
362-
363-
# get status of files before changes
364-
files_before = get_git_status()
365-
366-
# update dependency
367-
project.update_dependency(dependency=dep, version=version)
368-
369-
# get status of files after changes
370-
files_after = get_git_status()
371-
372-
# get only the files that were changed
373-
changed_files = [f for f in files_after if f not in files_before]
374-
375-
run_shell_command(["git", "add", *changed_files])
376-
377-
# commit the changes
378-
if isinstance(dep, GitHubDependency) and dep.action:
379-
old_v = Version(old_ver)
380-
v = Version(version)
381-
commit_message = f"Bump {dep.package_name} from v{old_v.major} to v{v.major}"
382-
else:
383-
commit_message = f"Bump {dep.package_name} from {old_ver} to {version}"
384-
385-
run_shell_command(["git", "commit", "-m", commit_message])
386-
387-
# push the branch
388-
run_shell_command(["git", "push", "origin", branch_name])
334+
with Progress(
335+
SpinnerColumn(),
336+
TextColumn("[progress.description]{task.description}"),
337+
transient=True,
338+
) as progress:
339+
task = progress.add_task("Creating project...")
340+
project = Project(
341+
project_path=project_path,
342+
gh_pat=GH_PAT,
343+
)
389344

390-
# create pr_body
391-
if isinstance(dep, PyPIDependency):
392-
url = f"https://pypi.org/project/{dep.package_name}"
393-
pr_body = f"Bumps [{dep.package_name}]({url}) from {old_ver} to {version}."
394-
elif isinstance(dep, GitHubDependency):
395-
old_v = Version(old_ver)
396-
v = Version(version)
397-
url = f"https://github.com/{dep.owner}/{dep.repo}"
398-
pr_body = (
399-
f"Bumps [{dep.package_name}]({url}) from v{old_v.major} to v{v.major}."
345+
# search for dependency and save old version
346+
try:
347+
dep = project.get_dependency(name=dependency)
348+
old_ver = str(sorted(dep.specifier, key=str)[0].version)
349+
except RuntimeError as e:
350+
rprint(f"Cannot find {dependency} in {project.name}.")
351+
raise typer.Exit(code=1) from e
352+
353+
# fetch data from pypi/github
354+
progress.update(task, description="Fetching dependency data...")
355+
asyncio.run(dep.save_data())
356+
357+
# get latest/desired version
358+
if version is None:
359+
version = str(dep.get_latest_version())
360+
361+
# create new branch
362+
progress.update(task, description="Creating new branch...")
363+
if isinstance(dep, GitHubDependency) and dep.action:
364+
v = Version(version)
365+
branch_name = f"dependency/{dep.short_name}-v{v.major}"
366+
else:
367+
branch_name = f"dependency/{dep.short_name}-{version}"
368+
369+
run_shell_command(["git", "checkout", "-b", branch_name])
370+
371+
# get status of files before changes
372+
progress.update(task, description="Updating dependency...")
373+
files_before = get_git_status()
374+
375+
# update dependency
376+
project.update_dependency(dependency=dep, version=version)
377+
378+
# get status of files after changes
379+
files_after = get_git_status()
380+
381+
# get only the files that were changed
382+
changed_files = [f for f in files_after if f not in files_before]
383+
384+
run_shell_command(["git", "add", *changed_files])
385+
386+
# commit the changes
387+
progress.update(task, description="Committing changes...")
388+
if isinstance(dep, GitHubDependency) and dep.action:
389+
old_v = Version(old_ver)
390+
v = Version(version)
391+
commit_message = (
392+
f"Bump {dep.package_name} from v{old_v.major} to v{v.major}"
393+
)
394+
else:
395+
commit_message = f"Bump {dep.package_name} from {old_ver} to {version}"
396+
397+
run_shell_command(["git", "commit", "-m", commit_message])
398+
399+
# push the branch
400+
progress.update(task, description="Pushing changes to GitHub...")
401+
run_shell_command(["git", "push", "origin", branch_name])
402+
403+
# create pr_body
404+
progress.update(task, description="Creating pull request...")
405+
if isinstance(dep, PyPIDependency):
406+
url = f"https://pypi.org/project/{dep.package_name}"
407+
pr_body = f"Bumps [{dep.package_name}]({url}) from {old_ver} to {version}."
408+
elif isinstance(dep, GitHubDependency):
409+
old_v = Version(old_ver)
410+
v = Version(version)
411+
url = f"https://github.com/{dep.owner}/{dep.repo}"
412+
pr_body = (
413+
f"Bumps [{dep.package_name}]({url}) from v{old_v.major} to v{v.major}."
414+
)
415+
else:
416+
pr_body = ""
417+
418+
# create pull request
419+
pr = run_shell_command(
420+
[
421+
"gh",
422+
"pr",
423+
"create",
424+
"-a",
425+
"@me",
426+
"--base",
427+
"master",
428+
"--body",
429+
pr_body,
430+
"--label",
431+
"dependencies",
432+
"--title",
433+
commit_message,
434+
],
400435
)
401-
else:
402-
pr_body = ""
403-
404-
# create pull request
405-
run_shell_command(
406-
[
407-
"gh",
408-
"pr",
409-
"create",
410-
"-a",
411-
"@me",
412-
"--base",
413-
"master",
414-
"--body",
415-
pr_body,
416-
"--label",
417-
"dependencies",
418-
"--title",
419-
commit_message,
420-
],
421-
)
422436

423-
# re-checkout master
424-
run_shell_command(["git", "checkout", "master"])
437+
# re-checkout master
438+
run_shell_command(["git", "checkout", "master"])
439+
440+
rprint(f"✅Dependency updated! View the pull request at {pr.stdout}")
425441

426442

427443
def main():

0 commit comments

Comments
 (0)