diff --git a/git_command.py b/git_command.py index 09ed1a79..1ec7c3ed 100644 --- a/git_command.py +++ b/git_command.py @@ -33,17 +33,6 @@ from wrapper import Wrapper GIT = "git" -# NB: These do not need to be kept in sync with the repo launcher script. -# These may be much newer as it allows the repo launcher to roll between -# different repo releases while source versions might require a newer git. -# -# The soft version is when we start warning users that the version is old and -# we'll be dropping support for it. We'll refuse to work with versions older -# than the hard version. -# -# git-1.7 is in (EOL) Ubuntu Precise. git-1.9 is in Ubuntu Trusty. -MIN_GIT_VERSION_SOFT = (1, 9, 1) -MIN_GIT_VERSION_HARD = (1, 7, 2) GIT_DIR = "GIT_DIR" LAST_GITDIR = None diff --git a/repo b/repo index 98fd5f74..b2114e56 100755 --- a/repo +++ b/repo @@ -210,7 +210,6 @@ GIT = "git" # our git command # NB: The version of git that the repo launcher requires may be much older than # the version of git that the main repo source tree requires. Keeping this at # an older version also makes it easier for users to upgrade/rollback as needed. -# See requirements.json for versions. MIN_GIT_VERSION = (1, 7, 9) # minimum supported git version repodir = ".repo" # name of repo's private directory S_repo = "repo" # special repo repository @@ -1237,13 +1236,13 @@ class Requirements: return cls(json_data) - def _get_soft_ver(self, pkg): + def get_soft_ver(self, pkg): """Return the soft version for |pkg| if it exists.""" - return self.requirements.get(pkg, {}).get("soft", ()) + return tuple(self.requirements.get(pkg, {}).get("soft", ())) - def _get_hard_ver(self, pkg): + def get_hard_ver(self, pkg): """Return the hard version for |pkg| if it exists.""" - return self.requirements.get(pkg, {}).get("hard", ()) + return tuple(self.requirements.get(pkg, {}).get("hard", ())) @staticmethod def _format_ver(ver): @@ -1253,8 +1252,8 @@ class Requirements: def assert_ver(self, pkg, curr_ver): """Verify |pkg|'s |curr_ver| is new enough.""" curr_ver = tuple(curr_ver) - soft_ver = tuple(self._get_soft_ver(pkg)) - hard_ver = tuple(self._get_hard_ver(pkg)) + soft_ver = tuple(self.get_soft_ver(pkg)) + hard_ver = tuple(self.get_hard_ver(pkg)) if curr_ver < hard_ver: print( f'repo: error: Your version of "{pkg}" ' diff --git a/subcmds/init.py b/subcmds/init.py index e53d0338..7617bc1f 100644 --- a/subcmds/init.py +++ b/subcmds/init.py @@ -21,10 +21,9 @@ from command import MirrorSafeCommand from error import RepoUnhandledExceptionError from error import UpdateManifestError from git_command import git_require -from git_command import MIN_GIT_VERSION_HARD -from git_command import MIN_GIT_VERSION_SOFT from repo_logging import RepoLogger from wrapper import Wrapper +from wrapper import WrapperDir logger = RepoLogger(__file__) @@ -331,13 +330,17 @@ to update the working directory files. self.OptionParser.error("too many arguments to init") def Execute(self, opt, args): - git_require(MIN_GIT_VERSION_HARD, fail=True) - if not git_require(MIN_GIT_VERSION_SOFT): + wrapper = Wrapper() + + reqs = wrapper.Requirements.from_dir(WrapperDir()) + git_require(reqs.get_hard_ver("git"), fail=True) + min_git_version_soft = reqs.get_soft_ver("git") + if not git_require(min_git_version_soft): logger.warning( "repo: warning: git-%s+ will soon be required; " "please upgrade your version of git to maintain " "support.", - ".".join(str(x) for x in MIN_GIT_VERSION_SOFT), + ".".join(str(x) for x in min_git_version_soft), ) rp = self.manifest.repoProject @@ -350,7 +353,6 @@ to update the working directory files. # Handle new --repo-rev requests. if opt.repo_rev: - wrapper = Wrapper() try: remote_ref, rev = wrapper.check_repo_rev( rp.worktree, diff --git a/wrapper.py b/wrapper.py index d8823368..55082248 100644 --- a/wrapper.py +++ b/wrapper.py @@ -18,8 +18,12 @@ import importlib.util import os +def WrapperDir(): + return os.path.dirname(__file__) + + def WrapperPath(): - return os.path.join(os.path.dirname(__file__), "repo") + return os.path.join(WrapperDir(), "repo") @functools.lru_cache(maxsize=None)