diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass index c3c2669..5416728 100644 --- a/meta/classes/base.bbclass +++ b/meta/classes/base.bbclass @@ -166,8 +166,8 @@ def pkgarch_mapping(d): def get_layers_branch_rev(d): layers = (d.getVar("BBLAYERS", True) or "").split() layers_branch_rev = ["%-17s = \"%s:%s\"" % (os.path.basename(i), \ - base_get_metadata_git_branch(i, None).strip(), \ - base_get_metadata_git_revision(i, None)) \ + base_get_metadata_branch(i, None), \ + base_get_metadata_revision(i, None)) \ for i in layers] i = len(layers_branch_rev)-1 p1 = layers_branch_rev[i].find("=") diff --git a/meta/classes/metadata_scm.bbclass b/meta/classes/metadata_scm.bbclass index 2e6fac2..32fadcf 100644 --- a/meta/classes/metadata_scm.bbclass +++ b/meta/classes/metadata_scm.bbclass @@ -16,7 +16,8 @@ def base_detect_revision(d): def base_detect_branch(d): path = base_get_scmbasepath(d) - scms = [base_get_metadata_git_branch] + scms = [base_get_metadata_git_branch, \ + base_get_metadata_svn_branch] for scm in scms: rev = scm(path, d) @@ -28,6 +29,30 @@ def base_detect_branch(d): def base_get_scmbasepath(d): return os.path.join(d.getVar('COREBASE', True), 'meta') +def base_get_metadata_branch(path, d): + + scms = [base_get_metadata_git_branch, \ + base_get_metadata_svn_branch] + + for scm in scms: + rev = scm(path, d) + if rev != "": + return rev.strip() + + return "" + +def base_get_metadata_revision(path, d): + + scms = [base_get_metadata_git_revision, \ + base_get_metadata_svn_revision] + + for scm in scms: + rev = scm(path, d) + if rev != "": + return rev + + return "" + def base_get_metadata_monotone_branch(path, d): monotone_branch = "" try: @@ -52,16 +77,39 @@ def base_get_metadata_monotone_revision(path, d): pass return monotone_revision -def base_get_metadata_svn_revision(path, d): - # This only works with older subversion. For newer versions - # this function will need to be fixed by someone interested - revision = "" +def base_get_metadata_svn_branch(path, d): + line = os.popen('cd %s; svn info 2>&1 | grep "^URL:" | tr -d "\n" | tr -s "/"' % path).read() + + if not line: + return "" + words = line.split("/") + + try: + if words.index("trunk") >= 0: + return 'trunk' + except: + pass + try: - with open("%s/.svn/entries" % path) as f: - revision = f.readlines()[3].strip() - except (IOError, IndexError): + if words.index("branches") >= 0: + return words[words.index("branches")+1] + except: pass - return revision + + try: + if words.index("tags") >= 0: + return words[words.index("tags")+1] + except: + pass + return "" + +def base_get_metadata_svn_revision(path, d): + cmd="cd "+path+"; svn info|awk '/^Revision:/{r1=$2};/^Last Changed Rev:/{r2=$4};END{printf \"%s-%s\",r1,r2;}'" + revision = os.popen(cmd).read() + if revision: + return revision + return "" + def base_get_metadata_git_branch(path, d): import bb.process