4425: Git submodule modifications not included in diff


What version are you running?


What steps will reproduce the problem?

  1. Having a GIT repo with submodules, modify one submodule by checking out another commit
  2. Commit the change in the parent repository
  3. rbt post -p

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

What I expect:
Changes in submodules have to be included in the diff, even if the diff view in the web interface doesn't show what changed in the submodule (it could show the SHA IDs of the submodule versions, though).

We have our repositories set to read-only for everyone except the reviewers, only they can actually push commits to the repos. We cannot simply use 'rbt patch -C ...' for applying and pushing a commit, as submodule changes are completely ignored by RBTools when creating a patch. This means that we have to ask the developers for every single review request if there are submodule changes and if they should be included in the commit.

Instead, submodule updates have to be included in the diffs, only then would 'rbt patch -C ...' deliver the expected result.

What I get:
ERROR: There don't seem to be any diffs!

What operating system are you using?

Windows 10

Attach the debug out from the command.

$ rbt post --debug -p
>>> RBTools 0.7.5
>>> Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)]
>>> Running on Windows-10-10.0.10586
>>> Home = C:\Users\...
>>> Current directory = ...
>>> Checking for a Subversion repository...
>>> Unable to execute "svn help": skipping SVN
>>> Checking for a Git repository...
>>> Running: git rev-parse --git-dir
>>> Running: git config core.bare
>>> Running: git rev-parse --show-toplevel
>>> Running: git symbolic-ref -q HEAD
>>> Running: git config --get branch.master.merge
>>> Running: git config --get branch.master.remote
>>> Running: git config --get remote.origin.url
>>> repository info: Path: ..., Base path: , Supports changesets: False
>>> Running: git config --get reviewboard.url
>>> Making HTTP GET request to ...
>>> Running: git rev-parse refs/heads/master
>>> Running: git merge-base ba6895dab5f871c845befa28e0ee0ff838450d14 origin/master
>>> Running: git rev-parse 3eec4113a5b21c6a20f9bace738940c8698ae028
>>> Running: git status --porcelain --untracked-files=no
>>> Running: git rev-parse --git-dir
>>> Running: git version
>>> Running: git -c core.quotepath=false -c diff.noprefix=false diff --no-color --full-index --ignore-submodules -M --no-ext-diff 3eec4113a5b21c6a20f9bace738940c8698ae028..ba6895dab5f871c845befa28e0ee0ff838450d14
Traceback (most recent call last):
  File "C:\Python27\Scripts\rbt-script.py", line 9, in <module>
    load_entry_point('RBTools==0.7.5', 'console_scripts', 'rbt')()
  File "C:\Python27\lib\site-packages\rbtools-0.7.5-py2.7.egg\rbtools\commands\main.py", line 133, in main
    command.run_from_argv([RB_MAIN, command_name] + args)
  File "C:\Python27\lib\site-packages\rbtools-0.7.5-py2.7.egg\rbtools\commands\__init__.py", line 622, in run_from_argv
    exit_code = self.main(*args) or 0
  File "C:\Python27\lib\site-packages\rbtools-0.7.5-py2.7.egg\rbtools\commands\post.py", line 710, 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.

The problem is the argument '--ignore-submodules' to the 'git diff' command.

#1 chipx86

Review Board doesn't support review requests spanning repositories today, so we can't upload diffs containing submodules. Maybe in the future.

  • -New
  • -Priority:Medium
#2 mzeren-vmw

This is a frequent pain point for me.

Review Board doesn't support review requests spanning repositories today,

well, sure, but:

... it could show the SHA IDs of the submodule versions ...

I think this ticket could be resolved by just showing the hash deltas. It could be represented as a textual diff of the .gitmodules file, e.g.

#3 viney

Hi, we are also facing this issue. Can you please prioritize the fix for this?

#4 chipx86

@mzeren-vmw: Any changes to .gitmodules that are included in a commit should be included in the uploaded diff. From our point of view, it's treated like any other file. I just tested it here and saw it included. Were you referring to a file within the .git directory? Or did I misunderstand?

@viney: We're working toward a large set of changes needed to introduce proper DVCS support (coming this year). That's going to be needed for any proper resolution to this. I don't know that we'll have submodule support as part of that change (there's still a lot that needs to be thought through for posting multi-repository diffs), but the DVCS work is a precursor. So there's active work toward this, but it's not coming right away.