diff options
| author | Nicolas Dechesne <nicolas.dechesne@linaro.org> | 2013-10-31 17:36:25 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-12-03 17:51:35 +0000 |
| commit | 30548aae0a68c828fa902f5c5c55c1a0ccf51905 (patch) | |
| tree | 0e81c98381b8b63993d99b08443afedf9593ee33 /bitbake/lib/bb/fetch2 | |
| parent | 4e399f08d596197859214fdb3b06403b87bf8789 (diff) | |
| download | poky-30548aae0a68c828fa902f5c5c55c1a0ccf51905.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 master rev: 17d8ef0b813a05c231e3dbe6e8bc82a4a9b1d2f8)
(Bitbake rev: 91e3735c2e73094b49f99b01008bb5bf47dacf04)
Signed-off-by: Nicolas Dechesne <nicolas.dechesne@linaro.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/fetch2')
| -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 ea5902e05b..30c4b91b88 100644 --- a/bitbake/lib/bb/fetch2/svn.py +++ b/bitbake/lib/bb/fetch2/svn.py | |||
| @@ -27,6 +27,7 @@ import os | |||
| 27 | import sys | 27 | import sys |
| 28 | import logging | 28 | import logging |
| 29 | import bb | 29 | import bb |
| 30 | import re | ||
| 30 | from bb import data | 31 | from bb import data |
| 31 | from bb.fetch2 import FetchMethod | 32 | from bb.fetch2 import FetchMethod |
| 32 | from bb.fetch2 import FetchError | 33 | from bb.fetch2 import FetchError |
| @@ -89,6 +90,8 @@ class Svn(FetchMethod): | |||
| 89 | 90 | ||
| 90 | if command == "info": | 91 | if command == "info": |
| 91 | svncmd = "%s info %s %s://%s/%s/" % (ud.basecmd, " ".join(options), proto, svnroot, ud.module) | 92 | svncmd = "%s info %s %s://%s/%s/" % (ud.basecmd, " ".join(options), proto, svnroot, ud.module) |
| 93 | elif command == "log1": | ||
| 94 | svncmd = "%s log --limit 1 %s %s://%s/%s/" % (ud.basecmd, " ".join(options), proto, svnroot, ud.module) | ||
| 92 | else: | 95 | else: |
| 93 | suffix = "" | 96 | suffix = "" |
| 94 | if ud.revision: | 97 | if ud.revision: |
| @@ -165,14 +168,13 @@ class Svn(FetchMethod): | |||
| 165 | """ | 168 | """ |
| 166 | Return the latest upstream revision number | 169 | Return the latest upstream revision number |
| 167 | """ | 170 | """ |
| 168 | bb.fetch2.check_network_access(d, self._buildsvncommand(ud, d, "info")) | 171 | bb.fetch2.check_network_access(d, self._buildsvncommand(ud, d, "log1")) |
| 169 | 172 | ||
| 170 | output = runfetchcmd("LANG=C LC_ALL=C " + self._buildsvncommand(ud, d, "info"), d, True) | 173 | output = runfetchcmd("LANG=C LC_ALL=C " + self._buildsvncommand(ud, d, "log1"), d, True) |
| 171 | 174 | ||
| 172 | revision = None | 175 | # skip the first line, as per output of svn log |
| 173 | for line in output.splitlines(): | 176 | # then we expect the revision on the 2nd line |
| 174 | if "Last Changed Rev" in line: | 177 | revision = re.search('^r([0-9]*)', output.splitlines()[1]).group(1) |
| 175 | revision = line.split(":")[1].strip() | ||
| 176 | 178 | ||
| 177 | return revision | 179 | return revision |
| 178 | 180 | ||
