]> code.ossystems Code Review - openembedded-core.git/commitdiff
bitbake/fetch2: Add explict network access exception and handling to give users usabl...
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 11 Feb 2011 22:08:21 +0000 (22:08 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 11 Feb 2011 22:08:21 +0000 (22:08 +0000)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/bb/fetch2/__init__.py
bitbake/lib/bb/fetch2/bzr.py
bitbake/lib/bb/fetch2/cvs.py
bitbake/lib/bb/fetch2/git.py
bitbake/lib/bb/fetch2/hg.py
bitbake/lib/bb/fetch2/osc.py
bitbake/lib/bb/fetch2/repo.py
bitbake/lib/bb/fetch2/ssh.py
bitbake/lib/bb/fetch2/svn.py

index bc1824b01bed54cdd0950dda11db187a7a461398..d8bee063e7c7ccb411328e89552a8b3dfad15f4e 100644 (file)
@@ -117,6 +117,16 @@ class SHA256SumError(MD5SumError):
          BBFetchException.__init__(self, msg)
          self.args = (path, wanted, got, url)
 
+class NetworkAccess(BBFetchException):
+    """Exception raised when network access is disabled but it is required."""
+    def __init__(self, url, cmd):
+         msg = "Network access disabled through BB_NO_NETWORK but access rquested with command %s (for url %s)" % (cmd, url)
+         self.url = url
+         self.cmd = cmd
+         BBFetchException.__init__(self, msg)
+         self.args = (url, cmd)
+
+
 def decodeurl(url):
     """Decodes an URL into the tokens (scheme, network location, path,
     user, password, parameters).
@@ -398,12 +408,12 @@ def runfetchcmd(cmd, d, quiet = False, cleanup = []):
 
     return output
 
-def check_network_access(d, info = ""):
+def check_network_access(d, info = "", url = None):
     """
     log remote network access, and error if BB_NO_NETWORK is set
     """
     if bb.data.getVar("BB_NO_NETWORK", d, True) == "1":
-        raise FetchError("BB_NO_NETWORK is set, but the fetcher code attempted network access with the command %s" % info)
+        raise NetworkAccess(url, info)
     else:
         logger.debug(1, "Fetcher accessed the network with the command %s" % info)
 
@@ -459,6 +469,9 @@ def try_mirrors(d, origud, mirrors, check = False):
                  os.symlink(ud.localpath, origud.localpath)
             return ud.localpath
 
+        except bb.fetch2.NetworkAccess:
+            raise
+
         except bb.fetch2.BBFetchException as e:
             logger.debug(1, "Mirror fetch failure for url %s (original url: %s)" % (newuri, origud.url))
             logger.debug(1, str(e))
@@ -909,6 +922,9 @@ class Fetch(object):
                             m.build_mirror_data(u, ud, self.d)
                         localpath = ud.localpath
 
+                    except bb.fetch2.NetworkAccess:
+                        raise
+
                     except BBFetchException as e:
                         logger.debug(1, str(e))
                         # Remove any incomplete fetch
index bb175662b48204c7653ad19c4d0e97fdb20e09eb..454961eff016db55d44efb36fdf6d4a96a340e8e 100644 (file)
@@ -85,13 +85,13 @@ class Bzr(FetchMethod):
         if os.access(os.path.join(ud.pkgdir, os.path.basename(ud.pkgdir), '.bzr'), os.R_OK):
             bzrcmd = self._buildbzrcommand(ud, d, "update")
             logger.debug(1, "BZR Update %s", loc)
-            bb.fetch2.check_network_access(d, bzrcmd)
+            bb.fetch2.check_network_access(d, bzrcmd, ud.url)
             os.chdir(os.path.join (ud.pkgdir, os.path.basename(ud.path)))
             runfetchcmd(bzrcmd, d)
         else:
             bb.utils.remove(os.path.join(ud.pkgdir, os.path.basename(ud.pkgdir)), True)
             bzrcmd = self._buildbzrcommand(ud, d, "fetch")
-            bb.fetch2.check_network_access(d, bzrcmd)
+            bb.fetch2.check_network_access(d, bzrcmd, ud.url)
             logger.debug(1, "BZR Checkout %s", loc)
             bb.mkdirhier(ud.pkgdir)
             os.chdir(ud.pkgdir)
@@ -124,7 +124,7 @@ class Bzr(FetchMethod):
         """
         logger.debug(2, "BZR fetcher hitting network for %s", url)
 
-        bb.fetch2.check_network_access(d, self._buildbzrcommand(ud, d, "revno"))
+        bb.fetch2.check_network_access(d, self._buildbzrcommand(ud, d, "revno"), ud.url)
 
         output = runfetchcmd(self._buildbzrcommand(ud, d, "revno"), d, True)
 
index ae03daf236a2deefc47ad72b2ea987b215468c05..12d11e0d5ba22a052d41651e77e501d4ea8943ad 100644 (file)
@@ -132,7 +132,7 @@ class Cvs(FetchMethod):
         moddir = os.path.join(pkgdir, localdir)
         if os.access(os.path.join(moddir, 'CVS'), os.R_OK):
             logger.info("Update " + loc)
-            bb.fetch2.check_network_access(d, cvsupdatecmd)
+            bb.fetch2.check_network_access(d, cvsupdatecmd, ud.url)
             # update sources there
             os.chdir(moddir)
             cmd = cvsupdatecmd
@@ -142,7 +142,7 @@ class Cvs(FetchMethod):
             bb.mkdirhier(pkgdir)
             os.chdir(pkgdir)
             logger.debug(1, "Running %s", cvscmd)
-            bb.fetch2.check_network_access(d, cvscmd)
+            bb.fetch2.check_network_access(d, cvscmd, ud.url)
             cmd = cvscmd
 
         runfetchcmd(cmd, d, cleanup = [moddir])
index 6d82bdc88bcc68cd31ebd1ebb065532bc6e7eded..f2c27e42a7f9445b1da2d1cfbd9fc053384e3f2e 100644 (file)
@@ -132,7 +132,7 @@ class Git(FetchMethod):
             if not self._contains_ref(ud.revisions[name], d):
                 needupdate = True
         if needupdate:
-            bb.fetch2.check_network_access(d, "git fetch %s%s" % (ud.host, ud.path))
+            bb.fetch2.check_network_access(d, "git fetch %s%s" % (ud.host, ud.path), ud.url)
             try: 
                 runfetchcmd("%s remote prune origin" % ud.basecmd, d) 
                 runfetchcmd("%s remote rm origin" % ud.basecmd, d) 
index ac5825baa9a6000de5bb18c24b47a951d0efb57c..6a56f8d0cd88698dbe13d242bbdc933584adb0be 100644 (file)
@@ -124,7 +124,7 @@ class Hg(FetchMethod):
             # update sources there
             os.chdir(ud.moddir)
             logger.debug(1, "Running %s", updatecmd)
-            bb.fetch2.check_network_access(d, updatecmd)
+            bb.fetch2.check_network_access(d, updatecmd, ud.url)
             runfetchcmd(updatecmd, d)
 
         else:
@@ -134,7 +134,7 @@ class Hg(FetchMethod):
             bb.mkdirhier(ud.pkgdir)
             os.chdir(ud.pkgdir)
             logger.debug(1, "Running %s", fetchcmd)
-            bb.fetch2.check_network_access(d, fetchcmd)
+            bb.fetch2.check_network_access(d, fetchcmd, ud.url)
             runfetchcmd(fetchcmd, d)
 
         # Even when we clone (fetch), we still need to update as hg's clone
index f252b5e4a31f6fed47b9a025c14cc8b2def94187..4bf411c24f57225fff25e90d8103b7f5bb1a1951 100644 (file)
@@ -90,7 +90,7 @@ class Osc(FetchMethod):
             # update sources there
             os.chdir(ud.moddir)
             logger.debug(1, "Running %s", oscupdatecmd)
-            bb.fetch2.check_network_access(d, oscupdatecmd)
+            bb.fetch2.check_network_access(d, oscupdatecmd, ud.url)
             runfetchcmd(oscupdatecmd, d)
         else:
             oscfetchcmd = self._buildosccommand(ud, d, "fetch")
@@ -99,7 +99,7 @@ class Osc(FetchMethod):
             bb.mkdirhier(ud.pkgdir)
             os.chdir(ud.pkgdir)
             logger.debug(1, "Running %s", oscfetchcmd)
-            bb.fetch2.check_network_access(d, oscfetchcmd)
+            bb.fetch2.check_network_access(d, oscfetchcmd, ud.url)
             runfetchcmd(oscfetchcmd, d)
 
         os.chdir(os.path.join(ud.pkgdir + ud.path))
index 3b16fc0144e5984cf8dc8bf417cd2d17f8311be0..54130a8c3b8f109a03c2ff8cb9eea4f16f0ec33c 100644 (file)
@@ -72,10 +72,10 @@ class Repo(FetchMethod):
         bb.mkdirhier(os.path.join(codir, "repo"))
         os.chdir(os.path.join(codir, "repo"))
         if not os.path.exists(os.path.join(codir, "repo", ".repo")):
-            bb.fetch2.check_network_access(d, "repo init -m %s -b %s -u %s://%s%s%s" % (ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path))
+            bb.fetch2.check_network_access(d, "repo init -m %s -b %s -u %s://%s%s%s" % (ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), ud.url)
             runfetchcmd("repo init -m %s -b %s -u %s://%s%s%s" % (ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), d)
 
-        bb.fetch2.check_network_access(d, "repo sync %s" % ud.url)
+        bb.fetch2.check_network_access(d, "repo sync %s" % ud.url, ud.url)
         runfetchcmd("repo sync", d)
         os.chdir(codir)
 
index 2ee9ab093ad9db357b99e9f5800e99c8f1a7ce03..91ac15faae334a8ad72567ead27757ecaa1d8471 100644 (file)
@@ -114,7 +114,7 @@ class SSH(FetchMethod):
             commands.mkarg(ldir)
         )
 
