summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2008-12-06 13:16:13 +0000
committerRichard Purdie <rpurdie@linux.intel.com>2008-12-06 13:16:13 +0000
commitffdec425bfb26e152d1da5824a36dfe1fe72cd92 (patch)
tree38a5233e01e62d57964dbb0bf38ca88a92049386
parent4be017e82fdfbfbe1bf484bf745e770d18417918 (diff)
downloadpoky-ffdec425bfb26e152d1da5824a36dfe1fe72cd92.tar.gz
bitbake/bitbake-dev: Sync with upstream
-rw-r--r--bitbake-dev/ChangeLog14
-rw-r--r--bitbake-dev/lib/bb/cache.py6
-rw-r--r--bitbake-dev/lib/bb/cooker.py37
-rw-r--r--bitbake-dev/lib/bb/fetch/hg.py2
-rw-r--r--bitbake-dev/lib/bb/fetch/perforce.py24
-rw-r--r--bitbake-dev/lib/bb/fetch/svn.py4
-rw-r--r--bitbake-dev/lib/bb/taskdata.py15
-rw-r--r--bitbake-dev/lib/bb/utils.py1
-rw-r--r--bitbake/ChangeLog14
-rw-r--r--bitbake/lib/bb/cache.py6
-rw-r--r--bitbake/lib/bb/fetch/hg.py2
-rw-r--r--bitbake/lib/bb/fetch/perforce.py24
-rw-r--r--bitbake/lib/bb/fetch/svn.py4
-rw-r--r--bitbake/lib/bb/taskdata.py15
-rw-r--r--bitbake/lib/bb/utils.py1
15 files changed, 117 insertions, 52 deletions
diff --git a/bitbake-dev/ChangeLog b/bitbake-dev/ChangeLog
index 6f068be19f..a2c9d80801 100644
--- a/bitbake-dev/ChangeLog
+++ b/bitbake-dev/ChangeLog
@@ -154,7 +154,21 @@ Changes in Bitbake 1.9.x:
154 all variable from the environment. If BB_ENV_WHITELIST is set, that whitelist will be 154 all variable from the environment. If BB_ENV_WHITELIST is set, that whitelist will be
155 used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used 155 used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used
156 to extend the internal whitelist. 156 to extend the internal whitelist.
157 - Perforce fetcher fix to use commandline options instead of being overriden by the environment
158 - bb.utils.prunedir can cope with symlinks to directoriees without exceptions
159 - use @rev when doing a svn checkout
160 - Add osc fetcher (from Joshua Lock in Poky)
157 - When SRCREV autorevisioning for a recipe is in use, don't cache the recipe 161 - When SRCREV autorevisioning for a recipe is in use, don't cache the recipe
162 - Add tryaltconfigs option to control whether bitbake trys using alternative providers
163 to fulfil failed dependencies. It defaults to off, changing the default since this
164 behaviour confuses many users and isn't often useful.
165 - Improve lock file function error handling
166 - Add username handling to the git fetcher (Robert Bragg)
167 - Add support for HTTP_PROXY and HTTP_PROXY_IGNORE variables to the wget fetcher
168 - Export more variables to the fetcher commands to allow ssh checkouts and checkouts through
169 proxies to work better. (from Poky)
170 - Also allow user and pswd options in SRC_URIs globally (from Poky)
171 - Improve proxy handling when using mirrors (from Poky)
158 172
159Changes in Bitbake 1.8.0: 173Changes in Bitbake 1.8.0:
160 - Release 1.7.x as a stable series 174 - Release 1.7.x as a stable series
diff --git a/bitbake-dev/lib/bb/cache.py b/bitbake-dev/lib/bb/cache.py
index 1c87bfa12d..a4a4f47cef 100644
--- a/bitbake-dev/lib/bb/cache.py
+++ b/bitbake-dev/lib/bb/cache.py
@@ -95,7 +95,11 @@ class Cache:
95 bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...") 95 bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...")
96 self.depends_cache = {} 96 self.depends_cache = {}
97 else: 97 else:
98 bb.msg.note(1, bb.msg.domain.Cache, "Out of date cache found, rebuilding...") 98 try:
99 os.stat( self.cachefile )
100 bb.msg.note(1, bb.msg.domain.Cache, "Out of date cache found, rebuilding...")
101 except OSError:
102 pass
99 103
100 def getVar(self, var, fn, exp = 0): 104 def getVar(self, var, fn, exp = 0):
101 """ 105 """
diff --git a/bitbake-dev/lib/bb/cooker.py b/bitbake-dev/lib/bb/cooker.py
index 86229799f2..06f3395d7a 100644
--- a/bitbake-dev/lib/bb/cooker.py
+++ b/bitbake-dev/lib/bb/cooker.py
@@ -88,6 +88,24 @@ class BBCooker:
88 88
89 bb.data.inheritFromOS(self.configuration.data) 89 bb.data.inheritFromOS(self.configuration.data)
90 90
91 for f in self.configuration.file:
92 self.parseConfigurationFile( f )
93
94 self.parseConfigurationFile( os.path.join( "conf", "bitbake.conf" ) )
95
96 if not self.configuration.cmd:
97 self.configuration.cmd = bb.data.getVar("BB_DEFAULT_TASK", self.configuration.data, True) or "build"
98
99 bbpkgs = bb.data.getVar('BBPKGS', self.configuration.data, True)
100 if bbpkgs:
101 self.configuration.pkgs_to_build.extend(bbpkgs.split())
102
103 #
104 # Special updated configuration we use for firing events
105 #
106 self.configuration.event_data = bb.data.createCopy(self.configuration.data)
107 bb.data.update_data(self.configuration.event_data)
108
91 # TOSTOP must not be set or our children will hang when they output 109 # TOSTOP must not be set or our children will hang when they output
92 fd = sys.stdout.fileno() 110 fd = sys.stdout.fileno()
93 if os.isatty(fd): 111 if os.isatty(fd):
@@ -105,23 +123,7 @@ class BBCooker:
105 self.server.register_idle_function(self.runCommands, self) 123 self.server.register_idle_function(self.runCommands, self)
106 124
107 def parseConfiguration(self): 125 def parseConfiguration(self):
108 #
109 # Special updated configuration we use for firing events
110 #
111 self.configuration.event_data = bb.data.createCopy(self.configuration.data)
112 bb.data.update_data(self.configuration.event_data)
113
114 for f in self.configuration.file:
115 self.parseConfigurationFile( f )
116 126
117 self.parseConfigurationFile( os.path.join( "conf", "bitbake.conf" ) )
118
119 if not self.configuration.cmd:
120 self.configuration.cmd = bb.data.getVar("BB_DEFAULT_TASK", self.configuration.data, True) or "build"
121
122 bbpkgs = bb.data.getVar('BBPKGS', self.configuration.data, True)
123 if bbpkgs:
124 self.configuration.pkgs_to_build.extend(bbpkgs.split())
125 127
126 # Change nice level if we're asked to 128 # Change nice level if we're asked to
127 nice = bb.data.getVar("BB_NICE_LEVEL", self.configuration.data, True) 129 nice = bb.data.getVar("BB_NICE_LEVEL", self.configuration.data, True)
@@ -149,6 +151,9 @@ class BBCooker:
149 self.commandlineAction = ["showVersions"] 151 self.commandlineAction = ["showVersions"]
150 elif self.configuration.parse_only: 152 elif self.configuration.parse_only:
151 self.commandlineAction = ["parseFiles"] 153 self.commandlineAction = ["parseFiles"]
154 # FIXME - implement
155 #elif self.configuration.interactive:
156 # self.interactiveMode()
152 elif self.configuration.dot_graph: 157 elif self.configuration.dot_graph:
153 if self.configuration.pkgs_to_build: 158 if self.configuration.pkgs_to_build:
154 self.commandlineAction = ["generateDotGraph", self.configuration.pkgs_to_build, self.configuration.cmd] 159 self.commandlineAction = ["generateDotGraph", self.configuration.pkgs_to_build, self.configuration.cmd]
diff --git a/bitbake-dev/lib/bb/fetch/hg.py b/bitbake-dev/lib/bb/fetch/hg.py
index 1cd5a8aa5c..b87fd0fbe5 100644
--- a/bitbake-dev/lib/bb/fetch/hg.py
+++ b/bitbake-dev/lib/bb/fetch/hg.py
@@ -79,7 +79,7 @@ class Hg(Fetch):
79 host = "/" 79 host = "/"
80 ud.host = "localhost" 80 ud.host = "localhost"
81 81
82 if ud.user == None: 82 if not ud.user:
83 hgroot = host + ud.path 83 hgroot = host + ud.path
84 else: 84 else:
85 hgroot = ud.user + "@" + host + ud.path 85 hgroot = ud.user + "@" + host + ud.path
diff --git a/bitbake-dev/lib/bb/fetch/perforce.py b/bitbake-dev/lib/bb/fetch/perforce.py
index b594d2bde2..2fb38b4190 100644
--- a/bitbake-dev/lib/bb/fetch/perforce.py
+++ b/bitbake-dev/lib/bb/fetch/perforce.py
@@ -67,14 +67,15 @@ class Perforce(Fetch):
67 doparse = staticmethod(doparse) 67 doparse = staticmethod(doparse)
68 68
69 def getcset(d, depot,host,user,pswd,parm): 69 def getcset(d, depot,host,user,pswd,parm):
70 p4opt = ""
70 if "cset" in parm: 71 if "cset" in parm:
71 return parm["cset"]; 72 return parm["cset"];
72 if user: 73 if user:
73 data.setVar('P4USER', user, d) 74 p4opt += " -u %s" % (user)
74 if pswd: 75 if pswd:
75 data.setVar('P4PASSWD', pswd, d) 76 p4opt += " -P %s" % (pswd)
76 if host: 77 if host:
77 data.setVar('P4PORT', host, d) 78 p4opt += " -p %s" % (host)
78 79
79 p4date = data.getVar("P4DATE", d, 1) 80 p4date = data.getVar("P4DATE", d, 1)
80 if "revision" in parm: 81 if "revision" in parm:
@@ -85,8 +86,8 @@ class Perforce(Fetch):
85 depot += "@%s" % (p4date) 86 depot += "@%s" % (p4date)
86 87
87 p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1) 88 p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1)
88 bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s changes -m 1 %s" % (p4cmd, depot)) 89 bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s%s changes -m 1 %s" % (p4cmd, p4opt, depot))
89 p4file = os.popen("%s changes -m 1 %s" % (p4cmd,depot)) 90 p4file = os.popen("%s%s changes -m 1 %s" % (p4cmd, p4opt, depot))
90 cset = p4file.readline().strip() 91 cset = p4file.readline().strip()
91 bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset)) 92 bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset))
92 if not cset: 93 if not cset:
@@ -146,14 +147,15 @@ class Perforce(Fetch):
146 data.update_data(localdata) 147 data.update_data(localdata)
147 148
148 # Get the p4 command 149 # Get the p4 command
150 p4opt = ""
149 if user: 151 if user:
150 data.setVar('P4USER', user, localdata) 152 p4opt += " -u %s" % (user)
151 153
152 if pswd: 154 if pswd:
153 data.setVar('P4PASSWD', pswd, localdata) 155 p4opt += " -P %s" % (pswd)
154 156
155 if host: 157 if host:
156 data.setVar('P4PORT', host, localdata) 158 p4opt += " -p %s" % (host)
157 159
158 p4cmd = data.getVar('FETCHCOMMAND', localdata, 1) 160 p4cmd = data.getVar('FETCHCOMMAND', localdata, 1)
159 161
@@ -175,8 +177,8 @@ class Perforce(Fetch):
175 177
176 os.chdir(tmpfile) 178 os.chdir(tmpfile)
177 bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc) 179 bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc)
178 bb.msg.note(1, bb.msg.domain.Fetcher, "%s files %s" % (p4cmd, depot)) 180 bb.msg.note(1, bb.msg.domain.Fetcher, "%s%s files %s" % (p4cmd, p4opt, depot))
179 p4file = os.popen("%s files %s" % (p4cmd, depot)) 181 p4file = os.popen("%s%s files %s" % (p4cmd, p4opt, depot))
180 182
181 if not p4file: 183 if not p4file:
182 bb.error("Fetch: unable to get the P4 files from %s" % (depot)) 184 bb.error("Fetch: unable to get the P4 files from %s" % (depot))
@@ -193,7 +195,7 @@ class Perforce(Fetch):
193 dest = list[0][len(path)+1:] 195 dest = list[0][len(path)+1:]
194 where = dest.find("#") 196 where = dest.find("#")
195 197
196 os.system("%s print -o %s/%s %s" % (p4cmd, module,dest[:where],list[0])) 198 os.system("%s%s print -o %s/%s %s" % (p4cmd, p4opt, module,dest[:where],list[0]))
197 count = count + 1 199 count = count + 1
198 200
199 if count == 0: 201 if count == 0:
diff --git a/bitbake-dev/lib/bb/fetch/svn.py b/bitbake-dev/lib/bb/fetch/svn.py
index 5e5b31b3ad..aead1629b3 100644
--- a/bitbake-dev/lib/bb/fetch/svn.py
+++ b/bitbake-dev/lib/bb/fetch/svn.py
@@ -114,13 +114,15 @@ class Svn(Fetch):
114 if command is "info": 114 if command is "info":
115 svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module) 115 svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module)
116 else: 116 else:
117 suffix = ""
117 if ud.revision: 118 if ud.revision:
118 options.append("-r %s" % ud.revision) 119 options.append("-r %s" % ud.revision)
120 suffix = "@%s" % (ud.revision)
119 elif ud.date: 121 elif ud.date:
120 options.append("-r {%s}" % ud.date) 122 options.append("-r {%s}" % ud.date)
121 123
122 if command is "fetch": 124 if command is "fetch":
123 svncmd = "%s co %s %s://%s/%s %s" % (basecmd, " ".join(options), proto, svnroot, ud.module, ud.module) 125 svncmd = "%s co %s %s://%s/%s%s %s" % (basecmd, " ".join(options), proto, svnroot, ud.module, suffix, ud.module)
124 elif command is "update": 126 elif command is "update":
125 svncmd = "%s update %s" % (basecmd, " ".join(options)) 127 svncmd = "%s update %s" % (basecmd, " ".join(options))
126 else: 128 else:
diff --git a/bitbake-dev/lib/bb/taskdata.py b/bitbake-dev/lib/bb/taskdata.py
index 782dfb0b78..64ab032c3c 100644
--- a/bitbake-dev/lib/bb/taskdata.py
+++ b/bitbake-dev/lib/bb/taskdata.py
@@ -340,7 +340,10 @@ class TaskData:
340 self.add_provider_internal(cfgData, dataCache, item) 340 self.add_provider_internal(cfgData, dataCache, item)
341 except bb.providers.NoProvider: 341 except bb.providers.NoProvider:
342 if self.abort: 342 if self.abort:
343 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) 343 if self.get_rdependees_str(item):
344 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item)))
345 else:
346 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item))
344 raise 347 raise
345 targetid = self.getbuild_id(item) 348 targetid = self.getbuild_id(item)
346 self.remove_buildtarget(targetid) 349 self.remove_buildtarget(targetid)
@@ -358,7 +361,10 @@ class TaskData:
358 return 361 return
359 362
360 if not item in dataCache.providers: 363 if not item in dataCache.providers:
361 bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) 364 if self.get_rdependees_str(item):
365 bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item)))
366 else:
367 bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item))
362 bb.event.fire(bb.event.NoProvider(item, cfgData)) 368 bb.event.fire(bb.event.NoProvider(item, cfgData))
363 raise bb.providers.NoProvider(item) 369 raise bb.providers.NoProvider(item)
364 370
@@ -536,7 +542,10 @@ class TaskData:
536 except bb.providers.NoProvider: 542 except bb.providers.NoProvider:
537 targetid = self.getbuild_id(target) 543 targetid = self.getbuild_id(target)
538 if self.abort and targetid in self.external_targets: 544 if self.abort and targetid in self.external_targets:
539 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target))) 545 if self.get_rdependees_str(target):
546 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target)))
547 else:
548 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (target))
540 raise 549 raise
541 self.remove_buildtarget(targetid) 550 self.remove_buildtarget(targetid)
542 for target in self.get_unresolved_run_targets(dataCache): 551 for target in self.get_unresolved_run_targets(dataCache):
diff --git a/bitbake-dev/lib/bb/utils.py b/bitbake-dev/lib/bb/utils.py
index 33a0c17650..90ba9ac2e0 100644
--- a/bitbake-dev/lib/bb/utils.py
+++ b/bitbake-dev/lib/bb/utils.py
@@ -323,7 +323,6 @@ def preserved_envvars_list():
323 'HOME', 323 'HOME',
324 'LANG', 324 'LANG',
325 'LOGNAME', 325 'LOGNAME',
326 'OEROOT',
327 'PATH', 326 'PATH',
328 'PWD', 327 'PWD',
329 'SESSION_MANAGER', 328 'SESSION_MANAGER',
diff --git a/bitbake/ChangeLog b/bitbake/ChangeLog
index 2d50c0e364..a053ab839e 100644
--- a/bitbake/ChangeLog
+++ b/bitbake/ChangeLog
@@ -59,7 +59,20 @@ Changes in BitBake 1.8.x:
59 all variable from the environment. If BB_ENV_WHITELIST is set, that whitelist will be 59 all variable from the environment. If BB_ENV_WHITELIST is set, that whitelist will be
60 used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used 60 used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used
61 to extend the internal whitelist. 61 to extend the internal whitelist.
62 - Perforce fetcher fix to use commandline options instead of being overriden by the environment
63 - use @rev when doing a svn checkout
64 - Add osc fetcher (from Joshua Lock in Poky)
62 - When SRCREV autorevisioning for a recipe is in use, don't cache the recipe 65 - When SRCREV autorevisioning for a recipe is in use, don't cache the recipe
66 - Add tryaltconfigs option to control whether bitbake trys using alternative providers
67 to fulfil failed dependencies. It defaults to off, changing the default since this
68 behaviour confuses many users and isn't often useful.
69 - Improve lock file function error handling
70 - Add username handling to the git fetcher (Robert Bragg)
71 - Add support for HTTP_PROXY and HTTP_PROXY_IGNORE variables to the wget fetcher
72 - Export more variables to the fetcher commands to allow ssh checkouts and checkouts through
73 proxies to work better. (from Poky)
74 - Also allow user and pswd options in SRC_URIs globally (from Poky)
75 - Improve proxy handling when using mirrors (from Poky)
63 76
64Changes in BitBake 1.8.10: 77Changes in BitBake 1.8.10:
65 - Psyco is available only for x86 - do not use it on other architectures. 78 - Psyco is available only for x86 - do not use it on other architectures.
@@ -104,6 +117,7 @@ Changes in BitBake 1.8.10:
104 - Add support for branches in git fetcher (Otavio Salvador, Michael Lauer) 117 - Add support for branches in git fetcher (Otavio Salvador, Michael Lauer)
105 - Make taskdata and runqueue errors more user friendly 118 - Make taskdata and runqueue errors more user friendly
106 - Add norecurse and fullpath options to cvs fetcher 119 - Add norecurse and fullpath options to cvs fetcher
120 - bb.utils.prunedir can cope with symlinks to directories without exceptions
107 121
108Changes in Bitbake 1.8.8: 122Changes in Bitbake 1.8.8:
109 - Rewrite svn fetcher to make adding extra operations easier 123 - Rewrite svn fetcher to make adding extra operations easier
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py
index 1c87bfa12d..a4a4f47cef 100644
--- a/bitbake/lib/bb/cache.py
+++ b/bitbake/lib/bb/cache.py
@@ -95,7 +95,11 @@ class Cache:
95 bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...") 95 bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...")
96 self.depends_cache = {} 96 self.depends_cache = {}
97 else: 97 else:
98 bb.msg.note(1, bb.msg.domain.Cache, "Out of date cache found, rebuilding...") 98 try:
99 os.stat( self.cachefile )
100 bb.msg.note(1, bb.msg.domain.Cache, "Out of date cache found, rebuilding...")
101 except OSError:
102 pass
99 103
100 def getVar(self, var, fn, exp = 0): 104 def getVar(self, var, fn, exp = 0):
101 """ 105 """
diff --git a/bitbake/lib/bb/fetch/hg.py b/bitbake/lib/bb/fetch/hg.py
index 1cd5a8aa5c..b87fd0fbe5 100644
--- a/bitbake/lib/bb/fetch/hg.py
+++ b/bitbake/lib/bb/fetch/hg.py
@@ -79,7 +79,7 @@ class Hg(Fetch):
79 host = "/" 79 host = "/"
80 ud.host = "localhost" 80 ud.host = "localhost"
81 81
82 if ud.user == None: 82 if not ud.user:
83 hgroot = host + ud.path 83 hgroot = host + ud.path
84 else: 84 else:
85 hgroot = ud.user + "@" + host + ud.path 85 hgroot = ud.user + "@" + host + ud.path
diff --git a/bitbake/lib/bb/fetch/perforce.py b/bitbake/lib/bb/fetch/perforce.py
index b594d2bde2..2fb38b4190 100644
--- a/bitbake/lib/bb/fetch/perforce.py
+++ b/bitbake/lib/bb/fetch/perforce.py
@@ -67,14 +67,15 @@ class Perforce(Fetch):
67 doparse = staticmethod(doparse) 67 doparse = staticmethod(doparse)
68 68
69 def getcset(d, depot,host,user,pswd,parm): 69 def getcset(d, depot,host,user,pswd,parm):
70 p4opt = ""
70 if "cset" in parm: 71 if "cset" in parm:
71 return parm["cset"]; 72 return parm["cset"];
72 if user: 73 if user:
73 data.setVar('P4USER', user, d) 74 p4opt += " -u %s" % (user)
74 if pswd: 75 if pswd:
75 data.setVar('P4PASSWD', pswd, d) 76 p4opt += " -P %s" % (pswd)
76 if host: 77 if host:
77 data.setVar('P4PORT', host, d) 78 p4opt += " -p %s" % (host)
78 79
79 p4date = data.getVar("P4DATE", d, 1) 80 p4date = data.getVar("P4DATE", d, 1)
80 if "revision" in parm: 81 if "revision" in parm:
@@ -85,8 +86,8 @@ class Perforce(Fetch):
85 depot += "@%s" % (p4date) 86 depot += "@%s" % (p4date)
86 87
87 p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1) 88 p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1)
88 bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s changes -m 1 %s" % (p4cmd, depot)) 89 bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s%s changes -m 1 %s" % (p4cmd, p4opt, depot))
89 p4file = os.popen("%s changes -m 1 %s" % (p4cmd,depot)) 90 p4file = os.popen("%s%s changes -m 1 %s" % (p4cmd, p4opt, depot))
90 cset = p4file.readline().strip() 91 cset = p4file.readline().strip()
91 bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset)) 92 bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset))
92 if not cset: 93 if not cset:
@@ -146,14 +147,15 @@ class Perforce(Fetch):
146 data.update_data(localdata) 147 data.update_data(localdata)
147 148
148 # Get the p4 command 149 # Get the p4 command
150 p4opt = ""
149 if user: 151 if user:
150 data.setVar('P4USER', user, localdata) 152 p4opt += " -u %s" % (user)
151 153
152 if pswd: 154 if pswd:
153 data.setVar('P4PASSWD', pswd, localdata) 155 p4opt += " -P %s" % (pswd)
154 156
155 if host: 157 if host:
156 data.setVar('P4PORT', host, localdata) 158 p4opt += " -p %s" % (host)
157 159
158 p4cmd = data.getVar('FETCHCOMMAND', localdata, 1) 160 p4cmd = data.getVar('FETCHCOMMAND', localdata, 1)
159 161
@@ -175,8 +177,8 @@ class Perforce(Fetch):
175 177
176 os.chdir(tmpfile) 178 os.chdir(tmpfile)
177 bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc) 179 bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc)
178 bb.msg.note(1, bb.msg.domain.Fetcher, "%s files %s" % (p4cmd, depot)) 180 bb.msg.note(1, bb.msg.domain.Fetcher, "%s%s files %s" % (p4cmd, p4opt, depot))
179 p4file = os.popen("%s files %s" % (p4cmd, depot)) 181 p4file = os.popen("%s%s files %s" % (p4cmd, p4opt, depot))
180 182
181 if not p4file: 183 if not p4file:
182 bb.error("Fetch: unable to get the P4 files from %s" % (depot)) 184 bb.error("Fetch: unable to get the P4 files from %s" % (depot))
@@ -193,7 +195,7 @@ class Perforce(Fetch):
193 dest = list[0][len(path)+1:] 195 dest = list[0][len(path)+1:]
194 where = dest.find("#") 196 where = dest.find("#")
195 197
196 os.system("%s print -o %s/%s %s" % (p4cmd, module,dest[:where],list[0])) 198 os.system("%s%s print -o %s/%s %s" % (p4cmd, p4opt, module,dest[:where],list[0]))
197 count = count + 1 199 count = count + 1
198 200
199 if count == 0: 201 if count == 0:
diff --git a/bitbake/lib/bb/fetch/svn.py b/bitbake/lib/bb/fetch/svn.py
index 5e5b31b3ad..aead1629b3 100644
--- a/bitbake/lib/bb/fetch/svn.py
+++ b/bitbake/lib/bb/fetch/svn.py
@@ -114,13 +114,15 @@ class Svn(Fetch):
114 if command is "info": 114 if command is "info":
115 svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module) 115 svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module)
116 else: 116 else:
117 suffix = ""
117 if ud.revision: 118 if ud.revision:
118 options.append("-r %s" % ud.revision) 119 options.append("-r %s" % ud.revision)
120 suffix = "@%s" % (ud.revision)
119 elif ud.date: 121 elif ud.date:
120 options.append("-r {%s}" % ud.date) 122 options.append("-r {%s}" % ud.date)
121 123
122 if command is "fetch": 124 if command is "fetch":
123 svncmd = "%s co %s %s://%s/%s %s" % (basecmd, " ".join(options), proto, svnroot, ud.module, ud.module) 125 svncmd = "%s co %s %s://%s/%s%s %s" % (basecmd, " ".join(options), proto, svnroot, ud.module, suffix, ud.module)
124 elif command is "update": 126 elif command is "update":
125 svncmd = "%s update %s" % (basecmd, " ".join(options)) 127 svncmd = "%s update %s" % (basecmd, " ".join(options))
126 else: 128 else:
diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py
index 782dfb0b78..64ab032c3c 100644
--- a/bitbake/lib/bb/taskdata.py
+++ b/bitbake/lib/bb/taskdata.py
@@ -340,7 +340,10 @@ class TaskData:
340 self.add_provider_internal(cfgData, dataCache, item) 340 self.add_provider_internal(cfgData, dataCache, item)
341 except bb.providers.NoProvider: 341 except bb.providers.NoProvider:
342 if self.abort: 342 if self.abort:
343 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) 343 if self.get_rdependees_str(item):
344 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item)))
345 else:
346 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item))
344 raise 347 raise
345 targetid = self.getbuild_id(item) 348 targetid = self.getbuild_id(item)
346 self.remove_buildtarget(targetid) 349 self.remove_buildtarget(targetid)
@@ -358,7 +361,10 @@ class TaskData:
358 return 361 return
359 362
360 if not item in dataCache.providers: 363 if not item in dataCache.providers:
361 bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) 364 if self.get_rdependees_str(item):
365 bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item)))
366 else:
367 bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item))
362 bb.event.fire(bb.event.NoProvider(item, cfgData)) 368 bb.event.fire(bb.event.NoProvider(item, cfgData))
363 raise bb.providers.NoProvider(item) 369 raise bb.providers.NoProvider(item)
364 370
@@ -536,7 +542,10 @@ class TaskData:
536 except bb.providers.NoProvider: 542 except bb.providers.NoProvider:
537 targetid = self.getbuild_id(target) 543 targetid = self.getbuild_id(target)
538 if self.abort and targetid in self.external_targets: 544 if self.abort and targetid in self.external_targets:
539 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target))) 545 if self.get_rdependees_str(target):
546 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target)))
547 else:
548 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (target))
540 raise 549 raise
541 self.remove_buildtarget(targetid) 550 self.remove_buildtarget(targetid)
542 for target in self.get_unresolved_run_targets(dataCache): 551 for target in self.get_unresolved_run_targets(dataCache):
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py
index cc3d03f609..5015779f8d 100644
--- a/bitbake/lib/bb/utils.py
+++ b/bitbake/lib/bb/utils.py
@@ -323,7 +323,6 @@ def preserved_envvars_list():
323 'HOME', 323 'HOME',
324 'LANG', 324 'LANG',
325 'LOGNAME', 325 'LOGNAME',
326 'OEROOT',
327 'PATH', 326 'PATH',
328 'PWD', 327 'PWD',
329 'SESSION_MANAGER', 328 'SESSION_MANAGER',