4425: Git submodule modifications not included in diff

rhabarbersaft

What version are you running?

0.7.5

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.

chipx86
#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
    +Confirmed
  • -Priority:Medium
    -Type:Defect
    +Priority:Low
    +SCM:Git
    +Type:Enhancement
#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?

chipx86
#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.

rerickson
#5 rerickson

Any update on this?
If only a submodule changes, rbt will not pick up any changes in the diff.

For example, from git:
$ git diff 6a66abddd345ec10af9c894e444598319ac120b4 345e9b99e4d21d87887a28b554c33410dedb672a -v
diff --git a/zephyr b/zephyr
index 004b8b2..a013ce3 160000
--- a/zephyr
+++ b/zephyr
@@ -1 +1 @@
-Subproject commit 004b8b26c0b5ad7776089c578c636ac3e7acfd91
+Subproject commit a013ce3bf07ace679eb5a4d2e62c3be2d7891d05

From rbt:

$ rbt post --debug -g

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-10-10.0.16299
Home = C:\Users\ryan.erickson
Current directory = C:\git\Cell_IOT_Zephyr
Command line: rbt post --debug -g
Running: tf vc help
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.rb_test.merge
Command exited with rc 1: [u'git', u'config', u'--get', u'branch.rb_test.merge']


Running: git config --get branch.rb_test.remote
Command exited with rc 1: [u'git', u'config', u'--get', u'branch.rb_test.remote']


Running: git config --get remote.origin.url
Repository info: Path: git@git.devops.lairdtech.com:cp_cellular/newcastle_firmware.git, Base pat h: , Supports changesets: False
Checking for a Mercurial repository...
Running: hg root
Command exited with rc 255: [u'hg', u'root']
abort: no repository found in 'C:\git\Cell_IOT_Zephyr' (.hg not found)!


Checking for a CVS repository...
Unable to execute "cvs": skipping CVS
Checking for a Perforce repository...
Unable to execute "p4 help": skipping Perforce
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
Running: git config --get reviewboard.url
Making HTTP GET request to http://review.devops.lairdtech.com/api/
Running: git rev-parse refs/heads/rb_test
Running: git config --get branch.rb_test.merge
Command exited with rc 1: [u'git', u'config', u'--get', u'branch.rb_test.merge']


Running: git config --get branch.rb_test.remote
Command exited with rc 1: [u'git', u'config', u'--get', u'branch.rb_test.remote']


Running: git rev-parse origin/master
Running: git rev-list 345e9b99e4d21d87887a28b554c33410dedb672a --not --remotes=origin
Running: git status --porcelain --untracked-files=no --ignore-submodules=dirty
Running: git version
Running: git -c core.quotepath=false -c diff.noprefix=false diff --no-color --full-index --ignor e-submodules -M --no-ext-diff 345e9b99e4d21d87887a28b554c33410dedb672a..6a66abddd345ec10af9c894e4445 98319ac120b4
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\co mmands\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\co mmands__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\co mmands\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!