Enforce minimum git version
Id4528209f1cd500afd06e2e61eb5689022251118 introduced a minimum git version. Abstract our existing check and setup a global with the local git version for tests. Add a minimum version check. Change-Id: I9d1de11269758a453ecc8dde0a4c631d8e762a91
This commit is contained in:
		| @@ -44,6 +44,7 @@ USER_CONFIG = os.path.join(CONFIGDIR, "git-review.conf") | |||||||
| DEFAULTS = dict(scheme='ssh', hostname=False, port=None, project=False, | DEFAULTS = dict(scheme='ssh', hostname=False, port=None, project=False, | ||||||
|                 branch='master', remote="gerrit", rebase="1", |                 branch='master', remote="gerrit", rebase="1", | ||||||
|                 track="0", usepushurl="0", notopic=False, branchauthor="name") |                 track="0", usepushurl="0", notopic=False, branchauthor="name") | ||||||
|  | LOCAL_GIT_VERSION = (0, 0, 0) | ||||||
| COPYRIGHT = """\ | COPYRIGHT = """\ | ||||||
| Copyright OpenStack Foundation and OpenDev Contributors | Copyright OpenStack Foundation and OpenDev Contributors | ||||||
|  |  | ||||||
| @@ -62,6 +63,10 @@ See the License for the specific language governing permissions and | |||||||
| limitations under the License. | limitations under the License. | ||||||
| """ | """ | ||||||
|  |  | ||||||
|  | # Bump this if a feature of a more recent git is unconditionally | ||||||
|  | # required | ||||||
|  | MINIMUM_GIT_VERSION = (2, 10, 0) | ||||||
|  |  | ||||||
|  |  | ||||||
| _branch_name = None | _branch_name = None | ||||||
| _has_color = None | _has_color = None | ||||||
| @@ -219,6 +224,23 @@ def get_version(): | |||||||
|     return provider.version |     return provider.version | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_git_version(): | ||||||
|  |     global LOCAL_GIT_VERSION | ||||||
|  |     output = run_command("git version") | ||||||
|  |     if "git version" in output: | ||||||
|  |         try: | ||||||
|  |             v = output.rsplit(None, 1)[1] | ||||||
|  |             LOCAL_GIT_VERSION = tuple(map(int, v.split('.')[:3])) | ||||||
|  |         except Exception: | ||||||
|  |             printwrap("Could not determine git version!") | ||||||
|  |             sys.exit(1) | ||||||
|  |     if LOCAL_GIT_VERSION < MINIMUM_GIT_VERSION: | ||||||
|  |         printwrap("Local git version %s < required git version %s" % | ||||||
|  |                   '.'.join(map(str, LOCAL_GIT_VERSION)), | ||||||
|  |                   '.'.join(map(str, MINIMUM_GIT_VERSION))) | ||||||
|  |         sys.exit(1) | ||||||
|  |  | ||||||
|  |  | ||||||
| def git_directories(): | def git_directories(): | ||||||
|     """Determine (absolute git work directory path, .git subdirectory path).""" |     """Determine (absolute git work directory path, .git subdirectory path).""" | ||||||
|     cmd = ("git", "rev-parse", "--show-toplevel", "--git-dir") |     cmd = ("git", "rev-parse", "--show-toplevel", "--git-dir") | ||||||
| @@ -917,20 +939,9 @@ def rebase_changes(branch, remote, interactive=True): | |||||||
|                   "re-run with the '-R' option enabled." % (branch, remote)) |                   "re-run with the '-R' option enabled." % (branch, remote)) | ||||||
|         sys.exit(1) |         sys.exit(1) | ||||||
|  |  | ||||||
|     # Determine git version to set rebase flags below. |     rebase_flag = '--rebase-merges' | ||||||
|     output = run_command("git version") |     if LOCAL_GIT_VERSION < (2, 18, 0): | ||||||
|     rebase_flag = "--rebase-merges" |  | ||||||
|     if "git version" in output: |  | ||||||
|         try: |  | ||||||
|             v = output.rsplit(None, 1)[1] |  | ||||||
|             gitv = tuple(map(int, v.split('.')[:3])) |  | ||||||
|             if gitv < (2, 18, 0): |  | ||||||
|         rebase_flag = "--preserve-merges" |         rebase_flag = "--preserve-merges" | ||||||
|         except Exception: |  | ||||||
|             # We tried to determine the version and failed. Use current git |  | ||||||
|             # flag as fallback. |  | ||||||
|             warn("Could not determine git version. " |  | ||||||
|                  "Using modern git rebase flags.") |  | ||||||
|  |  | ||||||
|     interactive_flag = interactive and '-i' or '' |     interactive_flag = interactive and '-i' or '' | ||||||
|  |  | ||||||
| @@ -1677,6 +1688,8 @@ additional information: | |||||||
|         branch = options.branch |         branch = options.branch | ||||||
|         options.track = False |         options.track = False | ||||||
|  |  | ||||||
|  |     get_git_version() | ||||||
|  |  | ||||||
|     global VERBOSE |     global VERBOSE | ||||||
|     global UPDATE |     global UPDATE | ||||||
|     VERBOSE = options.verbose |     VERBOSE = options.verbose | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ian Wienand
					Ian Wienand