mynew=portage.cvstree.findnew(mycvstree,recursive=1,basedir="./")
myremoved=portage.cvstree.findremoved(mycvstree,recursive=1,basedir="./")
bin_blob_pattern = re.compile("^-kb$")
- bin_blobs = set(portage.cvstree.findoption(mycvstree, bin_blob_pattern,
+ expansion = set(portage.cvstree.findoption(mycvstree, bin_blob_pattern,
recursive=1, basedir="./"))
if vcs == "svn":
svnstatus = os.popen("svn status").readlines()
mychanged = [ elem.rstrip()[7:] for elem in svnstatus if elem.startswith("M") ]
- for manifest in [ file for file in mychanged if '/Manifest' in file ]:
- mychanged.remove(manifest)
- mynew = [ elem.rstrip()[7:] for elem in svnstatus if elem.startswith("A") ]
+ mynew = [ elem.rstrip()[7:] for elem in svnstatus if elem.startswith("A") ]
myremoved = [ elem.rstrip()[7:] for elem in svnstatus if elem.startswith("D") ]
- # no idea how to detect binaries in SVN
- bin_blobs = []
+ # in contrast to CVS, SVN expands nothing by default, but of
+ # course proplist's output is horrible. 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"...
+ props = os.popen("svn proplist -R").readlines()
+ expansion = [ prop[15:-2] for prop in props if prop.startswith("Properties on '") ]
if vcs:
if not (mychanged or mynew or myremoved):
headerstring = "'\$(Header|Id)"
headerstring += ".*\$'"
for myfile in myupdates:
- if myfile in bin_blobs:
+ # for CVS, expansion contains files that are excluded from expansion
+ if vcs == "cvs" and myfile in expansion:
+ continue
+ # for SVN, expansion contains files that are included in expansion
+ if vcs == "svn" and myfile not in expansion:
continue
myout = commands.getstatusoutput("egrep -q "+headerstring+" "+myfile)
if myout[0] == 0:
if myupdates or myremoved:
myfiles = myupdates + myremoved
+ if not myheaders and "sign" not in repoman_settings.features:
+ myfiles += mymanifests
fd, commitmessagefile = tempfile.mkstemp(".repoman.msg")
mymsg = os.fdopen(fd, "w")
mymsg.write(commitmessage)
write_atomic(x, "".join(mylines))
manifest_commit_required = True
- if myheaders or myupdates or myremoved or mynew:
- myfiles=myheaders+myupdates+myremoved+mynew
+ if myupdates or myremoved or mynew:
+ myfiles=myupdates+myremoved+mynew
for x in range(len(myfiles)-1, -1, -1):
if myfiles[x].count("/") < 4-repolevel:
del myfiles[x]