45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
|
import argparse
|
||
|
import subprocess
|
||
|
import pathlib
|
||
|
from typing import Set
|
||
|
import add_package
|
||
|
import delete_package
|
||
|
|
||
|
from common import PROJECT
|
||
|
|
||
|
def get_obs_packages() -> Set[str]:
|
||
|
packages = subprocess.run(["osc", "ls", PROJECT], encoding='utf-8' , capture_output=True)
|
||
|
return set(packages.stdout.splitlines())
|
||
|
|
||
|
def get_local_packages() -> Set[str]:
|
||
|
p = pathlib.Path('.')
|
||
|
return {x.name for x in p.iterdir() if x.is_dir() if not x.name.startswith('.')}
|
||
|
|
||
|
def main():
|
||
|
parser = argparse.ArgumentParser(prog="sync_packages")
|
||
|
parser.add_argument('--dry-run', action="store_true")
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
local_packages = get_local_packages()
|
||
|
obs_packages = get_obs_packages()
|
||
|
|
||
|
packages_to_add = local_packages - obs_packages
|
||
|
packages_to_delete = obs_packages - local_packages
|
||
|
|
||
|
for p in packages_to_add:
|
||
|
print(f"Adding {p}")
|
||
|
if not args.dry_run:
|
||
|
add_package.add_package(p)
|
||
|
|
||
|
for p in packages_to_delete:
|
||
|
print(f"Removing {p}")
|
||
|
if not args.dry_run:
|
||
|
delete_package.delete_package(p)
|
||
|
|
||
|
print("Package synced in OBS, you can now push the modified workflow file")
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|