msubprojects: Support git subprojects with no wrap file

User could have cloned manually a subproject.
pull/7725/head
Xavier Claessens 4 years ago committed by Xavier Claessens
parent 3d443d84bd
commit 98d445a070
  1. 7
      mesonbuild/msubprojects.py
  2. 12
      mesonbuild/wrap/wrap.py

@ -53,6 +53,10 @@ def update_git(wrap, repo_dir, options):
mlog.log(' -> Not used.') mlog.log(' -> Not used.')
return return
revision = wrap.get('revision') revision = wrap.get('revision')
if not revision:
# It could be a detached git submodule for example.
mlog.log(' -> No revision specified.')
return
branch = git_output(['branch', '--show-current'], repo_dir).strip() branch = git_output(['branch', '--show-current'], repo_dir).strip()
if branch == '': if branch == '':
try: try:
@ -145,6 +149,9 @@ def checkout(wrap, repo_dir, options):
if wrap.type != 'git' or not os.path.isdir(repo_dir): if wrap.type != 'git' or not os.path.isdir(repo_dir):
return return
branch_name = options.branch_name if options.branch_name else wrap.get('revision') branch_name = options.branch_name if options.branch_name else wrap.get('revision')
if not branch_name:
# It could be a detached git submodule for example.
return
cmd = ['checkout', branch_name, '--'] cmd = ['checkout', branch_name, '--']
if options.b: if options.b:
cmd.insert(1, '-b') cmd.insert(1, '-b')

@ -118,10 +118,22 @@ class PackageDefinition:
self.provided_deps[self.name] = None self.provided_deps[self.name] = None
if fname.endswith('.wrap'): if fname.endswith('.wrap'):
self.parse_wrap(fname) self.parse_wrap(fname)
else:
self.guess_type();
self.directory = self.values.get('directory', self.name) self.directory = self.values.get('directory', self.name)
if os.path.dirname(self.directory): if os.path.dirname(self.directory):
raise WrapException('Directory key must be a name and not a path') raise WrapException('Directory key must be a name and not a path')
def guess_type(self) -> None:
if os.path.exists(os.path.join(self.filename, '.git')):
# This is a git subproject without wrap file. Either the user cloned
# it manually, or it's a git submodule. The revision is used in
# msubprojects.py to update the git repo. If it's a submodule the repo
# is likely detached and revision will be empty.
res, stdout = quiet_git(['branch', '--show-current'], self.filename)
self.values['revision'] = stdout.strip()
self.type = 'git'
def parse_wrap(self, fname: str) -> None: def parse_wrap(self, fname: str) -> None:
try: try:
self.config = configparser.ConfigParser(interpolation=None) self.config = configparser.ConfigParser(interpolation=None)

Loading…
Cancel
Save