-        bb.fetch2.check_network_access(d, cmd)
+        bb.fetch2.check_network_access(d, cmd, urldata.url)
 
         runfetchcmd(cmd, d)
 
index d05dc02765630dfd592bc077b4f13613fa6bbfac..ac4fd27e14d3a2a57bc52747a2f9403f1e79d401 100644 (file)
@@ -116,7 +116,7 @@ class Svn(FetchMethod):
             # update sources there
             os.chdir(ud.moddir)
             logger.debug(1, "Running %s", svnupdatecmd)
-            bb.fetch2.check_network_access(d, svnupdatecmd)
+            bb.fetch2.check_network_access(d, svnupdatecmd, ud.url)
             runfetchcmd(svnupdatecmd, d)
         else:
             svnfetchcmd = self._buildsvncommand(ud, d, "fetch")
@@ -125,7 +125,7 @@ class Svn(FetchMethod):
             bb.mkdirhier(ud.pkgdir)
             os.chdir(ud.pkgdir)
             logger.debug(1, "Running %s", svnfetchcmd)
-            bb.fetch2.check_network_access(d, svnfetchcmd)
+            bb.fetch2.check_network_access(d, svnfetchcmd, ud.url)
             runfetchcmd(svnfetchcmd, d)
 
         scmdata = ud.parm.get("scmdata", "")