[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

RE: Incomplete xml output when using --xml to non-existent server

From: Bert Huijben <bert_at_qqmail.nl>
Date: Thu, 3 Mar 2016 09:53:39 +0100

> -----Original Message-----
> From: Johan Corveleyn [mailto:jcorvel_at_gmail.com]
> Sent: donderdag 3 maart 2016 09:19
> To: Bert Huijben <bert_at_qqmail.nl>
> Cc: Branko Čibej <brane_at_apache.org>; Subversion Development
> <dev_at_subversion.apache.org>
> Subject: Re: Incomplete xml output when using --xml to non-existent server
>
> On Wed, Mar 2, 2016 at 8:14 PM, Bert Huijben <bert_at_qqmail.nl> wrote:
> >
> >
> >> -----Original Message-----
> >> From: Branko Čibej [mailto:brane_at_apache.org]
> >> Sent: woensdag 2 maart 2016 19:08
> >> To: dev_at_subversion.apache.org
> >> Subject: Re: Incomplete xml output when using --xml to non-existent
> server
> >>
> >> On 02.03.2016 15:05, Johan Corveleyn wrote:
> >> > Hi all,
> >> >
> >> > A colleague of mine ran into this, and I'm wondering if it's expected
> >> > behavior or a bug:
> >> >
> >> > For certain commands with the --xml option, the xml output is
> >> > incomplete when sending the request to a non-existent server. This can
> >> > cause an issue for tools that try to parse the output into some data
> >> > structure, and expect correct XML (even though the command has
> exited
> >> > with an error).
> >> >
> >> > For instance, 'svn info' and 'svn ls' behave thusly (maybe other
> >> > commands as well):
> >> >
> >> > [[[
> >> > C:\>svn info --xml https://nonexistent/svn
> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> > <info>
> >> > svn: E170013: Unable to connect to a repository at URL
> >> 'https://nonexistent/svn'
> >> > svn: E731001: No such host is known.
> >> >
> >> > C:\>svn ls --xml https://nonexistent/svn
> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> > <lists>
> >> > <list
> >> > path="https://nonexistent/svn">
> >> > svn: E170013: Unable to connect to a repository at URL
> >> 'https://nonexistent/svn'
> >> > svn: E731001: No such host is known.
> >> > ]]]
> >> >
> >> > (The 'svn: Exxx' warnings are printed to stderr, while the incomplete
> >> > xml output is printed to stdout)
> >>
> >> This is clearly a bug; stdout should be either empty, or valid XML.
> >>
> >> In this case I suspect that we're printing the generic XML header too soon.
> >
> > We produce the output streamingly... would you suggest that we now
> buffer all output before producing the first result? (Potentially many
> hundreds of MB on recursive operations, so that would have to be a disk
> backed buffer when the amount of data gets huge)
> >
> > I think I asked the same question somewhere before 1.5, and the answer
> then was +- as I answered now... This is not really fixable in a backwards
> compatible way as there is no way to express errors in the schema. (How do
> we express an error to access a file somewhere deep inside a tree? That
> would make the entire tree invalid as expressed in todays schema)
> >
>
> Bert,
>
> Note that a failure to access a file / directory does *not* give this
> problem. This incomplete xml only happens when there is a problem
> accessing the *server* ("nonexistent" in my example).

Did you really try all error conditions of 'svn status --xml' without '-u' ? :)

There are hundreds of cases (if not far more) where common svn operations can fail during an operation. Each will break the xml output.

I don't think it is valuable to fix just a few specific cases if we can’t promise that it works in general.

'svn ls' is a 100% server side operation, so usually errors reported by this will be related to auth and/or network problems, but svn info, svn status, svn diff, etc. that also have --xml all have the same problem.

        Bert
Received on 2016-03-03 09:53:59 CET

This is an archived mail posted to the Subversion Dev mailing list.