diff --git a/advisors/simple-update-robot.py b/advisors/simple-update-robot.py index 054ddd1f961bc7655956543cfcaaf3bd0efa3b3e..d43a370cf3321e4df53fcbe4873593a35acde497 100755 --- a/advisors/simple-update-robot.py +++ b/advisors/simple-update-robot.py @@ -21,6 +21,7 @@ import subprocess import os.path import re import datetime + import version_recommend def download_source_url(spec, o_ver, n_ver): @@ -40,11 +41,11 @@ def download_source_url(spec, o_ver, n_ver): return False -def download_upstream_url(gt, repo, n_ver): +def download_upstream_url(gitee, repo, n_ver): """ Download source from upstream metadata URL """ - upstream_yaml = gt.get_yaml(repo) + upstream_yaml = gitee.get_yaml(repo) if not upstream_yaml: return False @@ -58,6 +59,51 @@ def download_upstream_url(gt, repo, n_ver): print("Handling {vc} is still under developing".format(vc=rp_yaml["version_control"])) return False +def update_check(spec, o_ver, n_ver): + """ + Requirements check for upgraded package + """ + if len(spec.patches) >= 1: + print("I'm too naive to handle complicated package.") + print("This package has multiple in-house patches.") + return False + + ver_type = version_recommend.VersionType() + if(ver_type.compare(n_ver, o_ver) == 1): + return True + else: + print("Please check version of {pkg} will upgrade to, it's current version is {version}.".format( + pkg=spec.name, version=o_ver)) + return False + + +def fork_clone_repo(repo, gitee): + """ + Fork repo from src-openEuler to private repository and clone it to local + """ + if not gitee.fork_repo(repo): + print("The repo of {pkg} seems to have been forked.".format(pkg=repo)) + + name = gitee.token["user"] + subprocess.call(["git", "clone", "git@gitee.com:{user}/{pkg}".format(user=name, pkg=repo)]) + os.chdir(repo) + + +def download_src(gitee, spec, o_ver, n_ver): + """ + Download source code for upgraded package + """ + source_file = download_source_url(spec, o_ver, n_ver) + if source_file: + print(source_file) + else: + source_file = download_upstream_url(gitee, repo, n_ver) + if source_file: + print(source_file) + else: + print("Failed to download the latest source code.") + return False + def create_spec(repo, spec_str, o_ver, n_ver, src_fn=None): """ @@ -89,55 +135,42 @@ def create_spec(repo, spec_str, o_ver, n_ver, src_fn=None): fn.write("\n") fn.close() + if __name__ == "__main__": pars = argparse.ArgumentParser() pars.add_argument("pkg", type=str, help="The package to be upgraded") pars.add_argument("-n", "--new_version", type=str, help="New upstream version of package will be upgrade to") pars.add_argument("-s", "--create_spec", help="Create spec file", action="store_true") pars.add_argument("-d", "--download", help="Download upstream source code", action="store_true") - pars.add_argument("-f", "--fork", help="fork src-openeuler repo into users", action="store_true") - pars.add_argument("-c", "--clone", help="clone privatge repo to local", action="store_true") + pars.add_argument("-fc", "--FC", help="fork src-openeuler repo into users and clone to local", action="store_true") pars.add_argument("-p", "--PR", help="Create upgrade PR", action="store_true") args = pars.parse_args() - my_gitee = gitee.Gitee() - my_version = version_recommend.VersionType() - spec_string= my_gitee.get_spec(args.pkg) - - s_spec = Spec.from_string(spec_string) - cur_ver = replace_macros(s_spec.version, s_spec) - - if args.fork: - if not my_gitee.fork_repo(args.pkg): - print("The repo of {pkg} seems to have been forked.".format(pkg=args.pkg)) - - if args.clone: - user=my_gitee.token["user"] - subprocess.call(["git", "clone", "git@gitee.com:{user}/{pkg}".format(user=user, pkg=args.pkg)]) - os.chdir(args.pkg) + if not args.pkg: + print("Please specify the package will upgrade.") + sys.exit(1) + + user_gitee = gitee.Gitee() + spec_string = user_gitee.get_spec(args.pkg) + spec_file = Spec.from_string(spec_string) + cur_ver = replace_macros(spec_file.version, spec_file) + + if args.FC: + fork_clone_repo(args.pkg, user_gitee) + + if args.download or args.create_spec: + if not args.new_version: + print("Please specify the upgraded version of the {repo}".format(repo=args.pkg)) + sys.exit(1) + elif not update_check(spec_file, cur_ver, args.new_version): + sys.exit(1) if args.download: - source_file = download_source_url(s_spec, cur_ver, args.new_version) - if source_file: - print(source_file) - else: - source_file = download_upstream_url(my_gitee, args.pkg, args.new_version) - if source_file: - print(source_file) - else: - print("Failed to download the latest source code.") - sys.exit(1) + if not download_src(user_gitee, spec_file, cur_ver, args.new_version): + sys.exit(1) if args.create_spec: - if len(s_spec.patches) >= 1: - print("I'm too naive to handle complicated package.") - print("This package has multiple in-house patches.") - sys.exit(1) - if(my_version.compare(args.new_version, cur_ver) ==1): - create_spec(args.pkg, spec_string, cur_ver, args.new_version) - else: - print("Please check version of {pkg} will upgrade to, it's current version is {version}.".format( - pkg=args.pkg, version=cur_ver)) + create_spec(args.pkg, spec_string, cur_ver, args.new_version) if args.PR: - my_gitee.create_pr(my_gitee.token["user"], args.pkg) + user_gitee.create_pr(user_gitee.token["user"], args.pkg) diff --git a/advisors/version_recommend.py b/advisors/version_recommend.py index d4b0d7c848acac74864a2bc9f4e96efe708dbf94..55f9fce644dcc4cfdc39302ea940d6cc07c14dfc 100755 --- a/advisors/version_recommend.py +++ b/advisors/version_recommend.py @@ -72,7 +72,7 @@ class VersionType(object): :return 0: z1 equal then z2 :raises: None """ - return self._compare(self, z1, z2) + return self._compare(z1, z2) def _compare(self, z1, z2): """