4794: rbtools --change-only fails if a diff cannot be generated


What version are you running?


What steps will reproduce the problem?

  1. Make a change to a binary file
  2. Attempt to post a review of the change with the flag --change-only

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

I expect the review to be posted without a diff. Instead, an error is reported: There don't seem to be any diffs!

What operating system are you using?

Windows 7

Attach the debug out from the command.

$ rbt.cmd post -d --change-only --open 94816
>>> RBTools 1.0.1
>>> Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:22:17) [MSC v.1500 32 bit (Intel)]
>>> Running on Windows-7-6.1.7601-SP1
>>> Home = C:\msys64\home\mslegeir
>>> Command line: rbt post -d --change-only --open 94816
>>> Running: tf vc help
>>> Checking for a Subversion repository...
>>> Running: svn --non-interactive info
>>> Command exited with rc 1: [u'svn', u'--non-interactive', u'info']
>>> Checking for a Git repository...
>>> Running: git rev-parse --git-dir
>>> Command exited with rc 128: [u'git', u'rev-parse', u'--git-dir']
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
>>> Checking for a Mercurial repository...
>>> Unable to execute "hg --help": skipping Mercurial
>>> Checking for a CVS repository...
>>> Unable to execute "cvs": skipping CVS
>>> Checking for a Perforce repository...
>>> Running: p4 -c --- -p --- info
>>> Running: diff --version
>>> Repository info: Path: [---], Base path: None, Supports changesets:
>>> Checking for a Plastic repository...
>>> Unable to execute "cm version": skipping Plastic
>>> Checking for a ClearCase repository...
>>> Unable to execute "cleartool help": skipping ClearCase
>>> Checking for a Bazaar repository...
>>> Unable to execute "bzr help": skipping Bazaar
>>> Checking for a Team Foundation Server repository...
>>> Unable to execute "tf help": skipping TFS
>>> Making HTTP GET request to http://ca-rb01/reviewboard/api/
>>> Running: p4 -c --- -p --- info
Generating diff for pending changeset 94816
>>> Processing edit of //---/Content/Developers/mslegeir/Collections/BP_DebugSplinePathCrumb.uasset
>>> Writing "//---/Content/Developers/mslegeir/Collections/BP_DebugSplinePathCrumb.uasset#1" to "c:\users\mslegeir\appdata\local\temp\tmpdyom4a"
>>> Running: p4 -c --- -p --- print -o c:\users\mslegeir\appdata\local\temp\tmpdyom4a -q //---/Content/Developers/mslegeir/Collections/BP_DebugSplinePathCrumb.uasset#1
>>> Running: diff -urNp c:\users\mslegeir\appdata\local\temp\tmpdyom4a P:\---\Content\Developers\mslegeir\Collections\BP_DebugSplinePathCrumb.uasset
>>> Command exited with rc 2: [u'diff', u'-urNp', 'c:\\users\\mslegeir\\appdata\\local\\temp\\tmpdyom4a', 'P:\\---\\Content\\Developers\\mslegeir\\Collections\\BP_DebugSplinePathCrumb.uasset']
>>> Generated diff size: 0 bytes
Traceback (most recent call last):
  File "C:\Program Files (x86)\RBTools\bin\..\Python27\Scripts\rbt-script.py", line 11, in <module>
    load_entry_point('RBTools==1.0.1', 'console_scripts', 'rbt')()
  File "C:\Program Files (x86)\RBTools\Python27\lib\site-packages\rbtools-1.0.1-py2.7.egg\rbtools\commands\main.py", line 120, in main
    command.run_from_argv([RB_MAIN, command_name] + args)
  File "C:\Program Files (x86)\RBTools\Python27\lib\site-packages\rbtools-1.0.1-py2.7.egg\rbtools\commands\__init__.py", line 719,
in run_from_argv
    exit_code = self.main(*args) or 0
  File "C:\Program Files (x86)\RBTools\Python27\lib\site-packages\rbtools-1.0.1-py2.7.egg\rbtools\commands\post.py", line 831, in main
    raise CommandError("There don't seem to be any diffs!")
rbtools.commands.CommandError: There don't seem to be any diffs!

Please provide any additional information below.

I'm investigating ways to review binary assets by following rbt post --change-only with rbt post --diff-filename with a diff file generated by transforming the binary to a text representation.
I have a working patch against rbtools-1.0.1, but haven't investigated how that could be ported to 1.0.x or master.