sebb wrote on Tue, 07 Jul 2020 20:43 +0100:
> When I first started using svnmucc, it used to be the case that
> svnmucc 'put' --revision 0 would fail if the target file already
> existed. This no longer happens.
> 
Is the file-to-be's parent directory the root directory?  If that isn't
the case, then the new behaviour is correct.

You might wish to post the error message.

> The previous behaviour was very useful, so are there any plans to reinstate 
> it?
> 

Patches welcome.  (You'll have to propose a new syntax, of course.)

> I don't think there is a straightforward way to guarantee the same
> behaviour now.
> 

Try:

svn checkout --depth=empty $URL wc
cd wc
svn up --set-depth=infinite iota
touch iota
svn add iota
svn commit -mm
svn up --set-depth=empty iota
svn cleanup                        # prune .svn/pristine

> The closest I could get is:
> 
> 1) get current parent directory revision
> 2) check if target file does not exist. This is not as easy as it
> sounds, as the target directory may have too many files to list
> efficiently, and any other file-based command may fail for a reason
> other than a missing file.

How is «svn info $URL/to/file@$REV» not sufficient?  You can use
$URL/to{,/file}@$REV if you want, too.

> 3) Put the file using the revision obtained in step 1.
> AFAICT this is guaranteed not to replace an existing file.
> 
> However it may fail to create the file if the target directory has
> been updated in the meantime.
> 
> It's only safe to repeat the attempted create if the command failed
> due to an out of date revision.
> So the failure reason will have to be analysed.

What part of the above is a problem, and why?

Reply via email to