diff options
author | Arfrever Frehtes Taifersar Arahesis <Arfrever@Gentoo.Org> | 2010-10-23 18:38:02 +0200 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2010-10-27 07:34:41 -0700 |
commit | 1a5a16c00aadc608a32944fd5c325da9b20d9643 (patch) | |
tree | c0077f3824668e6168b5a411a3cd1da97f7fcb50 | |
parent | 49a3ada01a67589b61633e558e081db388d322d8 (diff) | |
download | portage-1a5a16c00aadc608a32944fd5c325da9b20d9643.tar.gz portage-1a5a16c00aadc608a32944fd5c325da9b20d9643.tar.bz2 portage-1a5a16c00aadc608a32944fd5c325da9b20d9643.zip |
Bug #340475: Make repoman check if SVN keywords are enabled in svn:keywords.
Add support for remaining keywords supported by SVN.
-rwxr-xr-x | bin/repoman | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/bin/repoman b/bin/repoman index 0cdc0db8b..bdf6444ed 100755 --- a/bin/repoman +++ b/bin/repoman @@ -2151,19 +2151,10 @@ else: mychanged = [ "./" + elem.split()[-1:][0] for elem in svnstatus if elem and (elem[0] in "MR" or elem[1] in "M")] mynew = [ "./" + elem.split()[-1:][0] for elem in svnstatus if elem.startswith("A")] myremoved = [ "./" + elem.split()[-1:][0] for elem in svnstatus if elem.startswith("D")] - # in contrast to CVS, SVN expands nothing by default. - # bin_blobs historically - # were just there to see what files need to be checked for - # keyword expansion, which is exactly what we do here, so - # slightly change the semantic meaning of "bin_blob"... In the - # future we could store which keyword is expanded. - props = os.popen("svn propget -R svn:keywords").readlines() - # For files with multiple props set, props are delimited by newlines, - # so exclude lines that don't contain " - " since each of those lines - # only a contain props for a file listed on a previous line. - expansion = set("./" + prop.split(" - ")[0] \ - for prop in props if " - " in prop) + # Subversion expands keywords specified in svn:keywords properties. + props = os.popen("svn propget -R svn:keywords").readlines() + expansion = dict(("./" + prop.split(" - ")[0], prop.split(" - ")[1].split()) for prop in props) elif vcs == "git": mychanged = os.popen("git diff-index --name-only --relative --diff-filter=M HEAD").readlines() @@ -2223,10 +2214,19 @@ else: print() else: if vcs == 'cvs': - headerstring = "'\$(Header|Id)" - elif vcs == 'svn': - headerstring = "'\$Id" - headerstring += ".*\$'" + headerstring = "'\$(Header|Id).*\$'" + elif vcs == "svn": + svn_keywords = ["Rev", + "Revision", + "LastChangedRevision", + "Date", + "LastChangedDate", + "Author", + "LastChangedBy", + "URL", + "HeadURL", + "Id", + "Header"] for myfile in myupdates: @@ -2239,6 +2239,14 @@ else: elif vcs == "svn": if myfile not in expansion: continue + + # Subversion keywords are case-insensitive in svn:keywords properties, but case-sensitive in contents of files. + enabled_keywords = [] + for keyword in svn_keywords: + if keyword.lower() in (k.lower() for k in expansion[myfile]): + enabled_keywords.append(keyword) + + headerstring = "'\$(%s).*\$'" % "|".join(enabled_keywords) myout = subprocess_getstatusoutput("egrep -q "+headerstring+" "+myfile) if myout[0] == 0: |