summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Dechesne <nicolas.dechesne@linaro.org>2013-10-31 17:36:25 -0700
committerPaul Eggleton <paul.eggleton@linux.intel.com>2013-12-03 17:12:14 +0000
commit91e3735c2e73094b49f99b01008bb5bf47dacf04 (patch)
treeff4e17015f19b2b0c04eb93b1d2b016ae3143727
parentbbb4fa427739912ff3b87379bf629066f6662458 (diff)
downloadbitbake-91e3735c2e73094b49f99b01008bb5bf47dacf04.tar.gz
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 master rev: 17d8ef0b813a05c231e3dbe6e8bc82a4a9b1d2f8) Signed-off-by: Nicolas Dechesne <nicolas.dechesne@linaro.org> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/fetch2/svn.py14
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/bb/fetch2/svn.py b/lib/bb/fetch2/svn.py
index ea5902e05..30c4b91b8 100644
--- a/lib/bb/fetch2/svn.py
+++ b/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
@@ -89,6 +90,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:
@@ -165,14 +168,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