]> git.ipfire.org Git - thirdparty/git.git/commitdiff
ls-files: support --recurse-submodules --stage
authorJonathan Tan <jonathantanmy@google.com>
Thu, 24 Feb 2022 00:23:03 +0000 (16:23 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 24 Feb 2022 00:41:55 +0000 (16:41 -0800)
e77aa336f1 ("ls-files: optionally recurse into submodules", 2016-10-10)
taught ls-files the --recurse-submodules argument, but only in a limited
set of circumstances. In particular, --stage was unsupported, perhaps
because there was no repo_find_unique_abbrev(), which was only
introduced in 8bb95572b0 ("sha1-name.c: add
repo_find_unique_abbrev_r()", 2019-04-16). This function is needed for
using --recurse-submodules with --stage.

Now that we have repo_find_unique_abbrev(), teach support for this
combination of arguments.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-ls-files.txt
builtin/ls-files.c
t/t3007-ls-files-recurse-submodules.sh

index 48cc7c0b6f4b639688f64bdfc1d7562ead1da034..0dabf3f0ddc8d893818b3ce09436c1b5b1c72a33 100644 (file)
@@ -156,7 +156,7 @@ a space) at the start of each line:
 
 --recurse-submodules::
        Recursively calls ls-files on each active submodule in the repository.
-       Currently there is only support for the --cached mode.
+       Currently there is only support for the --cached and --stage modes.
 
 --abbrev[=<n>]::
        Instead of showing the full 40-byte hexadecimal object
index f7ea56cc63820b27efe7bec00ab9ac8660e06766..e791b65e7e9afb2b9f51fee4af9a0f1c978b9536 100644 (file)
@@ -244,7 +244,7 @@ static void show_ce(struct repository *repo, struct dir_struct *dir,
                        printf("%s%06o %s %d\t",
                               tag,
                               ce->ce_mode,
-                              find_unique_abbrev(&ce->oid, abbrev),
+                              repo_find_unique_abbrev(repo, &ce->oid, abbrev),
                               ce_stage(ce));
                }
                write_eolinfo(repo->index, ce, fullname);
@@ -726,7 +726,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
                setup_work_tree();
 
        if (recurse_submodules &&
-           (show_stage || show_deleted || show_others || show_unmerged ||
+           (show_deleted || show_others || show_unmerged ||
             show_killed || show_modified || show_resolve_undo || with_tree))
                die("ls-files --recurse-submodules unsupported mode");
 
index 4a080007137926b5dcc84ee80856bcbcfc71340f..dd7770e85de8660061116d42aa32b8d20fe52f95 100755 (executable)
@@ -34,6 +34,23 @@ test_expect_success 'ls-files correctly outputs files in submodule' '
        test_cmp expect actual
 '
 
+test_expect_success '--stage' '
+       GITMODULES_HASH=$(git rev-parse HEAD:.gitmodules) &&
+       A_HASH=$(git rev-parse HEAD:a) &&
+       B_HASH=$(git rev-parse HEAD:b/b) &&
+       C_HASH=$(git -C submodule rev-parse HEAD:c) &&
+
+       cat >expect <<-EOF &&
+       100644 $GITMODULES_HASH 0       .gitmodules
+       100644 $A_HASH 0        a
+       100644 $B_HASH 0        b/b
+       100644 $C_HASH 0        submodule/c
+       EOF
+
+       git ls-files --stage --recurse-submodules >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'ls-files correctly outputs files in submodule with -z' '
        lf_to_nul >expect <<-\EOF &&
        .gitmodules
@@ -292,7 +309,6 @@ test_incompatible_with_recurse_submodules () {
 test_incompatible_with_recurse_submodules --deleted
 test_incompatible_with_recurse_submodules --modified
 test_incompatible_with_recurse_submodules --others
-test_incompatible_with_recurse_submodules --stage
 test_incompatible_with_recurse_submodules --killed
 test_incompatible_with_recurse_submodules --unmerged