Den mån 27 nov. 2023 kl 12:18 skrev Daniel Sahlberg < daniel.l.sahlb...@gmail.com>:
> Moving a discussion from users@ to here. Original message below for > reference. > > TL;DR: According to documentation, svnmucc put - URL should add or modify > file URL reading the new contents from standard input. It doesn't, instead > it output an error message "svnmucc: invalid option:". > I acknowledge the workaround posted by Lorenz in a separate message. It has the downside that -- disables options/arguments parsing so anything that follows must be strictly actions (put, cp, mkdir etc) and action arguments (REV, SRC-FILE, URL etc.). > I've tried to dig into subversion/svnmucc/svnmucc.c to figure out what is > going wrong. The handling of "-" as stdin was added in r873014 (In the "put > SRC_FILE URL" action read from stdin when SRC_FILE is "-") in 2008. I can't > find anything significant having changed since it was added. > > I'm sending this off half-baked since I'm about to board a plane, in case > anyone else would like to have a look. > Some investigations and tests later I can't see if this has ever worked. As suggested by Graham Leggett in the thread at users@, this is because of code in apr_getopt_long: # misc/unix/getopt.c, row 274 [[[ if (*p == '\0') /* Bare "-" is illegal */ return serr(os, "invalid option", p, APR_BADCH); ]]] (Sorry for cutting out a lot of context but there is related to processing '-' characters, I think the comment was the only interested thing). This file has not been touched since apr_1.0.x (save some whitespace fixes). I have a collection of binaries, SlikSVN 1.5.5 doesn't contain the "- is stdin" option, it still fails: [[[ svnmucc: invalid option: svnmucc: getopt failure: Bad character specified on command line ]]] TortoiseSVN 1.8.12 has the option and fails with an actual error number (maybe Subversion 1.5 just didn't print the E number on the console?): [[[ svnmucc: invalid option: svnmucc: E070012: getopt failure: Bad character specified on command line ]]] TortoiseSVN 1.14.5 (based on Subversion 1.14.2) fails with a message directing the user to the --help page. [[[ svnmucc: invalid option: Type 'svnmucc --help' for usage. ]]] In all messages above, the first line is from apr/misc/unix/getopt.c and the second line from svnmucc.c As for a fix... I first tried switching of the "interleave option" (opts->interleave = 1; on row 547) but that has about the same effect as using -- on the command line and it breaks for example the test suite and would break any scripts having commands (for example -m "logmessage") after any arguments. I looked into apr/misc/unix/getopt.c to see if there was any way of making "-" a legal argument but I couldn't find anything. Thus I'm suggesting making the help text a little bit more clear: [[[ Index: subversion/svnmucc/svnmucc.c =================================================================== --- subversion/svnmucc/svnmucc.c (revision 1914148) +++ subversion/svnmucc/svnmucc.c (working copy) @@ -286,7 +286,9 @@ " mv SRC-URL DST-URL : move SRC-URL to DST-URL\n" " rm URL : delete URL\n" " put SRC-FILE URL : add or modify file URL with contents copied from\n" - " SRC-FILE (use \"-\" to read from standard input)\n" + " SRC-FILE (use \"-\" to read from standard input,\n" + " but only if preceeded by -- and in which case no\n" + " options can follow. \"-\" only makes sense once)\n" " propset NAME VALUE URL : set property NAME on URL to VALUE\n" " propsetf NAME FILE URL : set property NAME on URL to value read from FILE\n" " propdel NAME URL : delete property NAME from URL\n" ]]] The "\"-\" only makes sense once" is because stdin can't be rewinded and thus can't be put into more than once file. If several put actions (with - as SRC-FILE) are used, the second file will be empty. Does this make sense (in particular to our native english speakers)? In the mail to users@, Graham suggested a better error message indicating which option was invalid. I will make a separate suggestion and send this to the APR project. Kind regards, Daniel Den mån 27 nov. 2023 kl 07:47 skrev Daniel Sahlberg < > daniel.l.sahlb...@gmail.com>: > >> Den sön 26 nov. 2023 kl 22:51 skrev Graham Leggett via users < >> us...@subversion.apache.org>: >> >>> On 25 Nov 2023, at 13:40, Pavel Lyalyakin <pavel.lyalya...@visualsvn.com> >>> wrote: >>> >>> `svnmucc put` perhaps? >>> https://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html >>> >>> >>> From reading the manual it looks perfect, but I’m having no luck: >>> >>> [root@seawitch postgres]# cat db.sql | svnmucc put - >>> file:///var/lib/svn/db/db.sql >>> >>> svnmucc: invalid option: >>> >>> Type 'svnmucc --help' for usage. >>> >>> Alas the error message mentions an invalid option, but doesn’t say which >>> option, or why it is invalid. >>> >> >> The documentation say: >> [[[ >> put SRC-FILE URL : add or modify file URL with contents copied >> from >> SRC-FILE (use "-" to read from standard input) >> ]]] >> >> So as far as I'm reading the documentation, the command you are using >> should be supported. I would say this is a bug, either in the argument >> handling or in the documentation. >> >> Can you instead try: >> $ svnmucc put db.sql file:///var/lib/svn/db/db.sql >> >> I will bring this discussion to the dev@subversion.apache.org to figure >> out if we need to change the documentation or if we can fix the code. >> >> Kind regards, >> Daniel >> >