summaryrefslogtreecommitdiffstats
path: root/bin/repoman
diff options
context:
space:
mode:
authorArfrever Frehtes Taifersar Arahesis <Arfrever@Gentoo.Org>2010-10-23 18:38:02 +0200
committerZac Medico <zmedico@gentoo.org>2010-10-27 07:34:41 -0700
commit1a5a16c00aadc608a32944fd5c325da9b20d9643 (patch)
treec0077f3824668e6168b5a411a3cd1da97f7fcb50 /bin/repoman
parent49a3ada01a67589b61633e558e081db388d322d8 (diff)
downloadportage-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.
Diffstat (limited to 'bin/repoman')
-rwxr-xr-xbin/repoman40
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: