1eb8dc403SDave Cobbley""" 2eb8dc403SDave CobbleyBitBake 'Fetch' git annex implementation 3eb8dc403SDave Cobbley""" 4eb8dc403SDave Cobbley 5eb8dc403SDave Cobbley# Copyright (C) 2014 Otavio Salvador 6eb8dc403SDave Cobbley# Copyright (C) 2014 O.S. Systems Software LTDA. 7eb8dc403SDave Cobbley# 8*c342db35SBrad Bishop# SPDX-License-Identifier: GPL-2.0-only 9eb8dc403SDave Cobbley# 10eb8dc403SDave Cobbley 11eb8dc403SDave Cobbleyimport bb 12eb8dc403SDave Cobbleyfrom bb.fetch2.git import Git 13eb8dc403SDave Cobbleyfrom bb.fetch2 import runfetchcmd 14eb8dc403SDave Cobbley 15eb8dc403SDave Cobbleyclass GitANNEX(Git): 16eb8dc403SDave Cobbley def supports(self, ud, d): 17eb8dc403SDave Cobbley """ 18eb8dc403SDave Cobbley Check to see if a given url can be fetched with git. 19eb8dc403SDave Cobbley """ 20eb8dc403SDave Cobbley return ud.type in ['gitannex'] 21eb8dc403SDave Cobbley 22eb8dc403SDave Cobbley def urldata_init(self, ud, d): 23eb8dc403SDave Cobbley super(GitANNEX, self).urldata_init(ud, d) 24eb8dc403SDave Cobbley if ud.shallow: 25eb8dc403SDave Cobbley ud.shallow_extra_refs += ['refs/heads/git-annex', 'refs/heads/synced/*'] 26eb8dc403SDave Cobbley 27eb8dc403SDave Cobbley def uses_annex(self, ud, d, wd): 28eb8dc403SDave Cobbley for name in ud.names: 29eb8dc403SDave Cobbley try: 30eb8dc403SDave Cobbley runfetchcmd("%s rev-list git-annex" % (ud.basecmd), d, quiet=True, workdir=wd) 31eb8dc403SDave Cobbley return True 32eb8dc403SDave Cobbley except bb.fetch.FetchError: 33eb8dc403SDave Cobbley pass 34eb8dc403SDave Cobbley 35eb8dc403SDave Cobbley return False 36eb8dc403SDave Cobbley 37eb8dc403SDave Cobbley def update_annex(self, ud, d, wd): 38eb8dc403SDave Cobbley try: 39eb8dc403SDave Cobbley runfetchcmd("%s annex get --all" % (ud.basecmd), d, quiet=True, workdir=wd) 40eb8dc403SDave Cobbley except bb.fetch.FetchError: 41eb8dc403SDave Cobbley return False 42eb8dc403SDave Cobbley runfetchcmd("chmod u+w -R %s/annex" % (ud.clonedir), d, quiet=True, workdir=wd) 43eb8dc403SDave Cobbley 44eb8dc403SDave Cobbley return True 45eb8dc403SDave Cobbley 46eb8dc403SDave Cobbley def download(self, ud, d): 47eb8dc403SDave Cobbley Git.download(self, ud, d) 48eb8dc403SDave Cobbley 49eb8dc403SDave Cobbley if not ud.shallow or ud.localpath != ud.fullshallow: 50eb8dc403SDave Cobbley if self.uses_annex(ud, d, ud.clonedir): 51eb8dc403SDave Cobbley self.update_annex(ud, d, ud.clonedir) 52eb8dc403SDave Cobbley 53eb8dc403SDave Cobbley def clone_shallow_local(self, ud, dest, d): 54eb8dc403SDave Cobbley super(GitANNEX, self).clone_shallow_local(ud, dest, d) 55eb8dc403SDave Cobbley 56eb8dc403SDave Cobbley try: 57eb8dc403SDave Cobbley runfetchcmd("%s annex init" % ud.basecmd, d, workdir=dest) 58eb8dc403SDave Cobbley except bb.fetch.FetchError: 59eb8dc403SDave Cobbley pass 60eb8dc403SDave Cobbley 61eb8dc403SDave Cobbley if self.uses_annex(ud, d, dest): 62eb8dc403SDave Cobbley runfetchcmd("%s annex get" % ud.basecmd, d, workdir=dest) 63eb8dc403SDave Cobbley runfetchcmd("chmod u+w -R %s/.git/annex" % (dest), d, quiet=True, workdir=dest) 64eb8dc403SDave Cobbley 65eb8dc403SDave Cobbley def unpack(self, ud, destdir, d): 66eb8dc403SDave Cobbley Git.unpack(self, ud, destdir, d) 67eb8dc403SDave Cobbley 68eb8dc403SDave Cobbley try: 69eb8dc403SDave Cobbley runfetchcmd("%s annex init" % (ud.basecmd), d, workdir=ud.destdir) 70eb8dc403SDave Cobbley except bb.fetch.FetchError: 71eb8dc403SDave Cobbley pass 72eb8dc403SDave Cobbley 73eb8dc403SDave Cobbley annex = self.uses_annex(ud, d, ud.destdir) 74eb8dc403SDave Cobbley if annex: 75eb8dc403SDave Cobbley runfetchcmd("%s annex get" % (ud.basecmd), d, workdir=ud.destdir) 76eb8dc403SDave Cobbley runfetchcmd("chmod u+w -R %s/.git/annex" % (ud.destdir), d, quiet=True, workdir=ud.destdir) 77eb8dc403SDave Cobbley 78