diff options
author | Christopher Larson <kergoth@gmail.com> | 2017-05-13 02:46:29 +0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-06-02 13:36:57 +0100 |
commit | bf87c5cd194b5a24c388d6445b413b5f673bc1de (patch) | |
tree | beef4530468ec0502c43a8692b0127fb613e2a4b /bitbake | |
parent | 27d56982c7ba05e86a100b0cca2411ee5ac7a85e (diff) | |
download | openembedded-core-contrib-bf87c5cd194b5a24c388d6445b413b5f673bc1de.tar.gz |
bitbake: fetch/git: support per-branch/per-url depths for shallow
Allow the user to explicitly adjust the depth for named urls/branches. The
un-suffixed BB_GIT_SHALLOW_DEPTH is used as the default.
Example usage:
BB_GIT_SHALLOW_DEPTH = "1"
BB_GIT_SHALLOW_DEPTH_doc = "0"
BB_GIT_SHALLOW_DEPTH_meta = "0"
(Bitbake rev: 9dfc517e5bcc6dd203a0ad685cc884676d2984c4)
Signed-off-by: Christopher Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/fetch2/git.py | 61 | ||||
-rw-r--r-- | bitbake/lib/bb/tests/fetch.py | 35 |
2 files changed, 73 insertions, 23 deletions
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index 0412f9ff51..250109bf9e 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py @@ -70,6 +70,7 @@ Supported SRC_URI options are: # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +import collections import errno import os import re @@ -178,12 +179,43 @@ class Git(FetchMethod): if ud.bareclone: ud.cloneflags += " --mirror" + ud.shallow = d.getVar("BB_GIT_SHALLOW") == "1" + + depth_default = d.getVar("BB_GIT_SHALLOW_DEPTH") + if depth_default is not None: + try: + depth_default = int(depth_default or 0) + except ValueError: + raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH: %s" % depth_default) + else: + if depth_default < 0: + raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH: %s" % depth_default) + else: + depth_default = 1 + ud.shallow_depths = collections.defaultdict(lambda: depth_default) + ud.branches = {} for pos, name in enumerate(ud.names): branch = branches[pos] ud.branches[name] = branch ud.unresolvedrev[name] = branch + shallow_depth = d.getVar("BB_GIT_SHALLOW_DEPTH_%s" % name) + if shallow_depth is not None: + try: + shallow_depth = int(shallow_depth or 0) + except ValueError: + raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH_%s: %s" % (name, shallow_depth)) + else: + if shallow_depth < 0: + raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH_%s: %s" % (name, shallow_depth)) + ud.shallow_depths[name] = shallow_depth + + if (ud.shallow and + all(ud.shallow_depths[n] == 0 for n in ud.names)): + # Shallow disabled for this URL + ud.shallow = False + if ud.usehead: ud.unresolvedrev['default'] = 'HEAD' @@ -222,23 +254,6 @@ class Git(FetchMethod): mirrortarball = 'git2_%s.tar.gz' % gitsrcname ud.fullmirror = os.path.join(dl_dir, mirrortarball) ud.mirrortarballs = [mirrortarball] - - ud.shallow = d.getVar("BB_GIT_SHALLOW") == "1" - if ud.shallow: - ud.shallow_depth = d.getVar("BB_GIT_SHALLOW_DEPTH") - if ud.shallow_depth is not None: - try: - ud.shallow_depth = int(ud.shallow_depth or 0) - except ValueError: - raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH: %s" % ud.shallow_depth) - else: - if not ud.shallow_depth: - ud.shallow = False - elif ud.shallow_depth < 0: - raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH: %s" % ud.shallow_depth) - else: - ud.shallow_depth = 1 - if ud.shallow: tarballname = gitsrcname if ud.bareclone: @@ -246,10 +261,12 @@ class Git(FetchMethod): for name, revision in sorted(ud.revisions.items()): tarballname = "%s_%s" % (tarballname, ud.revisions[name][:7]) - if not ud.nobranch: - tarballname = "%s-%s" % (tarballname, ud.branches[name]) + depth = ud.shallow_depths[name] + if depth: + tarballname = "%s-%s" % (tarballname, depth) - tarballname = "%s-%s" % (tarballname, ud.shallow_depth) + if not ud.nobranch: + tarballname = "%s_%s" % (tarballname, "_".join(sorted(ud.branches.values())).replace('/', '.')) fetcher = self.__class__.__name__.lower() ud.shallowtarball = '%sshallow_%s.tar.gz' % (fetcher, tarballname) @@ -370,7 +387,9 @@ class Git(FetchMethod): to_parse, shallow_branches = [], [] for name in ud.names: revision = ud.revisions[name] - to_parse.append('%s~%d^{}' % (revision, ud.shallow_depth - 1)) + depth = ud.shallow_depths[name] + if depth: + to_parse.append('%s~%d^{}' % (revision, depth - 1)) # For nobranch, we need a ref, otherwise the commits will be # removed, and for non-nobranch, we truncate the branch to our diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py index 019f22a11d..0b0116b455 100644 --- a/bitbake/lib/bb/tests/fetch.py +++ b/bitbake/lib/bb/tests/fetch.py @@ -1122,6 +1122,27 @@ class GitShallowTest(FetcherTest): self.fetch_shallow(disabled=True) self.assertRevCount(2) + def test_shallow_depth_default_override(self): + self.add_empty_file('a') + self.add_empty_file('b') + self.assertRevCount(2, cwd=self.srcdir) + + self.d.setVar('BB_GIT_SHALLOW_DEPTH', '2') + self.d.setVar('BB_GIT_SHALLOW_DEPTH_default', '1') + self.fetch_shallow() + self.assertRevCount(1) + + def test_shallow_depth_default_override_disable(self): + self.add_empty_file('a') + self.add_empty_file('b') + self.add_empty_file('c') + self.assertRevCount(3, cwd=self.srcdir) + + self.d.setVar('BB_GIT_SHALLOW_DEPTH', '0') + self.d.setVar('BB_GIT_SHALLOW_DEPTH_default', '2') + self.fetch_shallow() + self.assertRevCount(2) + def test_current_shallow_out_of_date_clone(self): # Create initial git repo self.add_empty_file('a') @@ -1206,13 +1227,15 @@ class GitShallowTest(FetcherTest): uri = self.d.getVar('SRC_URI', True).split()[0] uri = '%s;branch=master,a_branch;name=master,a_branch' % uri - self.d.setVar('BB_GIT_SHALLOW_DEPTH', '2') + self.d.setVar('BB_GIT_SHALLOW_DEPTH', '0') + self.d.setVar('BB_GIT_SHALLOW_DEPTH_master', '3') + self.d.setVar('BB_GIT_SHALLOW_DEPTH_a_branch', '1') self.d.setVar('SRCREV_master', '${AUTOREV}') self.d.setVar('SRCREV_a_branch', '${AUTOREV}') self.fetch_shallow(uri) - self.assertRevCount(3, ['--all']) + self.assertRevCount(4, ['--all']) self.assertRefs(['master', 'origin/master', 'origin/a_branch']) def test_shallow_clone_preferred_over_shallow(self): @@ -1262,6 +1285,14 @@ class GitShallowTest(FetcherTest): with self.assertRaises(bb.fetch2.FetchError): self.fetch() + def test_shallow_invalid_depth_default(self): + self.add_empty_file('a') + self.add_empty_file('b') + + self.d.setVar('BB_GIT_SHALLOW_DEPTH_default', '-12') + with self.assertRaises(bb.fetch2.FetchError): + self.fetch() + if os.environ.get("BB_SKIP_NETTESTS") == "yes": print("Unset BB_SKIP_NETTESTS to run network tests") else: |