|  | METADATA_BRANCH ?= "${@base_detect_branch(d)}" | 
|  | METADATA_REVISION ?= "${@base_detect_revision(d)}" | 
|  |  | 
|  | def base_detect_revision(d): | 
|  | path = base_get_scmbasepath(d) | 
|  |  | 
|  | scms = [base_get_metadata_git_revision, \ | 
|  | base_get_metadata_svn_revision] | 
|  |  | 
|  | for scm in scms: | 
|  | rev = scm(path, d) | 
|  | if rev != "<unknown>": | 
|  | return rev | 
|  |  | 
|  | return "<unknown>" | 
|  |  | 
|  | def base_detect_branch(d): | 
|  | path = base_get_scmbasepath(d) | 
|  |  | 
|  | scms = [base_get_metadata_git_branch] | 
|  |  | 
|  | for scm in scms: | 
|  | rev = scm(path, d) | 
|  | if rev != "<unknown>": | 
|  | return rev.strip() | 
|  |  | 
|  | return "<unknown>" | 
|  |  | 
|  | def base_get_scmbasepath(d): | 
|  | return d.getVar( 'COREBASE', True) | 
|  |  | 
|  | def base_get_metadata_monotone_branch(path, d): | 
|  | monotone_branch = "<unknown>" | 
|  | try: | 
|  | with open("%s/_MTN/options" % path) as f: | 
|  | monotone_branch = f.read().strip() | 
|  | if monotone_branch.startswith( "database" ): | 
|  | monotone_branch_words = monotone_branch.split() | 
|  | monotone_branch = monotone_branch_words[ monotone_branch_words.index( "branch" )+1][1:-1] | 
|  | except: | 
|  | pass | 
|  | return monotone_branch | 
|  |  | 
|  | def base_get_metadata_monotone_revision(path, d): | 
|  | monotone_revision = "<unknown>" | 
|  | try: | 
|  | with open("%s/_MTN/revision" % path) as f: | 
|  | monotone_revision = f.read().strip() | 
|  | if monotone_revision.startswith( "format_version" ): | 
|  | monotone_revision_words = monotone_revision.split() | 
|  | monotone_revision = monotone_revision_words[ monotone_revision_words.index( "old_revision" )+1][1:-1] | 
|  | except IOError: | 
|  | 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 = "<unknown>" | 
|  | try: | 
|  | with open("%s/.svn/entries" % path) as f: | 
|  | revision = f.readlines()[3].strip() | 
|  | except (IOError, IndexError): | 
|  | pass | 
|  | return revision | 
|  |  | 
|  | def base_get_metadata_git_branch(path, d): | 
|  | import bb.process | 
|  |  | 
|  | try: | 
|  | rev, _ = bb.process.run('git rev-parse --abbrev-ref HEAD', cwd=path) | 
|  | except bb.process.ExecutionError: | 
|  | rev = '<unknown>' | 
|  | return rev.strip() | 
|  |  | 
|  | def base_get_metadata_git_revision(path, d): | 
|  | import bb.process | 
|  |  | 
|  | try: | 
|  | rev, _ = bb.process.run('git rev-parse HEAD', cwd=path) | 
|  | except bb.process.ExecutionError: | 
|  | rev = '<unknown>' | 
|  | return rev.strip() |