Hi!

On Thu, 2025-03-13 at 16:25:16 +0100, Daniel Gröber wrote:
> Package: dpkg-dev
> Version: 1.21.22
> Severity: normal
> X-Debbugs-Cc: [email protected]

> I'm trying to use source/format 3.0 (git) to share a git-bundle of some WIP
> packaging changes with another DD.
> 
> The package in question rubs dpkg-source the wrong way:
> 
>      dpkg-source: error: git repository yosys uses submodules; this is not 
> yet supported
> 
> However the packaging repo itself doesn't have submodules initialized so I
> don't think there is any real problem.
> 
> Looking at Dpkg/Source/Package/V3/Git.pm the check is simply based on the
> presence of the .gitmodules config file.
> 
> I believe the correct logic to check if submodules are actually in-use in
> the current repo would be to check if `git submodule status` returns
> non-empty output.
> 
> What do you think?

Yes, this makes sense, thanks! Would the attached patch work for you?

Thanks,
Guillem
From f02e7b35f2669f8db251b269a5fb180fb99096e0 Mon Sep 17 00:00:00 2001
From: Guillem Jover <[email protected]>
Date: Wed, 13 Aug 2025 07:47:07 +0200
Subject: [PATCH] =?UTF-8?q?Dpkg::Source::Package::V3::Git:=20Use=20=C2=ABg?=
 =?UTF-8?q?it=20submodule=C2=BB=20for=20its=20status?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Instead of only relying on the .gitmodules being non-empty, call
«git submodule status --recursive» to check whethere there is any
submodule in use.

Suggested-by: Daniel Gröber <[email protected]>
Closes: #1100413
---
 scripts/Dpkg/Source/Package/V3/Git.pm | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/scripts/Dpkg/Source/Package/V3/Git.pm b/scripts/Dpkg/Source/Package/V3/Git.pm
index 3d4d8b3da..723424c8d 100644
--- a/scripts/Dpkg/Source/Package/V3/Git.pm
+++ b/scripts/Dpkg/Source/Package/V3/Git.pm
@@ -41,6 +41,7 @@ use Dpkg::Gettext;
 use Dpkg::ErrorHandling;
 use Dpkg::Exit qw(push_exit_handler pop_exit_handler);
 use Dpkg::Path qw(find_command);
+use Dpkg::IPC;
 use Dpkg::Source::Functions qw(erasedir);
 
 use parent qw(Dpkg::Source::Package);
@@ -70,8 +71,19 @@ sub _check_workdir {
                  'specified'), $srcdir);
     }
     if (-s "$srcdir/.gitmodules") {
-        error(g_('git repository %s uses submodules; this is not yet supported'),
-              $srcdir);
+        my $stdout;
+
+        spawn(
+            exec => [ qw(git submodule status --recursive) ],
+            chdir => $srcdir,
+            wait_child => 1,
+            to_string => \$stdout,
+        );
+        if (length $stdout) {
+            error(g_('git repository %s uses submodules; ' .
+                     'this is not yet supported'),
+                  $srcdir);
+        }
     }
 
     return 1;
-- 
2.50.1

Reply via email to