Mark Phippard wrote on Sat, Apr 05, 2014 at 10:58:59 -0400:
> On Sat, Apr 5, 2014 at 7:12 AM, Daniel Shahaf <[email protected]>wrote:
> 
> > Mark Phippard wrote on Fri, Apr 04, 2014 at 13:30:48 -0400:
> > > So I realize I can use that option to force the file to load, but that is
> > > just punting the problem to the future.  Has anyone ever written any
> > > scripts that can run through an entire repository and fix these sort of
> > > problems?  In this case, maybe a script that goes through a repos and
> > > retrieves and then sets each revprop using the current command line?
> >
> > That's easy enough:
> >
> > [[[
> > #!/usr/bin/env zsh
> > #
> > # Renormalize svn:* revprops in repository $1 (local path).
> > #
> > set -e
> > [ $# -eq 1 ] && [ -d "$1" ] || { echo "Usage: $0 REPOS" >&2; exit 1 }
> > REPOS=$1
> > ABS_REPOS=`cd -- "$REPOS" && pwd`
> > for revnum in {0..`svnlook youngest -- "$REPOS"`};
> >   for prop in $(svnlook proplist -r$revnum --revprop -- "$REPOS" | cut
> > -c3- | grep '^svn:');
> >     svnadmin setrevprop -r$revnum -- "$REPOS" "$prop" =(svn propget
> > --strict --revprop -r$revnum -- "$prop" "file://$ABS_REPOS")
> > ]]]
> >
> 
> Thanks.  I first ran svnsync and that worked and it said that it fixed 3
> revision properties.
> 
> I then went back and ran your script on the source repository.  This is
> what it output:
> 
> svnlook: E135000: Inconsistent line ending style
> svnlook: E135000: Inconsistent line ending style
> svnlook: E135000: Inconsistent line ending style
> 
> Do you think that means the script would have fixed those three properties,
> or did svnlook fail to list them because of the line endings?

Probably the latter.  You could work around it by changing '$(svnlook
proplist ...)' to 'svn:log' and 'svn propget' to 'svnlook propget'
(which will create empty log messages on revisions that have no svn:log
property).  It works for me on "foo\r\nbar\n"; if it fails on your data,
using the FS API directly (svn_fs_revision_proplist() and
svn_fs_revision_prop()) will definitely work, because the validation is
done in libsvn_repos.

Separately, I'm thinking we should call that a bug in svnlook.  I mean,
yes, some property *values* break a semantic repos-layer invariant, but
it would still be nice to allow 'svnlook proplist' to succeed, and not
prevent querying of innocent bystander properties' names...

Daniel

Reply via email to