diff options
author | Nicolas Dechesne <nicolas.dechesne@linaro.org> | 2013-10-31 17:36:25 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-11-01 17:59:30 +0000 |
commit | de7e6efb80e3155e74f65fbb4f1e9058ca71d1f9 (patch) | |
tree | e533ec04a60b626b653e40610ea7c259a250d919 | |
parent | ba84fbe8319b11bdc207e0d43fa303f7bf01416f (diff) | |
download | ast2050-yocto-poky-de7e6efb80e3155e74f65fbb4f1e9058ca71d1f9.zip ast2050-yocto-poky-de7e6efb80e3155e74f65fbb4f1e9058ca71d1f9.tar.gz |
bitbake: fetch2/svn.py: use log instead of info to retrieve revision
We have faced a corner case situation where the 'last changed
revision' returned from svn info is wrong. It happens when the last
revision is a directory move. e.g. if we assume that the svn
repository at revA has root/x/y/z/foo/bar and it is moved to
root/a/b/c/foo/bar in revB, then svn info 'last change revision' will
return revA. As such when using AUTOREV, we are going to attempt to
retrieve root/a/b/c/foo/bar (as per SRC_URI) but at revA when it did
not exist.
So this patch changes how we retrieve the latest revision and uses
'svn log --limit 1' which gives correct result in all tested cases.
(Bitbake rev: 17d8ef0b813a05c231e3dbe6e8bc82a4a9b1d2f8)
Signed-off-by: Nicolas Dechesne <nicolas.dechesne@linaro.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/bb/fetch2/svn.py | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/bitbake/lib/bb/fetch2/svn.py b/bitbake/lib/bb/fetch2/svn.py index 9a779d2..123aa13 100644 --- a/bitbake/lib/bb/fetch2/svn.py +++ b/bitbake/lib/bb/fetch2/svn.py @@ -27,6 +27,7 @@ import os import sys import logging import bb +import re from bb import data from bb.fetch2 import FetchMethod from bb.fetch2 import FetchError @@ -91,6 +92,8 @@ class Svn(FetchMethod): if command == "info": svncmd = "%s info %s %s://%s/%s/" % (ud.basecmd, " ".join(options), proto, svnroot, ud.module) + elif command == "log1": + svncmd = "%s log --limit 1 %s %s://%s/%s/" % (ud.basecmd, " ".join(options), proto, svnroot, ud.module) else: suffix = "" if ud.revision: @@ -167,14 +170,13 @@ class Svn(FetchMethod): """ Return the latest upstream revision number """ - bb.fetch2.check_network_access(d, self._buildsvncommand(ud, d, "info")) + bb.fetch2.check_network_access(d, self._buildsvncommand(ud, d, "log1")) - output = runfetchcmd("LANG=C LC_ALL=C " + self._buildsvncommand(ud, d, "info"), d, True) + output = runfetchcmd("LANG=C LC_ALL=C " + self._buildsvncommand(ud, d, "log1"), d, True) - revision = None - for line in output.splitlines(): - if "Last Changed Rev" in line: - revision = line.split(":")[1].strip() + # skip the first line, as per output of svn log + # then we expect the revision on the 2nd line + revision = re.search('^r([0-9]*)', output.splitlines()[1]).group(1) return revision |