Stefan Beller <sbel...@google.com> writes:

> diff --git a/submodule.c b/submodule.c
> index 9f0b544ebe..2d13744b06 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -1019,7 +1019,7 @@ int submodule_uses_gitfile(const char *path)
>       return 1;
>  }
>  
> -int ok_to_remove_submodule(const char *path)
> +int ok_to_remove_submodule(const char *path, unsigned flags)
>  {
>       ssize_t len;
>       struct child_process cp = CHILD_PROCESS_INIT;
> @@ -1032,15 +1032,27 @@ int ok_to_remove_submodule(const char *path)
>       if (!submodule_uses_gitfile(path))
>               return 0;
>  
> -     argv_array_pushl(&cp.args, "status", "--porcelain", "-u",
> +     argv_array_pushl(&cp.args, "status", "--porcelain",
>                                  "--ignore-submodules=none", NULL);
> +
> +     if (flags & SUBMODULE_REMOVAL_IGNORE_UNTRACKED)
> +             argv_array_push(&cp.args, "-uno");
> +     else
> +             argv_array_push(&cp.args, "-uall");
> +
> +     if (!(flags & SUBMODULE_REMOVAL_IGNORE_IGNORED_UNTRACKED))
> +             argv_array_push(&cp.args, "--ignored");
> +

These "internal values to assemble command line" operations we
cannot avoid.  But things like this ...

>       if (start_command(&cp))
> -             die(_("could not run 'git status --porcelain -u 
> --ignore-submodules=none' in submodule %s"), path);
> +             die(_("could not run 'git status --porcelain 
> --ignore-submodules=none %s %s' in submodule '%s'"),
> +                     (flags & SUBMODULE_REMOVAL_IGNORE_UNTRACKED) ? "-uno" : 
> "-uall",
> +                     (!(flags & SUBMODULE_REMOVAL_IGNORE_IGNORED_UNTRACKED)) 
> ? "--ignored" : "",
> +                     path);

and this ...

>       if (finish_command(&cp))
> -             die(_("'git status --porcelain -u --ignore-submodules=none' 
> failed in submodule %s"), path);
> +             die(_("'git status --porcelain --ignore-submodules=none %s %s' 
> failed in submodule '%s'"),
> +                     (flags & SUBMODULE_REMOVAL_IGNORE_UNTRACKED) ? "-uno" : 
> "-uall",
> +                     (!(flags & SUBMODULE_REMOVAL_IGNORE_IGNORED_UNTRACKED)) 
> ? "--ignored" : "",
> +                     path);

makes me wonder if we want a helper that builds the string out of an
already assembled cp.args[] array, so that we won't have to do the
same thing twice/thrice and more importantly we won't have to worry
about these three going out of sync.

Reply via email to