Re: [PATCH v2 2/2] submodules: always use a relative path from gitdir to work tree
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 14, 2012, 20:34 UTC
- Message-ID
- <7vzkcl5f37.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <7v4nut6u4s.fsf@alter.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 11 quoted lines
> Jens Lehmann <Jens.Lehmann@web.de> writes: > >> After adding a comment, using test instead of [], testing both $a and >> $b and assigning each variable on it's own line I get the following >> interdiff. Does that make more sense? > > My earlier request for comment was to say > > # $a is always longer than $b for such and such reasons > > to explain why testing $b without testing $a was sufficient.
Heh, after I follow the entire module_clone, $gitdir is defined in earlier parts of the function to be "$(rev-parse --git-dir)/modules/$path", so it is clear that it is longer than $path. Unless "cd $there && pwd" does not result in a funny situation (such as $something/modules is a symbolic link to another place that is much closer to the root of the filesystem), that is.
And in such a case, the prefix part of $a and $b would be different from the very beginning hopefully.
Show 25 quoted lines
> It is obvious (at least to me) that the loop continues as long as $a and
> $b begin with the same string before their first '/' and removes that
> common segment from both of them, so I do not think the new comment is
> absolutely necessary, but it would not hurt to have it, especially it is
> short enough and to the point.
>
> Thanks.
>
>> diff --git a/git-submodule.sh b/git-submodule.sh
>> index 3463d6d..ed76ce2 100755
>> --- a/git-submodule.sh
>> +++ b/git-submodule.sh
>> @@ -172,9 +172,11 @@ module_clone()
>>
>> a=$(cd "$gitdir" && pwd)
>> b=$(cd "$path" && pwd)
>> - while [ "$b" ] && [ "${a%%/*}" = "${b%%/*}" ]
>> + # Remove all common leading directories
>> + while test -n "$a" && test -n "$b" && test "${a%%/*}" = "${b%%/*}"
>> do
>> - a=${a#*/} b=${b#*/};
>> + a=${a#*/}
>> + b=${b#*/}
>> done
>> rel=$(echo $a | sed -e 's|[^/]*|..|g')Perhaps aseert that $a never becomes empty before this line (or set it explicitly to "." when $a is empty), as otherwise
>> (clear_local_git_env; cd "$path" && git config core.worktree "$rel/$b")
this will refer to "/$b" from the root?