4798: "There was an error displaying this diff." for any SVN file that no longer exists at its former location

a-dogg

What version are you running?

3.0.5

What's the URL of the page containing the problem?

https://rb.corp.linkedin.com/r/1197363/diff/3/

What steps will reproduce the problem?

  1. Create a review-request for an SVN repository
  2. Move or delete one or more of the files that were in the diff, in the SVN repository

What is the expected output? What do you see instead?

Expect to see a diff rendered.
Instead:

   There was an error displaying this diff.

  The file '("'....", ...)' could not be found in the repository

   This may be a bug in the software, a temporary outage, or an issue
   with the format of your diff.

   Please try again, and if you still have trouble,
   contact support.

What operating system are you using? What browser?

N/A

Please provide any additional information below.

The folder exists at the revision specified in the diff, as seen in $ svn ls -r${REVISION} output.

Also svn cat ${PATH}@${REVISION} outputs the file contents.

chipx86
#1 chipx86

How's the diff being generated? Is this svn diff, RBTools, or an in-house product?

  • -New
    +NeedInfo
a-dogg
#2 a-dogg

We use an in-house product which runs RBTools "under the hood".

It looks like SVN recognizes the base revision - see attached screenshot.

a-dogg
#3 a-dogg

So just to reiterate, the problem appears to be, RB is not fetching the left-hand-side file contents correctly.

RB should be able to fetch the left-hand-side file contents correctly. The files were deleted in SVN and don't exist at HEAD revision, but they do exist at the revision specified in the patch file.

E.g.:

$ svn cat $NETREPO/espresso/trunk/product-spec.json
svn: warning: W160013: File not found: revision 1887978, path '/espresso/trunk/product-spec.json'
svn: E200009: Could not cat all targets because some targets don't exist
svn: E200009: Illegal target for the requested operation

# If I download the diff from the RB, the 1st line for each file-entry reads like:
#    "--- espresso/trunk/product-spec.json  (revision 1695130)"
# ... which tells me the left-hand-side file contents should be fetched from revision 1695130
$ svn cat $NETREPO/espresso/trunk/product-spec.json@1695130 | tail -5
    "databases": {},
    "repo_name": "DDS"
  },
  "description": "Elastic, Scalable, Performant, Reliable, Extensible, Stable, Speedy, and Operational"
}

As you can see, it is possible to fetch the correct left-hand-side file contents, given the correct revision, but for whatever reason reviewboard doesn't seem to be doing that - it is failing out due to the fact that the files no longer exist at the specified location.