msubprojects: Revert back to rev-parse instead of --show-current

It is undocumented in manpage, but --show-current is new in git 2.22
which is too recent for distros we want to support like Ubuntu 18.04.
pull/7752/head
Xavier Claessens 4 years ago committed by Nirbheek Chauhan
parent e0cd54a322
commit da72e6284e
  1. 4
      mesonbuild/msubprojects.py
  2. 35
      run_unittests.py

@ -125,7 +125,9 @@ def update_git(wrap, repo_dir, options):
mlog.log(' -> No revision specified.')
return True
try:
branch = git_output(['branch', '--show-current'], repo_dir).strip()
# Same as `git branch --show-current` but compatible with older git version
branch = git_output(['rev-parse', '--abbrev-ref', 'HEAD'], repo_dir).strip()
branch = branch if branch != 'HEAD' else ''
except GitException as e:
mlog.log(' -> Failed to determine current branch in', mlog.bold(repo_dir))
mlog.log(mlog.red(e.output))

@ -8985,6 +8985,17 @@ class SubprojectsCommandTests(BasePlatformTests):
def _git_local(self, cmd, name):
return self._git(cmd, self.subprojects_dir / name)
def _git_local_branch(self, name):
# Same as `git branch --show-current` but compatible with older git version
branch = self._git_local(['rev-parse', '--abbrev-ref', 'HEAD'], name)
return branch if branch != 'HEAD' else ''
def _git_local_commit(self, name, ref='HEAD'):
return self._git_local(['rev-parse', ref], name)
def _git_remote_commit(self, name, ref='HEAD'):
return self._git_remote(['rev-parse', ref], name)
def _git_create_repo(self, path):
self._create_project(path)
self._git(['init'], path)
@ -9048,24 +9059,24 @@ class SubprojectsCommandTests(BasePlatformTests):
self._git_create_remote_branch(subp_name, 'newbranch')
self._wrap_create_git(subp_name, 'newbranch')
self._subprojects_cmd(['update', '--reset'])
self.assertEqual(self._git_local(['branch', '--show-current'], subp_name), 'newbranch')
self.assertEqual(self._git_local(['rev-parse', 'HEAD'], subp_name), self._git_remote(['rev-parse', 'newbranch'], subp_name))
self.assertEqual(self._git_local_branch(subp_name), 'newbranch')
self.assertEqual(self._git_local_commit(subp_name), self._git_remote_commit(subp_name, 'newbranch'))
# Update remote newbranch. Checks the new commit is pulled into existing
# local newbranch. Make sure it does not print spurious 'git stash' message.
self._git_create_remote_commit(subp_name, 'newbranch')
out = self._subprojects_cmd(['update', '--reset'])
self.assertNotIn('No local changes to save', out)
self.assertEqual(self._git_local(['branch', '--show-current'], subp_name), 'newbranch')
self.assertEqual(self._git_local(['rev-parse', 'HEAD'], subp_name), self._git_remote(['rev-parse', 'newbranch'], subp_name))
self.assertEqual(self._git_local_branch(subp_name), 'newbranch')
self.assertEqual(self._git_local_commit(subp_name), self._git_remote_commit(subp_name, 'newbranch'))
# Update remote newbranch and switch to another branch. Checks that it
# switch current branch to newbranch and pull latest commit.
self._git_local(['checkout', 'master'], subp_name)
self._git_create_remote_commit(subp_name, 'newbranch')
self._subprojects_cmd(['update', '--reset'])
self.assertEqual(self._git_local(['branch', '--show-current'], subp_name), 'newbranch')
self.assertEqual(self._git_local(['rev-parse', 'HEAD'], subp_name), self._git_remote(['rev-parse', 'newbranch'], subp_name))
self.assertEqual(self._git_local_branch(subp_name), 'newbranch')
self.assertEqual(self._git_local_commit(subp_name), self._git_remote_commit(subp_name, 'newbranch'))
# Stage some local changes then update. Checks that local changes got
# stashed.
@ -9073,8 +9084,8 @@ class SubprojectsCommandTests(BasePlatformTests):
self._git_local(['add', '.'], subp_name)
self._git_create_remote_commit(subp_name, 'newbranch')
self._subprojects_cmd(['update', '--reset'])
self.assertEqual(self._git_local(['branch', '--show-current'], subp_name), 'newbranch')
self.assertEqual(self._git_local(['rev-parse', 'HEAD'], subp_name), self._git_remote(['rev-parse', 'newbranch'], subp_name))
self.assertEqual(self._git_local_branch(subp_name), 'newbranch')
self.assertEqual(self._git_local_commit(subp_name), self._git_remote_commit(subp_name, 'newbranch'))
self.assertTrue(self._git_local(['stash', 'list'], subp_name))
# Create a new remote tag and update the wrap file. Checks that
@ -9082,8 +9093,8 @@ class SubprojectsCommandTests(BasePlatformTests):
self._git_create_remote_tag(subp_name, 'newtag')
self._wrap_create_git(subp_name, 'newtag')
self._subprojects_cmd(['update', '--reset'])
self.assertEqual(self._git_local(['branch', '--show-current'], subp_name), '')
self.assertEqual(self._git_local(['rev-parse', 'HEAD'], subp_name), self._git_remote(['rev-parse', 'newtag'], subp_name))
self.assertEqual(self._git_local_branch(subp_name), '')
self.assertEqual(self._git_local_commit(subp_name), self._git_remote_commit(subp_name, 'newtag'))
# Create a new remote commit and update the wrap file with the commit id.
# Checks that "meson subprojects update --reset" checkout the new commit
@ -9093,8 +9104,8 @@ class SubprojectsCommandTests(BasePlatformTests):
new_commit = self._git_remote(['rev-parse', 'HEAD'], subp_name)
self._wrap_create_git(subp_name, new_commit)
self._subprojects_cmd(['update', '--reset'])
self.assertEqual(self._git_local(['branch', '--show-current'], subp_name), '')
self.assertEqual(self._git_local(['rev-parse', 'HEAD'], subp_name), new_commit)
self.assertEqual(self._git_local_branch(subp_name), '')
self.assertEqual(self._git_local_commit(subp_name), new_commit)
@skipIfNoExecutable('true')
def test_foreach(self):

Loading…
Cancel
Save