Re: [PATCH v9 2/3] introduce submodule.hasSuperproject record

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Junio C Hamano <gitster@xxxxxxxxx> writes:

>> diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
>> index bef9ab22d4..f53808d995 100644
>> --- a/builtin/submodule--helper.c
>> +++ b/builtin/submodule--helper.c
>> @@ -2672,6 +2677,11 @@ static int run_update_procedure(int argc, const char **argv, const char *prefix)
>>                                             &update_data.update_strategy);
>>
>>         free(prefixed_path);
>> +       /*
>> +        * This entry point is always called from a submodule, so this is a
>> +        * good place to set a hint that this repo is a submodule.
>> +        */
>> +       git_config_set("submodule.hasSuperproject", "true");
>>         return update_submodule2(&update_data);
>>  }
>
> That matched my tentative resolution I made last night, but what do
> you think about this part of the test added by the patch?
>
> diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
> index 11cccbb333..ec2397fc69 100755
> --- a/t/t7406-submodule-update.sh
> +++ b/t/t7406-submodule-update.sh
> @@ -1061,4 +1061,12 @@ test_expect_success 'submodule update --quiet passes quietness to fetch with a s
>  	)
>  '
>  
> +test_expect_success 'submodule update adds submodule.hasSuperproject to older repos' '
> +	(cd super &&
> +	 test_unconfig submodule.hasSuperproject &&
> +	 git submodule update &&
> +	 test_cmp_config -C submodule true --type=bool submodule.hasSuperproject
> +	)
> +'
> +
>  test_done
>
> We go to "super", make sure that superproject does not have
> submodule.hasSuperproject set, run "git submodule update", and see
> if the configuration file in "submodule" subdirectory has the
> variable set.  It does not clear the variable from the submodule
> before starting, so the variable given to the submodule when it was
> cloned would be there, even if "git submodule update" failed to set
> it.
>
> I am wondering if it should do something like the attached instead.
>
> We
>
>  * clear the variable from "super" and "super/submodule"
>    repositories;
>
>  * run "git submodule update";
>
>  * ensure that "git submodule update" did not touch "super/.git/config";
>
>  * ensure that "git submodule update" added the variable to
>    "super/submodule/.git/config".
>
> Clearing the variable from "super" is technically wrong because the
> repository is set up as a submodule of "recursivesuper" and if we
> had further tests, we should restore it in "super", but the point is
> that we are makng sure "git submodule update" sets the variable in
> the configuration file of the submodule, and not in the superproject's. 

Yes, the test you've described is closer to what I thought the original
test was trying to do. Seeing this test pass gave me a false sense of
confidence hm..

> With the conflict resolution above, this "corrected" test fails and
> shows that superproject's configuration file is updated after "git
> submodule update".
>
> This series alone, without your topic, this "corrected" test fails,
> and that is where my "are we sure we are mucking with the
> configuration file in the submodule"? comes from.

Yeah looks like we aren't in the submodule after all:

		out=$(git submodule--helper run-update-procedure \
			  ${wt_prefix:+--prefix "$wt_prefix"} \
			  ${GIT_QUIET:+--quiet} \
			  ${force:+--force} \
			  ${just_cloned:+--just-cloned} \
			  ${nofetch:+--no-fetch} \
			  ${depth:+"$depth"} \
			  ${update:+--update "$update"} \
			  ${prefix:+--recursive-prefix "$prefix"} \
			  ${sha1:+--oid "$sha1"} \
			  ${subsha1:+--suboid "$subsha1"} \
			  "--" \
			  "$sm_path")

This says "do the update at this submodule path", but this is being run
from the superproject.

So I suppose the way forward is one of the following:

- Revert my original suggestion
- Revert my original suggestion AND remove the git_config_set from
  "module_clone()" (before this, we unconditionally set this value in
  git-submodule.sh anyway)
- Set the config in the submodule even though we are running from the
  superproject (this is possible, ensure_core_worktree() does this).

In any case, sorry for the faulty suggestion :(



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux